@storm-software/pulumi-tools
Version:
Tools for managing Pulumi infrastructure within a Nx workspace.
134 lines (131 loc) • 3.53 kB
JavaScript
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
};