Publish #88
This file contains hidden or 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
| # This file is autogenerated by maturin and then manually modified | |
| # To update, run | |
| # | |
| # maturin generate-ci --zig github | |
| # | |
| # This file was modified slightly after autogeneration by maturin | |
| # Last updated: 2026-03-15 - modernized action versions and runners | |
| name: Publish | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| on: | |
| workflow_dispatch: null | |
| permissions: | |
| contents: read | |
| id-token: write | |
| jobs: | |
| linux: | |
| runs-on: ${{ matrix.platform.runner }} | |
| strategy: | |
| matrix: | |
| platform: | |
| - runner: ubuntu-latest | |
| target: x86_64 | |
| python-architecture: x64 | |
| - runner: ubuntu-latest | |
| target: x86 | |
| python-architecture: x86 | |
| - runner: ubuntu-latest | |
| target: aarch64 | |
| python-architecture: arm64 | |
| python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| architecture: ${{ matrix.python-architecture }} | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.platform.target }} | |
| args: --release --out dist --interpreter python${{ matrix.python-version }} --zig | |
| manylinux: auto | |
| before-script-linux: sudo apt-get install -y capnproto libcapnp-dev | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: wheels-linux-${{ matrix.platform.target }}-python${{ matrix.python-version }} | |
| path: dist | |
| windows: | |
| runs-on: ${{ matrix.platform.runner }} | |
| strategy: | |
| matrix: | |
| platform: | |
| - runner: windows-latest | |
| target: x64 | |
| - runner: windows-latest | |
| target: x86 | |
| python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| architecture: ${{ matrix.platform.target }} | |
| - name: capnproto | |
| run: choco install capnproto | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.platform.target }} | |
| args: --release --out dist --interpreter python${{ matrix.python-version }} | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: wheels-windows-${{ matrix.platform.target }}-python${{ matrix.python-version }} | |
| path: dist | |
| macos: | |
| runs-on: ${{ matrix.platform.runner }} | |
| strategy: | |
| matrix: | |
| platform: | |
| - runner: macos-15-intel | |
| target: x86_64 | |
| python-architecture: x64 | |
| - runner: macos-15 | |
| target: aarch64 | |
| python-architecture: arm64 | |
| python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| architecture: ${{ matrix.platform.python-architecture }} | |
| - name: capnproto | |
| run: brew install capnp | |
| - name: Build wheels | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.platform.target }} | |
| args: --release --out dist --interpreter python${{ matrix.python-version }} | |
| - name: Upload wheels | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: wheels-macos-${{ matrix.platform.target }}-python${{ matrix.python-version }} | |
| path: dist | |
| sdist: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Build sdist | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| command: sdist | |
| args: --out dist | |
| - name: Upload sdist | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: wheels-sdist | |
| path: dist | |
| release: | |
| name: Release | |
| runs-on: ubuntu-latest | |
| needs: [linux, windows, macos, sdist] | |
| steps: | |
| - uses: actions/download-artifact@v7 | |
| - name: Publish to PyPI | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| command: upload | |
| args: --non-interactive --skip-existing wheels-*/* | |
| tag-and-release: | |
| name: Tag and GitHub Release | |
| runs-on: ubuntu-latest | |
| # Only after the wheels are published to PyPI. | |
| needs: [release] | |
| permissions: | |
| contents: write | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Resolve version from Cargo.toml | |
| id: ver | |
| run: | | |
| VERSION=$(grep -m1 '^version = ' Cargo.toml | sed -E 's/^version = "([^"]+)".*/\1/') | |
| if [ -z "$VERSION" ]; then | |
| echo "::error::Could not read version from Cargo.toml" | |
| exit 1 | |
| fi | |
| echo "version=$VERSION" >> "$GITHUB_OUTPUT" | |
| echo "tag=v$VERSION" >> "$GITHUB_OUTPUT" | |
| - name: Create git tag and GitHub Release | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| TAG="${{ steps.ver.outputs.tag }}" | |
| VERSION="${{ steps.ver.outputs.version }}" | |
| # Idempotent: skip if this version was already tagged/released (e.g. a | |
| # re-run after `maturin upload --skip-existing` skipped an existing wheel). | |
| if gh release view "$TAG" >/dev/null 2>&1 || git rev-parse -q --verify "refs/tags/$TAG" >/dev/null; then | |
| echo "Release/tag $TAG already exists — nothing to do." | |
| exit 0 | |
| fi | |
| # Use this version's CHANGELOG section as release notes, if present. | |
| NOTES=$(awk -v ver="$VERSION" ' | |
| $0 ~ ("^## \\[" ver "\\]") {flag=1; next} | |
| flag && /^## \[/ {exit} | |
| flag {print} | |
| ' CHANGELOG.md) | |
| if [ -z "$(echo "$NOTES" | tr -d '[:space:]')" ]; then | |
| NOTES="Release $TAG" | |
| fi | |
| # `gh release create` creates the git tag at the current commit and the release. | |
| printf '%s\n' "$NOTES" | gh release create "$TAG" \ | |
| --target "$GITHUB_SHA" \ | |
| --title "$TAG" \ | |
| --notes-file - |