From 346699475957dc85ae4362332bc69198e387b9e4 Mon Sep 17 00:00:00 2001 From: Isotr0py Date: Sat, 23 Nov 2024 21:44:12 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20(CI):=20Update=20maturin=20relea?= =?UTF-8?q?se=20CI=20workflow=20(#81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 178 ++++++++++++++++------------------ Cargo.toml | 2 +- build.rs | 15 ++- 3 files changed, 94 insertions(+), 101 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae57b3a..7416dd4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -# This file is autogenerated by maturin v1.2.3 +# This file is autogenerated by maturin v1.7.4 # To update, run # # maturin generate-ci github @@ -9,7 +9,6 @@ on: push: branches: - main - - dev tags: - '*' pull_request: @@ -22,97 +21,102 @@ permissions: jobs: linux: - runs-on: ubuntu-latest - timeout-minutes: 60 + runs-on: ${{ matrix.platform.runner }} strategy: matrix: - # todo: enable aarch64, armv7, s390x, ppc64le - target: [auto] - + platform: + - runner: ubuntu-latest + target: x86_64 + - runner: ubuntu-latest + target: x86 + # - runner: ubuntu-latest + # target: aarch64 + # - runner: ubuntu-latest + # target: armv7 + # - runner: ubuntu-latest + # target: s390x + # - runner: ubuntu-latest + # target: ppc64le steps: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - name: Setup QEMU + if: ${{ matrix.platform.target != 'x86_64' && matrix.platform.target != 'x86' }} + uses: docker/setup-qemu-action@v1 + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.platform.target }} + args: --release --out dist --interpreter 3.9 3.10 3.11 3.12 3.13 pypy3.9 pypy3.10 --features vendored + sccache: 'true' + manylinux: auto + - name: Upload wheels + uses: actions/upload-artifact@v4 with: - submodules: recursive + name: wheels-linux-${{ matrix.platform.target }} + path: dist + musllinux: + runs-on: ${{ matrix.platform.runner }} + strategy: + matrix: + platform: + - runner: ubuntu-latest + target: x86_64 + - runner: ubuntu-latest + target: x86 + - runner: ubuntu-latest + target: aarch64 + - runner: ubuntu-latest + target: armv7 + steps: + - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: '3.10' - - # todo: enable for aarch64, armv7, s390x, ppc64le - # - name: Set up QEMU - # if: runner.os == 'Linux' - # uses: docker/setup-qemu-action@v3 - # with: - # platforms: all - - - name: Setup Rust in containers - if: runner.os == 'Linux' - run: | - echo "CIBW_BEFORE_ALL=curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal" >> $GITHUB_ENV - echo "CARGO_HOME=/usr/local/" >> $GITHUB_ENV - + python-version: 3.x + - name: Setup QEMU + if: ${{ matrix.platform.target != 'x86_64' && matrix.platform.target != 'x86' }} + uses: docker/setup-qemu-action@v1 - name: Build wheels - uses: pypa/cibuildwheel@v2.21.2 - env: - CIBW_SKIP: '*-musllinux_i686' - CIBW_ARCHS_LINUX: ${{ matrix.target }} - CIBW_ENVIRONMENT_PASS_LINUX: CARGO_HOME - CIBW_BUILD_VERBOSITY: 1 - CIBW_BUILD_FRONTEND: "pip; args: --config-settings=build-args='--features=vendored'" - + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.platform.target }} + args: --release --out dist --interpreter 3.9 3.10 3.11 3.12 3.13 pypy3.9 pypy3.10 --features vendored + sccache: 'true' + manylinux: musllinux_1_2 - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: wheels-linux-${{ matrix.target }} - path: ./wheelhouse/*.whl + name: wheels-musllinux-${{ matrix.platform.target }} + path: dist windows: - runs-on: windows-latest - timeout-minutes: 60 + runs-on: ${{ matrix.platform.runner }} strategy: matrix: - target: [x64] + platform: + - runner: windows-latest + target: x64 + - runner: windows-latest + target: x86 steps: - - name: Install dependencys - uses: msys2/setup-msys2@v2 - with: - update: true - install: >- - mingw-w64-x86_64-toolchain - mingw-w64-x86_64-libjxl - - - name: Put MSYS2_MinGW64 on PATH - # there is not yet an environment variable for this path from msys2/setup-msys2 - run: echo "${{ runner.temp }}/msys64/mingw64/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - - uses: actions/checkout@v4 - with: - submodules: recursive - - uses: actions/setup-python@v5 with: - python-version: '>=3.9 <=3.13' - architecture: ${{ matrix.target }} - + python-version: 3.13 + architecture: ${{ matrix.platform.target }} - name: Build wheels uses: PyO3/maturin-action@v1 - env: - RUST_BACKTRACE: 1 with: - rust-toolchain: stable-x86_64-pc-windows-gnu - target: x86_64-pc-windows-gnu - args: --release --out wheels --find-interpreter --features dynamic + target: ${{ matrix.platform.target }} + args: --release --out dist --interpreter 3.9 3.10 3.11 3.12 3.13 --features vendored sccache: 'true' - - - name: Fix wheels with delvewheel - run: | - pip install delvewheel - Get-ChildItem ${{ github.workspace }}/wheels/*win_amd64.whl | ForEach-Object -Process {delvewheel repair $PSItem -w dist} - - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: wheels-windows-${{ matrix.target }} + name: wheels-windows-${{ matrix.platform.target }} path: dist macos: @@ -120,39 +124,27 @@ jobs: strategy: matrix: platform: - - runner: macos-latest + - runner: macos-12 target: x86_64 - runner: macos-14 target: aarch64 steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - - uses: actions/setup-python@v5 - with: - python-version: '>=3.9 <=3.13' - - name: Check dependencys run: | brew install jpeg-xl echo DEP_JXL_LIB=$(brew --prefix jpeg-xl)'/lib' >> $GITHUB_ENV echo DEP_BROTLI_LIB=$(brew --prefix brotli)'/lib' >> $GITHUB_ENV echo DEP_HWY_LIB=$(brew --prefix highway)'/lib' >> $GITHUB_ENV - + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.x - name: Build wheels uses: PyO3/maturin-action@v1 - env: - RUST_BACKTRACE: 1 - MACOSX_DEPLOYMENT_TARGET: 12.7 - DEP_JXL_LIB: ${{ env.DEP_JXL_LIB }} - DEP_BROTLI_LIB: ${{ env.DEP_BROTLI_LIB }} - DEP_HWY_LIB: ${{ env.DEP_HWY_LIB }} with: target: ${{ matrix.platform.target }} - args: --release --out dist --find-interpreter --features dynamic + args: --release --out dist --interpreter 3.9 3.10 3.11 3.12 3.13 pypy3.9 pypy3.10 --features dynamic sccache: 'true' - - name: Upload wheels uses: actions/upload-artifact@v4 with: @@ -161,17 +153,13 @@ jobs: sdist: runs-on: ubuntu-latest - timeout-minutes: 60 steps: - uses: actions/checkout@v4 - with: - submodules: recursive - name: Build sdist uses: PyO3/maturin-action@v1 with: command: sdist args: --out dist - rust-toolchain: - name: Upload sdist uses: actions/upload-artifact@v4 with: @@ -181,15 +169,21 @@ jobs: release: name: Release runs-on: ubuntu-latest - timeout-minutes: 10 + if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} + needs: [linux, musllinux, windows, macos, sdist] permissions: + # Use to sign the release artifacts + id-token: write + # Used to upload release artifacts contents: write - if: "startsWith(github.ref, 'refs/tags/')" - needs: [linux, windows, macos, sdist] + # Used to generate artifact attestation + attestations: write steps: - uses: actions/download-artifact@v4 + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v1 with: - pattern: wheels-* + subject-path: 'wheels-*/*' - name: upload to github release uses: softprops/action-gh-release@v2 with: diff --git a/Cargo.toml b/Cargo.toml index 9b064d7..280e084 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ crate-type = ["cdylib"] [dependencies] pyo3 = { version="0.22.0", features = ["extension-module"] } -jpegxl-rs = { version="0.11.0" } +jpegxl-rs = { version="0.11.0", default-features = false } [features] # Enables parallel processing support by enabling the "rayon" feature of jpeg-decoder. diff --git a/build.rs b/build.rs index 7b69665..e8f0895 100644 --- a/build.rs +++ b/build.rs @@ -44,13 +44,12 @@ fn main() { dynamic_link(); // Dynamic link c++ - // TODO: Support MSVC and use Cargo - let platform = env::consts::OS; - match platform { - // Since MSVC will stuck on building libjxl - // Linux and Windows should all use GNU toolchain - "linux" | "windows" => println!("cargo:rustc-link-lib=stdc++"), - "macos" => println!("cargo:rustc-link-lib=c++"), - _ => panic!("Not implemented c++ link on {}", platform), + #[cfg(target_os = "linux")] + { + println!("cargo:rustc-link-lib=stdc++"); + } + #[cfg(target_os = "macos")] + { + println!("cargo:rustc-link-lib=c++"); } }