UNPKG

@mesh-tech/mesh-cli

Version:

CLI for Mesh platform development utilities

61 lines (60 loc) 2.42 kB
import { execFileSync } from "child_process"; import * as path from "path"; import * as fs from "fs"; export function findAppRoot(startDir) { let dir = startDir; while (true) { if (fs.existsSync(path.join(dir, "Pulumi.yaml"))) return dir; const parent = path.dirname(dir); if (parent === dir) return null; dir = parent; } } export function findStackConfigs(appRoot) { return fs.readdirSync(appRoot) .filter((f) => /^Pulumi\..+\.yaml$/.test(f) && f !== "Pulumi.yaml") .map((f) => f.replace(/^Pulumi\./, "").replace(/\.yaml$/, "")); } export function getCurrentStack(appRoot) { try { const result = execFileSync("pulumi", ["stack", "--show-name"], { encoding: "utf-8", cwd: appRoot, stdio: ["pipe", "pipe", "pipe"], }); return result.trim() || null; } catch { return null; } } export function readStackConfig(appRoot, stack, key) { const configFile = path.join(appRoot, `Pulumi.${stack}.yaml`); if (!fs.existsSync(configFile)) return null; const content = fs.readFileSync(configFile, "utf-8"); const pattern = new RegExp(`^\\s+${key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}:\\s*(.+)$`, "m"); const match = content.match(pattern); if (!match) return null; return match[1].trim().replace(/^["']|["']$/g, ""); } export function pulumiStackOutput(appRoot, key, extraArgs, env) { const execEnv = env ? { ...process.env, ...env } : undefined; try { const result = execFileSync("pulumi", ["stack", "output", key, "--json", ...extraArgs], { cwd: appRoot, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"], env: execEnv }); if (result.includes('"[secret]"')) { return execFileSync("pulumi", ["stack", "output", key, "--json", "--show-secrets", ...extraArgs], { cwd: appRoot, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"], env: execEnv }); } return result; } catch (err) { const errMsg = err?.stderr ?? ""; if (errMsg.includes("kms:") || errMsg.includes("KMS") || errMsg.includes("secrets manager")) { throw err; } return execFileSync("pulumi", ["stack", "output", key, "--json", "--show-secrets", ...extraArgs], { cwd: appRoot, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"], env: execEnv }); } }