update: refine LIBCLANG_PATH and LD_LIBRARY_PATH settings in release … #13
Workflow file for this run
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
| name: Release | |
| on: | |
| push: | |
| tags: | |
| - "v*.*.*" | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| linux: | |
| name: Linux ${{ matrix.target }} py3.10-3.14 | |
| runs-on: ${{ matrix.runner }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - runner: ubuntu-22.04 | |
| target: x86_64 | |
| rust_target: x86_64-unknown-linux-gnu | |
| container: quay.io/pypa/manylinux_2_28_x86_64:latest | |
| v8_from_source: "1" | |
| extra_gn_args: v8_enable_temporal_support=false v8_monolithic_for_shared_library=true | |
| docker_options: >- | |
| -e V8_FROM_SOURCE=1 | |
| -e "EXTRA_GN_ARGS=v8_enable_temporal_support=false v8_monolithic_for_shared_library=true" | |
| - runner: ubuntu-24.04-arm | |
| target: aarch64 | |
| rust_target: aarch64-unknown-linux-gnu | |
| container: quay.io/pypa/manylinux_2_28_aarch64:latest | |
| v8_from_source: "0" | |
| extra_gn_args: "" | |
| docker_options: -e V8_FROM_SOURCE=0 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Build wheel | |
| uses: PyO3/maturin-action@v1 | |
| env: | |
| # rusty_v8's prebuilt Linux archive uses a TLS model that cannot be | |
| # linked into a Python extension module on x86_64. Source builds | |
| # inject V8_TLS_USED_IN_LIBRARY through the v8 crate build script. | |
| # aarch64 uses the published rusty_v8 archive. | |
| V8_FROM_SOURCE: ${{ matrix.v8_from_source }} | |
| # The crates.io v8 archive does not include Chromium's | |
| # third_party/rust/chromium_crates_io/vendor tree needed by the | |
| # Temporal Rust dependency, so source builds avoid those GN targets. | |
| EXTRA_GN_ARGS: ${{ matrix.extra_gn_args }} | |
| LIBCLANG_PATH: ${{ github.workspace }}/target/${{ matrix.rust_target }}/release/libclang | |
| LD_LIBRARY_PATH: ${{ github.workspace }}/target/${{ matrix.rust_target }}/release/libclang | |
| with: | |
| target: ${{ matrix.target }} | |
| # Source-building V8 needs Chromium's `gn` binary, which requires | |
| # GLIBC_2.18+. manylinux2014 only has glibc 2.17, so use 2_28 here. | |
| manylinux: "2_28" | |
| container: ${{ matrix.container }} | |
| docker-options: >- | |
| ${{ matrix.docker_options }} | |
| -e LIBCLANG_PATH=${{ github.workspace }}/target/${{ matrix.rust_target }}/release/libclang | |
| -e LD_LIBRARY_PATH=${{ github.workspace }}/target/${{ matrix.rust_target }}/release/libclang | |
| before-script-linux: | | |
| if [ "${{ matrix.v8_from_source }}" = "1" ]; then | |
| env -u RUSTC_WRAPPER cargo fetch --locked | |
| V8_SRC="$(find /root/.cargo/registry/src -maxdepth 2 -type d -name 'v8-147.4.0' -print -quit)" | |
| if [ -z "$V8_SRC" ]; then | |
| echo "::error::Could not find the v8-147.4.0 crate source after cargo fetch." | |
| exit 1 | |
| fi | |
| CLANG_DIR="${{ github.workspace }}/target/${{ matrix.rust_target }}/release/clang" | |
| python3 "$V8_SRC/tools/clang/scripts/update.py" --output-dir "$CLANG_DIR" | |
| python3 "$V8_SRC/tools/clang/scripts/update.py" --output-dir "$CLANG_DIR" --package libclang | |
| LIBCLANG_SO="$(find "$CLANG_DIR" -name 'libclang.so*' -print -quit)" | |
| if [ -z "$LIBCLANG_SO" ]; then | |
| echo "::error::Could not find libclang.so under $CLANG_DIR after downloading Chromium's libclang package." | |
| find "$CLANG_DIR" -maxdepth 4 \( -type f -o -type l \) -print | sort | head -200 | |
| exit 1 | |
| fi | |
| LIBCLANG_DIR="$(dirname "$LIBCLANG_SO")" | |
| LIBCLANG_PATH_DIR="${{ github.workspace }}/target/${{ matrix.rust_target }}/release/libclang" | |
| mkdir -p "$(dirname "$LIBCLANG_PATH_DIR")" | |
| rm -rf "$LIBCLANG_PATH_DIR" | |
| ln -s "$LIBCLANG_DIR" "$LIBCLANG_PATH_DIR" | |
| echo "Using LIBCLANG_PATH=$LIBCLANG_PATH_DIR -> $LIBCLANG_DIR" | |
| fi | |
| args: >- | |
| --release | |
| --out dist | |
| --interpreter python3.10 python3.11 python3.12 python3.13 python3.14 | |
| sccache: true | |
| - name: Upload wheel | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-linux-${{ matrix.target }} | |
| path: dist | |
| if-no-files-found: error | |
| windows: | |
| name: Windows ${{ matrix.target }} py${{ matrix.python.version }} | |
| runs-on: ${{ matrix.runner }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - runner: windows-latest | |
| target: x64 | |
| python: | |
| architecture: x64 | |
| version: "3.10" | |
| tag: cp310 | |
| - runner: windows-latest | |
| target: x64 | |
| python: | |
| architecture: x64 | |
| version: "3.11" | |
| tag: cp311 | |
| - runner: windows-latest | |
| target: x64 | |
| python: | |
| architecture: x64 | |
| version: "3.12" | |
| tag: cp312 | |
| - runner: windows-latest | |
| target: x64 | |
| python: | |
| architecture: x64 | |
| version: "3.13" | |
| tag: cp313 | |
| - runner: windows-latest | |
| target: x64 | |
| python: | |
| architecture: x64 | |
| version: "3.14" | |
| tag: cp314 | |
| - runner: windows-11-arm | |
| target: aarch64 | |
| python: | |
| architecture: arm64 | |
| version: "3.11" | |
| tag: cp311 | |
| - runner: windows-11-arm | |
| target: aarch64 | |
| python: | |
| architecture: arm64 | |
| version: "3.12" | |
| tag: cp312 | |
| - runner: windows-11-arm | |
| target: aarch64 | |
| python: | |
| architecture: arm64 | |
| version: "3.13" | |
| tag: cp313 | |
| - runner: windows-11-arm | |
| target: aarch64 | |
| python: | |
| architecture: arm64 | |
| version: "3.14" | |
| tag: cp314 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python.version }} | |
| architecture: ${{ matrix.python.architecture }} | |
| - name: Build wheel | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.target }} | |
| args: --release --out dist --interpreter python | |
| sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} | |
| - name: Upload wheel | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-windows-${{ matrix.target }}-${{ matrix.python.tag }} | |
| path: dist | |
| if-no-files-found: error | |
| macos: | |
| name: macOS ${{ matrix.platform.target }} py${{ matrix.python.version }} | |
| runs-on: ${{ matrix.platform.runner }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python: | |
| - version: "3.10" | |
| tag: cp310 | |
| - version: "3.11" | |
| tag: cp311 | |
| - version: "3.12" | |
| tag: cp312 | |
| - version: "3.13" | |
| tag: cp313 | |
| - version: "3.14" | |
| tag: cp314 | |
| platform: | |
| - runner: macos-13 | |
| target: x86_64 | |
| - runner: macos-14 | |
| target: aarch64 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python.version }} | |
| - name: Build wheel | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| target: ${{ matrix.platform.target }} | |
| args: --release --out dist --interpreter python | |
| sccache: ${{ !startsWith(github.ref, 'refs/tags/') }} | |
| - name: Upload wheel | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wheels-macos-${{ matrix.platform.target }}-${{ matrix.python.tag }} | |
| path: dist | |
| if-no-files-found: error | |
| sdist: | |
| name: Source distribution | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Build sdist | |
| uses: PyO3/maturin-action@v1 | |
| with: | |
| command: sdist | |
| args: --out dist | |
| - name: Upload sdist | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: sdist | |
| path: dist | |
| if-no-files-found: error | |
| publish: | |
| name: Publish to PyPI | |
| runs-on: ubuntu-latest | |
| if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
| needs: [linux, windows, macos, sdist] | |
| permissions: | |
| contents: read | |
| id-token: write | |
| steps: | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| path: dist | |
| merge-multiple: true | |
| - uses: astral-sh/setup-uv@v4 | |
| - name: Publish distributions | |
| run: uv publish dist/* |