Skip to content

Commit 1d88c5c

Browse files
committed
feat: add frontend warning when autostart disabled due to automatic updates
1 parent e23873f commit 1d88c5c

File tree

6 files changed

+63
-2
lines changed

6 files changed

+63
-2
lines changed

site/src/api/api.ts

+7
Original file line numberDiff line numberDiff line change
@@ -1287,6 +1287,13 @@ export const updateWorkspace = async (
12871287
});
12881288
};
12891289

1290+
export const getWorkspaceResolveAutostart = async (
1291+
workspaceId: string,
1292+
): Promise<TypesGen.ResolveAutostartResponse> => {
1293+
const response = await axios.get(`/api/v2/workspaces/${workspaceId}/resolve`);
1294+
return response.data;
1295+
};
1296+
12901297
const getMissingParameters = (
12911298
oldBuildParameters: TypesGen.WorkspaceBuildParameter[],
12921299
newBuildParameters: TypesGen.WorkspaceBuildParameter[],

site/src/api/queries/workspaceQuota.ts

+12
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,15 @@ export const workspaceQuota = (username: string) => {
1111
queryFn: () => API.getWorkspaceQuota(username),
1212
};
1313
};
14+
15+
const getWorkspaceResolveAutostartQueryKey = (workspaceId: string) => [
16+
workspaceId,
17+
"workspaceResolveAutostart",
18+
];
19+
20+
export const workspaceResolveAutostart = (workspaceId: string) => {
21+
return {
22+
queryKey: getWorkspaceResolveAutostartQueryKey(workspaceId),
23+
queryFn: () => API.getWorkspaceResolveAutostart(workspaceId),
24+
};
25+
};

site/src/pages/WorkspacePage/Workspace.stories.tsx

+8
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,14 @@ export const Outdated: Story = {
212212
},
213213
};
214214

215+
export const CantAutostart: Story = {
216+
args: {
217+
...Running.args,
218+
canAutostart: false,
219+
workspace: Mocks.MockOutdatedRunningWorkspaceRequireActiveVersion,
220+
},
221+
};
222+
215223
export const GetBuildsError: Story = {
216224
args: {
217225
...Running.args,

site/src/pages/WorkspacePage/Workspace.tsx

+22-1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export interface WorkspaceProps {
7373
onLoadMoreBuilds: () => void;
7474
isLoadingMoreBuilds: boolean;
7575
hasMoreBuilds: boolean;
76+
canAutostart: boolean;
7677
}
7778

7879
/**
@@ -111,6 +112,7 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
111112
onLoadMoreBuilds,
112113
isLoadingMoreBuilds,
113114
hasMoreBuilds,
115+
canAutostart,
114116
}) => {
115117
const navigate = useNavigate();
116118
const serverVersion = buildInfo?.version || "";
@@ -168,6 +170,14 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
168170
clearTimeout(showTimer);
169171
};
170172
}, [workspace, now, showAlertPendingInQueue]);
173+
174+
const updateRequired =
175+
(workspace.template_require_active_version ||
176+
workspace.automatic_updates === "always") &&
177+
workspace.outdated;
178+
const autoStartFailing = workspace.autostart_schedule && !canAutostart;
179+
const requiresManualUpdate = updateRequired && autoStartFailing;
180+
171181
return (
172182
<>
173183
<FullWidthPageHeader>
@@ -220,12 +230,23 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
220230

221231
<Margins css={styles.content}>
222232
<Stack direction="column" css={styles.firstColumnSpacer} spacing={4}>
223-
{workspace.outdated && (
233+
{requiresManualUpdate && workspace.outdated && (
224234
<Alert severity="info">
225235
<AlertTitle>An update is available for your workspace</AlertTitle>
226236
{updateMessage && <AlertDetail>{updateMessage}</AlertDetail>}
227237
</Alert>
228238
)}
239+
{requiresManualUpdate && (
240+
<Alert severity="warning">
241+
<AlertTitle>
242+
Autostart has been disabled for your workspace.
243+
</AlertTitle>
244+
<AlertDetail>
245+
Autostart is unable to automatically update your workspace.
246+
Manually update your workspace to reenable Autostart.
247+
</AlertDetail>
248+
</Alert>
249+
)}
229250
{buildError}
230251
{cancellationError}
231252
{workspace.latest_build.status === "running" &&

site/src/pages/WorkspacePage/WorkspacePage.tsx

+11-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import { ErrorAlert } from "components/Alert/ErrorAlert";
99
import { useOrganizationId } from "hooks";
1010
import { isAxiosError } from "axios";
1111
import { Margins } from "components/Margins/Margins";
12-
import { workspaceQuota } from "api/queries/workspaceQuota";
12+
import {
13+
workspaceQuota,
14+
workspaceResolveAutostart,
15+
} from "api/queries/workspaceQuota";
1316
import { useInfiniteQuery, useQuery } from "react-query";
1417
import { infiniteWorkspaceBuilds } from "api/queries/workspaceBuilds";
1518

@@ -41,6 +44,12 @@ export const WorkspacePage: FC = () => {
4144
enabled: Boolean(workspace),
4245
});
4346

47+
const canAutostartResponse = useQuery(
48+
workspaceResolveAutostart(workspace?.id ?? ""),
49+
);
50+
51+
const canAutostart = !canAutostartResponse.data?.parameter_mismatch ?? false;
52+
4453
if (pageError) {
4554
return (
4655
<Margins>
@@ -70,6 +79,7 @@ export const WorkspacePage: FC = () => {
7079
await buildsQuery.fetchNextPage();
7180
}}
7281
hasMoreBuilds={Boolean(buildsQuery.hasNextPage)}
82+
canAutostart={canAutostart}
7383
/>
7484
</RequirePermission>
7585
);

site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ interface WorkspaceReadyPageProps {
4646
onLoadMoreBuilds: () => void;
4747
isLoadingMoreBuilds: boolean;
4848
hasMoreBuilds: boolean;
49+
canAutostart: boolean;
4950
}
5051

5152
export const WorkspaceReadyPage = ({
@@ -57,6 +58,7 @@ export const WorkspaceReadyPage = ({
5758
onLoadMoreBuilds,
5859
isLoadingMoreBuilds,
5960
hasMoreBuilds,
61+
canAutostart,
6062
}: WorkspaceReadyPageProps): JSX.Element => {
6163
const { buildInfo } = useDashboard();
6264
const featureVisibility = useFeatureVisibility();
@@ -213,6 +215,7 @@ export const WorkspaceReadyPage = ({
213215
<WorkspaceBuildLogsSection logs={buildLogs} />
214216
)
215217
}
218+
canAutostart={canAutostart}
216219
/>
217220
<DeleteDialog
218221
entity="workspace"

0 commit comments

Comments
 (0)