Skip to content

Merge pull request #201 from fermyon/dependabot/npm_and_yarn/examples… #48

Merge pull request #201 from fermyon/dependabot/npm_and_yarn/examples…

Merge pull request #201 from fermyon/dependabot/npm_and_yarn/examples… #48

Workflow file for this run

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.