This commit is contained in:
@@ -114,6 +114,27 @@ function newestBuildVersion(builds: BuildJob[]) {
|
|||||||
.find((value): value is string => Boolean(value)) ?? '';
|
.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) {
|
function buildCount(release: AppRelease) {
|
||||||
const imageTags = release.imageTags as ImageTags | null | undefined;
|
const imageTags = release.imageTags as ImageTags | null | undefined;
|
||||||
const count = Object.keys(imageTags?.images ?? {}).length + Object.keys(imageTags?.artifacts ?? {}).length;
|
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 appBuilds = candidateBuilds.filter((build) => build.component.app.id === nextAppId);
|
||||||
const latestBuilds = latestCandidateBuilds(appBuilds);
|
const latestBuilds = latestCandidateBuilds(appBuilds);
|
||||||
setSelectedBuildIds(latestBuildIdsByComponent(latestBuilds));
|
setSelectedBuildIds(latestBuildIdsByComponent(latestBuilds));
|
||||||
setVersion((prev) => prev || newestBuildVersion(appBuilds));
|
setVersion(nextReleaseVersion(releases, nextAppId, appBuilds));
|
||||||
setReleaseModalOpen(true);
|
setReleaseModalOpen(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -462,7 +483,7 @@ export function ReleaseManagementPage() {
|
|||||||
selectApp(event.target.value);
|
selectApp(event.target.value);
|
||||||
const appBuilds = candidateBuilds.filter((build) => build.component.app.id === event.target.value);
|
const appBuilds = candidateBuilds.filter((build) => build.component.app.id === event.target.value);
|
||||||
setSelectedBuildIds(latestBuildIdsByComponent(appBuilds));
|
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>)}
|
{candidateGroups.map((group) => <option key={group.appId} value={group.appId}>{group.appName}</option>)}
|
||||||
</select>
|
</select>
|
||||||
|
|||||||
Reference in New Issue
Block a user