feat: Add diff and Dockerfile support for template version page (#5339)

This commit is contained in:
Bruno Quaresma
2022-12-08 10:24:15 -05:00
committed by GitHub
parent f68a65697d
commit ce76d9d5a3
18 changed files with 606 additions and 153 deletions
@@ -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,
}
},
},
},