name: WASM
on:
push:
branches:
- main
tags:
- '*'
pull_request:
workflow_dispatch:
permissions:
contents: read
jobs:
test:
name: Test WASM Package
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install wasm-pack
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- name: Build and test dual package
working-directory: wasm
run: |
chmod +x test-dual.sh
./test-dual.sh
- name: Upload npm package artifact
uses: actions/upload-artifact@v7
with:
name: npm-package
path: wasm/pkg-dual
build-targets:
name: Build WASM for Different Targets
runs-on: ubuntu-latest
strategy:
matrix:
target: [bundler, nodejs, web]
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Install wasm-pack
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- name: Build for ${{ matrix.target }}
working-directory: wasm
run: wasm-pack build --target ${{ matrix.target }} --release --out-dir pkg-${{ matrix.target }} --out-name hardware_address
- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: wasm-${{ matrix.target }}
path: wasm/pkg-${{ matrix.target }}
release:
name: Release to npm
runs-on: ubuntu-latest
if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
needs: [test, build-targets]
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- name: Install wasm-pack
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- name: Build dual package
working-directory: wasm
run: |
chmod +x build-dual.sh
./build-dual.sh
- name: Publish to npm
if: ${{ startsWith(github.ref, 'refs/tags/') }}
working-directory: wasm/pkg-dual
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Upload release artifacts
uses: actions/upload-artifact@v7
with:
name: npm-release-package
path: wasm/pkg-dual