UNPKG

@pagopa/dx-cli

Version:

A CLI useful to manage DX tools.

55 lines (54 loc) 2.02 kB
import { getLogger } from "@logtape/logtape"; import * as path from "node:path"; import { formatTerraformCode } from "../../../terraform/fmt.js"; import { payloadSchema } from "./prompts.js"; const addModule = (env, templatesPath) => { const cloudAccountsByCsp = Object.groupBy(env.cloudAccounts, (account) => account.csp); return (name, terraformBackendKey) => [ { base: templatesPath, data: { cloudAccountsByCsp }, destination: "infra", force: true, templateFiles: path.join(templatesPath, name), transform: formatTerraformCode, type: "addMany", verbose: true, }, { base: path.join(templatesPath, "shared"), data: { cloudAccountsByCsp, terraformBackendKey }, destination: `infra/${name}/{{env.name}}`, force: true, templateFiles: path.join(templatesPath, "shared"), transform: formatTerraformCode, type: "addMany", verbose: true, }, ]; }; export default function getActions(templatesPath) { return (payload) => { const logger = getLogger(["gen", "env"]); logger.debug("payload {payload}", { payload }); const { env, github, init } = payloadSchema.parse(payload); const addEnvironmentModule = addModule(env, templatesPath); const actions = [ { type: "getTerraformBackend", }, ...addEnvironmentModule("bootstrapper", `${github.repo}.bootstrapper.${env.name}.tfstate`), ]; if (init) { actions.unshift({ type: "initCloudAccounts", }, { type: init.terraformBackend ? "provisionTerraformBackend" : "getTerraformBackend", }); actions.push(...addEnvironmentModule("core", `${env.prefix}.core.${env.name}.tfstate`)); } return actions; }; }