UNPKG

@storm-software/pulumi-tools

Version:

Tools for managing Pulumi infrastructure within a Nx workspace.

134 lines (131 loc) 3.53 kB
import { getCloudTemplateName } from "./chunk-5TB4HFDP.mjs"; import { initGenerator, run, withRunGenerator } from "./chunk-TQRNFMTY.mjs"; // src/generators/init/generator.ts import { addDependenciesToPackageJson, addProjectConfiguration, formatFiles, readJsonFile, runTasksInSerial } from "@nx/devkit"; import { readFileSync, unlinkSync } from "node:fs"; import { join } from "node:path"; async function initGeneratorFn(tree, options, config) { const task = initGenerator(tree, options); addProjectConfiguration(tree, options.name || "deployment", { root: options.directory || "./deployment", projectType: "application", sourceRoot: options.directory || "./deployment", targets: { up: { executor: "@nx-extend/pulumi:up", options: {} }, preview: { executor: "@nx-extend/pulumi:preview", options: {} }, refresh: { executor: "@nx-extend/pulumi:refresh", options: {} }, import: { executor: "@nx-extend/pulumi:import", options: {} } }, tags: ["infra:pulumi"] }); await runTasksInSerial( generateNewPulumiProject(tree, options, config), loginToPulumi(tree, options, config), addPulumiDeps(tree, options), cleanupProject(tree, options) )(); if (!options.skipFormat) { await formatFiles(tree); } return task; } var generator_default = withRunGenerator( "Initialize Storm Pulumi workspace", initGeneratorFn ); function generateNewPulumiProject(tree, options, config) { return () => { const template = getCloudTemplateName(options.provider); run( config, [ `pulumi new ${template}`, `--name=${options.name || "deployment"}`, `--dir=${options.directory || "./deployment"}`, options.secretsProvider && `--secrets-provider=${options.secretsProvider}`, "--generate-only", "--yes", "--force" ].filter(Boolean).join(" "), join(config.workspaceRoot, options.directory || "./deployment"), "inherit" ); }; } function loginToPulumi(tree, options, config) { return () => { if (!options.login) { return; } if (options.login.startsWith("file://")) { options.login = `file://${tree.root}/${options.directory || "./deployment"}/${options.login.replace("file://", "")}`; } run( config, ["pulumi login", options.login].filter(Boolean).join(" "), join(config.workspaceRoot, options.directory || "./deployment"), "inherit", { ...process.env, PULUMI_EXPERIMENTAL: "true" } ); }; } function addPulumiDeps(tree, options) { return () => { const packageJson = readJsonFile(`${options.directory}/package.json`); if (packageJson) { addDependenciesToPackageJson(tree, {}, packageJson.dependencies || {})(); } }; } function cleanupProject(tree, options) { return () => { const indexTsLocation = join( tree.root, `${options.directory || "./deployment"}/index.ts` ); tree.write( `${options.directory}/pulumi.ts`, readFileSync(indexTsLocation).toString() ); unlinkSync( join(tree.root, `${options.directory || "./deployment"}/.gitignore`) ); unlinkSync( join(tree.root, `${options.directory || "./deployment"}/package.json`) ); unlinkSync( join(tree.root, `${options.directory || "./deployment"}/tsconfig.json`) ); }; } export { initGeneratorFn, generator_default };