This commit is contained in:
@@ -114,6 +114,27 @@ function newestBuildVersion(builds: BuildJob[]) {
|
||||
.find((value): value is string => Boolean(value)) ?? '';
|
||||
}
|
||||
|
||||
function incrementPatchVersion(value: string) {
|
||||
const match = value.trim().match(/^(v?)(\d+)\.(\d+)\.(\d+)(.*)$/);
|
||||
if (!match) return value;
|
||||
const [, prefix, major, minor, patch, suffix] = match;
|
||||
return `${prefix}${major}.${minor}.${Number(patch) + 1}${suffix}`;
|
||||
}
|
||||
|
||||
function newestReleaseVersion(releases: AppRelease[], appId: string) {
|
||||
return releases
|
||||
.filter((release) => release.app.id === appId && release.version)
|
||||
.sort((a, b) => releaseTime(b) - releaseTime(a))
|
||||
.map((release) => release.version)
|
||||
.find((value): value is string => Boolean(value)) ?? '';
|
||||
}
|
||||
|
||||
function nextReleaseVersion(releases: AppRelease[], appId: string, builds: BuildJob[]) {
|
||||
const latestReleaseVersion = newestReleaseVersion(releases, appId);
|
||||
if (latestReleaseVersion) return incrementPatchVersion(latestReleaseVersion);
|
||||
return newestBuildVersion(builds);
|
||||
}
|
||||
|
||||
function buildCount(release: AppRelease) {
|
||||
const imageTags = release.imageTags as ImageTags | null | undefined;
|
||||
const count = Object.keys(imageTags?.images ?? {}).length + Object.keys(imageTags?.artifacts ?? {}).length;
|
||||
@@ -266,7 +287,7 @@ export function ReleaseManagementPage() {
|
||||
const appBuilds = candidateBuilds.filter((build) => build.component.app.id === nextAppId);
|
||||
const latestBuilds = latestCandidateBuilds(appBuilds);
|
||||
setSelectedBuildIds(latestBuildIdsByComponent(latestBuilds));
|
||||
setVersion((prev) => prev || newestBuildVersion(appBuilds));
|
||||
setVersion(nextReleaseVersion(releases, nextAppId, appBuilds));
|
||||
setReleaseModalOpen(true);
|
||||
};
|
||||
|
||||
@@ -462,7 +483,7 @@ export function ReleaseManagementPage() {
|
||||
selectApp(event.target.value);
|
||||
const appBuilds = candidateBuilds.filter((build) => build.component.app.id === event.target.value);
|
||||
setSelectedBuildIds(latestBuildIdsByComponent(appBuilds));
|
||||
setVersion(newestBuildVersion(appBuilds));
|
||||
setVersion(nextReleaseVersion(releases, event.target.value, appBuilds));
|
||||
}}>
|
||||
{candidateGroups.map((group) => <option key={group.appId} value={group.appId}>{group.appName}</option>)}
|
||||
</select>
|
||||
|
||||
Reference in New Issue
Block a user