diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index 3b2a2e11f2909..dc5ab1d06614b 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -20,7 +20,7 @@ env: # See https://doc.rust-lang.org/rustc/platform-support/apple-darwin.html#os-version for more details MACOSX_DEPLOYMENT_TARGET: 11.0 # This will become "true" if the latest commit is - # "Version Packages" or "Version Pacakges (canary)" + # "Version Packages" or "Version Pacakges \((canary|rc)\)" # set from scripts/check-is-release.js __NEW_RELEASE: 'false' @@ -50,7 +50,7 @@ jobs: run: | # TODO: Remove the new release check once the new release workflow is fully replaced. RELEASE_CHECK=$(node ./scripts/check-is-release.js 2> /dev/null || :) - if [[ $RELEASE_CHECK =~ ^Version\ Packages(\ \(canary\))?$ ]]; + if [[ $RELEASE_CHECK =~ ^Version\ Packages(\ \((canary|rc)\))?$ ]]; then echo "__NEW_RELEASE=true" >> $GITHUB_ENV elif [[ $RELEASE_CHECK = v* ]]; diff --git a/.github/workflows/trigger_release_new.yml b/.github/workflows/trigger_release_new.yml index 311f1e8c45050..fe08293a3e844 100644 --- a/.github/workflows/trigger_release_new.yml +++ b/.github/workflows/trigger_release_new.yml @@ -18,8 +18,7 @@ on: options: - canary - stable - # TODO: Follow up enable the case. - # - release-candidate + - release-candidate force: description: Forced Release diff --git a/scripts/check-is-release.js b/scripts/check-is-release.js index 26edd2b49e4cc..74e39b7915cc5 100755 --- a/scripts/check-is-release.js +++ b/scripts/check-is-release.js @@ -13,7 +13,7 @@ const checkIsRelease = async () => { const versionString = commitMsg.split(' ').pop().trim() const publishMsgRegex = /^v\d{1,}\.\d{1,}\.\d{1,}(-\w{1,}\.\d{1,})?$/ - const newPublishMsgRegex = /^Version Packages( \(canary\))?$/ + const newPublishMsgRegex = /^Version Packages( \((canary|rc)\))?$/ if (publishMsgRegex.test(versionString)) { console.log(versionString) diff --git a/scripts/release/version-packages.ts b/scripts/release/version-packages.ts index 3016caf650b2c..cc038af03f1e3 100644 --- a/scripts/release/version-packages.ts +++ b/scripts/release/version-packages.ts @@ -36,53 +36,73 @@ async function versionPackages() { } } + // For prereleases, we need to set the "mode" on `pre.json`, which + // can be done by running `changeset pre enter `. const releaseType = process.env.RELEASE_TYPE + switch (releaseType) { + case 'canary': { + // Enter pre mode as "canary" tag. + await execa('pnpm', ['changeset', 'pre', 'enter', 'canary'], { + stdio: 'inherit', + }) - if (releaseType === 'canary') { - // Enter pre mode as "canary" tag. - await execa('pnpm', ['changeset', 'pre', 'enter', 'canary'], { - stdio: 'inherit', - }) + console.log( + '▲ Preparing to bump the canary version, checking if there are any changesets.' + ) - console.log( - '▲ Preparing to bump the canary version, checking if there are any changesets.' - ) + // Create an empty changeset for `next` to bump the canary version + // even if there are no changesets for `next`. + await execa('pnpm', [ + 'changeset', + 'status', + '--output', + './changeset-status.json', + ]) - // Create an empty changeset for `next` to bump the canary version - // even if there are no changesets for `next`. - await execa('pnpm', [ - 'changeset', - 'status', - '--output', - './changeset-status.json', - ]) + let hasNextChangeset = false + if (existsSync('./changeset-status.json')) { + const changesetStatus: ChangesetStatusJson = JSON.parse( + await readFile('./changeset-status.json', 'utf8') + ) - let hasNextChangeset = false - if (existsSync('./changeset-status.json')) { - const changesetStatus: ChangesetStatusJson = JSON.parse( - await readFile('./changeset-status.json', 'utf8') - ) + console.log('▲ Changeset Status:') + console.log(changesetStatus) - console.log('▲ Changeset Status:') - console.log(changesetStatus) + hasNextChangeset = + changesetStatus.releases.find( + (release) => release.name === 'next' + ) !== undefined - hasNextChangeset = - changesetStatus.releases.find((release) => release.name === 'next') !== - undefined + await unlink('./changeset-status.json') + } - await unlink('./changeset-status.json') + if (!hasNextChangeset) { + console.log( + '▲ No changesets found for `next`, creating an empty changeset.' + ) + // TODO: Since this is temporary until we hard-require a changeset, we will + // need to remove this in the future to prevent publishing empty releases. + await writeFile( + join(process.cwd(), '.changeset', `next-canary-${Date.now()}.md`), + `---\n'next': patch\n---` + ) + } + break } - - if (!hasNextChangeset) { - console.log( - '▲ No changesets found for `next`, creating an empty changeset.' - ) - // TODO: Since this is temporary until we hard-require a changeset, we will - // need to remove this in the future to prevent publishing empty releases. - await writeFile( - join(process.cwd(), '.changeset', `next-canary-${Date.now()}.md`), - `---\n'next': patch\n---` - ) + case 'release-candidate': { + // Enter pre mode as "rc" tag. + await execa('pnpm', ['changeset', 'pre', 'enter', 'rc'], { + stdio: 'inherit', + }) + break + } + case 'stable': { + // No additional steps needed for 'stable' releases since we've already + // exited any pre-release mode. Only need to run `changeset version` after. + break + } + default: { + throw new Error(`Invalid release type: ${releaseType}`) } }