Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit a2be4e5

Browse files
author
David Dooling
committed
Cater to npm semver sorting
Include name of default branch in prerelease tags. Prefix non-default branch names with `branch-` in prerelease tags. Presuming default branches start with "m", this will allow npm to consider prereleases from the default branch as "higher" than prereleases from non-default branches.
1 parent a5a4d33 commit a2be4e5

File tree

2 files changed

+61
-62
lines changed

2 files changed

+61
-62
lines changed

lib/tag.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,18 @@ export function nextPrereleaseTag(args: NextPrereleaseTagArgs): string {
3939
}
4040
const semverTags = args.tags.filter(t => semver.valid(t));
4141
const cleanBranch = cleanGitBranch(args.branch);
42+
const prereleaseBranch =
43+
args.branch === args.defaultBranch
44+
? cleanBranch
45+
: `branch-${cleanBranch}`;
4246
const nextVersion = args.nextReleaseVersion;
43-
const prefixRegExp =
44-
args.branch !== args.defaultBranch
45-
? RegExp(`^${nextVersion}-${cleanBranch}\\.(?:0|[1-9]\\d*)$`)
46-
: RegExp(`^${nextVersion}-(?:0|[1-9]\\d*)$`);
47+
const prefixRegExp = RegExp(
48+
`^${nextVersion}-${prereleaseBranch}\\.(?:0|[1-9]\\d*)$`,
49+
);
4750
const matchingTags = semverTags.filter(t => prefixRegExp.test(t));
4851
const sortedTags = matchingTags.sort((t1, t2) => semver.compare(t2, t1));
4952
if (sortedTags.length < 1) {
50-
return (
51-
`${nextVersion}-` +
52-
(args.branch !== args.defaultBranch ? `${cleanBranch}.` : "") +
53-
"0"
54-
);
53+
return `${nextVersion}-${prereleaseBranch}.0`;
5554
}
5655
return semver.inc(sortedTags[0], "prerelease");
5756
}

test/tag.test.ts

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe("tag", () => {
2626
nextReleaseVersion: "0.1.0",
2727
tags: [],
2828
});
29-
const e = "0.1.0-0";
29+
const e = "0.1.0-main.0";
3030
assert(n === e);
3131
});
3232

@@ -36,25 +36,25 @@ describe("tag", () => {
3636
defaultBranch: "main",
3737
nextReleaseVersion: "2.4.6",
3838
tags: [
39-
"0.1.0-0",
39+
"0.1.0-main.0",
4040
"0.1.0",
41-
"1.0.0-0",
42-
"1.0.0-feature.0",
41+
"1.0.0-main.0",
42+
"1.0.0-branch-feature.0",
4343
"1.0.0",
44-
"1.0.1-0",
44+
"1.0.1-main.0",
4545
"1.0.1",
46-
"2.0.0-0",
46+
"2.0.0-main.0",
4747
"2.0.0",
48-
"2.0.1-0",
49-
"2.1.0-0",
48+
"2.0.1-main.0",
49+
"2.1.0-main.0",
5050
"2.1.0",
51-
"2.3.0-0",
51+
"2.3.0-main.0",
5252
"2.4.0",
53-
"2.4.1-0",
53+
"2.4.1-main.0",
5454
"2.4.1",
5555
],
5656
});
57-
const e = "2.4.6-0";
57+
const e = "2.4.6-main.0";
5858
assert(n === e);
5959
});
6060

@@ -64,28 +64,28 @@ describe("tag", () => {
6464
defaultBranch: "main",
6565
nextReleaseVersion: "2.1.1",
6666
tags: [
67-
"0.1.0-0",
67+
"0.1.0-main.0",
6868
"0.1.0",
69-
"1.0.0-0",
70-
"1.0.0-feature.0",
69+
"1.0.0-main.0",
70+
"1.0.0-branch-feature.0",
7171
"1.0.0",
72-
"1.0.1-0",
72+
"1.0.1-main.0",
7373
"1.0.1",
74-
"2.0.0-0",
74+
"2.0.0-main.0",
7575
"2.0.0",
76-
"2.0.1-0",
77-
"2.1.0-0",
76+
"2.0.1-main.0",
77+
"2.1.0-main.0",
7878
"2.1.0",
79-
"2.1.1-0",
79+
"2.1.1-main.0",
8080
"2.1.1-1",
81-
"2.1.1-feature.0",
82-
"2.1.1-feature.1",
83-
"2.1.1-feature.2",
84-
"2.1.1-feature.3",
85-
"2.1.1-2",
81+
"2.1.1-branch-feature.0",
82+
"2.1.1-branch-feature.1",
83+
"2.1.1-branch-feature.2",
84+
"2.1.1-branch-feature.3",
85+
"2.1.1-main.2",
8686
],
8787
});
88-
const e = "2.1.1-3";
88+
const e = "2.1.1-main.3";
8989
assert(n === e);
9090
});
9191

@@ -95,28 +95,28 @@ describe("tag", () => {
9595
defaultBranch: "main",
9696
nextReleaseVersion: "2.1.1",
9797
tags: [
98-
"0.1.0-0",
98+
"0.1.0-main.0",
9999
"0.1.0",
100-
"1.0.0-0",
101-
"1.0.0-feature.0",
100+
"1.0.0-main.0",
101+
"1.0.0-branch-feature.0",
102102
"1.0.0",
103-
"1.0.1-0",
103+
"1.0.1-main.0",
104104
"1.0.1",
105-
"2.0.0-0",
105+
"2.0.0-main.0",
106106
"2.0.0",
107-
"2.0.1-0",
108-
"2.1.0-0",
107+
"2.0.1-main.0",
108+
"2.1.0-main.0",
109109
"2.1.0",
110-
"2.1.1-0",
110+
"2.1.1-main.0",
111111
"2.1.1-1",
112-
"2.1.1-feature.0",
113-
"2.1.1-feature.1",
114-
"2.1.1-feature.2",
115-
"2.1.1-feature.3",
116-
"2.1.1-2",
112+
"2.1.1-branch-feature.0",
113+
"2.1.1-branch-feature.1",
114+
"2.1.1-branch-feature.2",
115+
"2.1.1-branch-feature.3",
116+
"2.1.1-main.2",
117117
],
118118
});
119-
const e = "2.1.1-big-changes-in-stores.0";
119+
const e = "2.1.1-branch-big-changes-in-stores.0";
120120
assert(n === e);
121121
});
122122

@@ -126,28 +126,28 @@ describe("tag", () => {
126126
defaultBranch: "main",
127127
nextReleaseVersion: "2.1.1",
128128
tags: [
129-
"0.1.0-0",
129+
"0.1.0-main.0",
130130
"0.1.0",
131-
"1.0.0-0",
132-
"1.0.0-feature.0",
131+
"1.0.0-main.0",
132+
"1.0.0-branch-feature.0",
133133
"1.0.0",
134-
"1.0.1-0",
134+
"1.0.1-main.0",
135135
"1.0.1",
136-
"2.0.0-0",
136+
"2.0.0-main.0",
137137
"2.0.0",
138-
"2.0.1-0",
139-
"2.1.0-0",
138+
"2.0.1-main.0",
139+
"2.1.0-main.0",
140140
"2.1.0",
141-
"2.1.1-0",
141+
"2.1.1-main.0",
142142
"2.1.1-1",
143-
"2.1.1-feature.0",
144-
"2.1.1-feature.1",
145-
"2.1.1-feature.2",
146-
"2.1.1-feature.3",
147-
"2.1.1-2",
143+
"2.1.1-branch-feature.0",
144+
"2.1.1-branch-feature.1",
145+
"2.1.1-branch-feature.2",
146+
"2.1.1-branch-feature.3",
147+
"2.1.1-main.2",
148148
],
149149
});
150-
const e = "2.1.1-feature.4";
150+
const e = "2.1.1-branch-feature.4";
151151
assert(n === e);
152152
});
153153
});

0 commit comments

Comments
 (0)