@pipeline-builder/pipeline-manager 0.0.1
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/LICENSE +202 -0
- package/README.md +145 -0
- package/cdk.json +91 -0
- package/config.yml +94 -0
- package/dist/agent/ai.d.ts +48 -0
- package/dist/agent/ai.d.ts.map +1 -0
- package/dist/agent/ai.js +149 -0
- package/dist/agent/bootstrap.d.ts +39 -0
- package/dist/agent/bootstrap.d.ts.map +1 -0
- package/dist/agent/bootstrap.js +66 -0
- package/dist/agent/env-file.d.ts +17 -0
- package/dist/agent/env-file.d.ts.map +1 -0
- package/dist/agent/env-file.js +47 -0
- package/dist/agent/executor.d.ts +30 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +60 -0
- package/dist/agent/health.d.ts +43 -0
- package/dist/agent/health.d.ts.map +1 -0
- package/dist/agent/health.js +109 -0
- package/dist/agent/ports.d.ts +26 -0
- package/dist/agent/ports.d.ts.map +1 -0
- package/dist/agent/ports.js +132 -0
- package/dist/agent/post-steps.d.ts +61 -0
- package/dist/agent/post-steps.d.ts.map +1 -0
- package/dist/agent/post-steps.js +131 -0
- package/dist/agent/prereqs.d.ts +26 -0
- package/dist/agent/prereqs.d.ts.map +1 -0
- package/dist/agent/prereqs.js +134 -0
- package/dist/agent/targets.d.ts +128 -0
- package/dist/agent/targets.d.ts.map +1 -0
- package/dist/agent/targets.js +265 -0
- package/dist/agent/tools.d.ts +13 -0
- package/dist/agent/tools.d.ts.map +1 -0
- package/dist/agent/tools.js +75 -0
- package/dist/agent/troubleshoot.d.ts +30 -0
- package/dist/agent/troubleshoot.d.ts.map +1 -0
- package/dist/agent/troubleshoot.js +87 -0
- package/dist/boilerplate.d.ts +3 -0
- package/dist/boilerplate.d.ts.map +1 -0
- package/dist/boilerplate.js +54 -0
- package/dist/cdk.json +91 -0
- package/dist/cli.d.ts +62 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +463 -0
- package/dist/commands/audit-stacks.d.ts +24 -0
- package/dist/commands/audit-stacks.d.ts.map +1 -0
- package/dist/commands/audit-stacks.js +182 -0
- package/dist/commands/audit-tokens.d.ts +21 -0
- package/dist/commands/audit-tokens.d.ts.map +1 -0
- package/dist/commands/audit-tokens.js +153 -0
- package/dist/commands/bootstrap.d.ts +11 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +159 -0
- package/dist/commands/create-pat.d.ts +27 -0
- package/dist/commands/create-pat.d.ts.map +1 -0
- package/dist/commands/create-pat.js +194 -0
- package/dist/commands/create-pipeline.d.ts +12 -0
- package/dist/commands/create-pipeline.d.ts.map +1 -0
- package/dist/commands/create-pipeline.js +315 -0
- package/dist/commands/deploy.d.ts +15 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +157 -0
- package/dist/commands/entity-get.d.ts +51 -0
- package/dist/commands/entity-get.d.ts.map +1 -0
- package/dist/commands/entity-get.js +69 -0
- package/dist/commands/entity-list.d.ts +39 -0
- package/dist/commands/entity-list.d.ts.map +1 -0
- package/dist/commands/entity-list.js +88 -0
- package/dist/commands/get-pipeline.d.ts +13 -0
- package/dist/commands/get-pipeline.d.ts.map +1 -0
- package/dist/commands/get-pipeline.js +49 -0
- package/dist/commands/get-plugin.d.ts +13 -0
- package/dist/commands/get-plugin.d.ts.map +1 -0
- package/dist/commands/get-plugin.js +51 -0
- package/dist/commands/instantiate-template.d.ts +20 -0
- package/dist/commands/instantiate-template.d.ts.map +1 -0
- package/dist/commands/instantiate-template.js +274 -0
- package/dist/commands/list-pipelines.d.ts +20 -0
- package/dist/commands/list-pipelines.d.ts.map +1 -0
- package/dist/commands/list-pipelines.js +99 -0
- package/dist/commands/list-plugins.d.ts +20 -0
- package/dist/commands/list-plugins.d.ts.map +1 -0
- package/dist/commands/list-plugins.js +92 -0
- package/dist/commands/login.d.ts +21 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +174 -0
- package/dist/commands/new-plugin.d.ts +12 -0
- package/dist/commands/new-plugin.d.ts.map +1 -0
- package/dist/commands/new-plugin.js +129 -0
- package/dist/commands/org-export.d.ts +25 -0
- package/dist/commands/org-export.d.ts.map +1 -0
- package/dist/commands/org-export.js +100 -0
- package/dist/commands/provision.d.ts +122 -0
- package/dist/commands/provision.d.ts.map +1 -0
- package/dist/commands/provision.js +867 -0
- package/dist/commands/redrive-events.d.ts +24 -0
- package/dist/commands/redrive-events.d.ts.map +1 -0
- package/dist/commands/redrive-events.js +127 -0
- package/dist/commands/register.d.ts +38 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +160 -0
- package/dist/commands/setup-events.d.ts +15 -0
- package/dist/commands/setup-events.d.ts.map +1 -0
- package/dist/commands/setup-events.js +168 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +81 -0
- package/dist/commands/store-token.d.ts +26 -0
- package/dist/commands/store-token.d.ts.map +1 -0
- package/dist/commands/store-token.js +305 -0
- package/dist/commands/synth.d.ts +21 -0
- package/dist/commands/synth.d.ts.map +1 -0
- package/dist/commands/synth.js +158 -0
- package/dist/commands/upload-plugin.d.ts +21 -0
- package/dist/commands/upload-plugin.d.ts.map +1 -0
- package/dist/commands/upload-plugin.js +275 -0
- package/dist/commands/validate-plugin.d.ts +12 -0
- package/dist/commands/validate-plugin.d.ts.map +1 -0
- package/dist/commands/validate-plugin.js +175 -0
- package/dist/commands/validate-templates.d.ts +11 -0
- package/dist/commands/validate-templates.d.ts.map +1 -0
- package/dist/commands/validate-templates.js +116 -0
- package/dist/commands/version.d.ts +12 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +216 -0
- package/dist/config/cli.constants.d.ts +116 -0
- package/dist/config/cli.constants.d.ts.map +1 -0
- package/dist/config/cli.constants.js +194 -0
- package/dist/config.yml +94 -0
- package/dist/lambda/token-renew-handler.d.ts +2 -0
- package/dist/lambda/token-renew-handler.d.ts.map +1 -0
- package/dist/lambda/token-renew-handler.js +125 -0
- package/dist/templates/events-stack.json +174 -0
- package/dist/templates/token-renew-stack.json +122 -0
- package/dist/types/config.d.ts +53 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +4 -0
- package/dist/types/error.d.ts +61 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +35 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/pipeline-template.d.ts +48 -0
- package/dist/types/pipeline-template.d.ts.map +1 -0
- package/dist/types/pipeline-template.js +4 -0
- package/dist/types/pipeline.d.ts +121 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +4 -0
- package/dist/types/plugin.d.ts +135 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +4 -0
- package/dist/utils/api-client.d.ts +26 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +151 -0
- package/dist/utils/audit-log.d.ts +8 -0
- package/dist/utils/audit-log.d.ts.map +1 -0
- package/dist/utils/audit-log.js +57 -0
- package/dist/utils/auth-guard.d.ts +20 -0
- package/dist/utils/auth-guard.d.ts.map +1 -0
- package/dist/utils/auth-guard.js +22 -0
- package/dist/utils/auth-utils.d.ts +68 -0
- package/dist/utils/auth-utils.d.ts.map +1 -0
- package/dist/utils/auth-utils.js +77 -0
- package/dist/utils/aws-env.d.ts +21 -0
- package/dist/utils/aws-env.d.ts.map +1 -0
- package/dist/utils/aws-env.js +34 -0
- package/dist/utils/aws-secrets.d.ts +48 -0
- package/dist/utils/aws-secrets.d.ts.map +1 -0
- package/dist/utils/aws-secrets.js +115 -0
- package/dist/utils/banner.d.ts +19 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +52 -0
- package/dist/utils/cdk-utils.d.ts +74 -0
- package/dist/utils/cdk-utils.d.ts.map +1 -0
- package/dist/utils/cdk-utils.js +152 -0
- package/dist/utils/command-utils.d.ts +75 -0
- package/dist/utils/command-utils.d.ts.map +1 -0
- package/dist/utils/command-utils.js +155 -0
- package/dist/utils/config-loader.d.ts +33 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +154 -0
- package/dist/utils/cron.d.ts +28 -0
- package/dist/utils/cron.d.ts.map +1 -0
- package/dist/utils/cron.js +119 -0
- package/dist/utils/deploy-runner.d.ts +38 -0
- package/dist/utils/deploy-runner.d.ts.map +1 -0
- package/dist/utils/deploy-runner.js +112 -0
- package/dist/utils/error-handler.d.ts +29 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +302 -0
- package/dist/utils/list-command-utils.d.ts +23 -0
- package/dist/utils/list-command-utils.d.ts.map +1 -0
- package/dist/utils/list-command-utils.js +57 -0
- package/dist/utils/output-utils.d.ts +40 -0
- package/dist/utils/output-utils.d.ts.map +1 -0
- package/dist/utils/output-utils.js +250 -0
- package/dist/utils/pipeline-config.d.ts +33 -0
- package/dist/utils/pipeline-config.d.ts.map +1 -0
- package/dist/utils/pipeline-config.js +55 -0
- package/dist/utils/platform-secret.d.ts +27 -0
- package/dist/utils/platform-secret.d.ts.map +1 -0
- package/dist/utils/platform-secret.js +92 -0
- package/dist/utils/plugin-resolver.d.ts +17 -0
- package/dist/utils/plugin-resolver.d.ts.map +1 -0
- package/dist/utils/plugin-resolver.js +101 -0
- package/dist/utils/preflight.d.ts +26 -0
- package/dist/utils/preflight.d.ts.map +1 -0
- package/dist/utils/preflight.js +59 -0
- package/dist/utils/rate-limiter.d.ts +15 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +164 -0
- package/dist/utils/registry.d.ts +86 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/utils/registry.js +140 -0
- package/dist/utils/response-utils.d.ts +21 -0
- package/dist/utils/response-utils.d.ts.map +1 -0
- package/dist/utils/response-utils.js +70 -0
- package/dist/utils/tls.d.ts +52 -0
- package/dist/utils/tls.d.ts.map +1 -0
- package/dist/utils/tls.js +88 -0
- package/package.json +181 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import YAML from 'yaml';
|
|
7
|
+
import { printCommandHeader, printSslWarning, createAuthenticatedClientAsync, withSslOptions } from '../utils/command-utils.js';
|
|
8
|
+
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
9
|
+
import { printError, printInfo, printSuccess, printWarning } from '../utils/output-utils.js';
|
|
10
|
+
/**
|
|
11
|
+
* Register the `validate-templates` command.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* pipeline-manager template validate --pipeline <uuid>
|
|
15
|
+
* pipeline-manager template validate --plugin <name:version>
|
|
16
|
+
* pipeline-manager template validate --file ./plugin-spec.yaml
|
|
17
|
+
*/
|
|
18
|
+
export function validateTemplatesCommand(program) {
|
|
19
|
+
withSslOptions(program
|
|
20
|
+
.command('validate')
|
|
21
|
+
.description('Parse and validate {{ ... }} templates in a pipeline or plugin spec')
|
|
22
|
+
.option('--pipeline <id>', 'Validate the pipeline with this ID')
|
|
23
|
+
.option('--plugin <name:version>', 'Validate the plugin with this name and version')
|
|
24
|
+
.option('--file <path>', 'Validate a local plugin-spec.yaml or pipeline.json file'))
|
|
25
|
+
.action(async (options) => {
|
|
26
|
+
const executionId = printCommandHeader('Validate Templates');
|
|
27
|
+
try {
|
|
28
|
+
printSslWarning(options.verifySsl);
|
|
29
|
+
if (!options.pipeline && !options.plugin && !options.file) {
|
|
30
|
+
throw new Error('One of --pipeline, --plugin, or --file is required');
|
|
31
|
+
}
|
|
32
|
+
const core = await import('@pipeline-builder/pipeline-core');
|
|
33
|
+
const problems = [];
|
|
34
|
+
if (options.file) {
|
|
35
|
+
const filePath = path.resolve(options.file);
|
|
36
|
+
const text = fs.readFileSync(filePath, 'utf-8');
|
|
37
|
+
const doc = filePath.endsWith('.json') ? JSON.parse(text) : YAML.parse(text);
|
|
38
|
+
// Guess: if `pluginType` is present, treat as plugin spec; else pipeline
|
|
39
|
+
const isPlugin = typeof doc.pluginType === 'string';
|
|
40
|
+
const errors = isPlugin
|
|
41
|
+
? validatePluginDoc(core, doc)
|
|
42
|
+
: validatePipelineDoc(core, doc);
|
|
43
|
+
if (errors.length)
|
|
44
|
+
problems.push({ source: filePath, errors });
|
|
45
|
+
}
|
|
46
|
+
if (options.pipeline) {
|
|
47
|
+
printInfo('Fetching pipeline', { id: options.pipeline });
|
|
48
|
+
const client = await createAuthenticatedClientAsync(options);
|
|
49
|
+
const cfg = client.getConfig();
|
|
50
|
+
const res = await client.get(`${cfg.api.pipelineUrl}/${options.pipeline}`);
|
|
51
|
+
const doc = res.pipeline?.props
|
|
52
|
+
?? res.data?.pipeline?.props;
|
|
53
|
+
if (!doc)
|
|
54
|
+
throw new Error(`Pipeline ${options.pipeline} not found`);
|
|
55
|
+
const errors = validatePipelineDoc(core, doc);
|
|
56
|
+
if (errors.length)
|
|
57
|
+
problems.push({ source: `pipeline/${options.pipeline}`, errors });
|
|
58
|
+
}
|
|
59
|
+
if (options.plugin) {
|
|
60
|
+
const [name, version] = options.plugin.split(':');
|
|
61
|
+
if (!name || !version)
|
|
62
|
+
throw new Error('--plugin requires <name:version> format');
|
|
63
|
+
printInfo('Fetching plugin', { name, version });
|
|
64
|
+
const client = await createAuthenticatedClientAsync(options);
|
|
65
|
+
const cfg = client.getConfig();
|
|
66
|
+
const res = await client.get(`${cfg.api.pluginUrl}/find?name=${encodeURIComponent(name)}&version=${encodeURIComponent(version)}`);
|
|
67
|
+
const doc = res.plugin
|
|
68
|
+
?? res.data?.plugin;
|
|
69
|
+
if (!doc)
|
|
70
|
+
throw new Error(`Plugin ${name}:${version} not found`);
|
|
71
|
+
const errors = validatePluginDoc(core, doc);
|
|
72
|
+
if (errors.length)
|
|
73
|
+
problems.push({ source: `plugin/${name}:${version}`, errors });
|
|
74
|
+
}
|
|
75
|
+
if (problems.length === 0) {
|
|
76
|
+
printSuccess('All templates valid', { executionId });
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
printWarning(`Found ${problems.reduce((a, p) => a + p.errors.length, 0)} template error(s):`);
|
|
80
|
+
for (const p of problems) {
|
|
81
|
+
printError(p.source);
|
|
82
|
+
for (const e of p.errors) {
|
|
83
|
+
console.log(` [${e.field ?? '?'}] ${e.message}${e.code ? ` (${e.code})` : ''}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
handleError(err, ERROR_CODES.API_REQUEST, {
|
|
90
|
+
debug: program.opts().debug,
|
|
91
|
+
exit: true,
|
|
92
|
+
context: { command: 'validate-templates', executionId },
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function validatePluginDoc(core, doc) {
|
|
98
|
+
const isTpl = (f) => f === 'description' ||
|
|
99
|
+
f.startsWith('commands') ||
|
|
100
|
+
f.startsWith('installCommands') ||
|
|
101
|
+
f.startsWith('env.') || f.startsWith('env[') ||
|
|
102
|
+
f.startsWith('buildArgs.') || f.startsWith('buildArgs[');
|
|
103
|
+
const isKnown = core.allowedScopeRoots(['pipeline', 'plugin', 'env']);
|
|
104
|
+
const { errors } = core.validateTemplates(doc, isTpl, isKnown);
|
|
105
|
+
return errors;
|
|
106
|
+
}
|
|
107
|
+
function validatePipelineDoc(core, doc) {
|
|
108
|
+
const isTpl = (f) => f === 'projectName' ||
|
|
109
|
+
f.startsWith('metadata.') || f.startsWith('metadata[') ||
|
|
110
|
+
f.startsWith('vars.') || f.startsWith('vars[');
|
|
111
|
+
const isKnown = core.allowedScopeRoots(['metadata', 'vars']);
|
|
112
|
+
const { errors } = core.validateTemplates(doc, isTpl, isKnown);
|
|
113
|
+
const cycles = core.detectCycles(doc, isTpl, (f) => isTpl(f) ? f : null);
|
|
114
|
+
return [...errors, ...cycles];
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtdGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3ZhbGlkYXRlLXRlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoSSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVM3Rjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE9BQWdCO0lBQ3ZELGNBQWMsQ0FBQyxPQUFPO1NBQ25CLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDbkIsV0FBVyxDQUFDLHFFQUFxRSxDQUFDO1NBQ2xGLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxvQ0FBb0MsQ0FBQztTQUMvRCxNQUFNLENBQUMseUJBQXlCLEVBQUUsZ0RBQWdELENBQUM7U0FDbkYsTUFBTSxDQUFDLGVBQWUsRUFBRSx5REFBeUQsQ0FBQyxDQUFDO1NBQ25GLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBd0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDO1lBQ0gsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVu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bmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IFlBTUwgZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jLCB3aXRoU3NsT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuaW50ZXJmYWNlIFZhbGlkYXRlT3B0aW9ucyB7XG4gIHBpcGVsaW5lPzogc3RyaW5nO1xuICBwbHVnaW4/OiBzdHJpbmc7XG4gIGZpbGU/OiBzdHJpbmc7XG4gIHZlcmlmeVNzbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIGB2YWxpZGF0ZS10ZW1wbGF0ZXNgIGNvbW1hbmQuXG4gKlxuICogVXNhZ2U6XG4gKiAgIHBpcGVsaW5lLW1hbmFnZXIgdGVtcGxhdGUgdmFsaWRhdGUgLS1waXBlbGluZSA8dXVpZD5cbiAqICAgcGlwZWxpbmUtbWFuYWdlciB0ZW1wbGF0ZSB2YWxpZGF0ZSAtLXBsdWdpbiA8bmFtZTp2ZXJzaW9uPlxuICogICBwaXBlbGluZS1tYW5hZ2VyIHRlbXBsYXRlIHZhbGlkYXRlIC0tZmlsZSAuL3BsdWdpbi1zcGVjLnlhbWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVGVtcGxhdGVzQ29tbWFuZChwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKHByb2dyYW1cbiAgICAuY29tbWFuZCgndmFsaWRhdGUnKVxuICAgIC5kZXNjcmlwdGlvbignUGFyc2UgYW5kIHZhbGlkYXRlIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgaW4gYSBwaXBlbGluZSBvciBwbHVnaW4gc3BlYycpXG4gICAgLm9wdGlvbignLS1waXBlbGluZSA8aWQ+JywgJ1ZhbGlkYXRlIHRoZSBwaXBlbGluZSB3aXRoIHRoaXMgSUQnKVxuICAgIC5vcHRpb24oJy0tcGx1Z2luIDxuYW1lOnZlcnNpb24+JywgJ1ZhbGlkYXRlIHRoZSBwbHVnaW4gd2l0aCB0aGlzIG5hbWUgYW5kIHZlcnNpb24nKVxuICAgIC5vcHRpb24oJy0tZmlsZSA8cGF0aD4nLCAnVmFsaWRhdGUgYSBsb2NhbCBwbHVnaW4tc3BlYy55YW1sIG9yIHBpcGVsaW5lLmpzb24gZmlsZScpKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IFZhbGlkYXRlT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ1ZhbGlkYXRlIFRlbXBsYXRlcycpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMucGlwZWxpbmUgJiYgIW9wdGlvbnMucGx1Z2luICYmICFvcHRpb25zLmZpbGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09uZSBvZiAtLXBpcGVsaW5lLCAtLXBsdWdpbiwgb3IgLS1maWxlIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb3JlID0gYXdhaXQgaW1wb3J0KCdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1jb3JlJyk7XG5cbiAgICAgICAgY29uc3QgcHJvYmxlbXM6IEFycmF5PHsgc291cmNlOiBzdHJpbmc7IGVycm9yczogeyBmaWVsZD86IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBjb2RlPzogc3RyaW5nIH1bXSB9PiA9IFtdO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmZpbGUpIHtcbiAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmZpbGUpO1xuICAgICAgICAgIGNvbnN0IHRleHQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgICAgIGNvbnN0IGRvYyA9IGZpbGVQYXRoLmVuZHNXaXRoKCcuanNvbicpID8gSlNPTi5wYXJzZSh0ZXh0KSA6IFlBTUwucGFyc2UodGV4dCk7XG5cbiAgICAgICAgICAvLyBHdWVzczogaWYgYHBsdWdpblR5cGVgIGlzIHByZXNlbnQsIHRyZWF0IGFzIHBsdWdpbiBzcGVjOyBlbHNlIHBpcGVsaW5lXG4gICAgICAgICAgY29uc3QgaXNQbHVnaW4gPSB0eXBlb2YgKGRvYyBhcyB7IHBsdWdpblR5cGU/OiB1bmtub3duIH0pLnBsdWdpblR5cGUgPT09ICdzdHJpbmcnO1xuICAgICAgICAgIGNvbnN0IGVycm9ycyA9IGlzUGx1Z2luXG4gICAgICAgICAgICA/IHZhbGlkYXRlUGx1Z2luRG9jKGNvcmUsIGRvYylcbiAgICAgICAgICAgIDogdmFsaWRhdGVQaXBlbGluZURvYyhjb3JlLCBkb2MpO1xuICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSBwcm9ibGVtcy5wdXNoKHsgc291cmNlOiBmaWxlUGF0aCwgZXJyb3JzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGlwZWxpbmUpIHtcbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBpcGVsaW5lJywgeyBpZDogb3B0aW9ucy5waXBlbGluZSB9KTtcbiAgICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgICAgICAgY29uc3QgY2ZnID0gY2xpZW50LmdldENvbmZpZygpO1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8eyBwaXBlbGluZT86IHsgcHJvcHM6IHVua25vd24gfSB9PihgJHtjZmcuYXBpLnBpcGVsaW5lVXJsfS8ke29wdGlvbnMucGlwZWxpbmV9YCk7XG4gICAgICAgICAgY29uc3QgZG9jID0gKHJlcyBhcyB7IHBpcGVsaW5lPzogeyBwcm9wczogdW5rbm93biB9IH0pLnBpcGVsaW5lPy5wcm9wc1xuICAgICAgICAgICAgPz8gKHJlcyBhcyB7IGRhdGE/OiB7IHBpcGVsaW5lPzogeyBwcm9wczogdW5rbm93biB9IH0gfSkuZGF0YT8ucGlwZWxpbmU/LnByb3BzO1xuICAgICAgICAgIGlmICghZG9jKSB0aHJvdyBuZXcgRXJyb3IoYFBpcGVsaW5lICR7b3B0aW9ucy5waXBlbGluZX0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVQaXBlbGluZURvYyhjb3JlLCBkb2MpO1xuICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSBwcm9ibGVtcy5wdXNoKHsgc291cmNlOiBgcGlwZWxpbmUvJHtvcHRpb25zLnBpcGVsaW5lfWAsIGVycm9ycyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBsdWdpbikge1xuICAgICAgICAgIGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSA9IG9wdGlvbnMucGx1Z2luLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgaWYgKCFuYW1lIHx8ICF2ZXJzaW9uKSB0aHJvdyBuZXcgRXJyb3IoJy0tcGx1Z2luIHJlcXVpcmVzIDxuYW1lOnZlcnNpb24+IGZvcm1hdCcpO1xuICAgICAgICAgIHByaW50SW5mbygnRmV0Y2hpbmcgcGx1Z2luJywgeyBuYW1lLCB2ZXJzaW9uIH0pO1xuICAgICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgICBjb25zdCBjZmcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LmdldDx7IHBsdWdpbjogdW5rbm93biB9PihcbiAgICAgICAgICAgIGAke2NmZy5hcGkucGx1Z2luVXJsfS9maW5kP25hbWU9JHtlbmNvZGVVUklDb21wb25lbnQobmFtZSl9JnZlcnNpb249JHtlbmNvZGVVUklDb21wb25lbnQodmVyc2lvbil9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRvYyA9IChyZXMgYXMgeyBwbHVnaW4/OiB1bmtub3duIH0pLnBsdWdpblxuICAgICAgICAgICAgPz8gKHJlcyBhcyB7IGRhdGE/OiB7IHBsdWdpbj86IHVua25vd24gfSB9KS5kYXRhPy5wbHVnaW47XG4gICAgICAgICAgaWYgKCFkb2MpIHRocm93IG5ldyBFcnJvcihgUGx1Z2luICR7bmFtZX06JHt2ZXJzaW9ufSBub3QgZm91bmRgKTtcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZVBsdWdpbkRvYyhjb3JlLCBkb2MpO1xuICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoKSBwcm9ibGVtcy5wdXNoKHsgc291cmNlOiBgcGx1Z2luLyR7bmFtZX06JHt2ZXJzaW9ufWAsIGVycm9ycyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9ibGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0FsbCB0ZW1wbGF0ZXMgdmFsaWQnLCB7IGV4ZWN1dGlvbklkIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50V2FybmluZyhgRm91bmQgJHtwcm9ibGVtcy5yZWR1Y2UoKGEsIHApID0+IGEgKyBwLmVycm9ycy5sZW5ndGgsIDApfSB0ZW1wbGF0ZSBlcnJvcihzKTpgKTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHByb2JsZW1zKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcihwLnNvdXJjZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBlIG9mIHAuZXJyb3JzKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgIFske2UuZmllbGQgPz8gJz8nfV0gJHtlLm1lc3NhZ2V9JHtlLmNvZGUgPyBgICgke2UuY29kZX0pYCA6ICcnfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3ZhbGlkYXRlLXRlbXBsYXRlcycsIGV4ZWN1dGlvbklkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVBsdWdpbkRvYyhjb3JlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBkb2M6IHVua25vd24pOiBBcnJheTx7IGZpZWxkPzogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfT4ge1xuICBjb25zdCBpc1RwbCA9IChmOiBzdHJpbmcpID0+XG4gICAgZiA9PT0gJ2Rlc2NyaXB0aW9uJyB8fFxuICAgIGYuc3RhcnRzV2l0aCgnY29tbWFuZHMnKSB8fFxuICAgIGYuc3RhcnRzV2l0aCgnaW5zdGFsbENvbW1hbmRzJykgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2Vudi4nKSB8fCBmLnN0YXJ0c1dpdGgoJ2VudlsnKSB8fFxuICAgIGYuc3RhcnRzV2l0aCgnYnVpbGRBcmdzLicpIHx8IGYuc3RhcnRzV2l0aCgnYnVpbGRBcmdzWycpO1xuICBjb25zdCBpc0tub3duID0gY29yZS5hbGxvd2VkU2NvcGVSb290cyhbJ3BpcGVsaW5lJywgJ3BsdWdpbicsICdlbnYnXSk7XG4gIGNvbnN0IHsgZXJyb3JzIH0gPSBjb3JlLnZhbGlkYXRlVGVtcGxhdGVzKGRvYywgaXNUcGwsIGlzS25vd24pO1xuICByZXR1cm4gZXJyb3JzO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVBpcGVsaW5lRG9jKGNvcmU6IFJlY29yZDxzdHJpbmcsIGFueT4sIGRvYzogdW5rbm93bik6IEFycmF5PHsgZmllbGQ/OiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZzsgY29kZT86IHN0cmluZyB9PiB7XG4gIGNvbnN0IGlzVHBsID0gKGY6IHN0cmluZykgPT5cbiAgICBmID09PSAncHJvamVjdE5hbWUnIHx8XG4gICAgZi5zdGFydHNXaXRoKCdtZXRhZGF0YS4nKSB8fCBmLnN0YXJ0c1dpdGgoJ21ldGFkYXRhWycpIHx8XG4gICAgZi5zdGFydHNXaXRoKCd2YXJzLicpIHx8IGYuc3RhcnRzV2l0aCgndmFyc1snKTtcbiAgY29uc3QgaXNLbm93biA9IGNvcmUuYWxsb3dlZFNjb3BlUm9vdHMoWydtZXRhZGF0YScsICd2YXJzJ10pO1xuICBjb25zdCB7IGVycm9ycyB9ID0gY29yZS52YWxpZGF0ZVRlbXBsYXRlcyhkb2MsIGlzVHBsLCBpc0tub3duKTtcbiAgY29uc3QgY3ljbGVzID0gY29yZS5kZXRlY3RDeWNsZXMoZG9jLCBpc1RwbCwgKGY6IHN0cmluZykgPT4gaXNUcGwoZikgPyBmIDogbnVsbCk7XG4gIHJldHVybiBbLi4uZXJyb3JzLCAuLi5jeWNsZXNdO1xufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers the `version` command with the CLI program.
|
|
4
|
+
*
|
|
5
|
+
* Displays the CLI name/version, AWS CDK status, and optionally
|
|
6
|
+
* full system diagnostics (`--verbose`) or configuration validation
|
|
7
|
+
* (`--check-config`). Supports `--json` for machine-readable output.
|
|
8
|
+
*
|
|
9
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
10
|
+
*/
|
|
11
|
+
export declare function version(program: Command): void;
|
|
12
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoFpC;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuJ9C"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import pico from 'picocolors';
|
|
6
|
+
import { APP_NAME, APP_VERSION, generateExecutionId } from '../config/cli.constants.js';
|
|
7
|
+
import { getCdkInfo } from '../utils/cdk-utils.js';
|
|
8
|
+
import { getConfig } from '../utils/config-loader.js';
|
|
9
|
+
import { ERROR_CODES, handleError } from '../utils/error-handler.js';
|
|
10
|
+
import { printDivider, printError, printInfo, printKeyValue, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
|
|
11
|
+
const { bold, cyan, dim, green, magenta, red, yellow } = pico;
|
|
12
|
+
/**
|
|
13
|
+
* Collects runtime system information including Node.js/npm versions,
|
|
14
|
+
* platform, architecture, heap memory usage, and process uptime.
|
|
15
|
+
*/
|
|
16
|
+
function getSystemInfo() {
|
|
17
|
+
const mem = process.memoryUsage();
|
|
18
|
+
const totalMem = (mem.heapTotal / 1024 / 1024).toFixed(2);
|
|
19
|
+
const availableHeap = ((mem.heapTotal - mem.heapUsed) / 1024 / 1024).toFixed(2);
|
|
20
|
+
const uptime = process.uptime();
|
|
21
|
+
let npm;
|
|
22
|
+
try {
|
|
23
|
+
npm = execSync('npm --version', { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
npm = null;
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
nodejs: process.version,
|
|
30
|
+
npm,
|
|
31
|
+
platform: process.platform,
|
|
32
|
+
architecture: process.arch,
|
|
33
|
+
memory: { total: `${totalMem} MB`, availableHeap: `${availableHeap} MB` },
|
|
34
|
+
uptime: `${Math.floor(uptime / 3600)}h ${Math.floor((uptime % 3600) / 60)}m ${Math.floor(uptime % 60)}s`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Attempts to load the CLI configuration and reports whether it is valid.
|
|
39
|
+
* @returns An object with `valid: true` on success, or `valid: false` with an error message.
|
|
40
|
+
*/
|
|
41
|
+
function checkConfiguration() {
|
|
42
|
+
try {
|
|
43
|
+
getConfig();
|
|
44
|
+
return { valid: true };
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return {
|
|
48
|
+
valid: false,
|
|
49
|
+
error: error instanceof Error ? error.message : String(error),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Checks which key environment variables are currently set.
|
|
55
|
+
* @returns Presence flags for `PLATFORM_TOKEN`, `PLATFORM_BASE_URL`, and `CLI_CONFIG_PATH`.
|
|
56
|
+
*/
|
|
57
|
+
function getEnvironmentStatus() {
|
|
58
|
+
return {
|
|
59
|
+
token: !!process.env.PLATFORM_TOKEN,
|
|
60
|
+
url: !!process.env.PLATFORM_BASE_URL,
|
|
61
|
+
configPath: !!process.env.CLI_CONFIG_PATH,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Registers the `version` command with the CLI program.
|
|
66
|
+
*
|
|
67
|
+
* Displays the CLI name/version, AWS CDK status, and optionally
|
|
68
|
+
* full system diagnostics (`--verbose`) or configuration validation
|
|
69
|
+
* (`--check-config`). Supports `--json` for machine-readable output.
|
|
70
|
+
*
|
|
71
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
72
|
+
*/
|
|
73
|
+
export function version(program) {
|
|
74
|
+
program
|
|
75
|
+
.command('version')
|
|
76
|
+
.description('Display CLI version and environment information')
|
|
77
|
+
.option('--verbose', 'Show detailed environment information', false)
|
|
78
|
+
.option('--check-config', 'Verify configuration status', false)
|
|
79
|
+
.option('--json', 'Output in JSON format', false)
|
|
80
|
+
.action((options) => {
|
|
81
|
+
try {
|
|
82
|
+
const executionId = generateExecutionId();
|
|
83
|
+
const cdkInfo = getCdkInfo();
|
|
84
|
+
// JSON output
|
|
85
|
+
if (options.json) {
|
|
86
|
+
const systemInfo = getSystemInfo();
|
|
87
|
+
const configStatus = options.checkConfig ? checkConfiguration() : { valid: true };
|
|
88
|
+
const envStatus = getEnvironmentStatus();
|
|
89
|
+
console.log(JSON.stringify({
|
|
90
|
+
cli: { name: APP_NAME, version: APP_VERSION },
|
|
91
|
+
system: systemInfo,
|
|
92
|
+
cdk: { available: cdkInfo.available, version: cdkInfo.version },
|
|
93
|
+
configuration: { valid: configStatus.valid, error: configStatus.error },
|
|
94
|
+
environment: envStatus,
|
|
95
|
+
executionId,
|
|
96
|
+
timestamp: new Date().toISOString(),
|
|
97
|
+
}, null, 2));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Standard output
|
|
101
|
+
printSection('Version Information');
|
|
102
|
+
console.log(`${magenta(`[EXE-${executionId}]`)} ${cyan(bold('CLI Version Check'))}`);
|
|
103
|
+
console.log('');
|
|
104
|
+
printKeyValue({
|
|
105
|
+
'CLI Name': bold(APP_NAME),
|
|
106
|
+
'CLI Version': green(bold(APP_VERSION)),
|
|
107
|
+
});
|
|
108
|
+
printDivider();
|
|
109
|
+
// Verbose: system environment
|
|
110
|
+
if (options.verbose) {
|
|
111
|
+
printSection('System Environment');
|
|
112
|
+
const systemInfo = getSystemInfo();
|
|
113
|
+
printKeyValue({
|
|
114
|
+
'Node.js': systemInfo.nodejs,
|
|
115
|
+
'npm': systemInfo.npm || yellow('(not available)'),
|
|
116
|
+
'Platform': systemInfo.platform,
|
|
117
|
+
'Architecture': systemInfo.architecture,
|
|
118
|
+
'Memory (Heap)': `${systemInfo.memory.total} total, ${systemInfo.memory.availableHeap} available`,
|
|
119
|
+
'Process Uptime': systemInfo.uptime,
|
|
120
|
+
});
|
|
121
|
+
printDivider();
|
|
122
|
+
printSection('AWS CDK');
|
|
123
|
+
}
|
|
124
|
+
// CDK information
|
|
125
|
+
if (cdkInfo.available && cdkInfo.version) {
|
|
126
|
+
if (options.verbose)
|
|
127
|
+
printSuccess('AWS CDK is installed');
|
|
128
|
+
printKeyValue({
|
|
129
|
+
'CDK Version': green(cdkInfo.version),
|
|
130
|
+
'Status': green('✓ Available'),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
if (options.verbose) {
|
|
135
|
+
printWarning('AWS CDK is not installed');
|
|
136
|
+
console.log(dim(' Install CDK with: npm install -g aws-cdk'));
|
|
137
|
+
if (cdkInfo.error)
|
|
138
|
+
console.log(dim(` Error: ${cdkInfo.error}`));
|
|
139
|
+
}
|
|
140
|
+
printKeyValue({
|
|
141
|
+
'AWS CDK': red('✗ Not installed'),
|
|
142
|
+
'Status': red('✗ Not Available'),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
if (!options.verbose) {
|
|
146
|
+
console.log(dim('\n Run with --verbose for detailed environment information'));
|
|
147
|
+
}
|
|
148
|
+
// Configuration check
|
|
149
|
+
if (options.checkConfig) {
|
|
150
|
+
printDivider();
|
|
151
|
+
printSection('Configuration Status');
|
|
152
|
+
const configStatus = checkConfiguration();
|
|
153
|
+
const envStatus = getEnvironmentStatus();
|
|
154
|
+
if (configStatus.valid) {
|
|
155
|
+
printSuccess('Configuration is valid');
|
|
156
|
+
try {
|
|
157
|
+
const config = getConfig();
|
|
158
|
+
printKeyValue({
|
|
159
|
+
'API Base URL': config.api.baseUrl,
|
|
160
|
+
'SSL Verification': config.api.rejectUnauthorized ? green('Enabled') : yellow('Disabled'),
|
|
161
|
+
'Timeout': `${config.api.timeout}ms`,
|
|
162
|
+
'Authenticated': config.auth.token ? green('Yes') : red('No'),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
printWarning('Could not load full configuration');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
printError('Configuration is invalid');
|
|
171
|
+
if (configStatus.error) {
|
|
172
|
+
console.log(red(` Error: ${configStatus.error}`));
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
console.log('');
|
|
176
|
+
printInfo('Environment Variables');
|
|
177
|
+
printKeyValue({
|
|
178
|
+
PLATFORM_TOKEN: envStatus.token ? green('✓ Set') : red('✗ Not set'),
|
|
179
|
+
PLATFORM_BASE_URL: envStatus.url ? green('✓ Set') : dim('(not set - using default)'),
|
|
180
|
+
CLI_CONFIG_PATH: envStatus.configPath ? green('✓ Set') : dim('(not set - using default)'),
|
|
181
|
+
});
|
|
182
|
+
if (!envStatus.token) {
|
|
183
|
+
console.log('');
|
|
184
|
+
printWarning('PLATFORM_TOKEN is required for API operations');
|
|
185
|
+
console.log(dim(' Set it with: export PLATFORM_TOKEN="your-token-here"'));
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
console.log(dim('\n 💡 Tip: Run with --check-config to verify configuration'));
|
|
190
|
+
}
|
|
191
|
+
// Footer
|
|
192
|
+
printDivider();
|
|
193
|
+
console.log(dim(` Execution ID: ${executionId}`));
|
|
194
|
+
console.log(dim(` Timestamp: ${new Date().toISOString()}`));
|
|
195
|
+
console.log('');
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
handleError(error, ERROR_CODES.GENERAL, {
|
|
199
|
+
debug: program.opts().debug,
|
|
200
|
+
exit: true,
|
|
201
|
+
context: {
|
|
202
|
+
command: 'version',
|
|
203
|
+
options: {
|
|
204
|
+
verbose: options.verbose,
|
|
205
|
+
checkConfig: options.checkConfig,
|
|
206
|
+
json: options.json,
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
// NOTE: `-v`/`--version` is handled by commander's own `.version(...)` in
|
|
213
|
+
// cli.ts (registered first, so it exits before any custom option:version
|
|
214
|
+
// listener would run) — a duplicate listener here was dead code.
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEksTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztBQWlCOUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsUUFBUSxD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TixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztZQUVELFNBQVM7WUFDVCxZQUFZLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFtQixXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVsQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLE9BQU8sRUFBRTt3QkFDUCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87d0JBQ3hCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVzt3QkFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO3FCQUNuQjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLDBFQUEwRTtJQUMxRSx5RUFBeUU7SUFDekUsaUVBQWlFO0FBQ25FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBBUFBfTkFNRSwgQVBQX1ZFUlNJT04sIGdlbmVyYXRlRXhlY3V0aW9uSWQgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBnZXRDZGtJbmZvIH0gZnJvbSAnLi4vdXRpbHMvY2RrLXV0aWxzLmpzJztcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZy1sb2FkZXIuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludERpdmlkZXIsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgY3lhbiwgZGltLCBncmVlbiwgbWFnZW50YSwgcmVkLCB5ZWxsb3cgfSA9IHBpY287XG5cbi8qKlxuICogUnVudGltZSBzeXN0ZW0gaW5mb3JtYXRpb24gY29sbGVjdGVkIGZvciB0aGUgYHZlcnNpb24gLS12ZXJib3NlYCBvdXRwdXQuXG4gKi9cbmludGVyZmFjZSBTeXN0ZW1JbmZvIHtcbiAgbm9kZWpzOiBzdHJpbmc7XG4gIG5wbTogc3RyaW5nIHwgbnVsbDtcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgYXJjaGl0ZWN0dXJlOiBzdHJpbmc7XG4gIG1lbW9yeToge1xuICAgIHRvdGFsOiBzdHJpbmc7XG4gICAgYXZhaWxhYmxlSGVhcDogc3RyaW5nO1xuICB9O1xuICB1cHRpbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBydW50aW1lIHN5c3RlbSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgTm9kZS5qcy9ucG0gdmVyc2lvbnMsXG4gKiBwbGF0Zm9ybSwgYXJjaGl0ZWN0dXJlLCBoZWFwIG1lbW9yeSB1c2FnZSwgYW5kIHByb2Nlc3MgdXB0aW1lLlxuICovXG5mdW5jdGlvbiBnZXRTeXN0ZW1JbmZvKCk6IFN5c3RlbUluZm8ge1xuICBjb25zdCBtZW0gPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCk7XG4gIGNvbnN0IHRvdGFsTWVtID0gKG1lbS5oZWFwVG90YWwgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKTtcbiAgY29uc3QgYXZhaWxhYmxlSGVhcCA9ICgobWVtLmhlYXBUb3RhbCAtIG1lbS5oZWFwVXNlZCkgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKTtcbiAgY29uc3QgdXB0aW1lID0gcHJvY2Vzcy51cHRpbWUoKTtcblxuICBsZXQgbnBtOiBzdHJpbmcgfCBudWxsO1xuICB0cnkge1xuICAgIG5wbSA9IGV4ZWNTeW5jKCducG0gLS12ZXJzaW9uJywgeyBlbmNvZGluZzogJ3V0Zi04Jywgc3RkaW86ICdwaXBlJyB9KS50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIG5wbSA9IG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5vZGVqczogcHJvY2Vzcy52ZXJzaW9uLFxuICAgIG5wbSxcbiAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICBhcmNoaXRlY3R1cmU6IHByb2Nlc3MuYXJjaCxcbiAgICBtZW1vcnk6IHsgdG90YWw6IGAke3RvdGFsTWVtfSBNQmAsIGF2YWlsYWJsZUhlYXA6IGAke2F2YWlsYWJsZUhlYXB9IE1CYCB9LFxuICAgIHVwdGltZTogYCR7TWF0aC5mbG9vcih1cHRpbWUgLyAzNjAwKX1oICR7TWF0aC5mbG9vcigodXB0aW1lICUgMzYwMCkgLyA2MCl9bSAke01hdGguZmxvb3IodXB0aW1lICUgNjApfXNgLFxuICB9O1xufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGxvYWQgdGhlIENMSSBjb25maWd1cmF0aW9uIGFuZCByZXBvcnRzIHdoZXRoZXIgaXQgaXMgdmFsaWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBgdmFsaWQ6IHRydWVgIG9uIHN1Y2Nlc3MsIG9yIGB2YWxpZDogZmFsc2VgIHdpdGggYW4gZXJyb3IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gY2hlY2tDb25maWd1cmF0aW9uKCk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0ge1xuICB0cnkge1xuICAgIGdldENvbmZpZygpO1xuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGljaCBrZXkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBjdXJyZW50bHkgc2V0LlxuICogQHJldHVybnMgUHJlc2VuY2UgZmxhZ3MgZm9yIGBQTEFURk9STV9UT0tFTmAsIGBQTEFURk9STV9CQVNFX1VSTGAsIGFuZCBgQ0xJX0NPTkZJR19QQVRIYC5cbiAqL1xuZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRTdGF0dXMoKToge1xuICB0b2tlbjogYm9vbGVhbjtcbiAgdXJsOiBib29sZWFuO1xuICBjb25maWdQYXRoOiBib29sZWFuO1xufSB7XG4gIHJldHVybiB7XG4gICAgdG9rZW46ICEhcHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU4sXG4gICAgdXJsOiAhIXByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMLFxuICAgIGNvbmZpZ1BhdGg6ICEhcHJvY2Vzcy5lbnYuQ0xJX0NPTkZJR19QQVRILFxuICB9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHZlcnNpb25gIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRGlzcGxheXMgdGhlIENMSSBuYW1lL3ZlcnNpb24sIEFXUyBDREsgc3RhdHVzLCBhbmQgb3B0aW9uYWxseVxuICogZnVsbCBzeXN0ZW0gZGlhZ25vc3RpY3MgKGAtLXZlcmJvc2VgKSBvciBjb25maWd1cmF0aW9uIHZhbGlkYXRpb25cbiAqIChgLS1jaGVjay1jb25maWdgKS4gIFN1cHBvcnRzIGAtLWpzb25gIGZvciBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb24ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3ZlcnNpb24nKVxuICAgIC5kZXNjcmlwdGlvbignRGlzcGxheSBDTEkgdmVyc2lvbiBhbmQgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24nKVxuICAgIC5vcHRpb24oJy0tdmVyYm9zZScsICdTaG93IGRldGFpbGVkIGVudmlyb25tZW50IGluZm9ybWF0aW9uJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1jaGVjay1jb25maWcnLCAnVmVyaWZ5IGNvbmZpZ3VyYXRpb24gc3RhdHVzJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCBpbiBKU09OIGZvcm1hdCcsIGZhbHNlKVxuICAgIC5hY3Rpb24oKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gZ2VuZXJhdGVFeGVjdXRpb25JZCgpO1xuICAgICAgICBjb25zdCBjZGtJbmZvID0gZ2V0Q2RrSW5mbygpO1xuXG4gICAgICAgIC8vIEpTT04gb3V0cHV0XG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zdCBzeXN0ZW1JbmZvID0gZ2V0U3lzdGVtSW5mbygpO1xuICAgICAgICAgIGNvbnN0IGNvbmZpZ1N0YXR1cyA9IG9wdGlvbnMuY2hlY2tDb25maWcgPyBjaGVja0NvbmZpZ3VyYXRpb24oKSA6IHsgdmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICBjb25zdCBlbnZTdGF0dXMgPSBnZXRFbnZpcm9ubWVudFN0YXR1cygpO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgY2xpOiB7IG5hbWU6IEFQUF9OQU1FLCB2ZXJzaW9uOiBBUFBfVkVSU0lPTiB9LFxuICAgICAgICAgICAgc3lzdGVtOiBzeXN0ZW1JbmZvLFxuICAgICAgICAgICAgY2RrOiB7IGF2YWlsYWJsZTogY2RrSW5mby5hdmFpbGFibGUsIHZlcnNpb246IGNka0luZm8udmVyc2lvbiB9LFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogeyB2YWxpZDogY29uZmlnU3RhdHVzLnZhbGlkLCBlcnJvcjogY29uZmlnU3RhdHVzLmVycm9yIH0sXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogZW52U3RhdHVzLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhbmRhcmQgb3V0cHV0XG4gICAgICAgIHByaW50U2VjdGlvbignVmVyc2lvbiBJbmZvcm1hdGlvbicpO1xuICAgICAgICBjb25zb2xlLmxvZyhgJHttYWdlbnRhKGBbRVhFLSR7ZXhlY3V0aW9uSWR9XWApfSAke2N5YW4oYm9sZCgnQ0xJIFZlcnNpb24gQ2hlY2snKSl9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnQ0xJIE5hbWUnOiBib2xkKEFQUF9OQU1FKSxcbiAgICAgICAgICAnQ0xJIFZlcnNpb24nOiBncmVlbihib2xkKEFQUF9WRVJTSU9OKSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByaW50RGl2aWRlcigpO1xuXG4gICAgICAgIC8vIFZlcmJvc2U6IHN5c3RlbSBlbnZpcm9ubWVudFxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdTeXN0ZW0gRW52aXJvbm1lbnQnKTtcbiAgICAgICAgICBjb25zdCBzeXN0ZW1JbmZvID0gZ2V0U3lzdGVtSW5mbygpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ05vZGUuanMnOiBzeXN0ZW1JbmZvLm5vZGVqcyxcbiAgICAgICAgICAgICducG0nOiBzeXN0ZW1JbmZvLm5wbSB8fCB5ZWxsb3coJyhub3QgYXZhaWxhYmxlKScpLFxuICAgICAgICAgICAgJ1BsYXRmb3JtJzogc3lzdGVtSW5mby5wbGF0Zm9ybSxcbiAgICAgICAgICAgICdBcmNoaXRlY3R1cmUnOiBzeXN0ZW1JbmZvLmFyY2hpdGVjdHVyZSxcbiAgICAgICAgICAgICdNZW1vcnkgKEhlYXApJzogYCR7c3lzdGVtSW5mby5tZW1vcnkudG90YWx9IHRvdGFsLCAke3N5c3RlbUluZm8ubWVtb3J5LmF2YWlsYWJsZUhlYXB9IGF2YWlsYWJsZWAsXG4gICAgICAgICAgICAnUHJvY2VzcyBVcHRpbWUnOiBzeXN0ZW1JbmZvLnVwdGltZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcmludERpdmlkZXIoKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0FXUyBDREsnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENESyBpbmZvcm1hdGlvblxuICAgICAgICBpZiAoY2RrSW5mby5hdmFpbGFibGUgJiYgY2RrSW5mby52ZXJzaW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkgcHJpbnRTdWNjZXNzKCdBV1MgQ0RLIGlzIGluc3RhbGxlZCcpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ0NESyBWZXJzaW9uJzogZ3JlZW4oY2RrSW5mby52ZXJzaW9uKSxcbiAgICAgICAgICAgICdTdGF0dXMnOiBncmVlbign4pyTIEF2YWlsYWJsZScpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQVdTIENESyBpcyBub3QgaW5zdGFsbGVkJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkaW0oJyAgSW5zdGFsbCBDREsgd2l0aDogbnBtIGluc3RhbGwgLWcgYXdzLWNkaycpKTtcbiAgICAgICAgICAgIGlmIChjZGtJbmZvLmVycm9yKSBjb25zb2xlLmxvZyhkaW0oYCAgRXJyb3I6ICR7Y2RrSW5mby5lcnJvcn1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ0FXUyBDREsnOiByZWQoJ+KclyBOb3QgaW5zdGFsbGVkJyksXG4gICAgICAgICAgICAnU3RhdHVzJzogcmVkKCfinJcgTm90IEF2YWlsYWJsZScpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhkaW0oJ1xcbiAgUnVuIHdpdGggLS12ZXJib3NlIGZvciBkZXRhaWxlZCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbmZpZ3VyYXRpb24gY2hlY2tcbiAgICAgICAgaWYgKG9wdGlvbnMuY2hlY2tDb25maWcpIHtcbiAgICAgICAgICBwcmludERpdmlkZXIoKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0NvbmZpZ3VyYXRpb24gU3RhdHVzJyk7XG5cbiAgICAgICAgICBjb25zdCBjb25maWdTdGF0dXMgPSBjaGVja0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgICBjb25zdCBlbnZTdGF0dXMgPSBnZXRFbnZpcm9ubWVudFN0YXR1cygpO1xuXG4gICAgICAgICAgaWYgKGNvbmZpZ1N0YXR1cy52YWxpZCkge1xuICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCdDb25maWd1cmF0aW9uIGlzIHZhbGlkJyk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgICAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgICAgICAnQVBJIEJhc2UgVVJMJzogY29uZmlnLmFwaS5iYXNlVXJsLFxuICAgICAgICAgICAgICAgICdTU0wgVmVyaWZpY2F0aW9uJzogY29uZmlnLmFwaS5yZWplY3RVbmF1dGhvcml6ZWQgPyBncmVlbignRW5hYmxlZCcpIDogeWVsbG93KCdEaXNhYmxlZCcpLFxuICAgICAgICAgICAgICAgICdUaW1lb3V0JzogYCR7Y29uZmlnLmFwaS50aW1lb3V0fW1zYCxcbiAgICAgICAgICAgICAgICAnQXV0aGVudGljYXRlZCc6IGNvbmZpZy5hdXRoLnRva2VuID8gZ3JlZW4oJ1llcycpIDogcmVkKCdObycpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHByaW50V2FybmluZygnQ291bGQgbm90IGxvYWQgZnVsbCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoJ0NvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1N0YXR1cy5lcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZWQoYCAgRXJyb3I6ICR7Y29uZmlnU3RhdHVzLmVycm9yfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdFbnZpcm9ubWVudCBWYXJpYWJsZXMnKTtcbiAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgIFBMQVRGT1JNX1RPS0VOOiBlbnZTdGF0dXMudG9rZW4gPyBncmVlbign4pyTIFNldCcpIDogcmVkKCfinJcgTm90IHNldCcpLFxuICAgICAgICAgICAgUExBVEZPUk1fQkFTRV9VUkw6IGVudlN0YXR1cy51cmwgPyBncmVlbign4pyTIFNldCcpIDogZGltKCcobm90IHNldCAtIHVzaW5nIGRlZmF1bHQpJyksXG4gICAgICAgICAgICBDTElfQ09ORklHX1BBVEg6IGVudlN0YXR1cy5jb25maWdQYXRoID8gZ3JlZW4oJ+KckyBTZXQnKSA6IGRpbSgnKG5vdCBzZXQgLSB1c2luZyBkZWZhdWx0KScpLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKCFlbnZTdGF0dXMudG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnUExBVEZPUk1fVE9LRU4gaXMgcmVxdWlyZWQgZm9yIEFQSSBvcGVyYXRpb25zJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkaW0oJyAgU2V0IGl0IHdpdGg6IGV4cG9ydCBQTEFURk9STV9UT0tFTj1cInlvdXItdG9rZW4taGVyZVwiJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhkaW0oJ1xcbiAg8J+SoSBUaXA6IFJ1biB3aXRoIC0tY2hlY2stY29uZmlnIHRvIHZlcmlmeSBjb25maWd1cmF0aW9uJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9vdGVyXG4gICAgICAgIHByaW50RGl2aWRlcigpO1xuICAgICAgICBjb25zb2xlLmxvZyhkaW0oYCAgRXhlY3V0aW9uIElEOiAke2V4ZWN1dGlvbklkfWApKTtcbiAgICAgICAgY29uc29sZS5sb2coZGltKGAgIFRpbWVzdGFtcDogJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YCkpO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgY29tbWFuZDogJ3ZlcnNpb24nLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UsXG4gICAgICAgICAgICAgIGNoZWNrQ29uZmlnOiBvcHRpb25zLmNoZWNrQ29uZmlnLFxuICAgICAgICAgICAgICBqc29uOiBvcHRpb25zLmpzb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAvLyBOT1RFOiBgLXZgL2AtLXZlcnNpb25gIGlzIGhhbmRsZWQgYnkgY29tbWFuZGVyJ3Mgb3duIGAudmVyc2lvbiguLi4pYCBpblxuICAvLyBjbGkudHMgKHJlZ2lzdGVyZWQgZmlyc3QsIHNvIGl0IGV4aXRzIGJlZm9yZSBhbnkgY3VzdG9tIG9wdGlvbjp2ZXJzaW9uXG4gIC8vIGxpc3RlbmVyIHdvdWxkIHJ1bikg4oCUIGEgZHVwbGljYXRlIGxpc3RlbmVyIGhlcmUgd2FzIGRlYWQgY29kZS5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application metadata
|
|
3
|
+
*/
|
|
4
|
+
export declare const APP_NAME = "pipeline-manager";
|
|
5
|
+
export declare const APP_VERSION: string;
|
|
6
|
+
export declare const APP_DESCRIPTION = "A CLI tool to manage pipelines and plugins";
|
|
7
|
+
/**
|
|
8
|
+
* Banner configuration for CLI startup
|
|
9
|
+
*/
|
|
10
|
+
export declare const BANNER_OPTIONS: {
|
|
11
|
+
readonly font: 'Doom';
|
|
12
|
+
readonly horizontalLayout: 'fitted';
|
|
13
|
+
readonly getWidth: () => number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Output format types
|
|
17
|
+
*/
|
|
18
|
+
export type OutputFormat = 'table' | 'json' | 'yaml' | 'csv';
|
|
19
|
+
/**
|
|
20
|
+
* Default timeouts (in milliseconds)
|
|
21
|
+
*/
|
|
22
|
+
export declare const TIMEOUTS: {
|
|
23
|
+
readonly HTTP_REQUEST: 30000;
|
|
24
|
+
readonly HEALTH_CHECK: 5000;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* File size limits (in bytes)
|
|
28
|
+
*/
|
|
29
|
+
export declare const FILE_SIZE_LIMITS: {
|
|
30
|
+
readonly PLUGIN: number;
|
|
31
|
+
readonly PIPELINE_PROPS: number;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Environment variable names
|
|
35
|
+
*/
|
|
36
|
+
export declare const ENV_VARS: {
|
|
37
|
+
readonly PLATFORM_TOKEN: 'PLATFORM_TOKEN';
|
|
38
|
+
readonly PLATFORM_BASE_URL: 'PLATFORM_BASE_URL';
|
|
39
|
+
readonly CLI_CONFIG_PATH: 'CLI_CONFIG_PATH';
|
|
40
|
+
readonly TLS_REJECT_UNAUTHORIZED: 'TLS_REJECT_UNAUTHORIZED';
|
|
41
|
+
readonly AWS_REGION: 'AWS_REGION';
|
|
42
|
+
readonly DEBUG: 'DEBUG';
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Check if debug mode is enabled
|
|
46
|
+
*/
|
|
47
|
+
export declare function isDebugMode(options?: {
|
|
48
|
+
debug?: boolean;
|
|
49
|
+
}): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Format file size for display
|
|
52
|
+
*/
|
|
53
|
+
export declare function formatFileSize(bytes: number): string;
|
|
54
|
+
/**
|
|
55
|
+
* Format duration for display
|
|
56
|
+
*/
|
|
57
|
+
export declare function formatDuration(ms: number): string;
|
|
58
|
+
/**
|
|
59
|
+
* Generate cryptographically random execution ID for request tracing.
|
|
60
|
+
*/
|
|
61
|
+
export declare function generateExecutionId(): string;
|
|
62
|
+
/**
|
|
63
|
+
* Table display options (box-drawing characters)
|
|
64
|
+
*/
|
|
65
|
+
export declare const TABLE_OPTIONS: {
|
|
66
|
+
readonly border: {
|
|
67
|
+
readonly topBody: '─';
|
|
68
|
+
readonly topJoin: '┬';
|
|
69
|
+
readonly topLeft: '┌';
|
|
70
|
+
readonly topRight: '┐';
|
|
71
|
+
readonly bottomBody: '─';
|
|
72
|
+
readonly bottomJoin: '┴';
|
|
73
|
+
readonly bottomLeft: '└';
|
|
74
|
+
readonly bottomRight: '┘';
|
|
75
|
+
readonly bodyLeft: '│';
|
|
76
|
+
readonly bodyRight: '│';
|
|
77
|
+
readonly bodyJoin: '│';
|
|
78
|
+
readonly joinBody: '─';
|
|
79
|
+
readonly joinLeft: '├';
|
|
80
|
+
readonly joinRight: '┤';
|
|
81
|
+
readonly joinJoin: '┼';
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Validate boolean string from CLI input
|
|
86
|
+
*/
|
|
87
|
+
export declare function validateBoolean(value: string, fieldName: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Validate and parse a numeric CLI parameter within optional bounds.
|
|
90
|
+
*/
|
|
91
|
+
export declare function validateNumber(value: string | number | undefined | null, fieldName: string, min?: number, max?: number): number;
|
|
92
|
+
export declare function validateSort(value: string | undefined): string | undefined;
|
|
93
|
+
export declare function assertShellSafe(value: string, fieldName: string, opts?: {
|
|
94
|
+
redactValue?: boolean;
|
|
95
|
+
}): void;
|
|
96
|
+
/**
|
|
97
|
+
* POSIX single-quote a value (escaping embedded single quotes) for safe shell
|
|
98
|
+
* interpolation. Single source of truth — drift in a shell-quoting helper is
|
|
99
|
+
* security-relevant, so both agent modules import this rather than re-declaring it.
|
|
100
|
+
*/
|
|
101
|
+
export declare function shellQuote(value: string): string;
|
|
102
|
+
/**
|
|
103
|
+
* Canonical default pipeline name when none is given — MUST mirror pipeline-core's
|
|
104
|
+
* pipeline-configuration.ts (`${sanitize(org)}-${sanitize(project)}-pipeline`,
|
|
105
|
+
* non-alphanumeric → '_', lowercased), so the CLI's create and registry paths
|
|
106
|
+
* derive the SAME name the CDK builder actually deploys (a mismatch breaks
|
|
107
|
+
* StartPipelineExecution against the registered name).
|
|
108
|
+
*/
|
|
109
|
+
export declare function defaultPipelineName(organization: string, project: string): string;
|
|
110
|
+
/**
|
|
111
|
+
* CloudFormation stack name for the event-ingestion infra. Shared so `setup-events`
|
|
112
|
+
* (which deploys it) and `redrive-events` (which resolves the DLQ/queue from it)
|
|
113
|
+
* can never drift apart.
|
|
114
|
+
*/
|
|
115
|
+
export declare const EVENTS_STACK_NAME = "pipeline-builder-events";
|
|
116
|
+
//# sourceMappingURL=cli.constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.constants.d.ts","sourceRoot":"","sources":["../../src/config/cli.constants.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAC3C,eAAO,MAAM,WAAW,QAAU,CAAC;AACnC,eAAO,MAAM,eAAe,+CAA+C,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,cAAc;aACzB,IAAI,EAAE,MAAM;aACZ,gBAAgB,EAAE,QAAQ;aAC1B,QAAQ;CACA,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,QAAQ;aACnB,YAAY,EAAE,KAAK;aACnB,YAAY,EAAE,IAAI;CACV,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;aAC3B,MAAM;aACN,cAAc;CACN,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;aACnB,cAAc,EAAE,gBAAgB;aAChC,iBAAiB,EAAE,mBAAmB;aACtC,eAAe,EAAE,iBAAiB;aAClC,uBAAuB,EAAE,yBAAyB;aAClD,UAAU,EAAE,YAAY;aACxB,KAAK,EAAE,OAAO;CACN,CAAC;AAEX;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;aACxB,MAAM;iBACJ,OAAO,EAAE,GAAG;iBACZ,OAAO,EAAE,GAAG;iBACZ,OAAO,EAAE,GAAG;iBACZ,QAAQ,EAAE,GAAG;iBACb,UAAU,EAAE,GAAG;iBACf,UAAU,EAAE,GAAG;iBACf,UAAU,EAAE,GAAG;iBACf,WAAW,EAAE,GAAG;iBAChB,QAAQ,EAAE,GAAG;iBACb,SAAS,EAAE,GAAG;iBACd,QAAQ,EAAE,GAAG;iBACb,QAAQ,EAAE,GAAG;iBACb,QAAQ,EAAE,GAAG;iBACb,SAAS,EAAE,GAAG;iBACd,QAAQ,EAAE,GAAG;;CAEP,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAKzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAuB/H;AAQD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM1E;AAQD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,IAAI,CAON;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,4BAA4B,CAAC"}
|