Skip to content

Commit 584a2e8

Browse files
chore(site): remove create template xservice (#10112)
1 parent 54fd350 commit 584a2e8

23 files changed

+578
-777
lines changed

site/jest.config.ts

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module.exports = {
1616
transform: {
1717
react: {
1818
runtime: "automatic",
19+
importSource: "@emotion/react",
1920
},
2021
},
2122
experimental: {

site/jest.setup.ts

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ global.TextEncoder = TextEncoder;
4747
global.TextDecoder = TextDecoder as any;
4848
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Polyfill for jsdom
4949
global.Blob = Blob as any;
50+
global.scrollTo = jest.fn();
5051

5152
// Polyfill the getRandomValues that is used on utils/random.ts
5253
Object.defineProperty(global.self, "crypto", {

site/src/api/api.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,7 @@ export const getTemplateExamples = async (
11041104
return response.data;
11051105
};
11061106

1107-
export const uploadTemplateFile = async (
1107+
export const uploadFile = async (
11081108
file: File,
11091109
): Promise<TypesGen.UploadResponse> => {
11101110
const response = await axios.post("/api/v2/files", file, {

site/src/api/queries/files.ts

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import * as API from "api/api";
2+
3+
export const uploadFile = () => {
4+
return {
5+
mutationFn: API.uploadFile,
6+
};
7+
};
+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import * as API from "api/api";
2+
3+
export const templateVersionLogs = (versionId: string) => {
4+
return {
5+
queryKey: ["templateVersion", versionId, "logs"],
6+
queryFn: () => API.getTemplateVersionLogs(versionId),
7+
};
8+
};

site/src/api/queries/templates.ts

+55-18
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {
55
type CreateTemplateVersionRequest,
66
type ProvisionerJobStatus,
77
type TemplateVersion,
8+
CreateTemplateRequest,
9+
ProvisionerJob,
810
} from "api/typesGenerated";
911
import { type QueryClient, type QueryOptions } from "react-query";
1012
import { delay } from "utils/delay";
@@ -80,25 +82,10 @@ export const templateVersionVariables = (versionId: string) => {
8082

8183
export const createAndBuildTemplateVersion = (orgId: string) => {
8284
return {
83-
mutationFn: async (
84-
request: CreateTemplateVersionRequest,
85-
): Promise<string> => {
85+
mutationFn: async (request: CreateTemplateVersionRequest) => {
8686
const newVersion = await API.createTemplateVersion(orgId, request);
87-
88-
let data: TemplateVersion;
89-
let jobStatus: ProvisionerJobStatus;
90-
do {
91-
await delay(1000);
92-
data = await API.getTemplateVersion(newVersion.id);
93-
jobStatus = data.job.status;
94-
95-
if (jobStatus === "succeeded") {
96-
return newVersion.id;
97-
}
98-
} while (jobStatus === "pending" || jobStatus === "running");
99-
100-
// No longer pending/running, but didn't succeed
101-
throw data.job.error;
87+
await waitBuildToBeFinished(newVersion);
88+
return newVersion;
10289
},
10390
};
10491
};
@@ -133,3 +120,53 @@ export const templateVersionExternalAuth = (versionId: string) => {
133120
queryFn: () => API.getTemplateVersionExternalAuth(versionId),
134121
};
135122
};
123+
124+
export const createTemplate = () => {
125+
return {
126+
mutationFn: createTemplateFn,
127+
};
128+
};
129+
130+
const createTemplateFn = async (options: {
131+
organizationId: string;
132+
version: CreateTemplateVersionRequest;
133+
template: Omit<CreateTemplateRequest, "template_version_id">;
134+
}) => {
135+
const version = await API.createTemplateVersion(
136+
options.organizationId,
137+
options.version,
138+
);
139+
await waitBuildToBeFinished(version);
140+
return API.createTemplate(options.organizationId, {
141+
...options.template,
142+
template_version_id: version.id,
143+
});
144+
};
145+
146+
const waitBuildToBeFinished = async (version: TemplateVersion) => {
147+
let data: TemplateVersion;
148+
let jobStatus: ProvisionerJobStatus;
149+
do {
150+
await delay(1000);
151+
data = await API.getTemplateVersion(version.id);
152+
jobStatus = data.job.status;
153+
154+
if (jobStatus === "succeeded") {
155+
return version.id;
156+
}
157+
} while (jobStatus === "pending" || jobStatus === "running");
158+
159+
// No longer pending/running, but didn't succeed
160+
throw new JobError(data.job, version);
161+
};
162+
163+
export class JobError extends Error {
164+
public job: ProvisionerJob;
165+
public version: TemplateVersion;
166+
167+
constructor(job: ProvisionerJob, version: TemplateVersion) {
168+
super(job.error);
169+
this.job = job;
170+
this.version = version;
171+
}
172+
}

site/src/pages/CreateTemplatePage/CreateTemplateForm.stories.tsx

+15-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
MockTemplate,
23
MockTemplateExample,
34
MockTemplateVersionVariable1,
45
MockTemplateVersionVariable2,
@@ -21,16 +22,26 @@ const meta: Meta<typeof CreateTemplateForm> = {
2122
export default meta;
2223
type Story = StoryObj<typeof CreateTemplateForm>;
2324

24-
export const Initial: Story = {};
25+
export const Upload: Story = {
26+
args: {
27+
upload: {
28+
isUploading: false,
29+
onRemove: () => {},
30+
onUpload: () => {},
31+
file: undefined,
32+
},
33+
},
34+
};
2535

26-
export const WithStarterTemplate: Story = {
36+
export const StarterTemplate: Story = {
2737
args: {
2838
starterTemplate: MockTemplateExample,
2939
},
3040
};
3141

32-
export const WithVariables: Story = {
42+
export const DuplicateTemplateWithVariables: Story = {
3343
args: {
44+
copiedTemplate: MockTemplate,
3445
variables: [
3546
MockTemplateVersionVariable1,
3647
MockTemplateVersionVariable2,
@@ -43,6 +54,7 @@ export const WithVariables: Story = {
4354

4455
export const WithJobError: Story = {
4556
args: {
57+
copiedTemplate: MockTemplate,
4658
jobError:
4759
"template import provision for start: recv import provision: plan terraform: terraform plan: exit status 1",
4860
logs: [

0 commit comments

Comments
 (0)