Build #6
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: | |
release: | |
types: | |
- published | |
push: | |
tags: | |
- "v*.*.*" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
# cf. https://github.com/oxigraph/oxigraph/blob/main/.github/workflows/artifacts.yml | |
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: github.event_name == 'release' | |
publish_crates: | |
name: 📦️ Publish crates to crates.io | |
if: github.event_name == 'release' | |
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 | |
# 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 | |
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 }} | |
- 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: 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: github.event_name == 'release' | |
# if: startsWith(github.ref, 'refs/tags/') | |
run: twine upload python/dist/* | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} |