hardware-address 0.3.0

IEEE 802 MAC-48, EUI-48, EUI-64, or a 20-octet IP over InfiniBand link-layer addresses and more
Documentation
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
        # `--out-name hardware_address` keeps the npm-side filenames
        # stable regardless of the crate's `[lib] name`, which is set
        # to `wasm_hardware_address` so rustdoc's workspace doctest
        # build doesn't collide with the root `hardware_address` rlib.
        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