Skip to content

add host instructions to README.md example (#90) #115

add host instructions to README.md example (#90)

add host instructions to README.md example (#90) #115

Workflow file for this run

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
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"