// @generated by scripts/build-runtime.mjs; do not edit. // @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader. import { MAX_METADATA_FILE_BYTES, directMatch, exactAlias, formatVersion, isRecord, joinHome, optionBoolean, optionMap, optionNumber, optionString, optionStrings, runBounded, safeMetadata } from "./chunk-PV5KIAAP.js"; // src/runtime/deployment.ts import { extname, isAbsolute, join, resolve } from "node:path"; import { parse as parseYaml } from "yaml"; async function collectDeployment(context) { const result = {}; if (context.needs("docker_context")) { const docker = await collectDocker(context); if (docker) result.docker_context = docker; } if (context.needs("kubernetes")) { const kubernetes = await collectKubernetes(context); if (kubernetes) result.kubernetes = kubernetes; } if (context.needs("terraform")) { const terraform = await collectTerraform(context); if (terraform) result.terraform = terraform; } return result; } async function collectDocker(context) { const entries = await context.entries(); if (optionBoolean(context, "docker_context", "only_with_files")) { const configuredFiles = optionStrings(context, "docker_context", "detect_files"); if (!directMatch( entries, configuredFiles.length > 0 ? configuredFiles : [ "Dockerfile", "docker-compose.yml", "docker-compose.yaml", "compose.yml", "compose.yaml" ], optionStrings(context, "docker_context", "detect_extensions"), optionStrings(context, "docker_context", "detect_folders") )) { return void 0; } } let active = safeMetadata(context.input.environment.DOCKER_CONTEXT); if (!active) { const configDirectory = safeMetadata(context.input.environment.DOCKER_CONFIG, 1024) ?? joinHome(context.input, ".docker"); const source = await context.fs.readFile( join(configDirectory, "config.json"), MAX_METADATA_FILE_BYTES ); if (source) { try { const document = JSON.parse(source); active = isRecord(document) ? safeMetadata(document.currentContext) : void 0; } catch { } } } return active && active !== "default" ? { context: active } : void 0; } async function collectKubernetes(context) { const selected = safeMetadata(context.input.environment.KUBECONFIG, 4096); const candidates = selected ? selected.split(context.input.platform === "win32" ? ";" : ":").filter(Boolean) : [joinHome(context.input, ".kube", "config")]; const limit = optionNumber(context, "kubernetes", "max_config_files") ?? 8; const contexts = /* @__PURE__ */ new Map(); const clusters = /* @__PURE__ */ new Set(); const users = /* @__PURE__ */ new Set(); let currentContext; for (const path of candidates.slice(0, limit)) { const source = await context.fs.readFile(path, MAX_METADATA_FILE_BYTES); if (!source) continue; try { const document = parseYaml(source); if (!isRecord(document)) continue; currentContext ??= safeMetadata(document["current-context"]); for (const item of arrayRecords(document.contexts)) { const name = safeMetadata(item.name); if (name && !contexts.has(name) && isRecord(item.context)) contexts.set(name, item.context); } for (const item of arrayRecords(document.clusters)) { const name = safeMetadata(item.name); if (name) clusters.add(name); } for (const item of arrayRecords(document.users)) { const name = safeMetadata(item.name); if (name) users.add(name); } } catch { } } if (!currentContext) return void 0; const selectedContext = contexts.get(currentContext); const cluster = safeMetadata(selectedContext?.cluster); const user = safeMetadata(selectedContext?.user); const namespace = safeMetadata(selectedContext?.namespace) ?? "default"; const values = { context: exactAlias(currentContext, optionMap(context, "kubernetes", "context_aliases")) ?? currentContext, namespace: exactAlias(namespace, optionMap(context, "kubernetes", "namespace_aliases")) ?? namespace }; if (cluster && clusters.has(cluster)) { values.cluster = exactAlias(cluster, optionMap(context, "kubernetes", "cluster_aliases")) ?? cluster; } if (user && users.has(user)) { values.user = exactAlias(user, optionMap(context, "kubernetes", "user_aliases")) ?? user; } return values; } async function collectTerraform(context) { const entries = await context.entries(); const configuredFiles = optionStrings(context, "terraform", "detect_files"); const configuredExtensions = optionStrings(context, "terraform", "detect_extensions"); const configuredFolders = optionStrings(context, "terraform", "detect_folders"); const detected = configuredFiles.length + configuredExtensions.length + configuredFolders.length > 0 ? directMatch(entries, configuredFiles, configuredExtensions, configuredFolders) : entries.some( (entry) => entry.isFile && [".tf", ".tfplan", ".tfstate"].includes(extname(entry.name)) || entry.isDirectory && entry.name === ".terraform" ); if (!detected) return void 0; const values = {}; const workspace = await terraformWorkspace(context); if (workspace) values.workspace = workspace; if (context.needs("terraform", "version")) { for (const command of ["terraform", "tofu"]) { const output = await runBounded(context, command, ["version"]); const parsed = output ? parseTerraformVersion(output, command) : void 0; if (parsed) { values.version = formatVersion( parsed, optionString(context, "terraform", "version_format") ); break; } } } return values; } async function terraformWorkspace(context) { const direct = safeMetadata(context.input.environment.TF_WORKSPACE); if (direct) return direct; const dataDirectory = safeMetadata(context.input.environment.TF_DATA_DIR, 1024); const candidate = dataDirectory ? join( isAbsolute(dataDirectory) ? dataDirectory : resolve(context.input.cwd, dataDirectory), "environment" ) : join(context.input.cwd, ".terraform", "environment"); return safeMetadata(await context.fs.readFile(candidate, 1024)); } function parseTerraformVersion(output, command) { const escaped = command === "tofu" ? "OpenTofu" : "Terraform"; const match = new RegExp(`^${escaped} v?(\\d+\\.\\d+\\.\\d+(?:[-+][0-9A-Za-z.-]+)?)$`, "u").exec( output.trim().split(/\r?\n/u)[0] ?? "" ); return match?.[1] ? `v${match[1]}` : void 0; } function arrayRecords(value) { return Array.isArray(value) ? value.filter(isRecord) : []; } export { collectDeployment, parseTerraformVersion }; //# sourceMappingURL=deployment-RDEDDCLG.ts.map