diff --git a/.github/workflows/publish-evm.yml b/.github/workflows/publish-evm.yml index 87d346138..ad23aea70 100644 --- a/.github/workflows/publish-evm.yml +++ b/.github/workflows/publish-evm.yml @@ -8,14 +8,18 @@ env: permissions: contents: read +# on: +# push: +# branches: +# - "evm" + on: - push: - branches: - - "evm" + pull_request: + types: [opened, synchronize, reopened, ready_for_review] jobs: build: - if: contains(github.event.head_commit.message, 'release:') && contains(github.event.head_commit.message, 'evm') + # if: contains(github.event.head_commit.message, 'release:') && contains(github.event.head_commit.message, 'evm') strategy: fail-fast: false @@ -78,7 +82,7 @@ jobs: publish: name: Publish - if: contains(github.event.head_commit.message, 'release:') && contains(github.event.head_commit.message, 'evm') + # if: contains(github.event.head_commit.message, 'release:') && contains(github.event.head_commit.message, 'evm') runs-on: ubuntu-latest needs: - build @@ -132,6 +136,14 @@ jobs: run: ls -R ./npm shell: bash + - name: Prepare release + run: pnpm run release:prepare && pnpm install --lockfile-only + + - name: Publish native to NPM + run: pnpm run release:native -- --publish-branch=evm --tag=evm --no-git-checks + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + - name: Publish to NPM run: | pnpm run release -- --publish-branch=evm --tag=evm --no-git-checks diff --git a/.github/workflows/publish-rc.yml b/.github/workflows/publish-rc.yml index 54be9e1c2..bbc803fc8 100644 --- a/.github/workflows/publish-rc.yml +++ b/.github/workflows/publish-rc.yml @@ -132,6 +132,14 @@ jobs: run: ls -R ./npm shell: bash + - name: Prepare release + run: pnpm run release:prepare && pnpm install --lockfile-only + + - name: Publish native to NPM + run: pnpm run release:native -- --publish-branch=develop --tag=rc --no-git-checks + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + - name: Publish to NPM run: | pnpm run release -- --publish-branch=develop --tag=rc --no-git-checks diff --git a/package.json b/package.json index a2b573240..fad6c900f 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,8 @@ "prettier:dry": "prettier --check \"./*.{ts,js,json,md}\" \"./packages/**/*.{ts,js,json,md}\"", "references": "node ./scripts/references/update-references.js", "release": "lerna run release --concurrency=1", + "release:native": "bash ./scripts/publish-evm-native.sh", + "release:prepare": "lerna run release:prepare --scope=@mainsail/evm", "setup": "pnpm install && pnpm run build", "sort": "sort-package-json \"package.json\" \"packages/*/package.json\"", "sort:dry": "sort-package-json --check \"package.json\" \"packages/*/package.json\"", diff --git a/packages/evm/package.json b/packages/evm/package.json index 6413353b6..9be749d93 100644 --- a/packages/evm/package.json +++ b/packages/evm/package.json @@ -12,8 +12,8 @@ "build-napi:debug": "napi build --platform --output-dir ./ --manifest-path bindings/Cargo.toml", "build-rs": "pnpm run clean && pnpm run build-napi", "clean": "rm -f index.js && rm -f index.d.ts && rm -f evm.*.node && rm -rf target", - "prepublishOnly": "napi prepublish -t pnpm", "release": "pnpm publish --access public", + "release:prepare": "napi prepublish -t pnpm --skip-optional-publish --no-gh-release", "test": "cargo test --release", "test:coverage": "mkdir -p coverage && cargo llvm-cov --lcov --output-path coverage/lcov.info --remap-path-prefix", "test:coverage:html": "mkdir -p coverage && cargo llvm-cov --html --output-dir coverage/ --remap-path-prefix", diff --git a/scripts/publish-evm-native.sh b/scripts/publish-evm-native.sh new file mode 100644 index 000000000..a96574307 --- /dev/null +++ b/scripts/publish-evm-native.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Publishes the EVM native platform packages (@mainsail/evm-*) to npm. +# +# Run this BEFORE `pnpm run release`. It first lets napi sync the platform package versions and the +# main package's optionalDependencies (without publishing them or creating a GitHub release), then +# publishes each platform package, forwarding every flag passed on the command line straight to +# `pnpm publish`. `napi prepublish` would otherwise publish them with a bare `npm publish` (no +# --tag), which npm rejects for prerelease versions, and pnpm strips npm_config_* from the +# lifecycle-script env so a dist-tag cannot be injected that way. +# +# Usage: +# pnpm run release:napi -- --tag=evm --publish-branch=evm --no-git-checks +# pnpm run release:napi -- --tag=rc --publish-branch=develop --no-git-checks + +cd "$(dirname "${BASH_SOURCE[0]}")/../packages/evm" + +# `pnpm run release:napi -- ` forwards the literal `--` separator into "$@" as well; drop it +# so the flags reach `pnpm publish` as options instead of being treated as a positional argument. +if [ "${1:-}" = "--" ]; then + shift +fi + +for dir in npm/*/; do + echo "Publishing ${dir%/} $*" + (cd "$dir" && pnpm publish --access public "$@") +done