Skip to content

Commit aaa4441

Browse files
authored
fix(version-tools): Detect bump types between RC builds and internal builds correctly (#19152)
When comparing RC and internal builds, RC builds should be considered major bumps compared to internal builds. There may be further fixes needed, but this enables `flub release report` to work on the RC1 version.
1 parent 490186e commit aaa4441

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

build-tools/packages/version-tools/src/semver.ts

+18-2
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,32 @@ export function detectBumpType(
9999

100100
const v1IsInternal = isInternalVersionScheme(v1, true, true);
101101
const v2IsInternal = isInternalVersionScheme(v2, true, true);
102+
let v1PrereleaseId: string = "";
103+
let v2PrereleaseId: string = "";
102104

103105
if (v1IsInternal) {
104-
const [, internalVer] = fromInternalScheme(v1, true);
106+
const [, internalVer, prereleaseId] = fromInternalScheme(v1, true);
105107
v1Parsed = internalVer;
108+
v1PrereleaseId = prereleaseId;
106109
}
107110

108111
// Only convert if the versions are the same scheme.
109112
if (v2IsInternal && v1IsInternal) {
110-
const [, internalVer] = fromInternalScheme(v2, true);
113+
const [, internalVer, prereleaseId] = fromInternalScheme(v2, true);
111114
v2Parsed = internalVer;
115+
v2PrereleaseId = prereleaseId;
116+
}
117+
118+
if (v1PrereleaseId === "internal" && v2PrereleaseId === "rc") {
119+
// This is a special case for RC and internal builds. RC builds are always a
120+
// major bump compared to an internal build.
121+
return "major";
122+
}
123+
124+
if (v1PrereleaseId !== v2PrereleaseId) {
125+
throw new Error(
126+
`v1 prerelease ID: ${v1PrereleaseId} cannot be compared to v2 prerelease ID: ${v2PrereleaseId}`,
127+
);
112128
}
113129

114130
if (semver.compareBuild(v1Parsed, v2Parsed) >= 0) {

build-tools/packages/version-tools/src/test/semver.test.ts

+8
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,14 @@ describe("semver", () => {
115115
it("v1 is semver, v2 is internal but smaller than v1", () => {
116116
assert.throws(() => detectBumpType("2.1.0", "2.0.0-internal.3.0.0"));
117117
});
118+
119+
it("v1 is internal, v2 is rc", () => {
120+
assert.equal(detectBumpType("2.0.0-internal.8.0.1", "2.0.0-rc.1.0.0"), "major");
121+
});
122+
123+
it("v1 is rc, v2 is rc", () => {
124+
assert.equal(detectBumpType("2.0.0-rc.1.0.0", "2.0.0-rc.1.0.1"), "patch");
125+
});
118126
});
119127

120128
describe("internal version scheme ranges", () => {

0 commit comments

Comments
 (0)