(re)add --stub-wasi
option
#109
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.26g68203b20b82e | |
WASI_SDK_RELEASE: wasi-sockets-alpha-2 | |
jobs: | |
linux: | |
name: Populate cache | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: 'recursive' | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.12' | |
- name: Install latest Rust stable toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
default: true | |
components: clippy, rustfmt | |
- name: Install latest Rust nightly toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly | |
default: false | |
- name: Install Rust std source | |
shell: bash | |
run: rustup component add rust-src --toolchain nightly | |
- name: Install Wasm Rust targets | |
shell: bash | |
run: rustup target add wasm32-wasi wasm32-unknown-unknown | |
- 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@v3 | |
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: "", | |
extension: ".exe", | |
buildArgs: "", | |
target: "", | |
targetDir: "target/release", | |
} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: 'recursive' | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: '3.12' | |
- name: Install latest Rust stable toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
default: true | |
target: ${{ matrix.config.target }} | |
- name: Install latest Rust nightly toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly | |
default: false | |
target: ${{ matrix.config.target }} | |
- name: Install Rust std source | |
shell: bash | |
run: rustup component add rust-src --toolchain nightly | |
- name: Install Wasm Rust targets | |
shell: bash | |
run: rustup target add wasm32-wasi wasm32-unknown-unknown | |
- 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: Install WASI-SDK | |
if: runner.os != 'Windows' | |
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 | |
sudo mv wasi-sdk-${WASI_SDK_VERSION} /opt/wasi-sdk | |
- name: Install WASI-SDK on Windows | |
if: runner.os == 'Windows' | |
shell: bash | |
run: | | |
curl -LO https://github.com/dicej/wasi-sdk/releases/download/${WASI_SDK_RELEASE}/wasi-sdk-${WASI_SDK_VERSION}-mingw.tar.gz | |
tar xf wasi-sdk-${WASI_SDK_VERSION}-mingw.tar.gz | |
echo "WASI_SDK_PATH=$(cygpath -m $(pwd)/wasi-sdk-${WASI_SDK_VERSION})" >> ${GITHUB_ENV} | |
- name: Restore CPython | |
id: cache-cpython-wasi | |
uses: actions/cache/restore@v3 | |
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@v3 | |
with: | |
name: componentize-py | |
path: dist | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: componentize-py | |
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@v3 | |
with: | |
name: componentize-py | |
- name: Generate checksums | |
run: | | |
sha256sum componentize-py-${{ env.RELEASE_VERSION }}*.tar.gz > checksums-${{ env.RELEASE_VERSION }}.txt | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: componentize-py | |
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@v3 | |
with: | |
submodules: 'recursive' | |
- name: Build sdist | |
uses: PyO3/maturin-action@v1 | |
with: | |
command: sdist | |
args: --out dist | |
- name: Upload sdist | |
uses: actions/upload-artifact@v3 | |
with: | |
name: componentize-py | |
path: dist | |
update_canary_release: | |
name: Update canary release | |
needs: [checksums, sdist] | |
if: github.ref == 'refs/heads/main' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download release assets | |
uses: actions/download-artifact@v3 | |
with: | |
name: componentize-py | |
- name: Delete canary tag | |
uses: dev-drprasad/delete-tag-and-release@v0.2.1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: canary | |
- name: Recreate canary tag and release | |
uses: ncipollo/release-action@v1.10.0 | |
with: | |
tag: canary | |
allowUpdates: true | |
prerelease: true | |
artifacts: "checksums-canary.txt,componentize-py-canary*,componentize_py-*.whl,componentize_py-*.tar.gz" |