From 9eeaec1e9f449f4da49e76a96d18b956accaa0bf Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 13 Mar 2026 15:09:30 +0100 Subject: [PATCH 1/5] ci: reduce python jobs required Signed-off-by: Erik Sundell --- .github/workflows/python.yml | 93 +++++++++++++++++++++++------------- 1 file changed, 60 insertions(+), 33 deletions(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 43fd4af2..284085b8 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -59,45 +59,38 @@ jobs: - runner: windows-11-arm target: arm64 # not aarch64 because expected by setup-python rust_target: aarch64-pc-windows-msvc - # A single python version is used for each run, because some tools - # don't know which version to use if multiple are present - python: - - version: "3.13" - label: "default" - args_suffix: "" - - version: "3.13t" - label: 3.13-free-threaded - args_suffix: " --interpreter python3.13t" - - version: "3.14t" - label: 3.14-free-threaded - args_suffix: " --interpreter python3.14t" - exclude: - # Free-threaded python does not work on windows arm currently - # https://github.com/actions/setup-python/issues/1267 - - platform: - runner: windows-11-arm - python: - version: "3.13t" - - platform: - runner: windows-11-arm - python: - version: "3.14t" steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: ${{ matrix.python.version }} + python-version: | + 3.10 + 3.14 + architecture: ${{ matrix.platform.target }} + # Free-threaded python does not work on windows arm currently + # https://github.com/actions/setup-python/issues/1267 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + if: matrix.platform.target != 'arm64' + with: + python-version: "3.14t" architecture: ${{ matrix.platform.target }} - name: Build wheels uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # 1.49.4 with: target: ${{ matrix.platform.rust_target }} - args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml${{ matrix.python.args_suffix }} + args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml + sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} + - name: Build free-threaded wheel + if: matrix.platform.target != 'arm64' + uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # 1.49.4 + with: + target: ${{ matrix.platform.rust_target }} + args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml --interpreter python3.14t sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - name: Upload wheels uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: - name: wheels-windows-${{ matrix.platform.target }}-${{ matrix.python.label }} + name: wheels-windows-${{ matrix.platform.target }} path: dist - name: Run Rust tests for Python bindings run: | @@ -105,11 +98,22 @@ jobs: cargo test --locked --package sysand-py --verbose --no-default-features --target ${{ matrix.platform.rust_target }} - name: Install uv uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # 7.5.0 - - name: pytest + - name: pytest 3.10 + run: | + export UV_PYTHON=3.10 + export ACTIVATION_SCRIPT=.venv/Scripts/activate + /bin/bash .github/scripts/run-pytest.sh + - name: pytest 3.14 run: | - export UV_PYTHON=${{ matrix.python.version }} + export UV_PYTHON=3.14 export ACTIVATION_SCRIPT=.venv/Scripts/activate - /bin/bash .github/scripts/run-pytest.sh ${{ matrix.python.version }} + /bin/bash .github/scripts/run-pytest.sh + - name: pytest 3.14t + if: matrix.platform.target != 'arm64' + run: | + export UV_PYTHON=3.14t + export ACTIVATION_SCRIPT=.venv/Scripts/activate + /bin/bash .github/scripts/run-pytest.sh musllinux: runs-on: ${{ matrix.platform.runner }} @@ -218,12 +222,25 @@ jobs: path: dist - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: 3.14 + python-version: | + 3.10 + 3.14 + 3.14t - name: Install uv uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # 7.5.0 - - name: pytest (native) + - name: pytest 3.10 (native) # TODO: run tests on x86_32. Currently skipped because no containers are used here # and run-on-arch-action does not support x86_32 + if: ${{ matrix.platform.native && matrix.platform.target != 'x86' }} + run: | + export UV_PYTHON=3.10 + /bin/bash .github/scripts/run-pytest.sh + - name: pytest 3.14t (native) + if: ${{ matrix.platform.native && matrix.platform.target != 'x86' }} + run: | + export UV_PYTHON=3.14t + /bin/bash .github/scripts/run-pytest.sh + - name: pytest 3.14 (native) if: ${{ matrix.platform.native && matrix.platform.target != 'x86' }} run: /bin/bash .github/scripts/run-pytest.sh - name: pytest (emulated) @@ -263,7 +280,10 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: 3.14 + python-version: | + 3.10 + 3.14 + 3.14t - name: Run Rust tests for Python bindings run: cargo test --locked --package sysand-py --verbose --no-default-features - name: Build wheels @@ -285,9 +305,16 @@ jobs: path: dist - name: Install uv uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # 7.5.0 - - name: pytest + - name: pytest 3.10 run: | + export UV_PYTHON=3.10 /bin/bash .github/scripts/run-pytest.sh + - name: pytest 3.14t + run: | + export UV_PYTHON=3.14t + /bin/bash .github/scripts/run-pytest.sh + - name: pytest 3.14 + run: /bin/bash .github/scripts/run-pytest.sh sdist: runs-on: ubuntu-latest From fbc440047efd9f453ce80db7fc5dc2835eaec1f7 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 13 Mar 2026 15:12:41 +0100 Subject: [PATCH 2/5] DO NOT MERGE: temp delete all non-python workflows Signed-off-by: Erik Sundell --- .github/workflows/deploy-mdbook.yml | 39 ----- .github/workflows/java.yml | 235 ---------------------------- .github/workflows/js.yml | 42 ----- .github/workflows/test.yml | 180 --------------------- 4 files changed, 496 deletions(-) delete mode 100644 .github/workflows/deploy-mdbook.yml delete mode 100644 .github/workflows/java.yml delete mode 100644 .github/workflows/js.yml delete mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/deploy-mdbook.yml b/.github/workflows/deploy-mdbook.yml deleted file mode 100644 index 2f2b45c6..00000000 --- a/.github/workflows/deploy-mdbook.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Deploy Sysand Users Guide to GitHub Pages - -on: - release: - types: [published] - workflow_dispatch: - -permissions: - contents: read - pages: write - id-token: write - -jobs: - build: - if: ${{ github.event_name == 'workflow_dispatch' || !github.event.release.prerelease }} - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - name: Install mdBook - uses: peaceiris/actions-mdbook@v2 - with: - mdbook-version: "latest" - - name: Build mdBook - run: mdbook build docs - - name: Upload Pages Artifact - uses: actions/upload-pages-artifact@v4 - with: - path: ./docs/book - - deploy: - runs-on: ubuntu-latest - needs: build - environment: - name: github-pages - steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 diff --git a/.github/workflows/java.yml b/.github/workflows/java.yml deleted file mode 100644 index 61a878dc..00000000 --- a/.github/workflows/java.yml +++ /dev/null @@ -1,235 +0,0 @@ -name: Java - -on: - push: - branches: ["main"] - pull_request: - branches: ["main"] - -permissions: - contents: read - -defaults: - run: - shell: bash - -env: - CARGO_TERM_COLOR: always - RUST_BACKTRACE: 1 - -jobs: - compile-bindings: - name: Compile native bindings - strategy: - matrix: - # macos-15-intel is x86, macos-latest is arm64 - os: - [ - ubuntu-22.04, - ubuntu-24.04-arm, - windows-latest, - windows-11-arm, - macos-15-intel, - macos-latest, - ] - fail-fast: false - - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v6 - - name: Cache - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Compile - run: cargo build --locked --package sysand-java --release - - uses: actions/setup-python@v6 - if: ${{ matrix.os == 'ubuntu-22.04' }} - with: - python-version: 3.14 - - name: Create version.txt - if: ${{ matrix.os == 'ubuntu-22.04' }} - run: python bindings/java/scripts/java-builder.py create-version-file - env: - MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE }} - - name: Upload native bindings - uses: actions/upload-artifact@v5 - with: - name: native-bindings-${{ matrix.os }} - path: | - target/release/*.so - target/release/*.dylib - target/release/*.dll - retention-days: 5 - - name: Upload version.txt - uses: actions/upload-artifact@v5 - if: ${{ matrix.os == 'ubuntu-22.04' }} - with: - name: version - path: version.txt - if-no-files-found: error - retention-days: 5 - - build-jar: - name: Build Java JAR - runs-on: ubuntu-latest - needs: [compile-bindings] - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-python@v6 - with: - python-version: 3.14 - - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "21" - gpg-private-key: ${{ secrets.MAVEN_CENTRAL_GPG_PRIVATE_KEY }} - gpg-passphrase: MAVEN_GPG_PASSPHRASE - - name: Download version.txt - uses: actions/download-artifact@v6 - with: - name: version - - name: Download native bindings - uses: actions/download-artifact@v6 - with: - path: native-bindings - - name: Debugging - run: ls -la native-bindings/* - - name: Build JAR - run: | - python bindings/java/scripts/java-builder.py build \ - --use-existing-native-libs native-bindings \ - --use-release-build \ - ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE && '--sign-artifacts' || '' }} - env: - MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE }} - - name: Build Sysand Maven plugin and run integration tests - run: | - python bindings/java/scripts/java-builder.py build-plugin \ - ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE && '--sign-artifacts' || '' }} - env: - MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE }} - - name: Upload JARs - uses: actions/upload-artifact@v5 - with: - name: jars - path: target/java - retention-days: 5 - - name: Upload Maven plugin JAR - uses: actions/upload-artifact@v5 - with: - name: maven-plugin-jar - path: target/java-plugin - retention-days: 5 - # We need to include hidden files because integration tests use - # .meta.json and .project.json files. - include-hidden-files: true - - test-jar: - name: Test Java JAR - strategy: - matrix: - # macos-13 is x86, macos-latest is arm64 - os: - [ - ubuntu-22.04, - ubuntu-24.04-arm, - windows-latest, - windows-11-arm, - macos-15-intel, - macos-latest, - ] - fail-fast: false - runs-on: ${{ matrix.os }} - needs: [build-jar] - steps: - - uses: actions/checkout@v6 - - name: Download JARs - uses: actions/download-artifact@v6 - with: - name: jars - path: target/java - - name: Download version.txt - uses: actions/download-artifact@v6 - with: - name: version - - name: Debugging - run: | - find . -iname "*.jar" - ls -la * - ls -la target/* - ls -la target/java/* - ls -la target/java/target/* - - uses: actions/setup-python@v6 - with: - python-version: 3.14 - - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "21" - gpg-private-key: ${{ secrets.MAVEN_CENTRAL_GPG_PRIVATE_KEY }} - gpg-passphrase: MAVEN_GPG_PASSPHRASE - - name: Test Java JAR - run: python bindings/java/scripts/java-builder.py test - env: - MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE }} - - nightly-release: - name: Nightly Release - runs-on: ubuntu-latest - needs: [build-jar, test-jar] - if: ${{ github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') }} - permissions: - # Use to sign the release artifacts - id-token: write - # Used to upload release artifacts - contents: write - # Used to generate artifact attestation - attestations: write - steps: - - uses: actions/checkout@v6 - - name: Download native bindings - uses: actions/download-artifact@v6 - with: - name: jars - path: target/java - - name: Download Maven plugin JAR - uses: actions/download-artifact@v6 - with: - name: maven-plugin-jar - path: target/java-plugin - - name: Download version.txt - uses: actions/download-artifact@v6 - with: - name: version - - name: Debugging - run: | - find . -iname "*.jar" - find target/java-plugin/target/it/ - - name: Generate artifact attestation - uses: actions/attest-build-provenance@v3 - with: - subject-path: "target/java/target/*.jar" - - uses: actions/setup-python@v6 - with: - python-version: 3.14 - - uses: actions/setup-java@v5 - with: - distribution: "temurin" - java-version: "21" - server-id: central - server-username: MAVEN_USERNAME - server-password: MAVEN_PASSWORD - gpg-private-key: ${{ secrets.MAVEN_CENTRAL_GPG_PRIVATE_KEY }} - gpg-passphrase: MAVEN_GPG_PASSPHRASE - - name: Deploy Java bindings - run: python bindings/java/scripts/java-builder.py deploy - env: - MAVEN_USERNAME: ${{ secrets.MAVEN_CENTRAL_TOKEN_USERNAME }} - MAVEN_PASSWORD: ${{ secrets.MAVEN_CENTRAL_TOKEN_PASSWORD }} - MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_CENTRAL_GPG_PASSPHRASE }} diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml deleted file mode 100644 index f8f8327a..00000000 --- a/.github/workflows/js.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: WASM - -on: - push: - branches: ["main"] - pull_request: - branches: ["main"] - -permissions: - contents: read - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - - name: Install wasm-pack - run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh - - - name: Install Node.js - uses: actions/setup-node@v6 - with: - node-version: 23 - - - name: Test in Firefox - run: | - cd bindings/js - export WASM_BINDGEN_USE_BROWSER=1 - wasm-pack test --headless --firefox - - - name: Test in Chrome - run: | - cd bindings/js - export WASM_BINDGEN_USE_BROWSER=1 - wasm-pack test --headless --chrome - - - name: Build for Node.js and test - run: | - cd bindings/js - npm install - npm run test:browser diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 764c2942..00000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,180 +0,0 @@ -name: CLI - -on: - push: - branches: ["main"] - pull_request: - branches: ["main"] - -permissions: - contents: read - -defaults: - run: - shell: bash - -env: - CARGO_TERM_COLOR: always - RUST_BACKTRACE: 1 - -jobs: - test: - strategy: - matrix: - # macos-15-intel is x86, macos-latest is arm64 - os: - [ - ubuntu-22.04, - ubuntu-24.04-arm, - windows-latest, - windows-11-arm, - macos-15-intel, - macos-latest, - ] - fail-fast: false - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v6 - - name: Cache - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - uses: taiki-e/install-action@cargo-hack - - name: Clippy - run: cargo hack clippy --each-feature --no-dev-deps --features std --ignore-unknown-features -- --deny warnings - - name: Clippy for tests - run: cargo clippy --locked --all-targets --all-features -- --deny warnings - - name: Format - run: cargo fmt --check - - name: Set up git user - run: | - git config --global user.email "user@sysand.org" - git config --global user.name "Test User" - - name: Test Core - run: cargo test --locked --package sysand-core --verbose --features filesystem,networking,js,python,alltests,kpar-bzip2,kpar-zstd,kpar-xz,kpar-ppmd - - name: Test CLI - run: cargo test --locked --package sysand --verbose --features alltests,kpar-bzip2,kpar-zstd,kpar-xz,kpar-ppmd - - build: - strategy: - matrix: - # macos-15-intel is x86, macos-latest is arm64 - os: - [ - ubuntu-22.04, - ubuntu-24.04-arm, - windows-latest, - windows-11-arm, - macos-15-intel, - macos-latest, - ] - runs-on: ${{ matrix.os }} - needs: [test] - steps: - - uses: actions/checkout@v6 - - name: Cache - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - - name: Build - run: cargo build --locked --bin sysand --release - - name: Create the distribution directory - run: mkdir -p dist - - name: Copy binaries - if: matrix.os == 'windows-latest' || matrix.os == 'windows-11-arm' - run: cp target/release/sysand.exe dist/sysand-${{ matrix.os }}.exe - - name: Copy binaries - if: matrix.os != 'windows-latest' && matrix.os != 'windows-11-arm' - run: cp target/release/sysand dist/sysand-${{ matrix.os }} - - name: Upload binaries - uses: actions/upload-artifact@v5 - with: - name: sysand-cli-${{ matrix.os }} - path: dist/* - - nightly-release: - name: Nightly Release - runs-on: ubuntu-latest - needs: [test, build] - if: ${{ github.ref == 'refs/heads/main' && !startsWith(github.ref, 'refs/tags/') }} - permissions: - # Use to sign the release artifacts - id-token: write - # Used to upload release artifacts - contents: write - # Used to generate artifact attestation - attestations: write - steps: - - uses: actions/download-artifact@v6 - with: - path: artifacts - merge-multiple: true - - name: Generate artifact attestation - uses: actions/attest-build-provenance@v3 - with: - subject-path: "artifacts/*" - - name: Rename artifacts - run: | - mv artifacts/sysand-ubuntu-22.04 artifacts/sysand-linux-x86_64 - mv artifacts/sysand-ubuntu-24.04-arm artifacts/sysand-linux-arm64 - mv artifacts/sysand-windows-latest.exe artifacts/sysand-windows-x86_64.exe - mv artifacts/sysand-windows-11-arm.exe artifacts/sysand-windows-arm64.exe - mv artifacts/sysand-macos-15-intel artifacts/sysand-macos-x86_64 - mv artifacts/sysand-macos-latest artifacts/sysand-macos-arm64 - - name: Create release tag - run: echo "TAG_NAME=$(date +v-%Y-%m-%d-%H%M)" >> $GITHUB_ENV - - name: Create a nightly release - uses: softprops/action-gh-release@v2 - with: - prerelease: true - files: | - artifacts/* - overwrite_files: false - tag_name: ${{ env.TAG_NAME }} - name: Nightly Release ${{ env.TAG_NAME }} - - release: - name: Release - runs-on: ubuntu-latest - needs: [test, build] - if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} - permissions: - # Use to sign the release artifacts - id-token: write - # Used to upload release artifacts - contents: write - # Used to generate artifact attestation - attestations: write - steps: - - uses: actions/download-artifact@v6 - with: - path: artifacts - merge-multiple: true - - name: Generate artifact attestation - uses: actions/attest-build-provenance@v3 - with: - subject-path: "artifacts/*" - - name: Rename artifacts - run: | - mv artifacts/sysand-ubuntu-22.04 artifacts/sysand-linux-x86_64 - mv artifacts/sysand-ubuntu-24.04-arm artifacts/sysand-linux-arm64 - mv artifacts/sysand-windows-latest.exe artifacts/sysand-windows-x86_64.exe - mv artifacts/sysand-windows-11-arm.exe artifacts/sysand-windows-arm64.exe - mv artifacts/sysand-macos-15-intel artifacts/sysand-macos-x86_64 - mv artifacts/sysand-macos-latest artifacts/sysand-macos-arm64 - - name: Create a release - uses: softprops/action-gh-release@v2 - with: - make_latest: true - files: | - artifacts/* - overwrite_files: false - name: Release ${{ github.event.inputs.tag_name }} From aad266867e9431c98b8751deb90ef0e9c46345d9 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 13 Mar 2026 15:19:05 +0100 Subject: [PATCH 3/5] asdf Signed-off-by: Erik Sundell --- .github/workflows/python.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 284085b8..2ac4d6a3 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -65,6 +65,9 @@ jobs: with: python-version: | 3.10 + 3.11 + 3.12 + 3.13 3.14 architecture: ${{ matrix.platform.target }} # Free-threaded python does not work on windows arm currently @@ -147,7 +150,7 @@ jobs: uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # 1.49.4 with: target: ${{ matrix.platform.target }} - args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml --interpreter python3.13t --interpreter python3.14t + args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml --interpreter python3.14t sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} manylinux: musllinux_1_2 - name: Upload wheels @@ -212,7 +215,7 @@ jobs: uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # 1.49.4 with: target: ${{ matrix.platform.target }} - args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml --interpreter python3.13t --interpreter python3.14t + args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml --interpreter python3.14t sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} manylinux: manylinux2014 # TODO: don't use default cross-compile containers for aarch64 - name: Upload wheels @@ -226,6 +229,7 @@ jobs: 3.10 3.14 3.14t + # 3.11-3.13 are not needed — manylinux containers already have all versions - name: Install uv uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # 7.5.0 - name: pytest 3.10 (native) @@ -282,6 +286,9 @@ jobs: with: python-version: | 3.10 + 3.11 + 3.12 + 3.13 3.14 3.14t - name: Run Rust tests for Python bindings @@ -296,7 +303,7 @@ jobs: uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # 1.49.4 with: target: ${{ matrix.platform.target }} - args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml --interpreter python3.13t --interpreter python3.14t + args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml --interpreter python3.14t sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - name: Upload wheels uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 From 368e7e6bcfbda33bb6de754ffbb9c7cca4acf691 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 13 Mar 2026 15:23:18 +0100 Subject: [PATCH 4/5] asdf Signed-off-by: Erik Sundell --- .github/workflows/python.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 2ac4d6a3..45f8ed2d 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -61,10 +61,15 @@ jobs: rust_target: aarch64-pc-windows-msvc steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + # Python 3.10 doesn't support Windows ARM + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + if: matrix.platform.target != 'arm64' + with: + python-version: "3.10" + architecture: ${{ matrix.platform.target }} - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: python-version: | - 3.10 3.11 3.12 3.13 @@ -102,6 +107,7 @@ jobs: - name: Install uv uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # 7.5.0 - name: pytest 3.10 + if: matrix.platform.target != 'arm64' run: | export UV_PYTHON=3.10 export ACTIVATION_SCRIPT=.venv/Scripts/activate From 5cd301e55dfb44b871b0e2bc89ab7a32a330f097 Mon Sep 17 00:00:00 2001 From: Erik Sundell Date: Fri, 13 Mar 2026 15:38:17 +0100 Subject: [PATCH 5/5] further reduction attempt Signed-off-by: Erik Sundell --- .github/workflows/python.yml | 97 +++++++++++++----------------------- 1 file changed, 35 insertions(+), 62 deletions(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 45f8ed2d..cdfa7e1c 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -124,7 +124,7 @@ jobs: export ACTIVATION_SCRIPT=.venv/Scripts/activate /bin/bash .github/scripts/run-pytest.sh - musllinux: + linux: runs-on: ${{ matrix.platform.runner }} strategy: matrix: @@ -145,85 +145,34 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Run Rust tests for Python bindings run: cargo test --locked --package sysand-py --verbose --no-default-features - - name: Build wheels + - name: Build manylinux wheels uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # 1.49.4 with: target: ${{ matrix.platform.target }} args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: musllinux_1_2 - - name: Build free-threaded wheels + manylinux: manylinux2014 + - name: Build manylinux free-threaded wheels uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # 1.49.4 with: target: ${{ matrix.platform.target }} args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml --interpreter python3.14t sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: musllinux_1_2 - - name: Upload wheels - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 - with: - name: wheels-musllinux-${{ matrix.platform.target }} - path: dist - - name: pytest (native) - if: ${{ matrix.platform.native }} - uses: maus007/docker-run-action-fork@5ddaad0f7eedd03f64e412b1931852bd3031b273 # v1 - with: - image: ${{ matrix.platform.target == 'x86' && 'i386/alpine:latest' || 'alpine:latest' }} - options: -v ${{ github.workspace }}:/io -w /io - run: | - apk add curl bash python3 - curl -LsSf https://astral.sh/uv/install.sh | sh - export PATH=$PATH:$HOME/.local/bin - /bin/bash .github/scripts/run-pytest.sh - - name: pytest (emulated) - if: ${{ !matrix.platform.native }} - uses: uraimo/run-on-arch-action@d94c13912ea685de38fccc1109385b83fd79427d # 3.0.1 - with: - arch: ${{ matrix.platform.target }} - distro: alpine_latest - githubToken: ${{ github.token }} - install: | - apk add curl bash python3 - run: | - curl -LsSf https://astral.sh/uv/install.sh | sh - export PATH=$PATH:$HOME/.local/bin - /bin/bash .github/scripts/run-pytest.sh - - linux: - runs-on: ${{ matrix.platform.runner }} - strategy: - matrix: - platform: - - runner: ubuntu-22.04 - target: x86_64 - native: true - - runner: ubuntu-22.04 - target: x86 - native: true - - runner: ubuntu-22.04-arm - target: aarch64 - native: true - - runner: ubuntu-22.04 - target: armv7 - native: false - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Run Rust tests for Python bindings - run: cargo test --locked --package sysand-py --verbose --no-default-features - - name: Build wheels + manylinux: manylinux2014 # TODO: don't use default cross-compile containers for aarch64 + - name: Build musllinux wheels uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # 1.49.4 with: target: ${{ matrix.platform.target }} args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: manylinux2014 - - name: Build free-threaded wheels + manylinux: musllinux_1_2 + - name: Build musllinux free-threaded wheels uses: PyO3/maturin-action@86b9d133d34bc1b40018696f782949dac11bd380 # 1.49.4 with: target: ${{ matrix.platform.target }} args: --release --out dist --compatibility pypi --manifest-path bindings/py/Cargo.toml --interpreter python3.14t sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} - manylinux: manylinux2014 # TODO: don't use default cross-compile containers for aarch64 + manylinux: musllinux_1_2 - name: Upload wheels uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: @@ -253,7 +202,7 @@ jobs: - name: pytest 3.14 (native) if: ${{ matrix.platform.native && matrix.platform.target != 'x86' }} run: /bin/bash .github/scripts/run-pytest.sh - - name: pytest (emulated) + - name: pytest manylinux (emulated) if: ${{ !matrix.platform.native }} uses: uraimo/run-on-arch-action@d94c13912ea685de38fccc1109385b83fd79427d # 3.0.1 with: @@ -267,6 +216,30 @@ jobs: run: | export PATH=$PATH:$HOME/.local/bin /bin/bash .github/scripts/run-pytest.sh + - name: pytest musllinux (native) + if: ${{ matrix.platform.native }} + uses: maus007/docker-run-action-fork@5ddaad0f7eedd03f64e412b1931852bd3031b273 # v1 + with: + image: ${{ matrix.platform.target == 'x86' && 'i386/alpine:latest' || 'alpine:latest' }} + options: -v ${{ github.workspace }}:/io -w /io + run: | + apk add curl bash python3 + curl -LsSf https://astral.sh/uv/install.sh | sh + export PATH=$PATH:$HOME/.local/bin + /bin/bash .github/scripts/run-pytest.sh + - name: pytest musllinux (emulated) + if: ${{ !matrix.platform.native }} + uses: uraimo/run-on-arch-action@d94c13912ea685de38fccc1109385b83fd79427d # 3.0.1 + with: + arch: ${{ matrix.platform.target }} + distro: alpine_latest + githubToken: ${{ github.token }} + install: | + apk add curl bash python3 + run: | + curl -LsSf https://astral.sh/uv/install.sh | sh + export PATH=$PATH:$HOME/.local/bin + /bin/bash .github/scripts/run-pytest.sh - name: linters if: ${{ matrix.platform.target == 'x86_64' }} run: | @@ -354,7 +327,7 @@ jobs: environment: pypi-publish runs-on: ubuntu-slim if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} - needs: [linux, musllinux, macos, windows, sdist] + needs: [linux, macos, windows, sdist] permissions: # Used to sign the release artifacts id-token: write