3535 - patch
3636 - minor
3737 - major
38+ version :
39+ description : " Exact npm version to publish; overrides release-type/preid. Use a prerelease version for preview publishes, e.g. 9.0.0-preview.0"
40+ required : false
41+ type : string
3842 preid :
3943 description : " Prerelease identifier (used only when release-type=prerelease; also becomes the npm dist-tag, e.g. next | canary)"
4044 required : false
@@ -134,11 +138,13 @@ jobs:
134138 shell : bash
135139 env :
136140 RELEASE_TYPE : ${{ inputs.release-type }}
141+ PACKAGE_VERSION : ${{ inputs.version }}
137142 PREID : ${{ inputs.preid }}
138143 TARGET : ${{ matrix.target }}
139144 run : |
140145 set -euo pipefail
141146 release_type="$RELEASE_TYPE"
147+ package_version="$PACKAGE_VERSION"
142148 preid="$PREID"
143149 target="$TARGET"
144150 if [ "$target" = "react-native" ]; then
@@ -155,7 +161,9 @@ jobs:
155161 fi
156162
157163 pushd "$pkg_dir" >/dev/null
158- if [ "$release_type" = "prerelease" ]; then
164+ if [ -n "$package_version" ]; then
165+ npm version "$package_version" --no-git-tag-version >/dev/null
166+ elif [ "$release_type" = "prerelease" ]; then
159167 npm version prerelease --preid "$preid" --no-git-tag-version >/dev/null
160168 else
161169 npm version "$release_type" --no-git-tag-version >/dev/null
@@ -164,6 +172,10 @@ jobs:
164172 popd >/dev/null
165173
166174 NPM_TAG=$(NPM_VERSION="$NPM_VERSION" node ./scripts/get-npm-tag.js "$npm_tag_target")
175+ if [ -n "$package_version" ] && [ "$release_type" = "prerelease" ] && [ "$NPM_TAG" = "latest" ]; then
176+ echo "Exact prerelease publishes must include a prerelease identifier (for example 9.0.0-preview.0)." >&2
177+ exit 1
178+ fi
167179 echo "NPM_VERSION=$NPM_VERSION" >> "$GITHUB_OUTPUT"
168180 echo "NPM_TAG=$NPM_TAG" >> "$GITHUB_OUTPUT"
169181 echo "PACKAGE_DIR=$pkg_dir" >> "$GITHUB_OUTPUT"
@@ -332,6 +344,7 @@ jobs:
332344 env :
333345 PACKAGE_SELECTION : ${{ inputs.engine }}
334346 RELEASE_TYPE : ${{ inputs.release-type }}
347+ PACKAGE_VERSION : ${{ inputs.version }}
335348 PREID : ${{ inputs.preid }}
336349 DRY_RUN : ${{ inputs.dry-run }}
337350 TARGETS : ${{ needs.matrix.outputs.targets }}
@@ -340,6 +353,7 @@ jobs:
340353 run : |
341354 echo "Package selection: $PACKAGE_SELECTION"
342355 echo "Release type: $RELEASE_TYPE"
356+ echo "Exact version: $PACKAGE_VERSION"
343357 echo "Preid: $PREID"
344358 echo "Dry run: $DRY_RUN"
345359 echo "Targets: $TARGETS"
0 commit comments