From 1431634de4e60aae55f2947fc612d574234ce29f Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Sat, 1 Nov 2025 08:39:45 +0200 Subject: [PATCH 1/3] chore(repo): Add alpha-v6 release scripts --- .alpha-v6-branch | 5 ++ .github/workflows/release-alpha-v6.yml | 83 ++++++++++++++++++++++++++ .github/workflows/release.yml | 17 ++++-- package.json | 2 + scripts/alpha-v6.mjs | 43 +++++++++++++ 5 files changed, 146 insertions(+), 4 deletions(-) create mode 100644 .alpha-v6-branch create mode 100644 .github/workflows/release-alpha-v6.yml create mode 100755 scripts/alpha-v6.mjs diff --git a/.alpha-v6-branch b/.alpha-v6-branch new file mode 100644 index 00000000000..7a55c293e59 --- /dev/null +++ b/.alpha-v6-branch @@ -0,0 +1,5 @@ +# Alpha v6 Development Branch +# This file marks this branch as an alpha-v6 development branch. +# Production releases (latest tag) are disabled on this branch. +# Only alpha-v6 releases are allowed. + diff --git a/.github/workflows/release-alpha-v6.yml b/.github/workflows/release-alpha-v6.yml new file mode 100644 index 00000000000..f8142c0c994 --- /dev/null +++ b/.github/workflows/release-alpha-v6.yml @@ -0,0 +1,83 @@ +name: Alpha-v6 release +run-name: Alpha-v6 release from ${{ github.ref_name }} + +on: + push: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + alpha-v6-release: + if: ${{ github.repository == 'clerk/javascript' }} + runs-on: ${{ vars.RUNNER_NORMAL || 'ubuntu-latest' }} + timeout-minutes: ${{ vars.TIMEOUT_MINUTES_NORMAL && fromJSON(vars.TIMEOUT_MINUTES_NORMAL) || 10 }} + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} + TURBO_CACHE: remote:rw + permissions: + contents: read + id-token: write + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Setup + id: config + uses: ./.github/actions/init + with: + turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }} + turbo-team: ${{ vars.TURBO_TEAM }} + turbo-token: ${{ secrets.TURBO_TOKEN }} + playwright-enabled: true # Must be present to enable caching on branched workflows + registry-url: "https://registry.npmjs.org" + + - name: Version packages for alpha-v6 + id: version-packages + run: pnpm version-packages:alpha-v6 | tail -1 >> "$GITHUB_OUTPUT" + + - name: Build release + if: steps.version-packages.outputs.success == '1' + run: pnpm turbo build $TURBO_ARGS + + - name: Alpha-v6 release + if: steps.version-packages.outputs.success == '1' + run: pnpm release:alpha-v6 + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_CONFIG_PROVENANCE: true + + - name: Trigger workflows on related repos + if: steps.version-packages.outputs.success == '1' + uses: actions/github-script@v7 + with: + result-encoding: string + retries: 3 + retry-exempt-status-codes: 400,401 + github-token: ${{ secrets.CLERK_COOKIE_PAT }} + script: | + const clerkjsVersion = require('./packages/clerk-js/package.json').version; + const nextjsVersion = require('./packages/nextjs/package.json').version; + + github.rest.actions.createWorkflowDispatch({ + owner: 'clerk', + repo: 'sdk-infra-workers', + workflow_id: 'update-clerkjs.yml', + ref: 'main', + inputs: { version: clerkjsVersion } + }) + + # if (nextjsVersion.includes('alpha-v6')) { + # console.log('clerk/nextjs changed with alpha-v6, will notify clerk/accounts'); + # github.rest.actions.createWorkflowDispatch({ + # owner: 'clerk', + # repo: 'accounts', + # workflow_id: 'release-staging.yml', + # ref: 'main', + # inputs: { version: nextjsVersion } + # }) + # } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a5ebbf2d695..544e3818a1e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,6 +39,15 @@ jobs: fetch-depth: 0 show-progress: false + - name: Safety check - Prevent production releases on alpha-v6 branch + run: | + if [ -f ".alpha-v6-branch" ]; then + echo "❌ ERROR: This branch is marked for alpha-v6 releases only!" + echo "Production releases (latest tag) are not allowed on this branch." + echo "If you need to make a production release, use the main production branch." + exit 1 + fi + - name: Setup id: config uses: ./.github/actions/init @@ -55,8 +64,8 @@ jobs: id: changesets uses: changesets/action@v1 with: - commit: 'ci(repo): Version packages' - title: 'ci(repo): Version packages' + commit: "ci(repo): Version packages" + title: "ci(repo): Version packages" publish: pnpm release # Workaround for https://github.com/changesets/changesets/issues/421 version: pnpm version-packages @@ -145,5 +154,5 @@ jobs: uses: ./.github/actions/init with: node-version: ${{ matrix.version }} - turbo-team: '' - turbo-token: '' + turbo-team: "" + turbo-token: "" diff --git a/package.json b/package.json index 54f37ad01e4..ee2b1ce30a5 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "nuke": "node ./scripts/nuke.mjs", "prepare": "husky install", "release": "changeset publish && git push --follow-tags", + "release:alpha-v6": "changeset publish --tag alpha-v6 --no-git-tag", "release:canary": "changeset publish --tag canary --no-git-tag", "release:snapshot": "changeset publish --tag snapshot --no-git-tag", "release:verdaccio": "if [ \"$(npm config get registry)\" = \"https://registry.npmjs.org/\" ]; then echo 'Error: Using default registry' && exit 1; else TURBO_CONCURRENCY=1 pnpm build && changeset publish --no-git-tag; fi", @@ -58,6 +59,7 @@ "typedoc:generate": "pnpm build && pnpm typedoc:generate:skip-build", "typedoc:generate:skip-build": "typedoc --tsconfig tsconfig.typedoc.json && rm -rf .typedoc/docs && mv .typedoc/temp-docs .typedoc/docs", "version-packages": "changeset version && pnpm install --lockfile-only --engine-strict=false", + "version-packages:alpha-v6": "./scripts/alpha-v6.mjs", "version-packages:canary": "./scripts/canary.mjs", "version-packages:snapshot": "./scripts/snapshot.mjs", "yalc:all": "for d in packages/*/; do echo $d; cd $d; pnpm yalc push --replace --sig; cd '../../'; done" diff --git a/scripts/alpha-v6.mjs b/scripts/alpha-v6.mjs new file mode 100755 index 00000000000..82afc4611dc --- /dev/null +++ b/scripts/alpha-v6.mjs @@ -0,0 +1,43 @@ +#!/usr/bin/env zx + +import { $, echo } from 'zx'; + +import { constants } from './common.mjs'; + +const snapshot = `--- +'@clerk/backend': patch +'@clerk/shared': patch +'@clerk/react': patch +'@clerk/clerk-js': patch +'@clerk/nextjs': patch +--- + +Alpha-v6 release +`; + +await $`pnpm dlx json -I -f ${constants.ChangesetConfigFile} -e "this.changelog = false"`; + +try { + // exit pre-release mode if we're in it + await $`pnpm changeset pre exit`; + // bump the version of all affected packages + // this will remove the prerelease versions + // but will also clear the changeset .md files + await $`pnpm changeset version`; + // generate a temp .md file that indicates that all packages have changes + // in order to force a snapshot release + await $`touch .changeset/snap.md && echo ${snapshot} > .changeset/snap.md`; +} catch { + // otherwise, do nothing +} + +const res = await $`pnpm changeset version --snapshot alpha-v6`; +const success = !res.stderr.includes('No unreleased changesets found'); + +await $`git checkout HEAD -- ${constants.ChangesetConfigFile}`; + +if (success) { + echo('success=1'); +} else { + echo('success=0'); +} From 5dec17e827443be39ede74e977b319e67e169bac Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Thu, 20 Nov 2025 14:20:09 +0200 Subject: [PATCH 2/3] chore(repo): Switch to canary-core3 --- .alpha-v6-branch | 5 - .github/workflows/release-alpha-v6.yml | 140 ++++++++++----------- .github/workflows/release.yml | 6 +- canary-core3-branch | 5 + package.json | 4 +- scripts/{alpha-v6.mjs => canary-core3.mjs} | 15 ++- scripts/canary.mjs | 20 +-- scripts/snapshot.mjs | 2 +- 8 files changed, 93 insertions(+), 104 deletions(-) delete mode 100644 .alpha-v6-branch create mode 100644 canary-core3-branch rename scripts/{alpha-v6.mjs => canary-core3.mjs} (74%) diff --git a/.alpha-v6-branch b/.alpha-v6-branch deleted file mode 100644 index 7a55c293e59..00000000000 --- a/.alpha-v6-branch +++ /dev/null @@ -1,5 +0,0 @@ -# Alpha v6 Development Branch -# This file marks this branch as an alpha-v6 development branch. -# Production releases (latest tag) are disabled on this branch. -# Only alpha-v6 releases are allowed. - diff --git a/.github/workflows/release-alpha-v6.yml b/.github/workflows/release-alpha-v6.yml index f8142c0c994..0d3ca37fa49 100644 --- a/.github/workflows/release-alpha-v6.yml +++ b/.github/workflows/release-alpha-v6.yml @@ -1,83 +1,83 @@ -name: Alpha-v6 release -run-name: Alpha-v6 release from ${{ github.ref_name }} +name: canary-core3 release +run-name: canary-core3 release from ${{ github.ref_name }} on: - push: - branches: - - main + push: + branches: + - main concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: - alpha-v6-release: - if: ${{ github.repository == 'clerk/javascript' }} - runs-on: ${{ vars.RUNNER_NORMAL || 'ubuntu-latest' }} - timeout-minutes: ${{ vars.TIMEOUT_MINUTES_NORMAL && fromJSON(vars.TIMEOUT_MINUTES_NORMAL) || 10 }} - env: - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ vars.TURBO_TEAM }} - TURBO_CACHE: remote:rw - permissions: - contents: read - id-token: write - steps: - - name: Checkout repo - uses: actions/checkout@v4 + canary-core3-release: + if: ${{ github.repository == 'clerk/javascript' }} + runs-on: ${{ vars.RUNNER_NORMAL || 'ubuntu-latest' }} + timeout-minutes: ${{ vars.TIMEOUT_MINUTES_NORMAL && fromJSON(vars.TIMEOUT_MINUTES_NORMAL) || 10 }} + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} + TURBO_CACHE: remote:rw + permissions: + contents: read + id-token: write + steps: + - name: Checkout repo + uses: actions/checkout@v4 - - name: Setup - id: config - uses: ./.github/actions/init - with: - turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }} - turbo-team: ${{ vars.TURBO_TEAM }} - turbo-token: ${{ secrets.TURBO_TOKEN }} - playwright-enabled: true # Must be present to enable caching on branched workflows - registry-url: "https://registry.npmjs.org" + - name: Setup + id: config + uses: ./.github/actions/init + with: + turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }} + turbo-team: ${{ vars.TURBO_TEAM }} + turbo-token: ${{ secrets.TURBO_TOKEN }} + playwright-enabled: true # Must be present to enable caching on branched workflows + registry-url: "https://registry.npmjs.org" - - name: Version packages for alpha-v6 - id: version-packages - run: pnpm version-packages:alpha-v6 | tail -1 >> "$GITHUB_OUTPUT" + - name: Version packages for canary-core3 + id: version-packages + run: pnpm version-packages:canary-core3 | tail -1 >> "$GITHUB_OUTPUT" - - name: Build release - if: steps.version-packages.outputs.success == '1' - run: pnpm turbo build $TURBO_ARGS + - name: Build release + if: steps.version-packages.outputs.success == '1' + run: pnpm turbo build $TURBO_ARGS - - name: Alpha-v6 release - if: steps.version-packages.outputs.success == '1' - run: pnpm release:alpha-v6 - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_CONFIG_PROVENANCE: true + - name: canary-core3 release + if: steps.version-packages.outputs.success == '1' + run: pnpm release:canary-core3 + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_CONFIG_PROVENANCE: true - - name: Trigger workflows on related repos - if: steps.version-packages.outputs.success == '1' - uses: actions/github-script@v7 - with: - result-encoding: string - retries: 3 - retry-exempt-status-codes: 400,401 - github-token: ${{ secrets.CLERK_COOKIE_PAT }} - script: | - const clerkjsVersion = require('./packages/clerk-js/package.json').version; - const nextjsVersion = require('./packages/nextjs/package.json').version; + - name: Trigger workflows on related repos + if: steps.version-packages.outputs.success == '1' + uses: actions/github-script@v7 + with: + result-encoding: string + retries: 3 + retry-exempt-status-codes: 400,401 + github-token: ${{ secrets.CLERK_COOKIE_PAT }} + script: | + const clerkjsVersion = require('./packages/clerk-js/package.json').version; + const nextjsVersion = require('./packages/nextjs/package.json').version; - github.rest.actions.createWorkflowDispatch({ - owner: 'clerk', - repo: 'sdk-infra-workers', - workflow_id: 'update-clerkjs.yml', - ref: 'main', - inputs: { version: clerkjsVersion } - }) + github.rest.actions.createWorkflowDispatch({ + owner: 'clerk', + repo: 'sdk-infra-workers', + workflow_id: 'update-clerkjs.yml', + ref: 'main', + inputs: { version: clerkjsVersion } + }) - # if (nextjsVersion.includes('alpha-v6')) { - # console.log('clerk/nextjs changed with alpha-v6, will notify clerk/accounts'); - # github.rest.actions.createWorkflowDispatch({ - # owner: 'clerk', - # repo: 'accounts', - # workflow_id: 'release-staging.yml', - # ref: 'main', - # inputs: { version: nextjsVersion } - # }) - # } + # if (nextjsVersion.includes('canary-core3')) { + # console.log('clerk/nextjs changed with canary-core3, will notify clerk/accounts'); + # github.rest.actions.createWorkflowDispatch({ + # owner: 'clerk', + # repo: 'accounts', + # workflow_id: 'release-staging.yml', + # ref: 'main', + # inputs: { version: nextjsVersion } + # }) + # } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 544e3818a1e..cf8db97c29e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,10 +39,10 @@ jobs: fetch-depth: 0 show-progress: false - - name: Safety check - Prevent production releases on alpha-v6 branch + - name: Safety check - Prevent production releases on canary-core3 branch run: | - if [ -f ".alpha-v6-branch" ]; then - echo "❌ ERROR: This branch is marked for alpha-v6 releases only!" + if [ -f ".canary-core3-branch" ]; then + echo "❌ ERROR: This branch is marked for canary-core3 releases only!" echo "Production releases (latest tag) are not allowed on this branch." echo "If you need to make a production release, use the main production branch." exit 1 diff --git a/canary-core3-branch b/canary-core3-branch new file mode 100644 index 00000000000..9dfa0b10923 --- /dev/null +++ b/canary-core3-branch @@ -0,0 +1,5 @@ +# Alpha v6 Development Branch +# This file marks this branch as an canary-core3 development branch. +# Production releases (latest tag) are disabled on this branch. +# Only canary-core3 releases are allowed. + diff --git a/package.json b/package.json index 659c5c59e83..53a783a6737 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,8 @@ "nuke": "node ./scripts/nuke.mjs", "prepare": "husky install", "release": "changeset publish && git push --follow-tags", - "release:alpha-v6": "changeset publish --tag alpha-v6 --no-git-tag", "release:canary": "changeset publish --tag canary --no-git-tag", + "release:canary-core3": "changeset publish --tag canary-core3 --no-git-tag", "release:snapshot": "changeset publish --tag snapshot --no-git-tag", "release:verdaccio": "if [ \"$(npm config get registry)\" = \"https://registry.npmjs.org/\" ]; then echo 'Error: Using default registry' && exit 1; else TURBO_CONCURRENCY=1 pnpm build && changeset publish --no-git-tag; fi", "test": "FORCE_COLOR=1 turbo test --concurrency=${TURBO_CONCURRENCY:-80%}", @@ -59,8 +59,8 @@ "typedoc:generate": "pnpm build && pnpm typedoc:generate:skip-build", "typedoc:generate:skip-build": "typedoc --tsconfig tsconfig.typedoc.json && node .typedoc/extract-returns-and-params.mjs && rimraf .typedoc/docs && cpy '.typedoc/temp-docs/**' '.typedoc/docs' && rimraf .typedoc/temp-docs", "version-packages": "changeset version && pnpm install --lockfile-only --engine-strict=false", - "version-packages:alpha-v6": "./scripts/alpha-v6.mjs", "version-packages:canary": "./scripts/canary.mjs", + "version-packages:canary-core3": "./scripts/canary-core3.mjs", "version-packages:snapshot": "./scripts/snapshot.mjs", "yalc:all": "for d in packages/*/; do echo $d; cd $d; pnpm yalc push --replace --sig; cd '../../'; done" }, diff --git a/scripts/alpha-v6.mjs b/scripts/canary-core3.mjs similarity index 74% rename from scripts/alpha-v6.mjs rename to scripts/canary-core3.mjs index 82afc4611dc..0760d213ac3 100755 --- a/scripts/alpha-v6.mjs +++ b/scripts/canary-core3.mjs @@ -2,17 +2,16 @@ import { $, echo } from 'zx'; -import { constants } from './common.mjs'; +import { constants, getPackageNames } from './common.mjs'; + +const packageNames = await getPackageNames(); +const packageEntries = packageNames.map(name => `'${name}': patch`).join('\n'); const snapshot = `--- -'@clerk/backend': patch -'@clerk/shared': patch -'@clerk/react': patch -'@clerk/clerk-js': patch -'@clerk/nextjs': patch +${packageEntries} --- -Alpha-v6 release +canary-core3 release `; await $`pnpm dlx json -I -f ${constants.ChangesetConfigFile} -e "this.changelog = false"`; @@ -31,7 +30,7 @@ try { // otherwise, do nothing } -const res = await $`pnpm changeset version --snapshot alpha-v6`; +const res = await $`pnpm changeset version --snapshot canary-core3`; const success = !res.stderr.includes('No unreleased changesets found'); await $`git checkout HEAD -- ${constants.ChangesetConfigFile}`; diff --git a/scripts/canary.mjs b/scripts/canary.mjs index 54e2b062478..5b431862689 100755 --- a/scripts/canary.mjs +++ b/scripts/canary.mjs @@ -2,23 +2,13 @@ import { $, echo } from 'zx'; -import { constants } from './common.mjs'; +import { constants, getPackageNames } from './common.mjs'; + +const packageNames = await getPackageNames(); +const packageEntries = packageNames.map(name => `'${name}': patch`).join('\n'); const snapshot = `--- -'@clerk/chrome-extension': patch -'@clerk/localizations': patch -'@clerk/clerk-js': patch -'@clerk/backend': patch -'@clerk/fastify': patch -'@clerk/agent-toolkit': patch -'@clerk/nextjs': patch -'@clerk/shared': patch -'@clerk/themes': patch -'@clerk/react': patch -'@clerk/expo': patch -'@clerk/express': patch -'@clerk/testing': patch -'@clerk/elements': patch +${packageEntries} --- Canary release diff --git a/scripts/snapshot.mjs b/scripts/snapshot.mjs index fc61227a69d..138c77b7ea3 100755 --- a/scripts/snapshot.mjs +++ b/scripts/snapshot.mjs @@ -10,7 +10,7 @@ const packageEntries = packageNames.map(name => `'${name}': patch`).join('\n'); const snapshot = `--- ${packageEntries} --- - + Snapshot release `; From f5584ba5dead2debfe6208dec57df38f0281cd81 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Thu, 20 Nov 2025 19:23:14 +0200 Subject: [PATCH 3/3] chore(repo): Update workflow to include clerkUi version --- .github/workflows/release-alpha-v6.yml | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/.github/workflows/release-alpha-v6.yml b/.github/workflows/release-alpha-v6.yml index 0d3ca37fa49..203346e4731 100644 --- a/.github/workflows/release-alpha-v6.yml +++ b/.github/workflows/release-alpha-v6.yml @@ -61,23 +61,13 @@ jobs: github-token: ${{ secrets.CLERK_COOKIE_PAT }} script: | const clerkjsVersion = require('./packages/clerk-js/package.json').version; + const clerkUiVersion = require('./packages/ui/package.json').version; const nextjsVersion = require('./packages/nextjs/package.json').version; github.rest.actions.createWorkflowDispatch({ owner: 'clerk', repo: 'sdk-infra-workers', - workflow_id: 'update-clerkjs.yml', + workflow_id: 'update-pkg-versions.yml', ref: 'main', - inputs: { version: clerkjsVersion } + inputs: { clerkjsVersion, clerkUiVersion } }) - - # if (nextjsVersion.includes('canary-core3')) { - # console.log('clerk/nextjs changed with canary-core3, will notify clerk/accounts'); - # github.rest.actions.createWorkflowDispatch({ - # owner: 'clerk', - # repo: 'accounts', - # workflow_id: 'release-staging.yml', - # ref: 'main', - # inputs: { version: nextjsVersion } - # }) - # }