fix regression related to bundled libraries #137
This file contains 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: | |
branches: [main] | |
tags: | |
- "v*" | |
paths-ignore: | |
- "examples/**" | |
- "README.md" | |
- "CONTRIBUTING.md" | |
workflow_dispatch: | |
env: | |
CARGO_TERM_COLOR: always | |
WASI_SDK_VERSION: 20.46gf3a1f8991535 | |
WASI_SDK_RELEASE: wasi-sockets-alpha-5 | |
permissions: | |
contents: write | |
pull-requests: write | |
jobs: | |
linux: | |
name: Populate cache | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
- name: Install latest Rust nightly toolchain | |
uses: dtolnay/rust-toolchain@nightly | |
with: | |
targets: wasm32-wasi wasm32-unknown-unknown | |
- name: Install latest Rust stable toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: wasm32-wasi wasm32-unknown-unknown | |
components: clippy, rustfmt | |
- name: Install Rust std source | |
shell: bash | |
run: rustup component add rust-src --toolchain nightly | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
shared-key: "rust-cache-${{ hashFiles('./Cargo.lock') }}" | |
cache-on-failure: false | |
- name: Install WASI-SDK | |
shell: bash | |
run: | | |
cd /tmp | |
curl -LO https://github.com/dicej/wasi-sdk/releases/download/${WASI_SDK_RELEASE}/wasi-sdk-${WASI_SDK_VERSION}-linux.tar.gz | |
tar xf wasi-sdk-${WASI_SDK_VERSION}-linux.tar.gz | |
mv wasi-sdk-${WASI_SDK_VERSION} /opt/wasi-sdk | |
- name: Cache CPython | |
id: cache-cpython-wasi | |
uses: actions/cache@v4 | |
with: | |
path: cpython/builddir/wasi | |
key: cpython-wasi | |
enableCrossOsArchive: true | |
- name: Build | |
shell: bash | |
run: cargo build --release | |
release: | |
name: Build and release | |
needs: linux | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
os: "ubuntu-latest", | |
arch: "amd64", | |
maturin_target: "x86_64", | |
wasiSDK: "linux", | |
extension: "", | |
buildArgs: "", | |
target: "", | |
targetDir: "target/release", | |
} | |
- { | |
os: "ubuntu-latest", | |
arch: "aarch64", | |
maturin_target: "aarch64", | |
wasiSDK: "linux", | |
extension: "", | |
buildArgs: "--target aarch64-unknown-linux-gnu", | |
target: "aarch64-unknown-linux-gnu", | |
targetDir: "target/aarch64-unknown-linux-gnu/release", | |
} | |
- { | |
os: "macos-latest", | |
arch: "amd64", | |
maturin_target: "x86_64", | |
wasiSDK: "macos", | |
extension: "", | |
buildArgs: "", | |
target: "", | |
targetDir: "target/release", | |
} | |
- { | |
os: "macos-latest", | |
arch: "aarch64", | |
maturin_target: "aarch64", | |
wasiSDK: "macos", | |
extension: "", | |
buildArgs: "--target aarch64-apple-darwin", | |
target: "aarch64-apple-darwin", | |
targetDir: "target/aarch64-apple-darwin/release", | |
} | |
- { | |
os: "windows-latest", | |
arch: "amd64", | |
maturin_target: "x64", | |
wasiSDK: "mingw", | |
extension: ".exe", | |
buildArgs: "", | |
target: "", | |
targetDir: "target/release", | |
} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
- name: Install latest Rust nightly toolchain | |
uses: dtolnay/rust-toolchain@nightly | |
with: | |
targets: ${{ matrix.config.target }} | |
- name: Install latest Rust stable toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.config.target }} | |
- name: Install Rust std source | |
shell: bash | |
run: rustup component add rust-src --toolchain nightly | |
- uses: Swatinem/rust-cache@v2 | |
if: matrix.config.os == 'ubuntu-latest' && matrix.config.arch == 'amd64' | |
with: | |
shared-key: "rust-cache-${{ hashFiles('./Cargo.lock') }}" | |
cache-on-failure: "false" | |
save-if: "false" | |
- name: Set the release version (tag) | |
if: startsWith(github.ref, 'refs/tags/v') | |
shell: bash | |
run: echo "RELEASE_VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV | |
- name: Set the release version (canary) | |
if: github.ref == 'refs/heads/main' | |
shell: bash | |
run: echo "RELEASE_VERSION=canary" >> $GITHUB_ENV | |
- name: Lowercase the runner OS name | |
shell: bash | |
run: | | |
OS=$(echo "${{ runner.os }}" | tr '[:upper:]' '[:lower:]') | |
echo "RUNNER_OS=$OS" >> $GITHUB_ENV | |
- name: Download WASI-SDK | |
shell: bash | |
run: | | |
cd /tmp | |
curl -LO https://github.com/dicej/wasi-sdk/releases/download/${WASI_SDK_RELEASE}/wasi-sdk-${WASI_SDK_VERSION}-${{ matrix.config.wasiSDK }}.tar.gz | |
tar xf wasi-sdk-${WASI_SDK_VERSION}-${{ matrix.config.wasiSDK }}.tar.gz | |
- name: Install WASI-SDK | |
if: runner.os != 'Windows' | |
shell: bash | |
run: sudo mv /tmp/wasi-sdk-${WASI_SDK_VERSION} /opt/wasi-sdk | |
- name: Install WASI-SDK on Windows | |
if: runner.os == 'Windows' | |
shell: bash | |
run: echo "WASI_SDK_PATH=$(cygpath -m /tmp/wasi-sdk-${WASI_SDK_VERSION})" >> ${GITHUB_ENV} | |
- name: Restore CPython | |
id: cache-cpython-wasi | |
uses: actions/cache/restore@v4 | |
with: | |
path: cpython/builddir/wasi | |
key: cpython-wasi | |
enableCrossOsArchive: true | |
- name: Build wheels | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.config.maturin_target }} | |
args: --release --out dist --features pyo3 | |
manylinux: 2_28 | |
docker-options: -v /opt/wasi-sdk:/opt/wasi-sdk | |
before-script-linux: | | |
rustup install nightly | |
rustup component add rust-src --toolchain nightly | |
rustup target add wasm32-wasi wasm32-unknown-unknown | |
- name: Set up cross-compiled linux aarch64 build | |
if: matrix.config.target == 'aarch64-unknown-linux-gnu' | |
run: | | |
sudo apt update | |
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu | |
echo '[target.aarch64-unknown-linux-gnu]' >> ${HOME}/.cargo/config.toml | |
echo 'linker = "aarch64-linux-gnu-gcc"' >> ${HOME}/.cargo/config.toml | |
- name: Build | |
shell: bash | |
run: cargo build --release ${{ matrix.config.buildArgs }} | |
- name: Package as tarfile | |
shell: bash | |
run: | | |
mkdir -v _dist | |
cp ${{ matrix.config.targetDir }}/componentize-py${{ matrix.config.extension }} \ | |
_dist/componentize-py${{ matrix.config.extension }} | |
cd _dist | |
tar czf componentize-py-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz \ | |
componentize-py${{ matrix.config.extension }} | |
- name: Upload wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: componentize-py-${{ matrix.config.wasiSDK }}-${{ matrix.config.arch }} | |
path: dist | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: componentize-py-${{ matrix.config.wasiSDK }}-${{ matrix.config.arch }}-tar | |
path: _dist/componentize-py-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz | |
- name: Upload binary to Github release (tag) | |
if: startsWith(github.ref, 'refs/tags/v') | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: _dist/componentize-py-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz | |
tag: ${{ github.ref }} | |
checksums: | |
name: Generate checksums | |
runs-on: ubuntu-latest | |
needs: release | |
steps: | |
- name: Set the release version (tag) | |
if: startsWith(github.ref, 'refs/tags/v') | |
shell: bash | |
run: echo "RELEASE_VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV | |
- name: Set the release version (canary) | |
if: github.ref == 'refs/heads/main' | |
shell: bash | |
run: echo "RELEASE_VERSION=canary" >> $GITHUB_ENV | |
- name: Download release assets | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: componentize-py-* | |
merge-multiple: true | |
- name: Generate checksums | |
run: | | |
sha256sum componentize-py-${{ env.RELEASE_VERSION }}*.tar.gz > checksums-${{ env.RELEASE_VERSION }}.txt | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: componentize-py-checksums | |
path: checksums-${{ env.RELEASE_VERSION }}.txt | |
- name: Upload checksums to Github release (tag) | |
if: startsWith(github.ref, 'refs/tags/v') | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: checksums-${{ env.RELEASE_VERSION }}.txt | |
tag: ${{ github.ref }} | |
sdist: | |
name: Build Python sdist | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- name: Build sdist | |
uses: PyO3/maturin-action@v1 | |
with: | |
command: sdist | |
args: --out dist | |
- name: Upload sdist | |
uses: actions/upload-artifact@v4 | |
with: | |
name: componentize-py-sdist | |
path: dist | |
update_canary_release: | |
name: Update canary release | |
needs: [checksums, sdist] | |
if: github.ref == 'refs/heads/main' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- name: Download release assets | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: componentize-py-* | |
merge-multiple: true | |
- name: Delete canary tag | |
run: gh release delete canary --cleanup-tag -y | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Recreate canary tag and release | |
uses: ncipollo/release-action@v1 | |
with: | |
tag: canary | |
allowUpdates: true | |
prerelease: true | |
artifacts: "checksums-canary.txt,componentize-py-canary*,componentize_py-*.whl,componentize_py-*.tar.gz" |