From: daiwei Date: Fri, 22 Aug 2025 02:40:26 +0000 (+0800) Subject: refactor: remove canary release workflows X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fedison%2Fchore%2FdropCanaryRelease;p=thirdparty%2Fvuejs%2Fcore.git refactor: remove canary release workflows now using continuous release with pkg.pr.new --- diff --git a/.github/workflows/canary-minor.yml b/.github/workflows/canary-minor.yml deleted file mode 100644 index 8145aa41e3..0000000000 --- a/.github/workflows/canary-minor.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: canary minor release -on: - # Runs every Monday at 1 AM UTC (9:00 AM in Singapore) - schedule: - - cron: 0 1 * * MON - workflow_dispatch: - -jobs: - canary: - # prevents this action from running on forks - if: github.repository == 'vuejs/core' - runs-on: ubuntu-latest - environment: Release - steps: - - uses: actions/checkout@v5 - with: - ref: minor - - - name: Install pnpm - uses: pnpm/action-setup@v4.1.0 - - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version-file: '.node-version' - registry-url: 'https://registry.npmjs.org' - cache: 'pnpm' - - - run: pnpm install - - - run: pnpm release --canary --publish --tag minor - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml deleted file mode 100644 index 19e3869786..0000000000 --- a/.github/workflows/canary.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: canary release -on: - # Runs every Monday at 1 AM UTC (9:00 AM in Singapore) - schedule: - - cron: 0 1 * * MON - workflow_dispatch: - -jobs: - canary: - # prevents this action from running on forks - if: github.repository == 'vuejs/core' - runs-on: ubuntu-latest - environment: Release - steps: - - uses: actions/checkout@v5 - - - name: Install pnpm - uses: pnpm/action-setup@v4.1.0 - - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version-file: '.node-version' - registry-url: 'https://registry.npmjs.org' - cache: 'pnpm' - - - run: pnpm install - - - run: pnpm release --canary --publish - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/rollup.config.js b/rollup.config.js index da7de554b6..8f1f85b936 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -135,8 +135,7 @@ function createConfig(format, output, plugins = []) { const isServerRenderer = name === 'server-renderer' const isCJSBuild = format === 'cjs' const isGlobalBuild = /global/.test(format) - const isCompatPackage = - pkg.name === '@vue/compat' || pkg.name === '@vue/compat-canary' + const isCompatPackage = pkg.name === '@vue/compat' const isCompatBuild = !!packageOptions.compat const isBrowserBuild = (isGlobalBuild || isBrowserESMBuild || isBundlerESMBuild) && @@ -288,10 +287,7 @@ function createConfig(format, output, plugins = []) { // requires a ton of template engines which should be ignored. /** @type {ReadonlyArray} */ let cjsIgnores = [] - if ( - pkg.name === '@vue/compiler-sfc' || - pkg.name === '@vue/compiler-sfc-canary' - ) { + if (pkg.name === '@vue/compiler-sfc') { cjsIgnores = [ ...Object.keys(consolidatePkg.devDependencies), 'vm', diff --git a/scripts/release.js b/scripts/release.js index cd287dfc12..ec166c03d3 100644 --- a/scripts/release.js +++ b/scripts/release.js @@ -36,9 +36,6 @@ const { values: args, positionals } = parseArgs({ tag: { type: 'string', }, - canary: { - type: 'boolean', - }, skipBuild: { type: 'boolean', }, @@ -69,9 +66,8 @@ const isDryRun = args.dry /** @type {boolean | undefined} */ let skipTests = args.skipTests const skipBuild = args.skipBuild -const isCanary = args.canary -const skipPrompts = args.skipPrompts || args.canary -const skipGit = args.skipGit || args.canary +const skipPrompts = args.skipPrompts +const skipGit = args.skipGit const packages = fs .readdirSync(path.resolve(__dirname, '../packages')) @@ -98,18 +94,6 @@ const isCorePackage = (/** @type {string} */ pkgName) => { ) } -const renamePackageToCanary = (/** @type {string} */ pkgName) => { - if (pkgName === 'vue') { - return '@vue/canary' - } - - if (isCorePackage(pkgName)) { - return `${pkgName}-canary` - } - - return pkgName -} - const keepThePackageName = (/** @type {string} */ pkgName) => pkgName /** @type {string[]} */ @@ -151,57 +135,6 @@ async function main() { let targetVersion = positionals[0] - if (isCanary) { - // The canary version string format is `3.yyyyMMdd.0` (or `3.yyyyMMdd.0-minor.0` for minor) - // Use UTC date so that it's consistent across CI and maintainers' machines - const date = new Date() - const yyyy = date.getUTCFullYear() - const MM = (date.getUTCMonth() + 1).toString().padStart(2, '0') - const dd = date.getUTCDate().toString().padStart(2, '0') - - const major = semver.major(currentVersion) - const datestamp = `${yyyy}${MM}${dd}` - let canaryVersion - - canaryVersion = `${major}.${datestamp}.0` - if (args.tag && args.tag !== 'latest') { - canaryVersion = `${major}.${datestamp}.0-${args.tag}.0` - } - - // check the registry to avoid version collision - // in case we need to publish more than one canary versions in a day - try { - const pkgName = renamePackageToCanary('vue') - const { stdout } = await run( - 'pnpm', - ['view', `${pkgName}@~${canaryVersion}`, 'version', '--json'], - { stdio: 'pipe' }, - ) - let versions = JSON.parse(/** @type {string} */ (stdout)) - versions = Array.isArray(versions) ? versions : [versions] - const latestSameDayPatch = /** @type {string} */ ( - semver.maxSatisfying(versions, `~${canaryVersion}`) - ) - - canaryVersion = /** @type {string} */ ( - semver.inc(latestSameDayPatch, 'patch') - ) - if (args.tag && args.tag !== 'latest') { - canaryVersion = /** @type {string} */ ( - semver.inc(latestSameDayPatch, 'prerelease', args.tag) - ) - } - } catch (/** @type {any} */ e) { - if (/E404/.test(e.message)) { - // the first patch version on that day - } else { - throw e - } - } - - targetVersion = canaryVersion - } - if (!targetVersion) { // no explicit version, offer suggestions /** @type {{ release: string }} */ @@ -239,11 +172,7 @@ async function main() { } if (skipPrompts) { - step( - isCanary - ? `Releasing canary version v${targetVersion}...` - : `Releasing v${targetVersion}...`, - ) + step(`Releasing v${targetVersion}...`) } else { /** @type {{ yes: boolean }} */ const { yes: confirmRelease } = await prompt({ @@ -261,10 +190,7 @@ async function main() { // update all package versions and inter-dependencies step('\nUpdating cross dependencies...') - updateVersions( - targetVersion, - isCanary ? renamePackageToCanary : keepThePackageName, - ) + updateVersions(targetVersion, keepThePackageName) versionUpdated = true // generate changelog @@ -285,11 +211,8 @@ async function main() { } // update pnpm-lock.yaml - // skipped during canary release because the package names changed and installing with `workspace:*` would fail - if (!isCanary) { - step('\nUpdating lockfile...') - await run(`pnpm`, ['install', '--prefer-offline']) - } + step('\nUpdating lockfile...') + await run(`pnpm`, ['install', '--prefer-offline']) if (!skipGit) { const { stdout } = await run('git', ['diff'], { stdio: 'pipe' }) @@ -457,34 +380,9 @@ function updatePackage(pkgRoot, version, getNewPackageName) { const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')) pkg.name = getNewPackageName(pkg.name) pkg.version = version - if (isCanary) { - updateDeps(pkg, 'dependencies', version, getNewPackageName) - updateDeps(pkg, 'peerDependencies', version, getNewPackageName) - } fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n') } -/** - * @param {Package} pkg - * @param {'dependencies' | 'peerDependencies'} depType - * @param {string} version - * @param {(pkgName: string) => string} getNewPackageName - */ -function updateDeps(pkg, depType, version, getNewPackageName) { - const deps = pkg[depType] - if (!deps) return - Object.keys(deps).forEach(dep => { - if (isCorePackage(dep)) { - const newName = getNewPackageName(dep) - const newVersion = newName === dep ? version : `npm:${newName}@${version}` - console.log( - pico.yellow(`${pkg.name} -> ${depType} -> ${dep}@${newVersion}`), - ) - deps[dep] = newVersion - } - }) -} - async function buildPackages() { step('\nBuilding all packages...') if (!skipBuild) { @@ -509,9 +407,8 @@ async function publishPackages(version) { additionalPublishFlags.push('--no-git-checks') } // add provenance metadata when releasing from CI - // canary release commits are not pushed therefore we don't need to add provenance - // also skip provenance if not publishing to actual npm - if (process.env.CI && !isCanary && !args.registry) { + // skip provenance if not publishing to actual npm + if (process.env.CI && !args.registry) { additionalPublishFlags.push('--provenance') }