From 8f33917d47774e9b736b8cbf7ec4fa900e571575 Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Wed, 13 May 2026 10:28:49 +0100 Subject: [PATCH] Temporarily use beta versions for "latest" dist-tag --- .github/workflows/publish.yml | 29 ++++++++--------------------- nodejs/scripts/calculate-version.js | 7 +++++-- nodejs/test/get-version.test.ts | 10 ++++++---- 3 files changed, 19 insertions(+), 27 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 6e79e6aaf..20df00b7b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -59,13 +59,10 @@ jobs: if [ -n "${{ github.event.inputs.version }}" ]; then VERSION="${{ github.event.inputs.version }}" # Validate version format matches dist-tag - if [ "${{ github.event.inputs.dist-tag }}" = "latest" ]; then - if [[ "$VERSION" == *-* ]]; then - echo "❌ Error: Version '$VERSION' has a prerelease suffix but dist-tag is 'latest'" >> $GITHUB_STEP_SUMMARY - echo "Use a version without suffix (e.g., '1.0.0') for latest releases" - exit 1 - fi - else + # TEMPORARY: skips validation for "latest" so prerelease versions + # can be published under that tag. To ship stable 1.0.0, revert the + # commit that introduced this temporary change. + if [ "${{ github.event.inputs.dist-tag }}" != "latest" ]; then if [[ "$VERSION" != *-* ]]; then echo "❌ Error: Version '$VERSION' has no prerelease suffix but dist-tag is '${{ github.event.inputs.dist-tag }}'" >> $GITHUB_STEP_SUMMARY echo "Use a version with suffix (e.g., '1.0.0-preview.0') for prerelease/unstable" @@ -222,21 +219,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6.0.2 + # TEMPORARY: both "latest" and "prerelease" create GitHub pre-releases + # since "latest" publishes beta versions. To ship stable 1.0.0, revert + # the commit that introduced this temporary change. - name: Create GitHub Release - if: github.event.inputs.dist-tag == 'latest' - run: | - NOTES_FLAG="" - if git rev-parse "v${{ needs.version.outputs.current }}" >/dev/null 2>&1; then - NOTES_FLAG="--notes-start-tag v${{ needs.version.outputs.current }}" - fi - gh release create "v${{ needs.version.outputs.version }}" \ - --title "v${{ needs.version.outputs.version }}" \ - --generate-notes $NOTES_FLAG \ - --target ${{ github.sha }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Create GitHub Pre-Release - if: github.event.inputs.dist-tag == 'prerelease' + if: github.event.inputs.dist-tag == 'latest' || github.event.inputs.dist-tag == 'prerelease' run: | NOTES_FLAG="" if git rev-parse "v${{ needs.version.outputs.current-prerelease }}" >/dev/null 2>&1; then diff --git a/nodejs/scripts/calculate-version.js b/nodejs/scripts/calculate-version.js index c90ff1a37..ac5722d43 100644 --- a/nodejs/scripts/calculate-version.js +++ b/nodejs/scripts/calculate-version.js @@ -43,10 +43,13 @@ export function calculateVersion(command, { latest, prerelease, unstable }) { } } - const increment = command === "latest" ? "patch" : "prerelease"; + // TEMPORARY: "latest" uses prerelease increments so we publish beta versions + // under the "latest" dist-tag. To ship stable 1.0.0, revert the commit that + // introduced this temporary change. + const increment = "prerelease"; const isIncrementingExistingPrerelease = semver.prerelease(higherVersion) !== null; const prereleaseIdentifier = - command === "prerelease" + command === "prerelease" || command === "latest" ? isIncrementingExistingPrerelease ? undefined : "preview" diff --git a/nodejs/test/get-version.test.ts b/nodejs/test/get-version.test.ts index 5dea84cf2..23d2486ec 100644 --- a/nodejs/test/get-version.test.ts +++ b/nodejs/test/get-version.test.ts @@ -2,13 +2,15 @@ import { describe, expect, it } from "vitest"; import { calculateVersion } from "../scripts/calculate-version.js"; describe("get-version", () => { - it("increments stable latest versions by patch", () => { - expect(calculateVersion("latest", { latest: "1.0.1" })).toBe("1.0.2"); + // TEMPORARY: these two tests reflect beta-as-latest behavior. To ship + // stable 1.0.0, revert the commit that introduced this temporary change. + it("increments latest versions as prerelease (temporary beta behavior)", () => { + expect(calculateVersion("latest", { latest: "1.0.1" })).toBe("1.0.2-preview.0"); }); - it("promotes a higher prerelease to stable for latest releases", () => { + it("continues beta prerelease for latest releases (temporary beta behavior)", () => { expect(calculateVersion("latest", { latest: "0.3.0", prerelease: "1.0.0-beta.1" })).toBe( - "1.0.0" + "1.0.0-beta.2" ); });