@komatikai/trailhead 3.0.2
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/README.md +52 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +358 -0
- package/dist/index.js.map +1 -0
- package/package.json +32 -0
package/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Trailhead CLI
|
|
2
|
+
|
|
3
|
+
Interactive setup wizard for Trailhead. Generates `.trailhead.yml` and the GitHub Actions workflow YAML with all v3 features configured.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx @komatikai/trailhead init
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
No installation required. The wizard walks you through:
|
|
12
|
+
|
|
13
|
+
1. **Sensitivity patterns** — which file paths are high/medium risk (auth, payments, migrations)
|
|
14
|
+
2. **Thresholds** — risk and warn scores (defaults: 70/55)
|
|
15
|
+
3. **Freeze windows** — days and hours when deployments are blocked
|
|
16
|
+
4. **Environments** — per-environment threshold overrides (production, staging, etc.)
|
|
17
|
+
5. **Services** — monorepo service boundaries with path patterns
|
|
18
|
+
6. **Security gate** — whether to include Code Scanning alerts as a risk factor
|
|
19
|
+
7. **Canary tracking** — Vercel or generic deploy outcome webhook type
|
|
20
|
+
8. **DORA metrics** — whether to compute DORA-5 alongside gate evaluations
|
|
21
|
+
9. **Health checks** — URLs to probe before scoring
|
|
22
|
+
10. **Webhooks** — Slack/Discord notification URL and trigger events
|
|
23
|
+
11. **OpenTelemetry** — OTLP endpoint for evaluation span export
|
|
24
|
+
12. **Evaluation store** — URL for persisting evaluations to a trend dashboard
|
|
25
|
+
|
|
26
|
+
## Output
|
|
27
|
+
|
|
28
|
+
The wizard generates two files:
|
|
29
|
+
|
|
30
|
+
- **`.trailhead.yml`** — per-repo configuration (sensitivity, thresholds, freeze windows, environments, services, security, canary)
|
|
31
|
+
- **`.github/workflows/trailhead.yml`** — GitHub Actions workflow with all selected features
|
|
32
|
+
|
|
33
|
+
## Development
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
cd cli
|
|
37
|
+
npm install
|
|
38
|
+
npx tsc
|
|
39
|
+
node dist/index.js
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The CLI is a zero-dependency ESM module. Build output goes to `cli/dist/` (gitignored — build before npm publish).
|
|
43
|
+
|
|
44
|
+
## Publishing
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
cd cli
|
|
48
|
+
npx tsc
|
|
49
|
+
npm publish
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The package is published as `@komatikai/trailhead` on npm, making `npx @komatikai/trailhead init` work without installation.
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import * as readline from "node:readline";
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
const BOLD = "\x1b[1m";
|
|
6
|
+
const GREEN = "\x1b[32m";
|
|
7
|
+
const YELLOW = "\x1b[33m";
|
|
8
|
+
const CYAN = "\x1b[36m";
|
|
9
|
+
const RESET = "\x1b[0m";
|
|
10
|
+
const DIM = "\x1b[2m";
|
|
11
|
+
function print(msg) {
|
|
12
|
+
process.stdout.write(msg + "\n");
|
|
13
|
+
}
|
|
14
|
+
function ask(rl, question, defaultValue) {
|
|
15
|
+
const suffix = defaultValue ? ` ${DIM}(${defaultValue})${RESET}` : "";
|
|
16
|
+
return new Promise((resolve) => {
|
|
17
|
+
rl.question(` ${question}${suffix}: `, (answer) => {
|
|
18
|
+
resolve(answer.trim() || defaultValue || "");
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function askYN(rl, question, defaultYes) {
|
|
23
|
+
const hint = defaultYes ? "Y/n" : "y/N";
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
rl.question(` ${question} ${DIM}(${hint})${RESET}: `, (answer) => {
|
|
26
|
+
const a = answer.trim().toLowerCase();
|
|
27
|
+
if (a === "")
|
|
28
|
+
resolve(defaultYes);
|
|
29
|
+
else
|
|
30
|
+
resolve(a === "y" || a === "yes");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
function generateTrailheadYml(options) {
|
|
35
|
+
const lines = [
|
|
36
|
+
"# Trailhead v3 configuration",
|
|
37
|
+
"# https://github.com/KomatikAI/trailhead",
|
|
38
|
+
"",
|
|
39
|
+
];
|
|
40
|
+
if (options.highSensitivity.length > 0 || options.mediumSensitivity.length > 0) {
|
|
41
|
+
lines.push("sensitivity:");
|
|
42
|
+
if (options.highSensitivity.length > 0) {
|
|
43
|
+
lines.push(" high:");
|
|
44
|
+
for (const p of options.highSensitivity)
|
|
45
|
+
lines.push(` - "${p}"`);
|
|
46
|
+
}
|
|
47
|
+
if (options.mediumSensitivity.length > 0) {
|
|
48
|
+
lines.push(" medium:");
|
|
49
|
+
for (const p of options.mediumSensitivity)
|
|
50
|
+
lines.push(` - "${p}"`);
|
|
51
|
+
}
|
|
52
|
+
lines.push("");
|
|
53
|
+
}
|
|
54
|
+
lines.push("thresholds:");
|
|
55
|
+
lines.push(` risk: ${options.riskThreshold}`);
|
|
56
|
+
lines.push(` warn: ${options.warnThreshold}`);
|
|
57
|
+
lines.push("");
|
|
58
|
+
if (options.environments.length > 0) {
|
|
59
|
+
lines.push("environments:");
|
|
60
|
+
for (const env of options.environments) {
|
|
61
|
+
lines.push(` ${env.name}:`);
|
|
62
|
+
lines.push(` risk: ${env.risk}`);
|
|
63
|
+
lines.push(` warn: ${env.warn}`);
|
|
64
|
+
}
|
|
65
|
+
lines.push("");
|
|
66
|
+
}
|
|
67
|
+
if (options.services.length > 0) {
|
|
68
|
+
lines.push("services:");
|
|
69
|
+
for (const svc of options.services) {
|
|
70
|
+
lines.push(` ${svc.name}:`);
|
|
71
|
+
lines.push(" paths:");
|
|
72
|
+
for (const p of svc.paths)
|
|
73
|
+
lines.push(` - "${p}"`);
|
|
74
|
+
if (svc.env)
|
|
75
|
+
lines.push(` environment: ${svc.env}`);
|
|
76
|
+
}
|
|
77
|
+
lines.push("");
|
|
78
|
+
}
|
|
79
|
+
if (options.securityGate) {
|
|
80
|
+
lines.push("security:");
|
|
81
|
+
lines.push(" severity_threshold: warning");
|
|
82
|
+
lines.push(" block_on_critical: true");
|
|
83
|
+
lines.push("");
|
|
84
|
+
}
|
|
85
|
+
if (options.canaryType) {
|
|
86
|
+
lines.push("canary:");
|
|
87
|
+
lines.push(` webhook_type: ${options.canaryType}`);
|
|
88
|
+
lines.push("");
|
|
89
|
+
}
|
|
90
|
+
if (options.freezeDays.length > 0 && options.freezeAfterHour !== null) {
|
|
91
|
+
lines.push("freeze:");
|
|
92
|
+
lines.push(" - days:");
|
|
93
|
+
for (const d of options.freezeDays)
|
|
94
|
+
lines.push(` - "${d}"`);
|
|
95
|
+
lines.push(` afterHour: ${options.freezeAfterHour}`);
|
|
96
|
+
lines.push(` message: "No deploys during freeze window"`);
|
|
97
|
+
lines.push("");
|
|
98
|
+
}
|
|
99
|
+
return lines.join("\n") + "\n";
|
|
100
|
+
}
|
|
101
|
+
function generateWorkflowYml(options) {
|
|
102
|
+
const lines = [
|
|
103
|
+
"name: Trailhead",
|
|
104
|
+
"",
|
|
105
|
+
"on:",
|
|
106
|
+
" pull_request:",
|
|
107
|
+
" types: [opened, synchronize, reopened]",
|
|
108
|
+
"",
|
|
109
|
+
"permissions:",
|
|
110
|
+
" contents: read",
|
|
111
|
+
" pull-requests: write",
|
|
112
|
+
" checks: write",
|
|
113
|
+
" security-events: read",
|
|
114
|
+
"",
|
|
115
|
+
"jobs:",
|
|
116
|
+
" trailhead:",
|
|
117
|
+
" runs-on: ubuntu-latest",
|
|
118
|
+
" steps:",
|
|
119
|
+
" - uses: actions/checkout@v4",
|
|
120
|
+
"",
|
|
121
|
+
" - uses: KomatikAI/trailhead@v3",
|
|
122
|
+
" id: gate",
|
|
123
|
+
" with:",
|
|
124
|
+
` risk-threshold: "${options.riskThreshold}"`,
|
|
125
|
+
];
|
|
126
|
+
if (options.healthCheckUrls.length > 0) {
|
|
127
|
+
lines.push(` health-check-urls: "${options.healthCheckUrls.join(",")}"`);
|
|
128
|
+
}
|
|
129
|
+
if (options.doraMetrics) {
|
|
130
|
+
lines.push(' dora-metrics: "true"');
|
|
131
|
+
}
|
|
132
|
+
if (options.doraEnvironment) {
|
|
133
|
+
lines.push(` dora-environment: "${options.doraEnvironment}"`);
|
|
134
|
+
}
|
|
135
|
+
if (options.environment) {
|
|
136
|
+
lines.push(` environment: "${options.environment}"`);
|
|
137
|
+
}
|
|
138
|
+
if (!options.securityGate) {
|
|
139
|
+
lines.push(' security-gate: "false"');
|
|
140
|
+
}
|
|
141
|
+
if (options.otelEndpoint) {
|
|
142
|
+
lines.push(` otel-endpoint: "${options.otelEndpoint}"`);
|
|
143
|
+
}
|
|
144
|
+
if (options.evaluationStoreUrl) {
|
|
145
|
+
lines.push(` evaluation-store-url: "${options.evaluationStoreUrl}"`);
|
|
146
|
+
if (options.storeSecretName) {
|
|
147
|
+
lines.push(` evaluation-store-secret: \${{ secrets.${options.storeSecretName} }}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const envLines = [];
|
|
151
|
+
if (options.evaluationStoreUrl && options.storeSecretName) {
|
|
152
|
+
envLines.push(` EVALUATION_STORE_SECRET: \${{ secrets.${options.storeSecretName} }}`);
|
|
153
|
+
}
|
|
154
|
+
if (options.supabaseFallback) {
|
|
155
|
+
envLines.push(` SUPABASE_URL: \${{ secrets.SUPABASE_URL }}`);
|
|
156
|
+
envLines.push(` SUPABASE_SERVICE_ROLE_KEY: \${{ secrets.SUPABASE_SERVICE_ROLE_KEY }}`);
|
|
157
|
+
}
|
|
158
|
+
if (envLines.length > 0) {
|
|
159
|
+
lines.push(" env:");
|
|
160
|
+
for (const el of envLines)
|
|
161
|
+
lines.push(el);
|
|
162
|
+
}
|
|
163
|
+
if (options.doraMetrics) {
|
|
164
|
+
lines.push("");
|
|
165
|
+
lines.push(" - name: DORA outputs");
|
|
166
|
+
lines.push(" if: always()");
|
|
167
|
+
lines.push(" run: |");
|
|
168
|
+
lines.push(' echo "dora-rating: ${{ steps.gate.outputs.dora-rating }}"');
|
|
169
|
+
lines.push(' echo "dora-freq: ${{ steps.gate.outputs.dora-deployment-frequency }}"');
|
|
170
|
+
lines.push(' echo "dora-cfr: ${{ steps.gate.outputs.dora-change-failure-rate }}"');
|
|
171
|
+
lines.push(' echo "dora-lead: ${{ steps.gate.outputs.dora-lead-time }}"');
|
|
172
|
+
lines.push(' echo "dora-fdrt: ${{ steps.gate.outputs.dora-fdrt }}"');
|
|
173
|
+
lines.push(' echo "dora-rework: ${{ steps.gate.outputs.dora-rework-rate }}"');
|
|
174
|
+
}
|
|
175
|
+
lines.push("");
|
|
176
|
+
return lines.join("\n") + "\n";
|
|
177
|
+
}
|
|
178
|
+
async function main() {
|
|
179
|
+
const args = process.argv.slice(2);
|
|
180
|
+
const command = args[0];
|
|
181
|
+
if (command !== "init") {
|
|
182
|
+
print(`
|
|
183
|
+
${BOLD}${GREEN}Trailhead CLI v3.0.2${RESET}
|
|
184
|
+
|
|
185
|
+
${BOLD}Usage:${RESET}
|
|
186
|
+
npx @komatikai/trailhead init Interactive setup wizard
|
|
187
|
+
|
|
188
|
+
${BOLD}Learn more:${RESET}
|
|
189
|
+
https://github.com/KomatikAI/trailhead
|
|
190
|
+
`);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const rl = readline.createInterface({
|
|
194
|
+
input: process.stdin,
|
|
195
|
+
output: process.stdout,
|
|
196
|
+
});
|
|
197
|
+
print(`\n${BOLD}${GREEN}Trailhead v3 Setup Wizard${RESET}\n`);
|
|
198
|
+
print(`${DIM}This will create .trailhead.yml and a GitHub Actions workflow.${RESET}\n`);
|
|
199
|
+
const riskStr = await ask(rl, `${CYAN}Risk threshold${RESET} (block above this score, 0-100)`, "70");
|
|
200
|
+
const riskThreshold = Math.max(0, Math.min(100, parseInt(riskStr, 10) || 70));
|
|
201
|
+
const warnStr = await ask(rl, `${CYAN}Warn threshold${RESET} (warn above this score)`, String(riskThreshold - 15));
|
|
202
|
+
const warnThreshold = Math.max(0, Math.min(100, parseInt(warnStr, 10) || riskThreshold - 15));
|
|
203
|
+
print(`\n${BOLD}Sensitive file patterns${RESET} ${DIM}(files that carry extra risk weight)${RESET}`);
|
|
204
|
+
const highInput = await ask(rl, "High-sensitivity globs (comma-separated)", "");
|
|
205
|
+
const highSensitivity = highInput
|
|
206
|
+
? highInput
|
|
207
|
+
.split(",")
|
|
208
|
+
.map((s) => s.trim())
|
|
209
|
+
.filter(Boolean)
|
|
210
|
+
: [];
|
|
211
|
+
const medInput = await ask(rl, "Medium-sensitivity globs (comma-separated)", "");
|
|
212
|
+
const mediumSensitivity = medInput
|
|
213
|
+
? medInput
|
|
214
|
+
.split(",")
|
|
215
|
+
.map((s) => s.trim())
|
|
216
|
+
.filter(Boolean)
|
|
217
|
+
: [];
|
|
218
|
+
print(`\n${BOLD}Environment configuration${RESET} ${DIM}(per-environment threshold overrides)${RESET}`);
|
|
219
|
+
const wantEnvs = await askYN(rl, "Configure environment-specific thresholds?", false);
|
|
220
|
+
const environments = [];
|
|
221
|
+
let environment = "";
|
|
222
|
+
if (wantEnvs) {
|
|
223
|
+
const envsInput = await ask(rl, "Environment names (comma-separated)", "production,staging");
|
|
224
|
+
const envNames = envsInput
|
|
225
|
+
.split(",")
|
|
226
|
+
.map((s) => s.trim())
|
|
227
|
+
.filter(Boolean);
|
|
228
|
+
for (const name of envNames) {
|
|
229
|
+
const r = await ask(rl, ` ${name} risk threshold`, String(riskThreshold));
|
|
230
|
+
const w = await ask(rl, ` ${name} warn threshold`, String(parseInt(r, 10) - 15));
|
|
231
|
+
environments.push({
|
|
232
|
+
name,
|
|
233
|
+
risk: parseInt(r, 10) || riskThreshold,
|
|
234
|
+
warn: parseInt(w, 10) || riskThreshold - 15,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
environment = envNames[0] ?? "";
|
|
238
|
+
}
|
|
239
|
+
print(`\n${BOLD}Service mapping${RESET} ${DIM}(monorepo per-service DORA + risk)${RESET}`);
|
|
240
|
+
const wantServices = await askYN(rl, "Configure service boundaries?", false);
|
|
241
|
+
const services = [];
|
|
242
|
+
if (wantServices) {
|
|
243
|
+
const svcInput = await ask(rl, "Service names (comma-separated)", "api,web");
|
|
244
|
+
const svcNames = svcInput
|
|
245
|
+
.split(",")
|
|
246
|
+
.map((s) => s.trim())
|
|
247
|
+
.filter(Boolean);
|
|
248
|
+
for (const name of svcNames) {
|
|
249
|
+
const p = await ask(rl, ` ${name} path globs (comma-separated)`, `src/${name}/**`);
|
|
250
|
+
const e = await ask(rl, ` ${name} environment`, "");
|
|
251
|
+
services.push({
|
|
252
|
+
name,
|
|
253
|
+
paths: p
|
|
254
|
+
.split(",")
|
|
255
|
+
.map((s) => s.trim())
|
|
256
|
+
.filter(Boolean),
|
|
257
|
+
env: e,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
print(`\n${BOLD}Health checks${RESET} ${DIM}(URLs to ping before scoring)${RESET}`);
|
|
262
|
+
const healthInput = await ask(rl, "Health check URLs (comma-separated, or blank to skip)", "");
|
|
263
|
+
const healthCheckUrls = healthInput
|
|
264
|
+
? healthInput
|
|
265
|
+
.split(",")
|
|
266
|
+
.map((s) => s.trim())
|
|
267
|
+
.filter(Boolean)
|
|
268
|
+
: [];
|
|
269
|
+
const doraMetrics = await askYN(rl, `${CYAN}Enable DORA-5 metrics?${RESET}`, true);
|
|
270
|
+
const doraEnvironment = doraMetrics
|
|
271
|
+
? await ask(rl, `${CYAN}DORA environment filter${RESET} (blank for all)`, environment || "")
|
|
272
|
+
: "";
|
|
273
|
+
const securityGate = await askYN(rl, `${CYAN}Enable security alerts gate?${RESET} ${DIM}(requires Code Scanning)${RESET}`, true);
|
|
274
|
+
print(`\n${BOLD}Canary / deploy tracking${RESET} ${DIM}(track deployment outcomes)${RESET}`);
|
|
275
|
+
const wantCanary = await askYN(rl, "Configure deployment outcome webhooks?", false);
|
|
276
|
+
let canaryType = "";
|
|
277
|
+
if (wantCanary) {
|
|
278
|
+
canaryType = await ask(rl, "Webhook type (vercel/generic)", "vercel");
|
|
279
|
+
}
|
|
280
|
+
const otelEndpoint = await ask(rl, `${CYAN}OTLP endpoint${RESET} (blank to skip)`, "");
|
|
281
|
+
const wantStore = await askYN(rl, `${CYAN}POST evaluations to a trend-store URL?${RESET} ${DIM}(optional)${RESET}`, false);
|
|
282
|
+
let evaluationStoreUrl = "";
|
|
283
|
+
let storeSecretName = "";
|
|
284
|
+
let supabaseFallback = false;
|
|
285
|
+
if (wantStore) {
|
|
286
|
+
evaluationStoreUrl = await ask(rl, "Store URL (your API that accepts Trailhead evaluation JSON)", "");
|
|
287
|
+
storeSecretName = await ask(rl, "GitHub Actions secret name for the Bearer token", "INTERNAL_API_SECRET");
|
|
288
|
+
supabaseFallback = await askYN(rl, "Include Supabase URL + service role for direct-insert fallback?", true);
|
|
289
|
+
}
|
|
290
|
+
print(`\n${BOLD}Release freeze${RESET} ${DIM}(block deploys during specific times)${RESET}`);
|
|
291
|
+
const wantFreeze = await askYN(rl, "Configure a freeze window?", false);
|
|
292
|
+
let freezeDays = [];
|
|
293
|
+
let freezeAfterHour = null;
|
|
294
|
+
if (wantFreeze) {
|
|
295
|
+
const daysInput = await ask(rl, "Freeze days (e.g. friday,saturday)", "friday");
|
|
296
|
+
freezeDays = daysInput
|
|
297
|
+
.split(",")
|
|
298
|
+
.map((s) => s.trim().toLowerCase())
|
|
299
|
+
.filter(Boolean);
|
|
300
|
+
const hourStr = await ask(rl, "Freeze after hour (0-23, UTC)", "15");
|
|
301
|
+
freezeAfterHour = Math.max(0, Math.min(23, parseInt(hourStr, 10) || 15));
|
|
302
|
+
}
|
|
303
|
+
rl.close();
|
|
304
|
+
print(`\n${BOLD}Writing files...${RESET}\n`);
|
|
305
|
+
const configContent = generateTrailheadYml({
|
|
306
|
+
highSensitivity,
|
|
307
|
+
mediumSensitivity,
|
|
308
|
+
riskThreshold,
|
|
309
|
+
warnThreshold,
|
|
310
|
+
freezeDays,
|
|
311
|
+
freezeAfterHour,
|
|
312
|
+
environments,
|
|
313
|
+
services,
|
|
314
|
+
securityGate,
|
|
315
|
+
canaryType,
|
|
316
|
+
});
|
|
317
|
+
const configPath = path.join(process.cwd(), ".trailhead.yml");
|
|
318
|
+
fs.writeFileSync(configPath, configContent, "utf-8");
|
|
319
|
+
print(` ${GREEN}✓${RESET} .trailhead.yml`);
|
|
320
|
+
const workflowDir = path.join(process.cwd(), ".github", "workflows");
|
|
321
|
+
fs.mkdirSync(workflowDir, { recursive: true });
|
|
322
|
+
const workflowContent = generateWorkflowYml({
|
|
323
|
+
riskThreshold,
|
|
324
|
+
healthCheckUrls,
|
|
325
|
+
doraMetrics,
|
|
326
|
+
doraEnvironment,
|
|
327
|
+
otelEndpoint,
|
|
328
|
+
evaluationStoreUrl,
|
|
329
|
+
storeSecretName,
|
|
330
|
+
supabaseFallback,
|
|
331
|
+
securityGate,
|
|
332
|
+
environment,
|
|
333
|
+
});
|
|
334
|
+
const workflowPath = path.join(workflowDir, "trailhead.yml");
|
|
335
|
+
if (fs.existsSync(workflowPath)) {
|
|
336
|
+
print(` ${YELLOW}⚠${RESET} .github/workflows/trailhead.yml already exists — writing to trailhead-generated.yml`);
|
|
337
|
+
fs.writeFileSync(path.join(workflowDir, "trailhead-generated.yml"), workflowContent, "utf-8");
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
fs.writeFileSync(workflowPath, workflowContent, "utf-8");
|
|
341
|
+
print(` ${GREEN}✓${RESET} .github/workflows/trailhead.yml`);
|
|
342
|
+
}
|
|
343
|
+
print(`
|
|
344
|
+
${BOLD}${GREEN}Setup complete!${RESET}
|
|
345
|
+
|
|
346
|
+
${BOLD}Next steps:${RESET}
|
|
347
|
+
1. Review the generated files
|
|
348
|
+
2. Commit and push to your repository
|
|
349
|
+
3. Open a PR to see Trailhead in action
|
|
350
|
+
|
|
351
|
+
${DIM}Docs: https://github.com/KomatikAI/trailhead${RESET}
|
|
352
|
+
`);
|
|
353
|
+
}
|
|
354
|
+
main().catch((err) => {
|
|
355
|
+
console.error("Error:", err);
|
|
356
|
+
process.exit(1);
|
|
357
|
+
});
|
|
358
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@komatikai/trailhead",
|
|
3
|
+
"version": "3.0.2",
|
|
4
|
+
"description": "Trailhead CLI — setup wizard and utilities for the Trailhead deployment gate",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"trailhead": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"prepublishOnly": "npm run build",
|
|
12
|
+
"start": "node dist/index.js"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"keywords": [
|
|
18
|
+
"deploy",
|
|
19
|
+
"deployment",
|
|
20
|
+
"gate",
|
|
21
|
+
"cicd",
|
|
22
|
+
"github-actions",
|
|
23
|
+
"risk",
|
|
24
|
+
"dora"
|
|
25
|
+
],
|
|
26
|
+
"license": "MIT",
|
|
27
|
+
"dependencies": {},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^25.8.0",
|
|
30
|
+
"typescript": "^5.5.0"
|
|
31
|
+
}
|
|
32
|
+
}
|