Merge pull request #201 from fermyon/dependabot/npm_and_yarn/examples… #48
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*" | |
workflow_dispatch: | |
concurrency: ${{ github.workflow }}-${{ github.ref }} | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
build: | |
name: Build spinjs | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
os: "ubuntu-20.04", | |
arch: "amd64", | |
wasiSDK: "linux", | |
extension: "", | |
buildArgs: "", | |
target: "", | |
targetDir: "target/release", | |
} | |
- { | |
os: "ubuntu-20.04", | |
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: | |
- uses: actions/checkout@v3 | |
- name: Install latest Rust stable toolchain | |
shell: bash | |
run: | | |
rustup toolchain install stable | |
rustup default stable | |
- name: Install target | |
if: matrix.config.target != '' | |
shell: bash | |
run: rustup target add --toolchain stable ${{ matrix.config.target }} | |
- name: set the release version (main) | |
shell: bash | |
run: echo "RELEASE_VERSION=canary" >> $GITHUB_ENV | |
- 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: lowercase the runner OS name | |
shell: bash | |
run: | | |
OS=$(echo "${{ runner.os }}" | tr '[:upper:]' '[:lower:]') | |
echo "RUNNER_OS=$OS" >> $GITHUB_ENV | |
- name: "Install Wasm Rust target" | |
shell: bash | |
run: rustup target add wasm32-wasi | |
- name: Install nodejs | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
- name: Setup cmake | |
uses: jwlawson/[email protected] | |
with: | |
cmake-version: '3.25.x' | |
- name: Setup WASI-SDK | |
if: runner.os != 'Windows' | |
shell: bash | |
run: | | |
cd /tmp | |
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-${{ matrix.config.wasiSDK }}.tar.gz | |
tar -xvf wasi-sdk-16.0-${{ matrix.config.wasiSDK }}.tar.gz | |
sudo cp -v -r wasi-sdk-16.0 /opt/wasi-sdk | |
- name: Setup LLVM 14 on Windows | |
if: runner.os == 'Windows' | |
uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: "14" | |
- name: Setup WASI-SDK on Windows | |
if: runner.os == 'Windows' | |
shell: bash | |
run: | | |
curl -kLSs https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-mingw.tar.gz -o wasi-sdk-16.0-mingw.tar.gz | |
tar -xvf wasi-sdk-16.0-mingw.tar.gz | |
export WASI_SDK=./wasi-sdk-16.0 | |
- name: Install NPM dependancies for SDK | |
shell: bash | |
run: | | |
cd crates/spin-js-engine/src/js_sdk | |
npm install - | |
- name: setup for 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 spinjs | |
shell: bash | |
run: | | |
if [ "${{ runner.os}}" == "Windows" ]; then | |
mv wasi-sdk-16.0 wasi-sdk | |
export WASI_SDK=$(pwd)/wasi-sdk | |
fi | |
echo $WASI_SDK | |
make BUILD_TARGET=${{ matrix.config.buildArgs }} | |
- name: Package as plugins tar | |
shell: bash | |
run: | | |
mkdir -v _dist | |
cp ${{ matrix.config.targetDir }}/spinjs${{ matrix.config.extension }} _dist/js2wasm${{ matrix.config.extension }} | |
cp LICENSE _dist/js2wasm.license | |
cd _dist | |
tar czf js2wasm-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz js2wasm.license js2wasm${{ matrix.config.extension }} | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: js2wasm | |
path: _dist/js2wasm-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz | |
- name: upload binary to Github release | |
if: startsWith(github.ref, 'refs/tags/v') | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: _dist/js2wasm-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz | |
tag: ${{ github.ref }} | |
checksums_and_manifests: | |
name: generate checksums | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- uses: actions/checkout@v3 | |
- name: set the release version (main) | |
shell: bash | |
run: echo "RELEASE_VERSION=canary" >> $GITHUB_ENV | |
- 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: download release assets | |
uses: actions/download-artifact@v3 | |
with: | |
name: js2wasm | |
- name: generate checksums | |
run: | | |
ls -lh | |
sha256sum js2wasm*.tar.gz > checksums-${{ env.RELEASE_VERSION }}.txt | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: js2wasm | |
path: checksums-${{ env.RELEASE_VERSION }}.txt | |
- name: upload checksums to Github release | |
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: create plugin manifest | |
shell: bash | |
run: bash .plugin-manifests/generate-manifest.sh ${{ env.RELEASE_VERSION }} checksums-${{ env.RELEASE_VERSION }}.txt > js2wasm.json | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: js2wasm | |
path: js2wasm.json | |
- name: upload plugin manifest to release | |
if: startsWith(github.ref, 'refs/tags/v') | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: js2wasm.json | |
tag: ${{ github.ref }} | |
reset_canary_release: | |
name: Delete and create Canary Release | |
runs-on: ubuntu-latest | |
needs: checksums_and_manifests | |
if: github.ref == 'refs/heads/main' | |
steps: | |
- name: download release assets | |
uses: actions/download-artifact@v3 | |
with: | |
name: js2wasm | |
- name: Delete canary tag | |
uses: dev-drprasad/[email protected] | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: canary | |
delete_release: true | |
- name: Recreate canary tag and release | |
uses: ncipollo/[email protected] | |
with: | |
tag: canary | |
allowUpdates: true | |
prerelease: true | |
artifacts: "js2wasm*.tar.gz,js2wasm.json,checksums-canary.txt" | |
commit: ${{ github.sha }} | |
body: | | |
This is a "canary" release of the most recent commits on our main branch. Canary is **not stable**. | |
It is only intended for developers wishing to try out the latest features in spin-js-sdk, some of which may not be fully implemented. |