-
Notifications
You must be signed in to change notification settings - Fork 13
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Joel Dice <joel.dice@fermyon.com>
- Loading branch information
Showing
2 changed files
with
282 additions
and
4 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,278 @@ | ||
name: Release | ||
on: | ||
push: | ||
branches: [main] | ||
tags: | ||
- "v*" | ||
workflow_dispatch: | ||
|
||
env: | ||
CARGO_TERM_COLOR: always | ||
|
||
jobs: | ||
linux: | ||
name: Build Linux executable | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
|
||
- name: Install latest Rust stable toolchain | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
toolchain: stable | ||
default: true | ||
components: clippy, rustfmt | ||
|
||
- 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') }}-${{ hashFiles('./test/Cargo.lock') }}" | ||
cache-on-failure: "false" | ||
|
||
- name: Install WASI-SDK | ||
shell: bash | ||
run: | | ||
cd /tmp | ||
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-linux.tar.gz | ||
tar -xf wasi-sdk-16.0-linux.tar.gz | ||
cp -r wasi-sdk-16.0 /opt/wasi-sdk | ||
- name: Cache CPython | ||
id: cache-cpython-wasi | ||
uses: actions/cache@v3 | ||
with: | ||
path: cpython/builddir/wasi | ||
key: ${{ runner.os }}-cpython-wasi | ||
|
||
- name: Build | ||
shell: bash | ||
run: cargo build --release | ||
|
||
reset_canary_release: | ||
name: Delete and create Canary Release | ||
if: github.ref == 'refs/heads/main' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- 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 | ||
|
||
release: | ||
name: Build executables | ||
needs: [linux, reset_canary_release] | ||
runs-on: ${{ matrix.config.os }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
config: | ||
- { | ||
os: "ubuntu-latest", | ||
arch: "amd64", | ||
wasiSDK: "linux", | ||
extension: "", | ||
buildArgs: "", | ||
target: "", | ||
targetDir: "target/release", | ||
} | ||
- { | ||
os: "ubuntu-latest", | ||
arch: "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", | ||
wasiSDK: "macos", | ||
extension: "", | ||
buildArgs: "", | ||
target: "", | ||
targetDir: "target/release", | ||
} | ||
- { | ||
os: "macos-latest", | ||
arch: "aarch64", | ||
wasiSDK: "macos", | ||
extension: "", | ||
buildArgs: "\"--target aarch64-apple-darwin\"", | ||
target: "aarch64-apple-darwin", | ||
targetDir: "target/aarch64-apple-darwin/release/", | ||
} | ||
- { | ||
os: "windows-latest", | ||
arch: "amd64", | ||
wasiSDK: "", | ||
extension: ".exe", | ||
buildArgs: "", | ||
target: "", | ||
targetDir: "target/release", | ||
} | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: 'true' | ||
|
||
- name: Install latest Rust stable toolchain | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
toolchain: stable | ||
default: true | ||
target: ${{ matrix.config.target }} | ||
|
||
- 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') }}-${{ hashFiles('./test/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/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-${{ matrix.config.wasiSDK }}.tar.gz | ||
tar -xf wasi-sdk-16.0-${{ matrix.config.wasiSDK }}.tar.gz | ||
sudo mv wasi-sdk-16.0 /opt/wasi-sdk | ||
- name: Install WASI-SDK on Windows | ||
if: runner.os == 'Windows' | ||
shell: bash | ||
run: | | ||
curl -LO https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-mingw.tar.gz | ||
tar -xf wasi-sdk-16.0-mingw.tar.gz | ||
- name: Restore CPython | ||
id: cache-cpython-wasi | ||
uses: actions/cache/restore@v3 | ||
with: | ||
path: cpython/builddir/wasi | ||
key: ${{ runner.os }}-cpython-wasi | ||
|
||
- 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: | | ||
if [ "${{ runner.os}}" == "Windows" ]; then | ||
export WASI_SDK_PATH="$(cygpath -m $(pwd)/wasi-sdk-16.0)" | ||
fi | ||
cargo build --release | ||
- 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 build artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: componentize-py-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz | ||
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 }} | ||
|
||
- name: Upload binary to Github release (canary) | ||
if: github.ref == 'refs/heads/main' | ||
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: canary | ||
|
||
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 | ||
|
||
- name: Generate checksums | ||
run: | | ||
ls -lh | ||
sha256sum py2wasm*.tar.gz/py2wasm*.tar.gz > 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 }} | ||
|
||
- name: Upload checksums to Github release (canary) | ||
if: github.ref == 'refs/heads/main' | ||
uses: svenstaro/upload-release-action@v2 | ||
with: | ||
repo_token: ${{ secrets.GITHUB_TOKEN }} | ||
file: checksums-${{ env.RELEASE_VERSION }}.txt | ||
tag: canary |
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