Skip to content

Commit 86b0cb7

Browse files
committed
add update policy to workspace stats
1 parent 262050a commit 86b0cb7

File tree

6 files changed

+48
-8
lines changed

6 files changed

+48
-8
lines changed

site/src/components/Dashboard/DashboardProvider.tsx

+8
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,11 @@ export const useIsWorkspaceActionsEnabled = (): boolean => {
122122
const allowWorkspaceActions = experiments.includes("workspace_actions");
123123
return allowWorkspaceActions && allowAdvancedScheduling;
124124
};
125+
126+
export const useTemplatePoliciesEnabled = (): boolean => {
127+
const { entitlements, experiments } = useDashboard();
128+
return (
129+
entitlements.features.access_control.enabled &&
130+
experiments.includes("template_update_policies")
131+
);
132+
};

site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.tsx

+2-5
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,15 @@ import { useTemplateSettings } from "../TemplateSettingsLayout";
1010
import { TemplateSettingsPageView } from "./TemplateSettingsPageView";
1111
import { templateByNameKey } from "api/queries/templates";
1212
import { useOrganizationId } from "hooks";
13-
import { useDashboard } from "components/Dashboard/DashboardProvider";
13+
import { useTemplatePoliciesEnabled } from "components/Dashboard/DashboardProvider";
1414

1515
export const TemplateSettingsPage: FC = () => {
1616
const { template: templateName } = useParams() as { template: string };
1717
const navigate = useNavigate();
1818
const orgId = useOrganizationId();
1919
const { template } = useTemplateSettings();
2020
const queryClient = useQueryClient();
21-
const { entitlements, experiments } = useDashboard();
22-
const accessControlEnabled =
23-
entitlements.features["advanced_template_scheduling"].enabled &&
24-
experiments.includes("template_update_policies");
21+
const accessControlEnabled = useTemplatePoliciesEnabled();
2522

2623
const {
2724
mutate: updateTemplate,

site/src/pages/WorkspacePage/Workspace.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ export const Workspace: FC<React.PropsWithChildren<WorkspaceProps>> = ({
191191
quotaBudget={quotaBudget}
192192
handleUpdate={handleUpdate}
193193
canUpdateWorkspace={canUpdateWorkspace}
194+
canChangeVersions={canChangeVersions}
194195
maxDeadlineDecrease={scheduleProps.maxDeadlineDecrease}
195196
maxDeadlineIncrease={scheduleProps.maxDeadlineIncrease}
196197
onDeadlineMinus={scheduleProps.onDeadlineMinus}

site/src/pages/WorkspacePage/WorkspaceActions/constants.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ export const actionsByWorkspaceStatus = (
4343
};
4444
}
4545
if (
46-
workspace.template_require_active_version &&
4746
workspace.outdated &&
48-
!canChangeVersions
47+
((workspace.template_require_active_version && !canChangeVersions) ||
48+
workspace.automatic_updates === "always")
4949
) {
5050
if (status === "running") {
5151
return {

site/src/pages/WorkspacePage/WorkspaceStats.tsx

+35
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ import {
2626
PopoverTrigger,
2727
usePopover,
2828
} from "components/Popover/Popover";
29+
import { useTemplatePoliciesEnabled } from "components/Dashboard/DashboardProvider";
30+
import {
31+
HelpTooltip,
32+
HelpTooltipText,
33+
} from "components/HelpTooltip/HelpTooltip";
34+
import { Stack } from "components/Stack/Stack";
2935

3036
const Language = {
3137
workspaceDetails: "Workspace Details",
@@ -37,13 +43,15 @@ const Language = {
3743
upToDate: "Up to date",
3844
byLabel: "Last built by",
3945
costLabel: "Daily cost",
46+
updatePolicy: "Update policy",
4047
};
4148

4249
export interface WorkspaceStatsProps {
4350
workspace: Workspace;
4451
maxDeadlineIncrease: number;
4552
maxDeadlineDecrease: number;
4653
canUpdateWorkspace: boolean;
54+
canChangeVersions: boolean;
4755
quotaBudget?: number;
4856
onDeadlinePlus: (hours: number) => void;
4957
onDeadlineMinus: (hours: number) => void;
@@ -56,6 +64,7 @@ export const WorkspaceStats: FC<WorkspaceStatsProps> = ({
5664
maxDeadlineDecrease,
5765
maxDeadlineIncrease,
5866
canUpdateWorkspace,
67+
canChangeVersions,
5968
handleUpdate,
6069
onDeadlineMinus,
6170
onDeadlinePlus,
@@ -67,6 +76,13 @@ export const WorkspaceStats: FC<WorkspaceStatsProps> = ({
6776
const styles = useStyles();
6877
const deadlinePlusEnabled = maxDeadlineIncrease >= 1;
6978
const deadlineMinusEnabled = maxDeadlineDecrease >= 1;
79+
const templatePoliciesEnabled = useTemplatePoliciesEnabled();
80+
const workspaceUpdatePolicy = (): string => {
81+
if (workspace.template_require_active_version && !canChangeVersions) {
82+
return "Always";
83+
}
84+
return upperFirst(workspace.automatic_updates);
85+
};
7086

7187
return (
7288
<>
@@ -198,6 +214,25 @@ export const WorkspaceStats: FC<WorkspaceStatsProps> = ({
198214
}`}
199215
/>
200216
)}
217+
{templatePoliciesEnabled && (
218+
<Stack direction="row" spacing={0.5}>
219+
<StatsItem
220+
className={styles.statsItem}
221+
label={Language.updatePolicy}
222+
value={workspaceUpdatePolicy()}
223+
/>
224+
{workspace.automatic_updates === "never" &&
225+
workspace.template_require_active_version &&
226+
!canChangeVersions && (
227+
<HelpTooltip>
228+
<HelpTooltipText>
229+
Your workspace has not opted in to automatic updates but
230+
your template requires updating to the active version.
231+
</HelpTooltipText>
232+
</HelpTooltip>
233+
)}
234+
</Stack>
235+
)}
201236
</Stats>
202237
</>
203238
);

site/src/pages/WorkspaceSettingsPage/WorkspaceSettingsPage.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ const WorkspaceSettingsPage = () => {
2020

2121
const mutation = useMutation({
2222
mutationFn: async (formValues: WorkspaceSettingsFormValues) => {
23-
console.log("in here", formValues.automatic_updates);
2423
await patchWorkspace(workspace.id, { name: formValues.name });
2524
await updateWorkspaceAutomaticUpdates(
2625
workspace.id,

0 commit comments

Comments
 (0)