Skip to content

Commit 6bc27fd

Browse files
committed
badges for all
1 parent ace9f5b commit 6bc27fd

File tree

3 files changed

+82
-49
lines changed

3 files changed

+82
-49
lines changed

client/src/features/sessionsV2/SessionList/SessionLauncherCard.tsx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,7 @@ export default function SessionLauncherCard({
130130

131131
const { data: containerImage, isLoading: isLoadingContainerImage } =
132132
useGetSessionsImagesQuery(
133-
environment &&
134-
environment.environment_kind === "CUSTOM" &&
135-
environment.container_image
133+
environment?.container_image != null
136134
? { imageUrl: environment.container_image }
137135
: skipToken
138136
);
@@ -215,10 +213,13 @@ export default function SessionLauncherCard({
215213
<SessionEnvironmentGitLabWarningBadge launcher={launcher} />
216214
</Col>
217215
</Row>
218-
{isCodeEnvironment && (
216+
{isCodeEnvironment ? (
219217
<Row className="g-2">
220218
<Col xs={12} xl={4}>
221-
{isCodeEnvironment && isLoading ? (
219+
{isCodeEnvironment &&
220+
(isLoading ||
221+
isLoadingContainerImage ||
222+
isLoadingResourcePools) ? (
222223
<SessionBadge
223224
className={cx("border-warning", "bg-warning-subtle")}
224225
>
@@ -232,7 +233,11 @@ export default function SessionLauncherCard({
232233
</span>
233234
</SessionBadge>
234235
) : isCodeEnvironment && lastBuild ? (
235-
<BuildStatusBadge status={lastBuild?.status} />
236+
<BuildStatusBadge
237+
buildStatus={lastBuild?.status}
238+
imageCheck={containerImage}
239+
resourcePool={resourcePool}
240+
/>
236241
) : !hasSession ? (
237242
<SessionBadge
238243
className={cx("border-dark-subtle", "bg-light")}
@@ -265,8 +270,7 @@ export default function SessionLauncherCard({
265270
/>
266271
</Col>
267272
</Row>
268-
)}
269-
{isExternalImageEnvironment && (
273+
) : (
270274
<Row>
271275
<Col>
272276
<SessionImageBadge

client/src/features/sessionsV2/SessionView/EnvironmentCard.tsx

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -155,16 +155,18 @@ function CustomEnvironmentValues({ launcher }: { launcher: SessionLauncher }) {
155155
const { environment } = launcher;
156156

157157
if (environment.environment_image_source === "image") {
158-
return <CustomImageEnvironmentValues launcher={launcher} />;
158+
return <CustomImageEnvironmentValues launcher={launcher} showImageBadge />;
159159
}
160160

161161
return <CustomBuildEnvironmentValues launcher={launcher} />;
162162
}
163163

164164
function CustomImageEnvironmentValues({
165165
launcher,
166+
showImageBadge,
166167
}: {
167168
launcher: SessionLauncher;
169+
showImageBadge?: boolean;
168170
}) {
169171
const { pathname, hash } = useLocation();
170172
const environment = launcher.environment;
@@ -199,12 +201,14 @@ function CustomImageEnvironmentValues({
199201
return (
200202
<>
201203
<div className="mb-2">
202-
<SessionImageBadge
203-
data={data}
204-
isLoading={isLoading}
205-
resourcePool={resourcePool}
206-
isLoadingResourcePools={isLoadingResourcePools}
207-
/>
204+
{showImageBadge && (
205+
<SessionImageBadge
206+
data={data}
207+
isLoading={isLoading}
208+
resourcePool={resourcePool}
209+
isLoadingResourcePools={isLoadingResourcePools}
210+
/>
211+
)}
208212
{!isLoading && data?.accessible === false && (
209213
<div className="mt-2">
210214
{!data.connection && !data.provider ? (
@@ -352,6 +356,23 @@ function CustomBuildEnvironmentValues({
352356
}
353357
);
354358

359+
const { data: imageCheck, isLoading: isLoadingContainerImage } =
360+
useGetSessionsImagesQuery(
361+
environment.container_image != null
362+
? { imageUrl: environment.container_image }
363+
: skipToken
364+
);
365+
const { data: resourcePools, isLoading: isLoadingResourcePools } =
366+
computeResourcesApi.endpoints.getResourcePools.useQueryState({});
367+
const resourcePool = useMemo(() => {
368+
if (launcher?.resource_class_id == null || resourcePools == null) {
369+
return undefined;
370+
}
371+
return resourcePools.find(({ classes }) =>
372+
classes.some(({ id }) => id === launcher.resource_class_id)
373+
);
374+
}, [launcher?.resource_class_id, resourcePools]);
375+
355376
// Invalidate launchers if the container image is not the same as the
356377
// image from the last successful build
357378
const dispatch = useAppDispatch();
@@ -384,7 +405,12 @@ function CustomBuildEnvironmentValues({
384405
<NotReadyStatusBadge />
385406
) : (
386407
<>
387-
<ReadyStatusBadge />
408+
<SessionImageBadge
409+
data={imageCheck}
410+
isLoading={isLoadingContainerImage}
411+
resourcePool={resourcePool}
412+
isLoadingResourcePools={isLoadingResourcePools}
413+
/>
388414
{lastSuccessfulBuild && (
389415
<BuildStatusDescription
390416
isOldImage={
@@ -431,7 +457,7 @@ function CustomBuildEnvironmentValues({
431457
Last build status:
432458
</label>
433459
<span>
434-
<BuildStatusBadge status={lastBuild.status} />
460+
<BuildStatusBadge buildStatus={lastBuild.status} />
435461
</span>
436462
</div>
437463
)}
@@ -521,25 +547,6 @@ function EnvironmentJSONArrayRowWithLabel({
521547
);
522548
}
523549

524-
function ReadyStatusBadge() {
525-
return (
526-
<Badge
527-
className={cx(
528-
"border",
529-
"bg-success-subtle",
530-
"border-success",
531-
"text-success-emphasis",
532-
"fs-small",
533-
"fw-normal"
534-
)}
535-
pill
536-
>
537-
<CircleFill className={cx("bi", "me-1")} />
538-
Ready
539-
</Badge>
540-
);
541-
}
542-
543550
function NotReadyStatusBadge() {
544551
return (
545552
<Badge

client/src/features/sessionsV2/components/BuildStatusComponents.tsx

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,45 +50,67 @@ import ScrollableModal from "../../../components/modal/ScrollableModal";
5050
import { TimeCaption } from "../../../components/TimeCaption";
5151
import PermissionsGuard from "../../permissionsV2/PermissionsGuard";
5252
import useProjectPermissions from "../../ProjectPageV2/utils/useProjectPermissions.hook";
53+
import type { ResourcePoolWithId } from "../api/computeResources.api";
54+
import type {
55+
Build,
56+
BuildList,
57+
CreationDate,
58+
} from "../api/sessionLaunchersV2.api";
5359
import {
5460
SessionLauncher,
5561
useGetBuildsByBuildIdLogsQuery as useGetBuildLogsQuery,
5662
useGetEnvironmentsByEnvironmentIdBuildsQuery as useGetBuildsQuery,
5763
usePatchBuildsByBuildIdMutation as usePatchBuildMutation,
5864
usePostEnvironmentsByEnvironmentIdBuildsMutation as usePostBuildMutation,
5965
} from "../api/sessionLaunchersV2.api";
60-
import {
61-
Build,
62-
BuildList,
63-
CreationDate,
64-
} from "../api/sessionLaunchersV2.generated-api";
66+
import type { ImageCheckResponse } from "../api/sessionsV2.api";
6567
import { IMAGE_BUILD_DOCS } from "../session.constants";
68+
import { isImageCompatibleWith } from "../session.utils";
6669

6770
interface BuildStatusBadgeProps {
68-
status: Build["status"];
71+
buildStatus: Build["status"];
72+
imageCheck?: ImageCheckResponse | null;
73+
resourcePool?: ResourcePoolWithId;
6974
}
7075

71-
export function BuildStatusBadge({ status }: BuildStatusBadgeProps) {
76+
export function BuildStatusBadge({
77+
buildStatus,
78+
imageCheck,
79+
resourcePool,
80+
}: BuildStatusBadgeProps) {
81+
const isCompatible = useMemo(() => {
82+
if (imageCheck == null || resourcePool == null) {
83+
return "unknown";
84+
}
85+
return isImageCompatibleWith(imageCheck, resourcePool.platform);
86+
}, [imageCheck, resourcePool]);
87+
7288
const badgeIcon =
73-
status === "in_progress" ? (
89+
buildStatus === "in_progress" ? (
7490
<Loader className="me-1" inline size={12} />
7591
) : (
7692
<CircleFill className={cx("me-1", "bi")} />
7793
);
7894

7995
const badgeText =
80-
status === "in_progress"
96+
isCompatible === false
97+
? `Image incompatible${
98+
resourcePool?.platform ? ` with ${resourcePool.platform}` : ""
99+
}`
100+
: buildStatus === "in_progress"
81101
? "Build in progress"
82-
: status === "cancelled"
102+
: buildStatus === "cancelled"
83103
? "Build cancelled"
84-
: status === "succeeded"
104+
: buildStatus === "succeeded"
85105
? "Build succeeded"
86106
: "Build failed";
87107

88108
const badgeColorClasses =
89-
status === "in_progress"
109+
isCompatible === false
110+
? ["border-danger", "bg-danger-subtle", "text-danger-emphasis"]
111+
: buildStatus === "in_progress"
90112
? ["border-warning", "bg-warning-subtle", "text-warning-emphasis"]
91-
: status === "succeeded"
113+
: buildStatus === "succeeded"
92114
? ["border-success", "bg-success-subtle", "text-success-emphasis"]
93115
: ["border-danger", "bg-danger-subtle", "text-danger-emphasis"];
94116

0 commit comments

Comments
 (0)