Compare commits
95 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d10cccd1ae | |||
| b7a0afe497 | |||
| 5a814716b7 | |||
| 37e0ac34c6 | |||
| 23e3d6e480 | |||
| 0d216e2f03 | |||
| 3a46232d4f | |||
| d37283093a | |||
| d897cba32c | |||
| b41941d425 | |||
| d87c92ff71 | |||
| ddf3aa9784 | |||
| e755f245f3 | |||
| 917b9b6071 | |||
| 35fe3c94b1 | |||
| 813fef4318 | |||
| af5fd60937 | |||
| f895fa8edc | |||
| 01c82ab17c | |||
| 994520b754 | |||
| 353bf8ea73 | |||
| a0cc8b9772 | |||
| c109f344d2 | |||
| 32412d922a | |||
| 4afc3fc05d | |||
| bf39f82698 | |||
| 384c66687e | |||
| a2952a44a7 | |||
| dc683fce42 | |||
| 2a540a48b0 | |||
| cad561dfd0 | |||
| dd2fc93a59 | |||
| e1a5fd54db | |||
| 6c14203e8f | |||
| be3f36f6d9 | |||
| f510b1957e | |||
| 5bb42621d0 | |||
| e3ae6e3f43 | |||
| 556f5866a7 | |||
| c7a6693ce4 | |||
| 15d993555f | |||
| 39b55ad479 | |||
| 1b49256af6 | |||
| 81fc8f842a | |||
| 44c6c08a02 | |||
| 38a13f29fd | |||
| 840fa0a604 | |||
| c594c1cb85 | |||
| e4b968e5dd | |||
| 48b81dd5cf | |||
| 3b471245c7 | |||
| 5ebab95a8b | |||
| 8acbb760c8 | |||
| 8d37cf86a2 | |||
| 310daaa424 | |||
| d08a1a1a79 | |||
| c4c2a845ea | |||
| e1d9d803d5 | |||
| 79e2e8443d | |||
| 86e4330066 | |||
| 5ec75d68ab | |||
| 5bae18678c | |||
| 641166ba27 | |||
| e6bbaf4971 | |||
| 039a2ca285 | |||
| c345dade10 | |||
| 50e9b1d5ee | |||
| e08ae4639b | |||
| 3bb54af459 | |||
| 99f362fda1 | |||
| 622fe6e4b3 | |||
| bbda7887ee | |||
| e2bb9075bd | |||
| f6284aef79 | |||
| a9c7a3654b | |||
| 8c7c26e9c0 | |||
| 070426620e | |||
| 7e56b93f01 | |||
| 369de72e98 | |||
| 052b87e4ff | |||
| 20d5ccef00 | |||
| b2cfd84f10 | |||
| 6da6e2a980 | |||
| 1118ff5663 | |||
| d529aa6f19 | |||
| e55d2f536a | |||
| f6d9c8d0bb | |||
| b6d1ba743b | |||
| d5516c6cf8 | |||
| 92c0cf414b | |||
| 718ce8d09f | |||
| a9a9024830 | |||
| f7dfce5918 | |||
| c6d3ff8f5c | |||
| ded18b44e5 |
@@ -36,13 +36,13 @@ type ImageTags = {
|
|||||||
artifacts?: Record<string, string>;
|
artifacts?: Record<string, string>;
|
||||||
};
|
};
|
||||||
|
|
||||||
function releaseArtifacts(release?: AppRelease | null, appName?: string) {
|
function releaseArtifacts(release?: AppRelease | null) {
|
||||||
const imageTags = release?.imageTags as ImageTags | null | undefined;
|
const imageTags = release?.imageTags as ImageTags | null | undefined;
|
||||||
const entries = Object.entries(imageTags?.images ?? {}).filter(([, image]) => (
|
const entries = Object.entries(imageTags?.images ?? {}).filter(([, image]) => (
|
||||||
!/^(postgres|mysql|mariadb|mongo)(:|@)/i.test(image.trim())
|
!/^(postgres|mysql|mariadb|mongo)(:|@)/i.test(image.trim())
|
||||||
));
|
));
|
||||||
if (entries.length) return entries;
|
if (entries.length) return entries;
|
||||||
if (release?.artifact) return [[release.app?.name ?? appName ?? 'artifact', release.artifact]];
|
if (release?.artifact) return [[release.app.name, release.artifact]];
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,6 +51,15 @@ function firstArtifact(release: AppRelease) {
|
|||||||
return artifacts[0]?.[1] ?? release.artifact ?? '-';
|
return artifacts[0]?.[1] ?? release.artifact ?? '-';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hasDeployableImage(release: AppRelease) {
|
||||||
|
const imageTags = release.imageTags as ImageTags | null | undefined;
|
||||||
|
return Object.values(imageTags?.images ?? {}).some((image) => (
|
||||||
|
typeof image === 'string'
|
||||||
|
&& image.trim()
|
||||||
|
&& !/^(postgres|mysql|mariadb|mongo)(:|@)/i.test(image.trim())
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
function deploymentTime(deployment: DeploymentJob) {
|
function deploymentTime(deployment: DeploymentJob) {
|
||||||
const value = new Date(deployment.createdAt || deployment.startedAt || deployment.finishedAt || 0).getTime();
|
const value = new Date(deployment.createdAt || deployment.startedAt || deployment.finishedAt || 0).getTime();
|
||||||
return Number.isNaN(value) ? 0 : value;
|
return Number.isNaN(value) ? 0 : value;
|
||||||
@@ -107,7 +116,9 @@ export function DeploymentManagementPage() {
|
|||||||
[deployedReleaseIdValues]
|
[deployedReleaseIdValues]
|
||||||
);
|
);
|
||||||
const deployableReleases = useMemo(
|
const deployableReleases = useMemo(
|
||||||
() => filteredReleases.filter((release) => !deployedReleaseIds.has(release.id)),
|
() => filteredReleases.filter((release) => (
|
||||||
|
!deployedReleaseIds.has(release.id) && hasDeployableImage(release)
|
||||||
|
)),
|
||||||
[filteredReleases, deployedReleaseIds]
|
[filteredReleases, deployedReleaseIds]
|
||||||
);
|
);
|
||||||
const filteredDeployments = useMemo(
|
const filteredDeployments = useMemo(
|
||||||
@@ -263,7 +274,7 @@ export function DeploymentManagementPage() {
|
|||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
{pagedDeployments.map((deployment, index) => {
|
{pagedDeployments.map((deployment, index) => {
|
||||||
const artifacts = releaseArtifacts(deployment.release, deployment.app?.name);
|
const artifacts = releaseArtifacts(deployment.release);
|
||||||
return (
|
return (
|
||||||
<div key={deployment.id} className="rounded-md border border-border bg-background/70 p-4">
|
<div key={deployment.id} className="rounded-md border border-border bg-background/70 p-4">
|
||||||
<div className="flex items-start justify-between gap-4">
|
<div className="flex items-start justify-between gap-4">
|
||||||
@@ -335,7 +346,7 @@ export function DeploymentManagementPage() {
|
|||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<Card className="min-w-0 overflow-hidden">
|
<Card className="min-w-0 overflow-hidden">
|
||||||
<CardHeader title="배포 가능 릴리즈" description="아직 성공 배포되지 않은 릴리즈만 표시합니다." />
|
<CardHeader title="배포 가능 릴리즈" description="컨테이너 이미지가 있고 아직 성공 배포되지 않은 릴리즈만 표시합니다." />
|
||||||
<div className="space-y-3 p-4">
|
<div className="space-y-3 p-4">
|
||||||
{deployableCards.length === 0 ? (
|
{deployableCards.length === 0 ? (
|
||||||
<div className="rounded-md border border-border px-3 py-4 text-center text-sm text-muted-foreground">
|
<div className="rounded-md border border-border px-3 py-4 text-center text-sm text-muted-foreground">
|
||||||
|
|||||||
Reference in New Issue
Block a user