Build #13
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
workflow_dispatch: | |
push: | |
tags: | |
- "v*.*.*" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
npm_tarball: | |
name: 🦊 Build npm package | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install wasm-pack | |
run: cargo install wasm-pack | |
- name: Setup NodeJS | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
registry-url: 'https://registry.npmjs.org' | |
cache: npm | |
cache-dependency-path: "./js/package.json" | |
- name: Build npm package | |
run: npm run pack | |
working-directory: ./js | |
- name: Upload tarball | |
uses: actions/upload-artifact@v4 | |
with: | |
name: curies_npm | |
path: ./js/pkg | |
- run: npm run release | |
working-directory: ./js | |
env: | |
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
if: startsWith(github.ref, 'refs/tags/') | |
# Inspired by pydantic: https://github.com/pydantic/pydantic-core/blob/main/.github/workflows/ci.yml | |
build_wheels: | |
name: 🐍 Wheels for ${{ matrix.os }} (${{ matrix.target }} - ${{ matrix.interpreter || 'all' }}${{ matrix.os == 'linux' && format(' - {0}', matrix.manylinux == 'auto' && 'manylinux' || matrix.manylinux) || '' }}) | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [linux, macos] # windows | |
target: [x86_64, aarch64] | |
manylinux: [auto] | |
include: | |
# Using pypy when possible for performance | |
# manylinux for various platforms, plus x86_64 pypy | |
- os: linux | |
manylinux: auto | |
target: i686 | |
- os: linux | |
manylinux: auto | |
target: aarch64 # -bit ARM | |
- os: linux | |
manylinux: auto | |
target: armv7 # 32-bit ARM | |
interpreter: 3.8 3.9 3.10 3.11 3.12 | |
- os: linux | |
manylinux: auto | |
target: ppc64le | |
interpreter: 3.8 3.9 3.10 3.11 3.12 | |
- os: linux | |
manylinux: auto | |
target: s390x | |
interpreter: 3.8 3.9 3.10 3.11 3.12 | |
- os: linux | |
manylinux: auto | |
target: x86_64 | |
# musllinux | |
- os: linux | |
manylinux: musllinux_1_1 | |
target: x86_64 | |
- os: linux | |
manylinux: musllinux_1_1 | |
target: aarch64 | |
# MacOS | |
- os: macos | |
target: x86_64 | |
- os: macos | |
target: aarch64 | |
# Windows | |
# x86_64 pypy builds are not PGO optimized, i686 not supported by pypy, aarch64 only 3.11 and up, also not PGO optimized | |
# x86_64 pypy3.9 pypy3.10 failing due to ring | |
- os: windows | |
target: x86_64 | |
interpreter: 3.8 3.9 3.10 3.11 3.12 | |
- os: windows | |
target: i686 | |
python-architecture: x86 | |
interpreter: 3.8 3.9 3.10 3.11 3.12 | |
# - os: windows | |
# target: aarch64 | |
# interpreter: 3.11 3.12 | |
# NOTE: getting error `lld-link: error: could not open 'python311.lib': no such file or directory` | |
# I don't see how this error can even happen. We have the same workflow as many other working repos, | |
# and here just windows cant find python. So that's an overall windows config problem, not a problem with this repo. | |
runs-on: ${{ (matrix.os == 'linux' && 'ubuntu') || matrix.os }}-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: docker/setup-qemu-action@v3 | |
if: matrix.os == 'linux' && matrix.target == 'aarch64' | |
with: | |
platforms: linux/${{ matrix.target }} | |
- if: matrix.os == 'linux' | |
run: sudo apt install libssl-dev | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
architecture: ${{ matrix.python-architecture || 'x64' }} | |
- run: pip install -U twine 'ruff==0.1.3' typing_extensions | |
# generate self-schema now, so we don't have to do so inside docker in maturin build | |
# - run: python generate_self_schema.py | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.target }} | |
manylinux: ${{ matrix.manylinux }} | |
args: --release --out dist --interpreter ${{ matrix.interpreter || '3.8 3.9 3.10 3.11 3.12 pypy3.8 pypy3.9 pypy3.10' }} | |
rust-toolchain: stable | |
docker-options: -e CI | |
working-directory: python | |
env: | |
CFLAGS_aarch64_unknown_linux_gnu: -D__ARM_ARCH=8 | |
# NOTE: fix for ring linux aarch64 error: https://github.com/briansmith/ring/issues/1728 | |
- run: ${{ (matrix.os == 'windows' && 'dir') || 'ls -lh' }} python/dist/ | |
- run: twine check --strict python/dist/* | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: nanopub_wheel_${{ matrix.os }}_${{ matrix.target }}_${{ matrix.interpreter || 'all' }}_${{ matrix.manylinux }} | |
path: python/dist | |
- name: Publish to PyPI | |
if: startsWith(github.ref, 'refs/tags/') | |
run: twine upload python/dist/* | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} | |
publish_crates: | |
name: 📦️ Publish crates to crates.io | |
if: startsWith(github.ref, 'refs/tags/') | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: rustup update | |
- run: cargo login $CRATES_IO_TOKEN | |
env: | |
CRATES_IO_TOKEN: ${{ secrets.CRATES_IO_TOKEN }} | |
- run: cargo publish | |
working-directory: ./lib | |
generate-changelog: | |
name: 🏔️ Generate changelog for GitHub release | |
runs-on: ubuntu-latest | |
outputs: | |
release_body: ${{ steps.git-cliff.outputs.content }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Generate a changelog | |
uses: orhun/git-cliff-action@main | |
id: git-cliff | |
with: | |
config: cliff.toml | |
args: -vv --latest --strip header | |
env: | |
OUTPUT: CHANGES.md | |
- name: Release | |
uses: softprops/action-gh-release@v1 | |
with: | |
body_path: CHANGES.md | |
if: startsWith(github.ref, 'refs/tags/') |