mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: Add diff and Dockerfile support for template version page (#5339)
This commit is contained in:
@@ -1,4 +1,8 @@
|
||||
import { getTemplateVersionByName } from "api/api"
|
||||
import {
|
||||
getPreviousTemplateVersionByName,
|
||||
GetPreviousTemplateVersionByNameResponse,
|
||||
getTemplateVersionByName,
|
||||
} from "api/api"
|
||||
import { TemplateVersion } from "api/typesGenerated"
|
||||
import {
|
||||
getTemplateVersionFiles,
|
||||
@@ -9,9 +13,12 @@ import { assign, createMachine } from "xstate"
|
||||
export interface TemplateVersionMachineContext {
|
||||
orgId: string
|
||||
versionName: string
|
||||
version?: TemplateVersion
|
||||
files?: TemplateVersionFiles
|
||||
currentVersion?: TemplateVersion
|
||||
currentFiles?: TemplateVersionFiles
|
||||
error?: Error | unknown
|
||||
// Get file diffs
|
||||
previousVersion?: TemplateVersion
|
||||
previousFiles?: TemplateVersionFiles
|
||||
}
|
||||
|
||||
export const templateVersionMachine = createMachine(
|
||||
@@ -21,23 +28,29 @@ export const templateVersionMachine = createMachine(
|
||||
schema: {
|
||||
context: {} as TemplateVersionMachineContext,
|
||||
services: {} as {
|
||||
loadVersion: {
|
||||
data: TemplateVersion
|
||||
loadVersions: {
|
||||
data: {
|
||||
currentVersion: GetPreviousTemplateVersionByNameResponse
|
||||
previousVersion: GetPreviousTemplateVersionByNameResponse
|
||||
}
|
||||
}
|
||||
loadFiles: {
|
||||
data: TemplateVersionFiles
|
||||
data: {
|
||||
currentFiles: TemplateVersionFiles
|
||||
previousFiles: TemplateVersionFiles
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
tsTypes: {} as import("./templateVersionXService.typegen").Typegen0,
|
||||
initial: "loadingVersion",
|
||||
initial: "loadingVersions",
|
||||
states: {
|
||||
loadingVersion: {
|
||||
loadingVersions: {
|
||||
invoke: {
|
||||
src: "loadVersion",
|
||||
src: "loadVersions",
|
||||
onDone: {
|
||||
target: "loadingFiles",
|
||||
actions: ["assignVersion"],
|
||||
actions: ["assignVersions"],
|
||||
},
|
||||
onError: {
|
||||
target: "done.error",
|
||||
@@ -71,21 +84,58 @@ export const templateVersionMachine = createMachine(
|
||||
assignError: assign({
|
||||
error: (_, { data }) => data,
|
||||
}),
|
||||
assignVersion: assign({
|
||||
version: (_, { data }) => data,
|
||||
assignVersions: assign({
|
||||
currentVersion: (_, { data }) => data.currentVersion,
|
||||
previousVersion: (_, { data }) => data.previousVersion,
|
||||
}),
|
||||
assignFiles: assign({
|
||||
files: (_, { data }) => data,
|
||||
currentFiles: (_, { data }) => data.currentFiles,
|
||||
previousFiles: (_, { data }) => data.previousFiles,
|
||||
}),
|
||||
},
|
||||
services: {
|
||||
loadVersion: ({ orgId, versionName }) =>
|
||||
getTemplateVersionByName(orgId, versionName),
|
||||
loadFiles: async ({ version }) => {
|
||||
if (!version) {
|
||||
loadVersions: async ({ orgId, versionName }) => {
|
||||
const [currentVersion, previousVersion] = await Promise.all([
|
||||
getTemplateVersionByName(orgId, versionName),
|
||||
getPreviousTemplateVersionByName(orgId, versionName),
|
||||
])
|
||||
|
||||
return {
|
||||
currentVersion,
|
||||
previousVersion,
|
||||
}
|
||||
},
|
||||
loadFiles: async ({ currentVersion, previousVersion }) => {
|
||||
if (!currentVersion) {
|
||||
throw new Error("Version is not defined")
|
||||
}
|
||||
return getTemplateVersionFiles(version, ["tf", "md"])
|
||||
const loadFilesPromises: ReturnType<typeof getTemplateVersionFiles>[] =
|
||||
[]
|
||||
const allowedExtensions = ["tf", "md"]
|
||||
const allowedFiles = ["Dockerfile"]
|
||||
loadFilesPromises.push(
|
||||
getTemplateVersionFiles(
|
||||
currentVersion,
|
||||
allowedExtensions,
|
||||
allowedFiles,
|
||||
),
|
||||
)
|
||||
if (previousVersion) {
|
||||
loadFilesPromises.push(
|
||||
getTemplateVersionFiles(
|
||||
previousVersion,
|
||||
allowedExtensions,
|
||||
allowedFiles,
|
||||
),
|
||||
)
|
||||
}
|
||||
const [currentFiles, previousFiles] = await Promise.all(
|
||||
loadFilesPromises,
|
||||
)
|
||||
return {
|
||||
currentFiles,
|
||||
previousFiles,
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user