Skip to content

Commit

Permalink
add release workflow
Browse files Browse the repository at this point in the history
Signed-off-by: Joel Dice <joel.dice@fermyon.com>
  • Loading branch information
dicej committed May 11, 2023
1 parent f1a8c49 commit e77197a
Show file tree
Hide file tree
Showing 2 changed files with 282 additions and 4 deletions.
278 changes: 278 additions & 0 deletions .github/workflows/release.yaml
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
8 changes: 4 additions & 4 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@ jobs:
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 Wasm Rust targets
shell: bash
run: rustup target add wasm32-wasi wasm32-unknown-unknown

- name: Install WASI-SDK
shell: bash
run: |
Expand Down

0 comments on commit e77197a

Please sign in to comment.