diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 0b0a25d..50ff3cd 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -72,7 +72,7 @@ jobs: name: Test strategy: matrix: - platform: [ubuntu-latest, windows-latest, macos-latest] + platform: [ ubuntu-latest, windows-latest, macos-latest ] fail-fast: false runs-on: ${{ matrix.platform }} steps: @@ -249,22 +249,30 @@ jobs: components: rust-src - name: Cache Rust workspace uses: Swatinem/rust-cache@v2 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: lts/* - name: Install dependencies - run: npm -C objdiff-wasm install + run: npm -C objdiff-wasm ci - name: Build run: npm -C objdiff-wasm run build + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: wasm + path: objdiff-wasm/dist/ + if-no-files-found: error - release: - name: Release + check-version: + name: Check package versions if: startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest - needs: [build-cli, build-gui] - permissions: - contents: write + needs: [ build-cli, build-gui ] steps: - name: Checkout uses: actions/checkout@v4 - - name: Check git tag against Cargo version + - name: Check git tag against package versions shell: bash run: | set -eou pipefail @@ -276,9 +284,24 @@ jobs: echo "::error::Git tag doesn't match the Cargo version! ($tag != $version)" exit 1 fi + version="v$(jq -r .version objdiff-wasm/package.json)" + if [ "$tag" != "$version" ]; then + echo "::error::Git tag doesn't match the npm version! ($tag != $version)" + exit 1 + fi + + release-github: + name: Release (GitHub) + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + needs: [ check-version ] + permissions: + contents: write + steps: - name: Download artifacts uses: actions/download-artifact@v4 with: + pattern: objdiff-* path: artifacts - name: Rename artifacts working-directory: artifacts @@ -308,3 +331,53 @@ jobs: files: out/* draft: true generate_release_notes: true + + release-cargo: + name: Release (Cargo) + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + needs: [ check-version ] + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@stable + - name: Publish + env: + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + run: cargo publish -p objdiff-core --dry-run + + release-npm: + name: Release (npm) + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + needs: [ check-version ] + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: lts/* + registry-url: 'https://registry.npmjs.org' + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: wasm + path: objdiff-wasm/dist + - name: Publish + working-directory: objdiff-wasm + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + run: | + set -euo pipefail + version=$(jq -r '.version' package.json) + tag="latest" + # Check for prerelease by looking for a dash + case "$version" in + *-*) + tag=$(echo "$version" | sed -e 's/^[^-]*-//' -e 's/\..*$//') + ;; + esac + echo "Publishing version $version with tag '$tag'..." + npm publish --provenance --access public --tag "$tag" --dry-run