From 07915c6b253fdee0a666ee6da78da4d375ef03bf Mon Sep 17 00:00:00 2001 From: Nikhil Kuriakose Date: Wed, 27 Aug 2025 22:03:33 +0200 Subject: [PATCH] ci: Support experiment versions in github actions (no-changelog) (#18562) --- .github/scripts/bump-versions.mjs | 21 +++++++++++++++++++-- .github/scripts/update-changelog.mjs | 1 + .github/workflows/release-create-pr.yml | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/.github/scripts/bump-versions.mjs b/.github/scripts/bump-versions.mjs index 8e7acc21eb..6c24c4b97f 100644 --- a/.github/scripts/bump-versions.mjs +++ b/.github/scripts/bump-versions.mjs @@ -7,9 +7,24 @@ import assert from 'assert'; const exec = promisify(child_process.exec); +function generateExperimentalVersion(currentVersion) { + const parsed = semver.parse(currentVersion); + if (!parsed) throw new Error(`Invalid version: ${currentVersion}`); + + // Check if it's already an experimental version + if (parsed.prerelease.length > 0 && parsed.prerelease[0] === 'exp') { + // Increment the experimental minor version + const expMinor = (parsed.prerelease[1] || 0) + 1; + return `${parsed.major}.${parsed.minor}.${parsed.patch}-exp.${expMinor}`; + } + + // Create new experimental version: ..-exp.0 + return `${parsed.major}.${parsed.minor}.${parsed.patch}-exp.0`; +} + const rootDir = process.cwd(); const releaseType = process.env.RELEASE_TYPE; -assert.match(releaseType, /^(patch|minor|major)$/, 'Invalid RELEASE_TYPE'); +assert.match(releaseType, /^(patch|minor|major|experimental)$/, 'Invalid RELEASE_TYPE'); // TODO: if releaseType is `auto` determine release type based on the changelog @@ -46,7 +61,9 @@ for (const packageName in packageMap) { Object.keys(packageJson.dependencies || {}).some( (dependencyName) => packageMap[dependencyName]?.isDirty, ) - ? semver.inc(version, releaseType) + ? releaseType === 'experimental' + ? generateExperimentalVersion(version) + : semver.inc(version, releaseType) : version; await writeFile(packageFile, JSON.stringify(packageJson, null, 2) + '\n'); diff --git a/.github/scripts/update-changelog.mjs b/.github/scripts/update-changelog.mjs index 8b84725932..52a25f6ecf 100644 --- a/.github/scripts/update-changelog.mjs +++ b/.github/scripts/update-changelog.mjs @@ -9,6 +9,7 @@ import packageJson from '../../package.json' with { type: 'json' }; const baseDir = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); const fullChangelogFile = resolve(baseDir, 'CHANGELOG.md'); +// Version includes experimental versions (e.g., 1.2.3-exp.0) const versionChangelogFile = resolve(baseDir, `CHANGELOG-${packageJson.version}.md`); const changelogStream = conventionalChangelog({ diff --git a/.github/workflows/release-create-pr.yml b/.github/workflows/release-create-pr.yml index bafb51461c..bb5e6098eb 100644 --- a/.github/workflows/release-create-pr.yml +++ b/.github/workflows/release-create-pr.yml @@ -17,6 +17,7 @@ on: - patch - minor - major + - experimental jobs: create-release-pr: