Skip to content

Commit e01f5c4

Browse files
committed
chore(scripts): auto-determine if latest version & add confirmation
1 parent b24d9b7 commit e01f5c4

File tree

1 file changed

+45
-11
lines changed

1 file changed

+45
-11
lines changed

scripts/release/main.ts

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,31 +60,51 @@ async function getCurrentVersion(): Promise<string> {
6060
return packageJson.version;
6161
}
6262

63-
async function getLatestGitVersion(): Promise<string | null> {
63+
async function getAllGitVersions(): Promise<string[]> {
6464
try {
6565
// Fetch tags to ensure we have the latest
6666
// Use --force to overwrite local tags that conflict with remote
67-
await $`git fetch --tags --force --quiet`;
67+
try {
68+
await $`git fetch --tags --force --quiet`;
69+
} catch (fetchError) {
70+
console.warn("Warning: Could not fetch remote tags, using local tags only");
71+
}
6872

6973
// Get all version tags
70-
const result = await $`git tag -l "v*"`;
74+
const result = await $`git tag -l v*`;
7175
const tags = result.stdout.trim().split("\n").filter(Boolean);
7276

7377
if (tags.length === 0) {
74-
return null;
78+
return [];
7579
}
7680

77-
// Parse and find the latest version (excluding prereleases)
81+
// Parse and sort all versions (newest first)
7882
const versions = tags
7983
.map(tag => tag.replace(/^v/, ""))
8084
.filter(v => semver.valid(v))
8185
.sort((a, b) => semver.rcompare(a, b));
8286

83-
return versions[0] || null;
87+
return versions;
8488
} catch (error) {
85-
console.warn("Warning: Could not fetch git tags:", error);
89+
console.warn("Warning: Could not get git tags:", error);
90+
return [];
91+
}
92+
}
93+
94+
async function getLatestGitVersion(): Promise<string | null> {
95+
const versions = await getAllGitVersions();
96+
97+
if (versions.length === 0) {
8698
return null;
8799
}
100+
101+
// Find the latest version (excluding prereleases)
102+
const stableVersions = versions.filter(v => {
103+
const parsed = semver.parse(v);
104+
return parsed && parsed.prerelease.length === 0;
105+
});
106+
107+
return stableVersions[0] || null;
88108
}
89109

90110
async function shouldTagAsLatest(newVersion: string): Promise<boolean> {
@@ -442,10 +462,24 @@ async function main() {
442462
const branch = branchResult.stdout.trim();
443463
console.log(` Branch: ${branch}`);
444464

445-
// Get latest git version for context
446-
const latestGitVersion = await getLatestGitVersion();
447-
if (latestGitVersion) {
448-
console.log(` Current latest version: ${latestGitVersion}`);
465+
// Get and display recent versions
466+
const allVersions = await getAllGitVersions();
467+
468+
if (allVersions.length > 0) {
469+
// Find the latest stable version (excluding prereleases)
470+
const stableVersions = allVersions.filter(v => {
471+
const parsed = semver.parse(v);
472+
return parsed && parsed.prerelease.length === 0;
473+
});
474+
const latestStableVersion = stableVersions[0] || null;
475+
476+
console.log(`\nRecent versions:`);
477+
const recentVersions = allVersions.slice(0, 10);
478+
for (const version of recentVersions) {
479+
const isLatest = version === latestStableVersion;
480+
const marker = isLatest ? " (latest)" : "";
481+
console.log(` - ${version}${marker}`);
482+
}
449483
}
450484

451485
// Prompt for confirmation

0 commit comments

Comments
 (0)