8000 feat: handle update build for dynamic params by jaaydenh · Pull Request #18226 · coder/coder · GitHub
[go: up one dir, main page]

Skip to content

feat: handle update build for dynamic params #18226

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 16 commits into from
Jun 5, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: pass template version id to workspace parameters page
  • Loading branch information
jaaydenh committed Jun 4, 2025
commit e7d38cfcca8ed9fcb43308664246d95f44999952
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ type UpdateBuildParametersDialogExperimentalProps = {
missedParameters: TemplateVersionParameter[];
workspaceOwnerName: string;
workspaceName: string;
templateVersionId: string | undefined;
};

export const UpdateBuildParametersDialogExperimental: FC<
Expand All @@ -27,12 +28,15 @@ export const UpdateBuildParametersDialogExperimental: FC<
onClose,
workspaceOwnerName,
workspaceName,
templateVersionId,
}) => {
const navigate = useNavigate();

const handleGoToParameters = () => {
onClose();
navigate(`/@${workspaceOwnerName}/${workspaceName}/settings/parameters`);
navigate(
`/@${workspaceOwnerName}/${workspaceName}/settings/parameters?templateVersionId=${templateVersionId}`,
);
};

return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,11 @@ export const WorkspaceMoreActions: FC<WorkspaceMoreActionsProps> = ({
}}
workspaceOwnerName={workspace.owner_name}
workspaceName={workspace.name}
templateVersionId={
changeVersionMutation.error instanceof MissingBuildParameters
? changeVersionMutation.error?.versionId
: undefined
}
/>
) : (
<UpdateBuildParametersDialog
Expand Down
3 changes: 3 additions & 0 deletions site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,8 @@ const MissingBuildParametersDialog: FC<MissingBuildParametersDialogProps> = ({

const missedParameters =
error instanceof MissingBuildParameters ? error.parameters : [];
const versionId =
error instanceof MissingBuildParameters ? error.versionId : undefined;
const isOpen = error instanceof MissingBuildParameters;

return isDynamicParametersEnabled ? (
Expand All @@ -167,6 +169,7 @@ const MissingBuildParametersDialog: FC<MissingBuildParametersDialogProps> = ({
onClose={dialogProps.onClose}
workspaceOwnerName={workspace.owner_name}
workspaceName={workspace.name}
templateVersionId={versionId}
/>
) : (
<UpdateBuildParametersDialog
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import type { FC } from "react";
import { useContext, useEffect, useMemo, useRef, useState } from "react";
import { Helmet } from "react-helmet-async";
import { useMutation, useQuery } from "react-query";
import { useNavigate } from "react-router-dom";
import { useNavigate, useSearchParams } from "react-router-dom";
import { docs } from "utils/docs";
import { pageTitle } from "utils/page";
import type { AutofillBuildParameter } from "utils/richParameters";
Expand All @@ -40,6 +40,8 @@ const WorkspaceParametersPageExperimental: FC = () => {
const workspace = useWorkspaceSettings();
const navigate = useNavigate();
const experimentalFormContext = useContext(ExperimentalFormContext);
const [searchParams] = useSearchParams();
const templateVersionId = searchParams.get("templateVersionId") ?? undefined;

// autofill the form with the workspace build parameters from the latest build
const {
Expand Down Expand Up @@ -107,10 +109,11 @@ const WorkspaceParametersPageExperimental: FC = () => {
});

useEffect(() => {
if (!workspace.latest_build.template_version_id) return;
if (!templateVersionId && !workspace.latest_build.template_version_id)
return;

const socket = API.templateVersionDynamicParameters(
workspace.latest_build.template_version_id,
templateVersionId ?? workspace.latest_build.template_version_id,
{
onMessage,
onError: (error) => {
Expand All @@ -136,12 +139,17 @@ const WorkspaceParametersPageExperimental: FC = () => {
return () => {
socket.close();
};
}, [workspace.latest_build.template_version_id, onMessage]);
}, [
templateVersionId,
workspace.latest_build.template_version_id,
onMessage,
]);

const updateParameters = useMutation({
mutationFn: (buildParameters: WorkspaceBuildParameter[]) =>
API.postWorkspaceBuild(workspace.id, {
transition: "start",
template_version_id: templateVersionId,
rich_parameter_values: buildParameters,
}),
onSuccess: () => {
Expand Down Expand Up @@ -250,6 +258,7 @@ const WorkspaceParametersPageExperimental: FC = () => {

{sortedParams.length > 0 ? (
<WorkspaceParametersPageViewExperimental
templateVersionId={templateVersionId}
workspace={workspace}
autofillParameters={autofillParameters}
canChangeVersions={canChangeVersions}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import type {
} from "api/typesGenerated";
import { Alert } from "components/Alert/Alert";
import { Button } from "components/Button/Button";
import { Input } from "components/Input/Input";
import { Label } from "components/Label/Label";
import { Link } from "components/Link/Link";
import { Spinner } from "components/Spinner/Spinner";
Expand All @@ -16,7 +15,7 @@ import {
getInitialParameterValues,
useValidationSchemaForDynamicParameters,
} from "modules/workspaces/DynamicParameter/DynamicParameter";
import { type FC, useId } from "react";
import type { FC } from "react";
import { docs } from "utils/docs";
import type { AutofillBuildParameter } from "utils/richParameters";

Expand All @@ -32,6 +31,7 @@ type WorkspaceParametersPageViewExperimentalProps = {
rich_parameter_values: WorkspaceBuildParameter[];
}) => void;
sendMessage: (formValues: Record<string, string>) => void;
templateVersionId: string | undefined;
};

export const WorkspaceParametersPageViewExperimental: FC<
Expand All @@ -46,8 +46,8 @@ export const WorkspaceParametersPageViewExperimental: FC<
onSubmit,
sendMessage,
onCancel,
templateVersionId,
}) => {
const id = useId();
const autofillByName = Object.fromEntries(
autofillParameters.map((param) => [param.name, param]),
);
Expand Down Expand Up @@ -155,16 +155,12 @@ export const WorkspaceParametersPageViewExperimental: FC<
</div>
)}

{workspace.template_active_version_id && (
<div className="flex flex-col gap-2 pb-4">
<Label className="text-sm" htmlFor={`${id}-version-id`}>
Version ID
</Label>
<Input
id={`${id}-version-id`}
value={workspace.template_active_version_id}
disabled
/>
{(templateVersionId || workspace.template_active_version_id) && (
<div className="flex flex-col gap-2">
<Label className="text-sm text-content-secondary">Version ID</Label>
<p className="m-0 text-sm font-medium">
{templateVersionId ?? workspace.template_active_version_id}
</p>
</div>
)}

Expand Down Expand Up @@ -252,10 +248,21 @@ export const WorkspaceParametersPageViewExperimental: FC<
</Button>
<Button
type="submit"
disabled={isSubmitting || disabled || !form.dirty}
disabled={
isSubmitting ||
disabled ||
diagnostics.some(
(diagnostic) => diagnostic.severity === "error",
) ||
parameters.some((parameter) =>
parameter.diagnostics.some(
(diagnostic) => diagnostic.severity === "error",
),
)
}
>
<Spinner loading={isSubmitting} />
Submit and restart
Update and restart
</Button>
</div>
</form>
Expand Down
Loading
0