name: Release WASM
on:
push:
tags: ["v*"]
permissions:
contents: write
attestations: write
id-token: write
env:
CARGO_TERM_COLOR: always
RUST_TOOLCHAIN: "1.85"
WASM_PACK_VERSION: "0.14.0"
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_TOOLCHAIN }}
targets: wasm32-unknown-unknown
components: clippy, rustfmt
- uses: Swatinem/rust-cache@v2
- name: Format check
run: cargo fmt --check
- name: Clippy
run: cargo clippy -- -D warnings
- name: Tests
run: cargo test
- name: Publish to crates.io
run: cargo publish --no-verify
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
- name: Install wasm-pack
run: |
curl -fsSL "https://github.com/rustwasm/wasm-pack/releases/download/v${WASM_PACK_VERSION}/wasm-pack-v${WASM_PACK_VERSION}-x86_64-unknown-linux-musl.tar.gz" \
| tar xz --strip-components=1 -C /usr/local/bin "wasm-pack-v${WASM_PACK_VERSION}-x86_64-unknown-linux-musl/wasm-pack"
wasm-pack --version
- name: Build WASM (--target web)
run: wasm-pack build --target web --release
- name: Compute SHA-512 checksums
working-directory: pkg
run: sha512sum metamorphic_crypto.js metamorphic_crypto_bg.wasm > SHA512SUMS
- name: Display checksums
run: cat pkg/SHA512SUMS
- name: Install cosign
uses: sigstore/cosign-installer@v3
- name: Sign artifacts with cosign
run: |
cosign sign-blob --yes --bundle pkg/metamorphic_crypto.js.cosign.bundle pkg/metamorphic_crypto.js
cosign sign-blob --yes --bundle pkg/metamorphic_crypto_bg.wasm.cosign.bundle pkg/metamorphic_crypto_bg.wasm
- name: Attest WASM artifacts
uses: actions/attest-build-provenance@v2
with:
subject-path: |
pkg/metamorphic_crypto.js
pkg/metamorphic_crypto_bg.wasm
- uses: actions/setup-node@v4
with:
node-version: "22"
registry-url: "https://registry.npmjs.org"
- name: Scope package for npm
working-directory: pkg
run: npm pkg set name="@f0rest8/metamorphic-crypto"
- name: Publish to npm
working-directory: pkg
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Attach artifacts to GitHub Release
uses: softprops/action-gh-release@v2
with:
files: |
pkg/metamorphic_crypto.js
pkg/metamorphic_crypto_bg.wasm
pkg/SHA512SUMS
pkg/metamorphic_crypto.js.cosign.bundle
pkg/metamorphic_crypto_bg.wasm.cosign.bundle
fail_on_unmatched_files: true