@pagopa/dx-cli
Version:
A CLI useful to manage DX tools.
55 lines (54 loc) • 2.02 kB
JavaScript
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;
};
}