Skip to content

Commit de28996

Browse files
Increment previews from existing tags
Use existing preview tags when selecting the next preview release number.
1 parent 047aca4 commit de28996

1 file changed

Lines changed: 36 additions & 7 deletions

File tree

scripts/release/run.ts

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,35 @@ function bumpStableBase(version: ParsedVersion, bump: ReleaseBump): ParsedVersio
108108
}
109109
}
110110

111-
function bumpVersion(currentVersion: string, args: string[]): string {
111+
function sameStableBase(left: ParsedVersion, right: ParsedVersion): boolean {
112+
return left.major === right.major && left.minor === right.minor && left.patch === right.patch;
113+
}
114+
115+
async function getLatestPreviewNumber(baseVersion: ParsedVersion): Promise<number> {
116+
const base = `${baseVersion.major}.${baseVersion.minor}.${baseVersion.patch}`;
117+
const result = await $`git tag --list ${`v${base}-preview.*`}`.quiet().nothrow();
118+
119+
if (result.exitCode !== 0) {
120+
return 0;
121+
}
122+
123+
const tags = result.stdout
124+
.toString()
125+
.trim()
126+
.split("\n")
127+
.filter((line) => line.length > 0);
128+
129+
return tags.reduce((latest, tag) => {
130+
const version = parseVersion(tag.replace(/^v/, ""));
131+
if (version.prerelease?.channel !== "preview" || !sameStableBase(version, baseVersion)) {
132+
return latest;
133+
}
134+
135+
return Math.max(latest, version.prerelease.number);
136+
}, 0);
137+
}
138+
139+
async function bumpVersion(currentVersion: string, args: string[]): Promise<string> {
112140
const current = parseVersion(currentVersion);
113141
const [channel = "stable", bump = "patch"] = args;
114142

@@ -123,18 +151,19 @@ function bumpVersion(currentVersion: string, args: string[]): string {
123151
}
124152

125153
if (channel === "preview") {
126-
const shouldIncrementExisting =
154+
const currentPreviewNumber =
127155
current.prerelease?.channel === "preview" &&
128156
bump === "patch" &&
129-
current.major === baseVersion.major &&
130-
current.minor === baseVersion.minor &&
131-
current.patch === baseVersion.patch;
157+
sameStableBase(current, baseVersion)
158+
? current.prerelease.number
159+
: 0;
160+
const latestPreviewNumber = await getLatestPreviewNumber(baseVersion);
132161

133162
return formatVersion({
134163
...baseVersion,
135164
prerelease: {
136165
channel: "preview",
137-
number: shouldIncrementExisting ? current.prerelease.number + 1 : 1,
166+
number: Math.max(currentPreviewNumber, latestPreviewNumber) + 1,
138167
},
139168
});
140169
}
@@ -238,7 +267,7 @@ async function release() {
238267

239268
info(`Current version: ${currentVersion}`);
240269

241-
const newVersion = bumpVersion(currentVersion, releaseArgs);
270+
const newVersion = await bumpVersion(currentVersion, releaseArgs);
242271
const parsedNewVersion = parseVersion(newVersion);
243272
info(`New version: ${newVersion}`);
244273

0 commit comments

Comments
 (0)