From b05599d88c3137cf75306dc23f6671953350e405 Mon Sep 17 00:00:00 2001 From: Matthew Feickert Date: Wed, 29 Oct 2025 13:08:02 -0600 Subject: [PATCH 1/2] CI: Add cibuildwheel GitHub Actions workflow * Add GitHub Actions based workflow that uses cibuildwheel to build wheels for target platforms. * Add upload of wheels to PyPI on publish using Trusted Publishers. --- .github/workflows/wheels.yaml | 145 ++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 .github/workflows/wheels.yaml diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml new file mode 100644 index 0000000..ea23ee9 --- /dev/null +++ b/.github/workflows/wheels.yaml @@ -0,0 +1,145 @@ +name: Wheels + +on: + workflow_dispatch: + inputs: + overrideVersion: + description: Manually force a version + release: + types: + - published + pull_request: + paths: + - .github/workflows/wheels.yaml + schedule: + # Run weekly on Mondays at 01:23 UTC + - cron: "23 1 * * 1" + +permissions: + actions: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + SETUPTOOLS_SCM_PRETEND_VERSION: ${{ github.event.inputs.overrideVersion }} + +jobs: + build_sdist: + name: Build SDist + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + submodules: true + + - name: Build SDist + run: pipx run build --sdist + + - name: Check metadata + run: pipx run twine check --strict dist/*.tar.gz + + - uses: actions/upload-artifact@v4 + with: + path: dist/* + name: wheels-sdist + + build_wheels: + name: ${{ matrix.build }} ${{ matrix.arch }} on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: macos-15-intel + arch: auto64 + build: "*" + + - os: macos-latest + arch: auto64 + build: "*" + + - os: windows-latest + arch: auto64 + build: "cp*" + + - os: windows-latest + arch: auto32 + build: "*" + + - os: windows-11-arm + arch: auto + build: "*" + + - os: ubuntu-latest + arch: auto64 + build: "*manylinux*" + + - os: ubuntu-latest + arch: auto64 + build: "*musllinux*" + + - os: ubuntu-24.04-arm + arch: auto64 + build: "*manylinux*" + + - os: ubuntu-24.04-arm + arch: auto64 + build: "*musllinux*" + + steps: + - uses: actions/checkout@v5 + with: + fetch-depth: 0 + submodules: true + + - uses: astral-sh/setup-uv@v7 + + - uses: pypa/cibuildwheel@v3.2 + env: + CIBW_BUILD: ${{ matrix.build }} + CIBW_ARCHS: ${{ matrix.arch }} + + - name: Verify clean directory + shell: bash + run: git diff --exit-code + + - name: Upload wheels + uses: actions/upload-artifact@v5 + with: + path: wheelhouse/*.whl + name: wheels-${{ strategy.job-index }} + + upload_all: + name: Upload if release + needs: [build_sdist, build_wheels] + runs-on: ubuntu-latest + if: github.event_name == 'release' && github.event.action == 'published' + environment: + name: pypi + url: https://pypi.org/p/datrie + permissions: + id-token: write + attestations: write + contents: read + + steps: + - uses: actions/download-artifact@v6 + with: + pattern: wheels-* + merge-multiple: true + path: dist + + - name: List all files + run: ls -lh dist + + - name: Generate artifact attestation for sdist and wheels + uses: actions/attest-build-provenance@v3 + with: + subject-path: "dist/datrie-*" + + - uses: pypa/gh-action-pypi-publish@release/v1 + with: + print-hash: true From 1f0ac5fe8fca8dad8f62047dbf62a4e791fb17e2 Mon Sep 17 00:00:00 2001 From: Matthew Feickert Date: Wed, 29 Oct 2025 13:14:30 -0600 Subject: [PATCH 2/2] BLD: Add cibuildwheel config * Add cibuildwheel tool table to pyproject.toml, defaulting to using 'build[uv]' as the build frontend. --- pyproject.toml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 6d1a7c2..28159c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,3 +4,8 @@ requires = [ "wheel", "Cython" ] + +[tool.cibuildwheel] +build-frontend = "build[uv]" +enable = ["cpython-freethreading"] +environment-pass = ["SETUPTOOLS_SCM_PRETEND_VERSION"]