@clef-sh/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/clef.js +2 -0
- package/dist/commands/delete.d.ts +6 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +130 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/diff.d.ts +6 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +168 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +331 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/exec.d.ts +6 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +187 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/export.d.ts +6 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +110 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/get.d.ts +6 -0
- package/dist/commands/get.d.ts.map +1 -0
- package/dist/commands/get.js +85 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/hooks.d.ts +6 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +89 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/import.d.ts +6 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +210 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +499 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +6 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +152 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/merge-driver.d.ts +6 -0
- package/dist/commands/merge-driver.d.ts.map +1 -0
- package/dist/commands/merge-driver.js +152 -0
- package/dist/commands/merge-driver.js.map +1 -0
- package/dist/commands/recipients.d.ts +7 -0
- package/dist/commands/recipients.d.ts.map +1 -0
- package/dist/commands/recipients.js +316 -0
- package/dist/commands/recipients.js.map +1 -0
- package/dist/commands/rotate.d.ts +6 -0
- package/dist/commands/rotate.d.ts.map +1 -0
- package/dist/commands/rotate.js +97 -0
- package/dist/commands/rotate.js.map +1 -0
- package/dist/commands/scan.d.ts +6 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +152 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/set.d.ts +6 -0
- package/dist/commands/set.d.ts.map +1 -0
- package/dist/commands/set.js +137 -0
- package/dist/commands/set.js.map +1 -0
- package/dist/commands/ui.d.ts +7 -0
- package/dist/commands/ui.d.ts.map +1 -0
- package/dist/commands/ui.js +100 -0
- package/dist/commands/ui.js.map +1 -0
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +119 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +121 -0
- package/dist/index.js.map +1 -0
- package/dist/output/formatter.d.ts +20 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +191 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/symbols.d.ts +21 -0
- package/dist/output/symbols.d.ts.map +1 -0
- package/dist/output/symbols.js +59 -0
- package/dist/output/symbols.js.map +1 -0
- package/dist/subprocess.d.ts +5 -0
- package/dist/subprocess.d.ts.map +1 -0
- package/dist/subprocess.js +27 -0
- package/dist/subprocess.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.registerDoctorCommand = registerDoctorCommand;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const YAML = __importStar(require("yaml"));
|
|
40
|
+
const core_1 = require("@clef-sh/core");
|
|
41
|
+
const formatter_1 = require("../output/formatter");
|
|
42
|
+
const symbols_1 = require("../output/symbols");
|
|
43
|
+
const init_1 = require("./init");
|
|
44
|
+
function registerDoctorCommand(program, deps) {
|
|
45
|
+
program
|
|
46
|
+
.command("doctor")
|
|
47
|
+
.description("Check your environment for required dependencies and configuration.\n\n" +
|
|
48
|
+
"Exit codes:\n" +
|
|
49
|
+
" 0 All checks pass\n" +
|
|
50
|
+
" 1 One or more checks failed")
|
|
51
|
+
.option("--json", "Output the full status as JSON")
|
|
52
|
+
.option("--fix", "Attempt to auto-fix issues (runs clef init if .sops.yaml is the only failure)")
|
|
53
|
+
.action(async (options) => {
|
|
54
|
+
const repoRoot = program.opts().repo || process.cwd();
|
|
55
|
+
const clefVersion = program.version() ?? "unknown";
|
|
56
|
+
const checks = [];
|
|
57
|
+
const depStatus = await (0, core_1.checkAll)(deps.runner);
|
|
58
|
+
// 1. Clef version (always passes)
|
|
59
|
+
checks.push({
|
|
60
|
+
name: "clef",
|
|
61
|
+
ok: true,
|
|
62
|
+
detail: `v${clefVersion}`,
|
|
63
|
+
});
|
|
64
|
+
// 2. sops
|
|
65
|
+
if (depStatus.sops) {
|
|
66
|
+
checks.push({
|
|
67
|
+
name: "sops",
|
|
68
|
+
ok: depStatus.sops.satisfied,
|
|
69
|
+
detail: depStatus.sops.satisfied
|
|
70
|
+
? `v${depStatus.sops.installed} (required >= ${depStatus.sops.required})`
|
|
71
|
+
: `v${depStatus.sops.installed} (required >= ${depStatus.sops.required})`,
|
|
72
|
+
hint: depStatus.sops.satisfied ? undefined : depStatus.sops.installHint,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
checks.push({
|
|
77
|
+
name: "sops",
|
|
78
|
+
ok: false,
|
|
79
|
+
detail: "not installed",
|
|
80
|
+
hint: getSopsInstallHint(),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
// 3. git
|
|
84
|
+
if (depStatus.git) {
|
|
85
|
+
checks.push({
|
|
86
|
+
name: "git",
|
|
87
|
+
ok: depStatus.git.satisfied,
|
|
88
|
+
detail: depStatus.git.satisfied
|
|
89
|
+
? `v${depStatus.git.installed} (required >= ${depStatus.git.required})`
|
|
90
|
+
: `v${depStatus.git.installed} (required >= ${depStatus.git.required})`,
|
|
91
|
+
hint: depStatus.git.satisfied ? undefined : depStatus.git.installHint,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
checks.push({
|
|
96
|
+
name: "git",
|
|
97
|
+
ok: false,
|
|
98
|
+
detail: "not installed",
|
|
99
|
+
hint: "see https://git-scm.com/downloads",
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// 5. manifest
|
|
103
|
+
const manifestPath = path.join(repoRoot, "clef.yaml");
|
|
104
|
+
const manifestFound = fs.existsSync(manifestPath);
|
|
105
|
+
checks.push({
|
|
106
|
+
name: "manifest",
|
|
107
|
+
ok: manifestFound,
|
|
108
|
+
detail: manifestFound ? "clef.yaml found" : "clef.yaml not found",
|
|
109
|
+
hint: manifestFound ? undefined : "run: clef init",
|
|
110
|
+
});
|
|
111
|
+
// 6. age key
|
|
112
|
+
const ageKeyResult = checkAgeKey(repoRoot);
|
|
113
|
+
checks.push(ageKeyResult);
|
|
114
|
+
// 7. .sops.yaml
|
|
115
|
+
const sopsYamlPath = path.join(repoRoot, ".sops.yaml");
|
|
116
|
+
const sopsYamlFound = fs.existsSync(sopsYamlPath);
|
|
117
|
+
checks.push({
|
|
118
|
+
name: ".sops.yaml",
|
|
119
|
+
ok: sopsYamlFound,
|
|
120
|
+
detail: sopsYamlFound ? "found" : "not found",
|
|
121
|
+
hint: sopsYamlFound ? undefined : "run: clef init",
|
|
122
|
+
});
|
|
123
|
+
// 8. .clefignore
|
|
124
|
+
const clefignorePath = path.join(repoRoot, ".clefignore");
|
|
125
|
+
const clefignoreFound = fs.existsSync(clefignorePath);
|
|
126
|
+
let clefignoreRuleCount = 0;
|
|
127
|
+
if (clefignoreFound) {
|
|
128
|
+
try {
|
|
129
|
+
const content = fs.readFileSync(clefignorePath, "utf-8");
|
|
130
|
+
clefignoreRuleCount = content
|
|
131
|
+
.split("\n")
|
|
132
|
+
.filter((l) => l.trim() && !l.trim().startsWith("#") && !l.trim().startsWith("ignore-pattern:")).length;
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// unreadable — count stays 0
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
checks.push({
|
|
139
|
+
name: "scanner",
|
|
140
|
+
ok: clefignoreFound,
|
|
141
|
+
detail: clefignoreFound
|
|
142
|
+
? `.clefignore found (${clefignoreRuleCount} rules)`
|
|
143
|
+
: "no .clefignore found",
|
|
144
|
+
hint: clefignoreFound
|
|
145
|
+
? undefined
|
|
146
|
+
: "run clef init or create manually — see https://docs.clef.sh/cli/scan#clefignore",
|
|
147
|
+
});
|
|
148
|
+
// 9. merge driver
|
|
149
|
+
const git = new core_1.GitIntegration(deps.runner);
|
|
150
|
+
const mergeDriverStatus = await git.checkMergeDriver(repoRoot);
|
|
151
|
+
const mergeDriverOk = mergeDriverStatus.gitConfig && mergeDriverStatus.gitattributes;
|
|
152
|
+
const mergeDriverDetails = [];
|
|
153
|
+
if (!mergeDriverStatus.gitConfig)
|
|
154
|
+
mergeDriverDetails.push("git config missing");
|
|
155
|
+
if (!mergeDriverStatus.gitattributes)
|
|
156
|
+
mergeDriverDetails.push(".gitattributes missing");
|
|
157
|
+
checks.push({
|
|
158
|
+
name: "merge driver",
|
|
159
|
+
ok: mergeDriverOk,
|
|
160
|
+
detail: mergeDriverOk ? "SOPS merge driver configured" : mergeDriverDetails.join(", "),
|
|
161
|
+
hint: mergeDriverOk ? undefined : "run: clef hooks install",
|
|
162
|
+
});
|
|
163
|
+
// --fix: if the only failure is .sops.yaml missing, run clef init
|
|
164
|
+
if (options.fix) {
|
|
165
|
+
const failures = checks.filter((c) => !c.ok);
|
|
166
|
+
const onlySopsYamlMissing = failures.length === 1 && failures[0].name === ".sops.yaml" && !sopsYamlFound;
|
|
167
|
+
if (onlySopsYamlMissing) {
|
|
168
|
+
formatter_1.formatter.info("Attempting to fix: generating .sops.yaml from manifest...");
|
|
169
|
+
try {
|
|
170
|
+
(0, init_1.scaffoldSopsConfig)(repoRoot);
|
|
171
|
+
const nowFound = fs.existsSync(sopsYamlPath);
|
|
172
|
+
if (nowFound) {
|
|
173
|
+
const sopsYamlCheck = checks.find((c) => c.name === ".sops.yaml");
|
|
174
|
+
if (sopsYamlCheck) {
|
|
175
|
+
sopsYamlCheck.ok = true;
|
|
176
|
+
sopsYamlCheck.detail = "found (fixed)";
|
|
177
|
+
delete sopsYamlCheck.hint;
|
|
178
|
+
}
|
|
179
|
+
formatter_1.formatter.success(".sops.yaml created from manifest.");
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
formatter_1.formatter.error("Failed to generate .sops.yaml. Run 'clef init' manually to diagnose.");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else if (failures.length > 0) {
|
|
187
|
+
formatter_1.formatter.warn("--fix cannot resolve these issues automatically.");
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// JSON output
|
|
191
|
+
if (options.json) {
|
|
192
|
+
const json = {
|
|
193
|
+
clef: { version: clefVersion, ok: true },
|
|
194
|
+
sops: {
|
|
195
|
+
version: depStatus.sops?.installed ?? null,
|
|
196
|
+
required: core_1.REQUIREMENTS.sops,
|
|
197
|
+
ok: depStatus.sops?.satisfied ?? false,
|
|
198
|
+
},
|
|
199
|
+
git: {
|
|
200
|
+
version: depStatus.git?.installed ?? null,
|
|
201
|
+
required: core_1.REQUIREMENTS.git,
|
|
202
|
+
ok: depStatus.git?.satisfied ?? false,
|
|
203
|
+
},
|
|
204
|
+
manifest: { found: manifestFound, ok: manifestFound },
|
|
205
|
+
ageKey: {
|
|
206
|
+
source: ageKeyResult.ok ? (process.env.SOPS_AGE_KEY ? "env" : "file") : null,
|
|
207
|
+
recipients: countAgeRecipients(sopsYamlPath),
|
|
208
|
+
ok: ageKeyResult.ok,
|
|
209
|
+
},
|
|
210
|
+
sopsYaml: {
|
|
211
|
+
found: checks.find((c) => c.name === ".sops.yaml").ok,
|
|
212
|
+
ok: checks.find((c) => c.name === ".sops.yaml").ok,
|
|
213
|
+
...(!checks.find((c) => c.name === ".sops.yaml").ok ? { fix: "clef init" } : {}),
|
|
214
|
+
},
|
|
215
|
+
scanner: {
|
|
216
|
+
clefignoreFound: checks.find((c) => c.name === "scanner")?.ok ?? false,
|
|
217
|
+
ok: checks.find((c) => c.name === "scanner")?.ok ?? false,
|
|
218
|
+
},
|
|
219
|
+
mergeDriver: {
|
|
220
|
+
gitConfig: mergeDriverStatus.gitConfig,
|
|
221
|
+
gitattributes: mergeDriverStatus.gitattributes,
|
|
222
|
+
ok: mergeDriverOk,
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
formatter_1.formatter.raw(JSON.stringify(json, null, 2) + "\n");
|
|
226
|
+
const hasFailures = checks.some((c) => !c.ok);
|
|
227
|
+
process.exit(hasFailures ? 1 : 0);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
// Pretty output
|
|
231
|
+
formatter_1.formatter.print("\nDiagnosing...\n");
|
|
232
|
+
const nameWidth = Math.max(...checks.map((c) => c.name.length));
|
|
233
|
+
for (const check of checks) {
|
|
234
|
+
const icon = check.ok ? (0, symbols_1.sym)("success") : (0, symbols_1.sym)("failure");
|
|
235
|
+
const name = check.name.padEnd(nameWidth);
|
|
236
|
+
formatter_1.formatter.print(`${icon} ${name} ${check.detail}`);
|
|
237
|
+
if (check.hint) {
|
|
238
|
+
formatter_1.formatter.hint(check.hint);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
formatter_1.formatter.print("");
|
|
242
|
+
const failures = checks.filter((c) => !c.ok);
|
|
243
|
+
if (failures.length === 0) {
|
|
244
|
+
formatter_1.formatter.success("Everything looks good.");
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
formatter_1.formatter.error(`${failures.length} issue${failures.length > 1 ? "s" : ""} found.`);
|
|
248
|
+
}
|
|
249
|
+
formatter_1.formatter.hint("clef scan \u2014 check for plaintext secrets");
|
|
250
|
+
process.exit(failures.length > 0 ? 1 : 0);
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
function checkAgeKey(repoRoot) {
|
|
254
|
+
// Check SOPS_AGE_KEY env var first
|
|
255
|
+
if (process.env.SOPS_AGE_KEY) {
|
|
256
|
+
return {
|
|
257
|
+
name: "age key",
|
|
258
|
+
ok: true,
|
|
259
|
+
detail: "loaded (via SOPS_AGE_KEY env var)",
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
// Check SOPS_AGE_KEY_FILE or default path
|
|
263
|
+
const defaultKeyPath = path.join(process.env.HOME || process.env.USERPROFILE || "", ".config", "sops", "age", "keys.txt");
|
|
264
|
+
const sopsAgeKeyFile = process.env.SOPS_AGE_KEY_FILE || defaultKeyPath;
|
|
265
|
+
if (fs.existsSync(sopsAgeKeyFile)) {
|
|
266
|
+
return {
|
|
267
|
+
name: "age key",
|
|
268
|
+
ok: true,
|
|
269
|
+
detail: `loaded (from ${sopsAgeKeyFile})`,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
// Check .clef/config.yaml age_key_file
|
|
273
|
+
const clefConfigPath = path.join(repoRoot, ".clef", "config.yaml");
|
|
274
|
+
if (fs.existsSync(clefConfigPath)) {
|
|
275
|
+
try {
|
|
276
|
+
const configContent = fs.readFileSync(clefConfigPath, "utf-8");
|
|
277
|
+
const config = YAML.parse(configContent);
|
|
278
|
+
if (config?.age_key_file) {
|
|
279
|
+
if (fs.existsSync(config.age_key_file)) {
|
|
280
|
+
return {
|
|
281
|
+
name: "age key",
|
|
282
|
+
ok: true,
|
|
283
|
+
detail: `loaded (from ${config.age_key_file})`,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
// Failed to parse config — fall through
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return {
|
|
293
|
+
name: "age key",
|
|
294
|
+
ok: false,
|
|
295
|
+
detail: "not configured",
|
|
296
|
+
hint: "set SOPS_AGE_KEY_FILE or run: clef init to auto-generate your age key",
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
function countAgeRecipients(sopsYamlPath) {
|
|
300
|
+
try {
|
|
301
|
+
if (!fs.existsSync(sopsYamlPath))
|
|
302
|
+
return 0;
|
|
303
|
+
const content = fs.readFileSync(sopsYamlPath, "utf-8");
|
|
304
|
+
const config = YAML.parse(content);
|
|
305
|
+
if (!config?.creation_rules || !Array.isArray(config.creation_rules)) {
|
|
306
|
+
return 0;
|
|
307
|
+
}
|
|
308
|
+
const recipients = new Set();
|
|
309
|
+
for (const rule of config.creation_rules) {
|
|
310
|
+
if (typeof rule.age === "string") {
|
|
311
|
+
// age field may contain comma-separated recipients
|
|
312
|
+
for (const r of rule.age.split(",")) {
|
|
313
|
+
const trimmed = r.trim();
|
|
314
|
+
if (trimmed) {
|
|
315
|
+
recipients.add(trimmed);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return recipients.size;
|
|
321
|
+
}
|
|
322
|
+
catch {
|
|
323
|
+
return 0;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
function getSopsInstallHint() {
|
|
327
|
+
if (process.platform === "darwin")
|
|
328
|
+
return "brew install sops";
|
|
329
|
+
return "see https://github.com/getsops/sops/releases";
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/commands/exec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAML,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAOvB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAgI9F"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.registerExecCommand = registerExecCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const child_process_1 = require("child_process");
|
|
39
|
+
const core_1 = require("@clef-sh/core");
|
|
40
|
+
const formatter_1 = require("../output/formatter");
|
|
41
|
+
function collect(value, previous) {
|
|
42
|
+
return previous.concat([value]);
|
|
43
|
+
}
|
|
44
|
+
function registerExecCommand(program, deps) {
|
|
45
|
+
program
|
|
46
|
+
.command("exec <target>")
|
|
47
|
+
.description("Run a command with decrypted secrets injected as environment variables.\n\n" +
|
|
48
|
+
" target: namespace/environment (e.g. payments/production)\n\n" +
|
|
49
|
+
"Everything after -- is the command to run:\n" +
|
|
50
|
+
" clef exec payments/production -- node server.js\n\n" +
|
|
51
|
+
"Exit codes:\n" +
|
|
52
|
+
" The exit code matches the child process exactly.\n" +
|
|
53
|
+
" 1 if Clef itself fails (decryption error, bad arguments)")
|
|
54
|
+
.option("--only <keys>", "Comma-separated list of keys to inject (ignores all others)")
|
|
55
|
+
.option("--prefix <string>", "Prefix all injected key names (e.g. --prefix APP_)")
|
|
56
|
+
.option("--no-override", "Do not override existing environment variables")
|
|
57
|
+
.option("--also <target>", "Also inject secrets from another namespace/environment (repeatable)", collect, [])
|
|
58
|
+
.allowUnknownOption(true)
|
|
59
|
+
.action(async (target, options) => {
|
|
60
|
+
try {
|
|
61
|
+
// Parse everything after -- as the child command
|
|
62
|
+
const dashIndex = process.argv.indexOf("--");
|
|
63
|
+
if (dashIndex === -1) {
|
|
64
|
+
formatter_1.formatter.error("Missing command to execute. Use -- to separate the command:\n\n" +
|
|
65
|
+
" clef exec payments/production -- node server.js\n\n" +
|
|
66
|
+
"The -- separator is required to distinguish Clef flags from the child command.");
|
|
67
|
+
process.exit(1);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const childArgs = process.argv.slice(dashIndex + 1);
|
|
71
|
+
if (childArgs.length === 0) {
|
|
72
|
+
formatter_1.formatter.error("Missing command to execute after --.\n\n" +
|
|
73
|
+
" clef exec payments/production -- node server.js");
|
|
74
|
+
process.exit(1);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const [namespace, environment] = parseTarget(target);
|
|
78
|
+
const repoRoot = program.opts().repo || process.cwd();
|
|
79
|
+
const parser = new core_1.ManifestParser();
|
|
80
|
+
const manifest = parser.parse(path.join(repoRoot, "clef.yaml"));
|
|
81
|
+
// Warn on protected environments (but do not block)
|
|
82
|
+
const envDef = manifest.environments.find((e) => e.name === environment);
|
|
83
|
+
if (envDef?.protected) {
|
|
84
|
+
formatter_1.formatter.warn(`Executing in protected environment '${environment}'.`);
|
|
85
|
+
}
|
|
86
|
+
const sopsClient = new core_1.SopsClient(deps.runner);
|
|
87
|
+
// Decrypt primary target
|
|
88
|
+
const primaryFilePath = path.join(repoRoot, manifest.file_pattern
|
|
89
|
+
.replace("{namespace}", namespace)
|
|
90
|
+
.replace("{environment}", environment));
|
|
91
|
+
const primaryDecrypted = await sopsClient.decrypt(primaryFilePath);
|
|
92
|
+
// Merge values: primary first, then --also targets in order (later overrides earlier)
|
|
93
|
+
let mergedValues = { ...primaryDecrypted.values };
|
|
94
|
+
for (const alsoTarget of options.also) {
|
|
95
|
+
try {
|
|
96
|
+
const [alsoNs, alsoEnv] = parseTarget(alsoTarget);
|
|
97
|
+
const alsoFilePath = path.join(repoRoot, manifest.file_pattern
|
|
98
|
+
.replace("{namespace}", alsoNs)
|
|
99
|
+
.replace("{environment}", alsoEnv));
|
|
100
|
+
const alsoDecrypted = await sopsClient.decrypt(alsoFilePath);
|
|
101
|
+
mergedValues = { ...mergedValues, ...alsoDecrypted.values };
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
throw new Error(`Failed to decrypt --also '${alsoTarget}': ${err.message}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const consumption = new core_1.ConsumptionClient();
|
|
108
|
+
const execOptions = {
|
|
109
|
+
only: options.only ? options.only.split(",").map((k) => k.trim()) : undefined,
|
|
110
|
+
prefix: options.prefix,
|
|
111
|
+
noOverride: !options.override,
|
|
112
|
+
};
|
|
113
|
+
const childEnv = consumption.prepareEnvironment({ values: mergedValues, metadata: primaryDecrypted.metadata }, process.env, execOptions);
|
|
114
|
+
// Spawn child process with inherited stdio — values injected via env, never via shell
|
|
115
|
+
const childCommand = childArgs[0];
|
|
116
|
+
const childCommandArgs = childArgs.slice(1);
|
|
117
|
+
const exitCode = await spawnChild(childCommand, childCommandArgs, childEnv);
|
|
118
|
+
process.exit(exitCode);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
if (err instanceof core_1.SopsMissingError || err instanceof core_1.SopsVersionError) {
|
|
122
|
+
formatter_1.formatter.formatDependencyError(err);
|
|
123
|
+
process.exit(1);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Never leak decrypted values in error messages
|
|
127
|
+
const message = err instanceof Error ? err.message : "Execution failed";
|
|
128
|
+
formatter_1.formatter.error(message);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function spawnChild(command, args, env) {
|
|
134
|
+
return new Promise((resolve) => {
|
|
135
|
+
let child;
|
|
136
|
+
try {
|
|
137
|
+
child = (0, child_process_1.spawn)(command, args, {
|
|
138
|
+
env,
|
|
139
|
+
stdio: "inherit",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
formatter_1.formatter.error(`Failed to start command '${command}'. Ensure it exists and is executable.`);
|
|
144
|
+
resolve(1);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
child.on("error", () => {
|
|
148
|
+
formatter_1.formatter.error(`Failed to start command '${command}'. Ensure it exists and is executable.`);
|
|
149
|
+
resolve(1);
|
|
150
|
+
});
|
|
151
|
+
child.on("exit", (code, signal) => {
|
|
152
|
+
// Clean up signal handlers
|
|
153
|
+
process.off("SIGTERM", sigtermHandler);
|
|
154
|
+
process.off("SIGINT", sigintHandler);
|
|
155
|
+
if (signal) {
|
|
156
|
+
// Process was killed by a signal — map to conventional exit code
|
|
157
|
+
const signalCodes = {
|
|
158
|
+
SIGHUP: 129,
|
|
159
|
+
SIGINT: 130,
|
|
160
|
+
SIGTERM: 143,
|
|
161
|
+
};
|
|
162
|
+
resolve(signalCodes[signal] ?? 128);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
resolve(code ?? 1);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
// Forward signals to child with SIGKILL fallback
|
|
169
|
+
const sigtermHandler = () => {
|
|
170
|
+
child.kill("SIGTERM");
|
|
171
|
+
// Give child 5s to clean up, then force kill
|
|
172
|
+
/* istanbul ignore next -- timer callback only fires if child hangs; not testable without real timers */
|
|
173
|
+
setTimeout(() => child.kill("SIGKILL"), 5000).unref();
|
|
174
|
+
};
|
|
175
|
+
const sigintHandler = () => child.kill("SIGINT");
|
|
176
|
+
process.on("SIGTERM", sigtermHandler);
|
|
177
|
+
process.on("SIGINT", sigintHandler);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
function parseTarget(target) {
|
|
181
|
+
const parts = target.split("/");
|
|
182
|
+
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
183
|
+
throw new Error(`Invalid target "${target}". Expected format: namespace/environment`);
|
|
184
|
+
}
|
|
185
|
+
return [parts[0], parts[1]];
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/commands/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAML,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAgFhG"}
|