@pipeline-builder/pipeline-manager 3.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/LICENSE +202 -0
- package/README.md +74 -0
- package/cdk.json +91 -0
- package/config.yml +94 -0
- package/dist/boilerplate.d.ts +3 -0
- package/dist/boilerplate.d.ts.map +1 -0
- package/dist/boilerplate.js +58 -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 +372 -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-pipeline.d.ts +12 -0
- package/dist/commands/create-pipeline.d.ts.map +1 -0
- package/dist/commands/create-pipeline.js +291 -0
- package/dist/commands/deploy.d.ts +15 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +167 -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 +97 -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 +98 -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 +172 -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 +167 -0
- package/dist/commands/login.d.ts +21 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +179 -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 +177 -0
- package/dist/commands/status.d.ts +11 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +89 -0
- package/dist/commands/store-token.d.ts +20 -0
- package/dist/commands/store-token.d.ts.map +1 -0
- package/dist/commands/store-token.js +233 -0
- package/dist/commands/synth.d.ts +21 -0
- package/dist/commands/synth.d.ts.map +1 -0
- package/dist/commands/synth.js +143 -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 +311 -0
- package/dist/commands/version.d.ts +12 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +223 -0
- package/dist/config/cli.constants.d.ts +101 -0
- package/dist/config/cli.constants.d.ts.map +1 -0
- package/dist/config/cli.constants.js +165 -0
- package/dist/config.yml +94 -0
- package/dist/templates/events-stack.json +141 -0
- package/dist/types/config.d.ts +44 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +5 -0
- package/dist/types/error.d.ts +61 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +39 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +26 -0
- package/dist/types/pipeline.d.ts +144 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +5 -0
- package/dist/types/plugin.d.ts +160 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +5 -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 +160 -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 +53 -0
- package/dist/utils/auth-guard.d.ts +16 -0
- package/dist/utils/auth-guard.d.ts.map +1 -0
- package/dist/utils/auth-guard.js +25 -0
- package/dist/utils/aws-secrets.d.ts +21 -0
- package/dist/utils/aws-secrets.d.ts.map +1 -0
- package/dist/utils/aws-secrets.js +74 -0
- package/dist/utils/banner.d.ts +19 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +59 -0
- package/dist/utils/cdk-utils.d.ts +51 -0
- package/dist/utils/cdk-utils.d.ts.map +1 -0
- package/dist/utils/cdk-utils.js +101 -0
- package/dist/utils/command-utils.d.ts +56 -0
- package/dist/utils/command-utils.d.ts.map +1 -0
- package/dist/utils/command-utils.js +138 -0
- package/dist/utils/config-loader.d.ts +27 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +166 -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 +255 -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 +60 -0
- package/dist/utils/output-utils.d.ts +60 -0
- package/dist/utils/output-utils.d.ts.map +1 -0
- package/dist/utils/output-utils.js +320 -0
- package/dist/utils/rate-limiter.d.ts +14 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +73 -0
- package/package.json +144 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.resolveAccount = resolveAccount;
|
|
9
|
+
exports.resolveRegion = resolveRegion;
|
|
10
|
+
exports.buildBootstrapCommand = buildBootstrapCommand;
|
|
11
|
+
exports.bootstrap = bootstrap;
|
|
12
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
13
|
+
const cli_constants_1 = require("../config/cli.constants");
|
|
14
|
+
const audit_log_1 = require("../utils/audit-log");
|
|
15
|
+
const cdk_utils_1 = require("../utils/cdk-utils");
|
|
16
|
+
const command_utils_1 = require("../utils/command-utils");
|
|
17
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
18
|
+
const output_utils_1 = require("../utils/output-utils");
|
|
19
|
+
const { bold, cyan, dim } = picocolors_1.default;
|
|
20
|
+
/**
|
|
21
|
+
* Resolves the AWS account ID from the CLI option or environment variable.
|
|
22
|
+
* @returns The account ID string, or `undefined` if not available.
|
|
23
|
+
*/
|
|
24
|
+
/** @internal Exported for testing only */
|
|
25
|
+
function resolveAccount(optionValue) {
|
|
26
|
+
return optionValue || process.env.AWS_ACCOUNT_ID || process.env.CDK_DEFAULT_ACCOUNT;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Resolves the AWS region from the CLI option or environment variable.
|
|
30
|
+
* @returns The region string, or `undefined` if not available.
|
|
31
|
+
*/
|
|
32
|
+
/** @internal Exported for testing only */
|
|
33
|
+
function resolveRegion(optionValue) {
|
|
34
|
+
return optionValue || process.env[cli_constants_1.ENV_VARS.AWS_REGION] || process.env.CDK_DEFAULT_REGION || 'us-east-1';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Builds the `cdk bootstrap` command string from the resolved options.
|
|
38
|
+
*/
|
|
39
|
+
/** @internal Exported for testing only */
|
|
40
|
+
function buildBootstrapCommand(options) {
|
|
41
|
+
(0, cli_constants_1.assertShellSafe)(options.account, 'account');
|
|
42
|
+
(0, cli_constants_1.assertShellSafe)(options.region, 'region');
|
|
43
|
+
if (options.profile)
|
|
44
|
+
(0, cli_constants_1.assertShellSafe)(options.profile, 'profile');
|
|
45
|
+
const parts = [
|
|
46
|
+
'cdk',
|
|
47
|
+
'bootstrap',
|
|
48
|
+
`aws://${options.account}/${options.region}`,
|
|
49
|
+
];
|
|
50
|
+
if (options.profile) {
|
|
51
|
+
parts.push(`--profile=${options.profile}`);
|
|
52
|
+
}
|
|
53
|
+
if (options.qualifier) {
|
|
54
|
+
parts.push(`--qualifier=${options.qualifier}`);
|
|
55
|
+
}
|
|
56
|
+
if (options.trust) {
|
|
57
|
+
parts.push(`--trust=${options.trust}`);
|
|
58
|
+
}
|
|
59
|
+
if (options.cloudformationExecutionPolicies) {
|
|
60
|
+
parts.push(`--cloudformation-execution-policies=${options.cloudformationExecutionPolicies}`);
|
|
61
|
+
}
|
|
62
|
+
return parts.join(' ');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Registers the `bootstrap` command with the CLI program.
|
|
66
|
+
*
|
|
67
|
+
* Provisions the CDK toolkit stack in the target AWS account/region
|
|
68
|
+
* so that CDK deployments can proceed.
|
|
69
|
+
*
|
|
70
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
71
|
+
*/
|
|
72
|
+
function bootstrap(program) {
|
|
73
|
+
program
|
|
74
|
+
.command('bootstrap')
|
|
75
|
+
.description('Bootstrap AWS CDK toolkit stack in target account/region')
|
|
76
|
+
.option('--account <id>', 'AWS account ID (defaults to AWS_ACCOUNT_ID or CDK_DEFAULT_ACCOUNT env)')
|
|
77
|
+
.option('--region <region>', 'AWS region (defaults to AWS_REGION or CDK_DEFAULT_REGION env)')
|
|
78
|
+
.option('--profile <profile>', 'AWS CLI profile', 'default')
|
|
79
|
+
.option('--qualifier <qualifier>', 'Bootstrap qualifier for environment isolation')
|
|
80
|
+
.option('--trust <accounts>', 'Comma-separated account IDs to trust for cross-account deployments')
|
|
81
|
+
.option('--cloudformation-execution-policies <arns>', 'IAM policy ARNs for CloudFormation execution role')
|
|
82
|
+
.option('--json', 'Output result as JSON', false)
|
|
83
|
+
.action(async (options) => {
|
|
84
|
+
const executionId = (0, command_utils_1.printCommandHeader)('CDK Bootstrap');
|
|
85
|
+
try {
|
|
86
|
+
(0, audit_log_1.auditLog)('bootstrap', { executionId, account: options.account, region: options.region, profile: options.profile });
|
|
87
|
+
// Resolve account and region
|
|
88
|
+
const account = resolveAccount(options.account);
|
|
89
|
+
const region = resolveRegion(options.region);
|
|
90
|
+
if (!account) {
|
|
91
|
+
(0, output_utils_1.printError)('AWS account ID is required');
|
|
92
|
+
console.log(dim('Provide --account <id> or set AWS_ACCOUNT_ID / CDK_DEFAULT_ACCOUNT environment variable'));
|
|
93
|
+
throw new Error('AWS account ID not provided');
|
|
94
|
+
}
|
|
95
|
+
(0, output_utils_1.printInfo)('Bootstrap parameters', {
|
|
96
|
+
account,
|
|
97
|
+
region,
|
|
98
|
+
profile: options.profile,
|
|
99
|
+
qualifier: options.qualifier || '(default)',
|
|
100
|
+
trust: options.trust || '(none)',
|
|
101
|
+
cloudformationExecutionPolicies: options.cloudformationExecutionPolicies || '(none)',
|
|
102
|
+
});
|
|
103
|
+
(0, cdk_utils_1.ensureCdkAvailable)();
|
|
104
|
+
(0, output_utils_1.printSuccess)('AWS CDK is available');
|
|
105
|
+
// Build bootstrap command
|
|
106
|
+
const command = buildBootstrapCommand({
|
|
107
|
+
account,
|
|
108
|
+
region,
|
|
109
|
+
profile: options.profile,
|
|
110
|
+
qualifier: options.qualifier,
|
|
111
|
+
trust: options.trust,
|
|
112
|
+
cloudformationExecutionPolicies: options.cloudformationExecutionPolicies,
|
|
113
|
+
});
|
|
114
|
+
(0, output_utils_1.printSection)('CDK Execution');
|
|
115
|
+
console.log(cyan(bold('Command:')), dim(command));
|
|
116
|
+
console.log('');
|
|
117
|
+
// Execute bootstrap
|
|
118
|
+
const result = (0, cdk_utils_1.executeCdkShellCommand)(command, {
|
|
119
|
+
debug: program.opts().debug,
|
|
120
|
+
showOutput: true,
|
|
121
|
+
});
|
|
122
|
+
console.log('');
|
|
123
|
+
(0, output_utils_1.printSection)('Bootstrap Complete');
|
|
124
|
+
if (result.success) {
|
|
125
|
+
if (options.json) {
|
|
126
|
+
console.log(JSON.stringify({
|
|
127
|
+
success: true,
|
|
128
|
+
executionId,
|
|
129
|
+
account,
|
|
130
|
+
region,
|
|
131
|
+
duration: result.duration,
|
|
132
|
+
}, null, 2));
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
(0, output_utils_1.printKeyValue)({
|
|
136
|
+
'Execution ID': executionId,
|
|
137
|
+
'Account': account,
|
|
138
|
+
'Region': region,
|
|
139
|
+
'Duration': `${result.duration}ms`,
|
|
140
|
+
'Status': '✓ Success',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
(0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.VALIDATION, {
|
|
147
|
+
debug: program.opts().debug,
|
|
148
|
+
exit: true,
|
|
149
|
+
context: {
|
|
150
|
+
command: 'bootstrap',
|
|
151
|
+
executionId,
|
|
152
|
+
account: options.account,
|
|
153
|
+
region: options.region,
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7QUFrQnRDLHdDQUVDO0FBT0Qsc0NBRUM7QUFNRCxzREFtQ0M7QUFVRCw4QkErRkM7QUE1S0QsNERBQThCO0FBQzlCLDJEQUFvRTtBQUNwRSxrREFBOEM7QUFDOUMsa0RBQWdGO0FBQ2hGLDBEQUE0RDtBQUM1RCwwREFBa0U7QUFDbEUsd0RBQXlHO0FBRXpHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLG9CQUFJLENBQUM7QUFFakM7OztHQUdHO0FBQ0gsMENBQTBDO0FBQzFDLFNBQWdCLGNBQWMsQ0FBQyxXQUFvQjtJQUNqRCxPQUFPLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDO0FBQ3RGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCwwQ0FBMEM7QUFDMUMsU0FBZ0IsYUFBYSxDQUFDLFdBQW9CO0lBQ2hELE9BQU8sV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLFdBQVcsQ0FBQztBQUMxRyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCwwQ0FBMEM7QUFDMUMsU0FBZ0IscUJBQXFCLENBQUMsT0FPckM7SUFDQyxJQUFBLCtCQUFlLEVBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1QyxJQUFBLCtCQUFlLEVBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMxQyxJQUFJLE9BQU8sQ0FBQyxPQUFPO1FBQUUsSUFBQSwrQkFBZSxFQUFDLE9BQU8sQ0FBQyxPQUFPLEVB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cUJBQzFCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUEsNEJBQWEsRUFBQzt3QkFDWixjQUFjLEVBQUUsV0FBVzt3QkFDM0IsU0FBUyxFQUFFLE9BQU87d0JBQ2xCLFFBQVEsRUFBRSxNQUFNO3dCQUNoQixVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJO3dCQUNsQyxRQUFRLEVBQUUsV0FBVztxQkFDdEIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBRUgsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFBLDJCQUFXLEVBQUMsS0FBSyxFQUFFLDJCQUFXLENBQUMsVUFBVSxFQUFFO2dCQUN6QyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRTtvQkFDUCxPQUFPLEVBQUUsV0FBVztvQkFDcEIsV0FBVztvQkFDWCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87b0JBQ3hCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtpQkFDdkI7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBFTlZfVkFSUywgYXNzZXJ0U2hlbGxTYWZlIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMnO1xuaW1wb3J0IHsgYXVkaXRMb2cgfSBmcm9tICcuLi91dGlscy9hdWRpdC1sb2cnO1xuaW1wb3J0IHsgZW5zdXJlQ2RrQXZhaWxhYmxlLCBleGVjdXRlQ2RrU2hlbGxDb21tYW5kIH0gZnJvbSAnLi4vdXRpbHMvY2RrLXV0aWxzJztcbmltcG9ydCB7IHByaW50Q29tbWFuZEhlYWRlciB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzJztcblxuY29uc3QgeyBib2xkLCBjeWFuLCBkaW0gfSA9IHBpY287XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIEFXUyBhY2NvdW50IElEIGZyb20gdGhlIENMSSBvcHRpb24gb3IgZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKiBAcmV0dXJucyBUaGUgYWNjb3VudCBJRCBzdHJpbmcsIG9yIGB1bmRlZmluZWRgIGlmIG5vdCBhdmFpbGFibGUuXG4gKi9cbi8qKiBAaW50ZXJuYWwgRXhwb3J0ZWQgZm9yIHRlc3Rpbmcgb25seSAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVBY2NvdW50KG9wdGlvblZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG9wdGlvblZhbHVlIHx8IHByb2Nlc3MuZW52LkFXU19BQ0NPVU5UX0lEIHx8IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIEFXUyByZWdpb24gZnJvbSB0aGUgQ0xJIG9wdGlvbiBvciBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEByZXR1cm5zIFRoZSByZWdpb24gc3RyaW5nLCBvciBgdW5kZWZpbmVkYCBpZiBub3QgYXZhaWxhYmxlLlxuICovXG4vKiogQGludGVybmFsIEV4cG9ydGVkIGZvciB0ZXN0aW5nIG9ubHkgKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVnaW9uKG9wdGlvblZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG9wdGlvblZhbHVlIHx8IHByb2Nlc3MuZW52W0VOVl9WQVJTLkFXU19SRUdJT05dIHx8IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTiB8fCAndXMtZWFzdC0xJztcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGBjZGsgYm9vdHN0cmFwYCBjb21tYW5kIHN0cmluZyBmcm9tIHRoZSByZXNvbHZlZCBvcHRpb25zLlxuICovXG4vKiogQGludGVybmFsIEV4cG9ydGVkIGZvciB0ZXN0aW5nIG9ubHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJvb3RzdHJhcENvbW1hbmQob3B0aW9uczoge1xuICBhY2NvdW50OiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xuICBxdWFsaWZpZXI/OiBzdHJpbmc7XG4gIHRydXN0Pzogc3RyaW5nO1xuICBjbG91ZGZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzPzogc3RyaW5nO1xufSk6IHN0cmluZyB7XG4gIGFzc2VydFNoZWxsU2FmZShvcHRpb25zLmFjY291bnQsICdhY2NvdW50Jyk7XG4gIGFzc2VydFNoZWxsU2FmZShvcHRpb25zLnJlZ2lvbiwgJ3JlZ2lvbicpO1xuICBpZiAob3B0aW9ucy5wcm9maWxlKSBhc3NlcnRTaGVsbFNhZmUob3B0aW9ucy5wcm9maWxlLCAncHJvZmlsZScpO1xuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtcbiAgICAnY2RrJyxcbiAgICAnYm9vdHN0cmFwJyxcbiAgICBgYXdzOi8vJHtvcHRpb25zLmFjY291bnR9LyR7b3B0aW9ucy5yZWdpb259YCxcbiAgXTtcblxuICBpZiAob3B0aW9ucy5wcm9maWxlKSB7XG4gICAgcGFydHMucHVzaChgLS1wcm9maWxlPSR7b3B0aW9ucy5wcm9maWxlfWApO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucXVhbGlmaWVyKSB7XG4gICAgcGFydHMucHVzaChgLS1xdWFsaWZpZXI9JHtvcHRpb25zLnF1YWxpZmllcn1gKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnRydXN0KSB7XG4gICAgcGFydHMucHVzaChgLS10cnVzdD0ke29wdGlvbnMudHJ1c3R9YCk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5jbG91ZGZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzKSB7XG4gICAgcGFydHMucHVzaChgLS1jbG91ZGZvcm1hdGlvbi1leGVjdXRpb24tcG9saWNpZXM9JHtvcHRpb25zLmNsb3VkZm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXN9YCk7XG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignICcpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGJvb3RzdHJhcGAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBQcm92aXNpb25zIHRoZSBDREsgdG9vbGtpdCBzdGFjayBpbiB0aGUgdGFyZ2V0IEFXUyBhY2NvdW50L3JlZ2lvblxuICogc28gdGhhdCBDREsgZGVwbG95bWVudHMgY2FuIHByb2NlZWQuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXAocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2Jvb3RzdHJhcCcpXG4gICAgLmRlc2NyaXB0aW9uKCdCb290c3RyYXAgQVdTIENESyB0b29sa2l0IHN0YWNrIGluIHRhcmdldCBhY2NvdW50L3JlZ2lvbicpXG4gICAgLm9wdGlvbignLS1hY2NvdW50IDxpZD4nLCAnQVdTIGFjY291bnQgSUQgKGRlZmF1bHRzIHRvIEFXU19BQ0NPVU5UX0lEIG9yIENES19ERUZBVUxUX0FDQ09VTlQgZW52KScpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoZGVmYXVsdHMgdG8gQVdTX1JFR0lPTiBvciBDREtfREVGQVVMVF9SRUdJT04gZW52KScpXG4gICAgLm9wdGlvbignLS1wcm9maWxlIDxwcm9maWxlPicsICdBV1MgQ0xJIHByb2ZpbGUnLCAnZGVmYXVsdCcpXG4gICAgLm9wdGlvbignLS1xdWFsaWZpZXIgPHF1YWxpZmllcj4nLCAnQm9vdHN0cmFwIHF1YWxpZmllciBmb3IgZW52aXJvbm1lbnQgaXNvbGF0aW9uJylcbiAgICAub3B0aW9uKCctLXRydXN0IDxhY2NvdW50cz4nLCAnQ29tbWEtc2VwYXJhdGVkIGFjY291bnQgSURzIHRvIHRydXN0IGZvciBjcm9zcy1hY2NvdW50IGRlcGxveW1lbnRzJylcbiAgICAub3B0aW9uKCctLWNsb3VkZm9ybWF0aW9uLWV4ZWN1dGlvbi1wb2xpY2llcyA8YXJucz4nLCAnSUFNIHBvbGljeSBBUk5zIGZvciBDbG91ZEZvcm1hdGlvbiBleGVjdXRpb24gcm9sZScpXG4gICAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCByZXN1bHQgYXMgSlNPTicsIGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdDREsgQm9vdHN0cmFwJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF1ZGl0TG9nKCdib290c3RyYXAnLCB7IGV4ZWN1dGlvbklkLCBhY2NvdW50OiBvcHRpb25zLmFjY291bnQsIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSB9KTtcblxuICAgICAgICAvLyBSZXNvbHZlIGFjY291bnQgYW5kIHJlZ2lvblxuICAgICAgICBjb25zdCBhY2NvdW50ID0gcmVzb2x2ZUFjY291bnQob3B0aW9ucy5hY2NvdW50KTtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gcmVzb2x2ZVJlZ2lvbihvcHRpb25zLnJlZ2lvbik7XG5cbiAgICAgICAgaWYgKCFhY2NvdW50KSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignQVdTIGFjY291bnQgSUQgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhkaW0oJ1Byb3ZpZGUgLS1hY2NvdW50IDxpZD4gb3Igc2V0IEFXU19BQ0NPVU5UX0lEIC8gQ0RLX0RFRkFVTFRfQUNDT1VOVCBlbnZpcm9ubWVudCB2YXJpYWJsZScpKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FXUyBhY2NvdW50IElEIG5vdCBwcm92aWRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRJbmZvKCdCb290c3RyYXAgcGFyYW1ldGVycycsIHtcbiAgICAgICAgICBhY2NvdW50LFxuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUsXG4gICAgICAgICAgcXVhbGlmaWVyOiBvcHRpb25zLnF1YWxpZmllciB8fCAnKGRlZmF1bHQpJyxcbiAgICAgICAgICB0cnVzdDogb3B0aW9ucy50cnVzdCB8fCAnKG5vbmUpJyxcbiAgICAgICAgICBjbG91ZGZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzOiBvcHRpb25zLmNsb3VkZm9ybWF0aW9uRXhlY3V0aW9uUG9saWNpZXMgfHwgJyhub25lKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVuc3VyZUNka0F2YWlsYWJsZSgpO1xuICAgICAgICBwcmludFN1Y2Nlc3MoJ0FXUyBDREsgaXMgYXZhaWxhYmxlJyk7XG5cbiAgICAgICAgLy8gQnVpbGQgYm9vdHN0cmFwIGNvbW1hbmRcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IGJ1aWxkQm9vdHN0cmFwQ29tbWFuZCh7XG4gICAgICAgICAgYWNjb3VudCxcbiAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgICAgIHF1YWxpZmllcjogb3B0aW9ucy5xdWFsaWZpZXIsXG4gICAgICAgICAgdHJ1c3Q6IG9wdGlvbnMudHJ1c3QsXG4gICAgICAgICAgY2xvdWRmb3JtYXRpb25FeGVjdXRpb25Qb2xpY2llczogb3B0aW9ucy5jbG91ZGZvcm1hdGlvbkV4ZWN1dGlvblBvbGljaWVzLFxuICAgICAgICB9KTtcblxuICAgICAgICBwcmludFNlY3Rpb24oJ0NESyBFeGVjdXRpb24nKTtcbiAgICAgICAgY29uc29sZS5sb2coY3lhbihib2xkKCdDb21tYW5kOicpKSwgZGltKGNvbW1hbmQpKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICAgIC8vIEV4ZWN1dGUgYm9vdHN0cmFwXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dGVDZGtTaGVsbENvbW1hbmQoY29tbWFuZCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBzaG93T3V0cHV0OiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignQm9vdHN0cmFwIENvbXBsZXRlJyk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgICAgYWNjb3VudCxcbiAgICAgICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgICAgICBkdXJhdGlvbjogcmVzdWx0LmR1cmF0aW9uLFxuICAgICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgICAnQWNjb3VudCc6IGFjY291bnQsXG4gICAgICAgICAgICAgICdSZWdpb24nOiByZWdpb24sXG4gICAgICAgICAgICAgICdEdXJhdGlvbic6IGAke3Jlc3VsdC5kdXJhdGlvbn1tc2AsXG4gICAgICAgICAgICAgICdTdGF0dXMnOiAn4pyTIFN1Y2Nlc3MnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5WQUxJREFUSU9OLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgY29tbWFuZDogJ2Jvb3RzdHJhcCcsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIGFjY291bnQ6IG9wdGlvbnMuYWNjb3VudCxcbiAgICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers the `create-pipeline` command with the CLI program.
|
|
4
|
+
*
|
|
5
|
+
* Accepts a pipeline properties JSON file, validates it, resolves
|
|
6
|
+
* project/organization from CLI flags or the props file, and
|
|
7
|
+
* creates the pipeline via the platform API.
|
|
8
|
+
*
|
|
9
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createPipeline(program: Command): void;
|
|
12
|
+
//# sourceMappingURL=create-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-pipeline.d.ts","sourceRoot":"","sources":["../../src/commands/create-pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0QrD"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
+
}) : function(o, v) {
|
|
18
|
+
o["default"] = v;
|
|
19
|
+
});
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
38
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.createPipeline = createPipeline;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const ora_1 = __importDefault(require("ora"));
|
|
45
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
46
|
+
const cli_constants_1 = require("../config/cli.constants");
|
|
47
|
+
const command_utils_1 = require("../utils/command-utils");
|
|
48
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
49
|
+
const output_utils_1 = require("../utils/output-utils");
|
|
50
|
+
const { bold, cyan, dim, green } = picocolors_1.default;
|
|
51
|
+
/**
|
|
52
|
+
* Registers the `create-pipeline` command with the CLI program.
|
|
53
|
+
*
|
|
54
|
+
* Accepts a pipeline properties JSON file, validates it, resolves
|
|
55
|
+
* project/organization from CLI flags or the props file, and
|
|
56
|
+
* creates the pipeline via the platform API.
|
|
57
|
+
*
|
|
58
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
59
|
+
*/
|
|
60
|
+
function createPipeline(program) {
|
|
61
|
+
program
|
|
62
|
+
.command('create-pipeline')
|
|
63
|
+
.description('Create a new pipeline with the provided configuration')
|
|
64
|
+
.requiredOption('-f, --file <file>', 'Path to pipeline properties JSON file')
|
|
65
|
+
.option('-p, --project <project>', 'Project name (falls back to value in props file)')
|
|
66
|
+
.option('-o, --organization <organization>', 'Organization name (falls back to value in props file)')
|
|
67
|
+
.option('-n, --name <name>', 'Pipeline name')
|
|
68
|
+
.option('-a, --access <modifier>', 'Access modifier (public|private)', 'private')
|
|
69
|
+
.option('--default', 'Set as default pipeline', false)
|
|
70
|
+
.option('--active', 'Set pipeline as active', true)
|
|
71
|
+
.option('--verify-ssl', 'Enable SSL certificate verification')
|
|
72
|
+
.option('--no-verify-ssl', 'Disable SSL certificate verification')
|
|
73
|
+
.option('--dry-run', 'Validate inputs without creating pipeline', false)
|
|
74
|
+
.action(async (options) => {
|
|
75
|
+
const executionId = (0, command_utils_1.printCommandHeader)('Create Pipeline', 'Creating Pipeline');
|
|
76
|
+
const startTime = Date.now();
|
|
77
|
+
try {
|
|
78
|
+
// Display parameters
|
|
79
|
+
(0, output_utils_1.printInfo)('Configuration');
|
|
80
|
+
(0, output_utils_1.printKeyValue)({
|
|
81
|
+
'Project': options.project || '(from props file)',
|
|
82
|
+
'Organization': options.organization || '(from props file)',
|
|
83
|
+
'Name': options.name || '(not set)',
|
|
84
|
+
'Access Modifier': options.access,
|
|
85
|
+
'Default Pipeline': options.default ? 'Yes' : 'No',
|
|
86
|
+
'Active': options.active ? 'Yes' : 'No',
|
|
87
|
+
'Properties File': options.file,
|
|
88
|
+
'SSL Verification': options.verifySsl === false ? 'Disabled' : 'Enabled',
|
|
89
|
+
'Dry Run': options.dryRun ? 'Yes' : 'No',
|
|
90
|
+
});
|
|
91
|
+
// Security warning for SSL verification disabled
|
|
92
|
+
(0, command_utils_1.printSslWarning)(options.verifySsl);
|
|
93
|
+
console.log('');
|
|
94
|
+
(0, output_utils_1.printSection)('File Validation');
|
|
95
|
+
// Validate file exists
|
|
96
|
+
if (!fs.existsSync(options.file)) {
|
|
97
|
+
(0, output_utils_1.printError)('Properties file not found', { path: options.file });
|
|
98
|
+
throw new Error(`File not found: ${options.file}`);
|
|
99
|
+
}
|
|
100
|
+
// Check file extension
|
|
101
|
+
const fileExt = path.extname(options.file).toLowerCase();
|
|
102
|
+
if (fileExt !== '.json') {
|
|
103
|
+
(0, output_utils_1.printWarning)('File extension is not .json', { extension: fileExt });
|
|
104
|
+
}
|
|
105
|
+
const fileStats = fs.statSync(options.file);
|
|
106
|
+
// Check file size
|
|
107
|
+
if (fileStats.size > cli_constants_1.FILE_SIZE_LIMITS.PIPELINE_PROPS) {
|
|
108
|
+
(0, output_utils_1.printError)('Properties file is too large', {
|
|
109
|
+
size: (0, cli_constants_1.formatFileSize)(fileStats.size),
|
|
110
|
+
limit: (0, cli_constants_1.formatFileSize)(cli_constants_1.FILE_SIZE_LIMITS.PIPELINE_PROPS),
|
|
111
|
+
});
|
|
112
|
+
throw new Error('Properties file exceeds size limit');
|
|
113
|
+
}
|
|
114
|
+
(0, output_utils_1.printSuccess)('File validation passed');
|
|
115
|
+
(0, output_utils_1.printKeyValue)({
|
|
116
|
+
'File Path': options.file,
|
|
117
|
+
'File Size': (0, cli_constants_1.formatFileSize)(fileStats.size),
|
|
118
|
+
'Extension': fileExt,
|
|
119
|
+
});
|
|
120
|
+
// Read and parse properties file
|
|
121
|
+
console.log('');
|
|
122
|
+
(0, output_utils_1.printInfo)('Reading pipeline properties...');
|
|
123
|
+
const fileContent = fs.readFileSync(options.file, 'utf-8');
|
|
124
|
+
let props;
|
|
125
|
+
try {
|
|
126
|
+
props = JSON.parse(fileContent);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
(0, output_utils_1.printError)('Invalid JSON in properties file', {
|
|
130
|
+
error: error instanceof Error ? error.message : String(error),
|
|
131
|
+
hint: 'Ensure the file contains valid JSON syntax',
|
|
132
|
+
});
|
|
133
|
+
throw new Error('Properties file must contain valid JSON');
|
|
134
|
+
}
|
|
135
|
+
// Validate properties structure
|
|
136
|
+
if (typeof props !== 'object' || props === null) {
|
|
137
|
+
(0, output_utils_1.printError)('Invalid properties format', {
|
|
138
|
+
type: typeof props,
|
|
139
|
+
hint: 'Properties must be a JSON object',
|
|
140
|
+
});
|
|
141
|
+
throw new Error('Properties must be a valid object');
|
|
142
|
+
}
|
|
143
|
+
const propCount = Object.keys(props).length;
|
|
144
|
+
(0, output_utils_1.printSuccess)('Properties parsed successfully');
|
|
145
|
+
(0, output_utils_1.printKeyValue)({
|
|
146
|
+
'Total Keys': propCount.toString(),
|
|
147
|
+
'Sample Keys': Object.keys(props).slice(0, 5).join(', ') + (propCount > 5 ? '...' : ''),
|
|
148
|
+
});
|
|
149
|
+
// Validate properties content
|
|
150
|
+
if (propCount === 0) {
|
|
151
|
+
(0, output_utils_1.printWarning)('Properties object is empty - pipeline will have no configuration');
|
|
152
|
+
}
|
|
153
|
+
// Resolve project & organization: prefer CLI flags, fall back to
|
|
154
|
+
// values embedded inside the props file (builderProps).
|
|
155
|
+
const resolvedProject = options.project ?? props.project;
|
|
156
|
+
const resolvedOrganization = options.organization ?? props.organization;
|
|
157
|
+
if (!resolvedProject) {
|
|
158
|
+
(0, output_utils_1.printError)('Project is required', {
|
|
159
|
+
hint: 'Provide -p/--project flag or include "project" in the props file',
|
|
160
|
+
});
|
|
161
|
+
throw new Error('Project is required');
|
|
162
|
+
}
|
|
163
|
+
if (!resolvedOrganization) {
|
|
164
|
+
(0, output_utils_1.printError)('Organization is required', {
|
|
165
|
+
hint: 'Provide -o/--organization flag or include "organization" in the props file',
|
|
166
|
+
});
|
|
167
|
+
throw new Error('Organization is required');
|
|
168
|
+
}
|
|
169
|
+
// Build request payload — resolve pipelineName using same strategy as pipeline-builder.ts:
|
|
170
|
+
// props.pipelineName ?? `${organization}-${project}-pipeline`
|
|
171
|
+
const sanitize = (s) => s.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase();
|
|
172
|
+
const resolvedPipelineName = options.name
|
|
173
|
+
?? props.pipelineName
|
|
174
|
+
?? `${sanitize(resolvedOrganization)}-${sanitize(resolvedProject)}-pipeline`;
|
|
175
|
+
const payload = {
|
|
176
|
+
project: resolvedProject,
|
|
177
|
+
organization: resolvedOrganization,
|
|
178
|
+
pipelineName: resolvedPipelineName,
|
|
179
|
+
props,
|
|
180
|
+
};
|
|
181
|
+
// Add optional fields only if provided
|
|
182
|
+
if (options.access) {
|
|
183
|
+
payload.accessModifier = options.access;
|
|
184
|
+
}
|
|
185
|
+
if (options.default !== undefined) {
|
|
186
|
+
payload.isDefault = options.default;
|
|
187
|
+
}
|
|
188
|
+
if (options.active !== undefined) {
|
|
189
|
+
payload.isActive = options.active;
|
|
190
|
+
}
|
|
191
|
+
// Dry run mode
|
|
192
|
+
if (options.dryRun) {
|
|
193
|
+
console.log('');
|
|
194
|
+
(0, output_utils_1.printSection)('Dry Run - Request Preview');
|
|
195
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
196
|
+
console.log('');
|
|
197
|
+
(0, output_utils_1.printSuccess)('✓ Validation complete - no pipeline created (dry run mode)');
|
|
198
|
+
console.log('');
|
|
199
|
+
(0, output_utils_1.printInfo)('To create the pipeline, run the command without --dry-run');
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
// Create authenticated API client
|
|
203
|
+
const client = (0, command_utils_1.createAuthenticatedClient)(options);
|
|
204
|
+
const config = client.getConfig();
|
|
205
|
+
// Create pipeline
|
|
206
|
+
console.log('');
|
|
207
|
+
(0, output_utils_1.printSection)('Creating Pipeline');
|
|
208
|
+
const spinner = (0, ora_1.default)('Creating pipeline...').start();
|
|
209
|
+
let rawResponse;
|
|
210
|
+
let requestDuration;
|
|
211
|
+
try {
|
|
212
|
+
const requestStart = Date.now();
|
|
213
|
+
rawResponse = await client.post(config.api.pipelineUrl, payload);
|
|
214
|
+
requestDuration = Date.now() - requestStart;
|
|
215
|
+
spinner.succeed('Pipeline created');
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
spinner.fail('Pipeline creation failed');
|
|
219
|
+
throw error;
|
|
220
|
+
}
|
|
221
|
+
const pipeline = (0, output_utils_1.extractSingleResponse)(rawResponse, 'pipeline', 'id');
|
|
222
|
+
if (!pipeline?.id) {
|
|
223
|
+
(0, output_utils_1.printError)('Invalid pipeline response', {
|
|
224
|
+
responseKeys: rawResponse ? Object.keys(rawResponse) : '(null)',
|
|
225
|
+
});
|
|
226
|
+
throw new Error('Pipeline creation failed - no valid pipeline data received');
|
|
227
|
+
}
|
|
228
|
+
console.log('');
|
|
229
|
+
(0, output_utils_1.printSection)('✓ Pipeline Created Successfully');
|
|
230
|
+
// Display created pipeline info
|
|
231
|
+
(0, output_utils_1.printKeyValue)({
|
|
232
|
+
'Pipeline ID': green(bold(pipeline.id)),
|
|
233
|
+
'Project': pipeline.project,
|
|
234
|
+
'Organization': pipeline.organization,
|
|
235
|
+
'Name': pipeline.pipelineName || '(not set)',
|
|
236
|
+
'Access': pipeline.accessModifier || 'private',
|
|
237
|
+
'Default': pipeline.isDefault ? 'Yes' : 'No',
|
|
238
|
+
'Active': pipeline.isActive ? 'Yes' : 'No',
|
|
239
|
+
'Properties': pipeline.props ? `${Object.keys(pipeline.props).length} keys` : '(not returned)',
|
|
240
|
+
});
|
|
241
|
+
if (pipeline.createdAt) {
|
|
242
|
+
console.log('');
|
|
243
|
+
(0, output_utils_1.printKeyValue)({
|
|
244
|
+
'Created At': pipeline.createdAt,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
// Performance metrics
|
|
248
|
+
console.log('');
|
|
249
|
+
(0, output_utils_1.printKeyValue)({
|
|
250
|
+
'Execution ID': executionId,
|
|
251
|
+
'Request Duration': (0, cli_constants_1.formatDuration)(requestDuration),
|
|
252
|
+
'Total Duration': (0, cli_constants_1.formatDuration)(Date.now() - startTime),
|
|
253
|
+
});
|
|
254
|
+
// Save pipeline info to file
|
|
255
|
+
const outputDir = './output';
|
|
256
|
+
(0, output_utils_1.ensureOutputDirectory)(outputDir);
|
|
257
|
+
const outputFile = path.join(outputDir, `pipeline-${pipeline.id}.json`);
|
|
258
|
+
fs.writeFileSync(outputFile, JSON.stringify(pipeline, null, 2));
|
|
259
|
+
console.log('');
|
|
260
|
+
(0, output_utils_1.printSuccess)('Pipeline details saved to file');
|
|
261
|
+
(0, output_utils_1.printKeyValue)({
|
|
262
|
+
'Output File': outputFile,
|
|
263
|
+
'File Size': (0, cli_constants_1.formatFileSize)(fs.statSync(outputFile).size),
|
|
264
|
+
});
|
|
265
|
+
// Next steps
|
|
266
|
+
console.log('');
|
|
267
|
+
(0, output_utils_1.printSection)('Next Steps');
|
|
268
|
+
console.log(dim('You can now:'));
|
|
269
|
+
console.log(` ${cyan('•')} Deploy: ${bold(`deploy --id ${pipeline.id}`)}`);
|
|
270
|
+
console.log(` ${cyan('•')} View: ${bold(`get-pipeline --id ${pipeline.id}`)}`);
|
|
271
|
+
console.log(` ${cyan('•')} API: ${config.api.baseUrl}${config.api.pipelineUrl}/${pipeline.id}`);
|
|
272
|
+
console.log('');
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
(0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.API_REQUEST, {
|
|
276
|
+
debug: program.opts().debug,
|
|
277
|
+
exit: true,
|
|
278
|
+
context: {
|
|
279
|
+
command: 'create-pipeline',
|
|
280
|
+
executionId,
|
|
281
|
+
project: options.project,
|
|
282
|
+
organization: options.organization,
|
|
283
|
+
file: options.file,
|
|
284
|
+
verifySsl: options.verifySsl,
|
|
285
|
+
dryRun: options.dryRun,
|
|
286
|
+
},
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QnRDLHdDQTBRQztBQWhTRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLDhDQUFzQjtBQUN0Qiw0REFBOEI7QUFDOUIsMkRBQTJGO0FBRTNGLDBEQUF3RztBQUN4RywwREFBa0U7QUFDbEUsd0RBQXFLO0FBRXJLLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxvQkFBSSxDQUFDO0FBRXhDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLE9BQWdCO0lBQzdDLE9BQU87U0FDSixPQUFPLENBQUMsaUJBQWlCLENBQUM7U0FDMUIsV0FBVyxDQUFDLHVEQUF1RCxDQUFDO1NBQ3BFLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSx1Q0FBdUMsQ0FBQztTQUM1RSxNQUFNLENBQUMseUJBQXlCLEVBQUUsa0RBQWtELENBQUM7U0FDckYsTUFBTSxDQUFDLG1DQUFtQyxFQUFFLHVEQUF1RCxDQUFDO1NBQ3BHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxlQUFlLENBQUM7U0FDNUMsTUFBTSxDQUFDLHlCQUF5QixFQUFFLGtDQUFrQyxFQUFFLFNBQVMsQ0FBQztTQUNoRixNQUFNLENBQUMsV0FBVyxFQUFFLHlCQUF5QixFQUFFLEtBQUssQ0FBQztTQUNyRCxNQUFNLENBQUMsVUFBVSxFQUFFLHdCQUF3QixFQUFFLElBQUksQ0FBQztTQUNsRCxNQUFNLENBQUMsY0FBYyxFQUFFLHFDQUFxQyxDQUFDO1NBQzdELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxzQ0FBc0MsQ0FBQztTQUNqRSxNQUFNLENBQUMsV0FBVyxF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LCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZm9ybWF0RmlsZVNpemUsIEZJTEVfU0laRV9MSU1JVFMgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBQaXBlbGluZSwgUGlwZWxpbmVSZXNwb25zZSwgQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciB9IGZyb20gJy4uL3V0aWxzL2Vycm9yLWhhbmRsZXInO1xuaW1wb3J0IHsgZW5zdXJlT3V0cHV0RGlyZWN0b3J5LCBleHRyYWN0U2luZ2xlUmVzcG9uc2UsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscyc7XG5cbmNvbnN0IHsgYm9sZCwgY3lhbiwgZGltLCBncmVlbiB9ID0gcGljbztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBjcmVhdGUtcGlwZWxpbmVgIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogQWNjZXB0cyBhIHBpcGVsaW5lIHByb3BlcnRpZXMgSlNPTiBmaWxlLCB2YWxpZGF0ZXMgaXQsIHJlc29sdmVzXG4gKiBwcm9qZWN0L29yZ2FuaXphdGlvbiBmcm9tIENMSSBmbGFncyBvciB0aGUgcHJvcHMgZmlsZSwgYW5kXG4gKiBjcmVhdGVzIHRoZSBwaXBlbGluZSB2aWEgdGhlIHBsYXRmb3JtIEFQSS5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBpcGVsaW5lKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdjcmVhdGUtcGlwZWxpbmUnKVxuICAgIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgbmV3IHBpcGVsaW5lIHdpdGggdGhlIHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24nKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWYsIC0tZmlsZSA8ZmlsZT4nLCAnUGF0aCB0byBwaXBlbGluZSBwcm9wZXJ0aWVzIEpTT04gZmlsZScpXG4gICAgLm9wdGlvbignLXAsIC0tcHJvamVjdCA8cHJvamVjdD4nLCAnUHJvamVjdCBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAub3B0aW9uKCctbywgLS1vcmdhbml6YXRpb24gPG9yZ2FuaXphdGlvbj4nLCAnT3JnYW5pemF0aW9uIG5hbWUgKGZhbGxzIGJhY2sgdG8gdmFsdWUgaW4gcHJvcHMgZmlsZSknKVxuICAgIC5vcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1BpcGVsaW5lIG5hbWUnKVxuICAgIC5vcHRpb24oJy1hLCAtLWFjY2VzcyA8bW9kaWZpZXI+JywgJ0FjY2VzcyBtb2RpZmllciAocHVibGljfHByaXZhdGUpJywgJ3ByaXZhdGUnKVxuICAgIC5vcHRpb24oJy0tZGVmYXVsdCcsICdTZXQgYXMgZGVmYXVsdCBwaXBlbGluZScsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tYWN0aXZlJywgJ1NldCBwaXBlbGluZSBhcyBhY3RpdmUnLCB0cnVlKVxuICAgIC5vcHRpb24oJy0tdmVyaWZ5LXNzbCcsICdFbmFibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1uby12ZXJpZnktc3NsJywgJ0Rpc2FibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1kcnktcnVuJywgJ1ZhbGlkYXRlIGlucHV0cyB3aXRob3V0IGNyZWF0aW5nIHBpcGVsaW5lJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ0NyZWF0ZSBQaXBlbGluZScsICdDcmVhdGluZyBQaXBlbGluZScpO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAgICAgdHJ5IHtcblxuICAgICAgICAvLyBEaXNwbGF5IHBhcmFtZXRlcnNcbiAgICAgICAgcHJpbnRJbmZvKCdDb25maWd1cmF0aW9uJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdQcm9qZWN0Jzogb3B0aW9ucy5wcm9qZWN0IHx8ICcoZnJvbSBwcm9wcyBmaWxlKScsXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IG9wdGlvbnMub3JnYW5pemF0aW9uIHx8ICcoZnJvbSBwcm9wcyBmaWxlKScsXG4gICAgICAgICAgJ05hbWUnOiBvcHRpb25zLm5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgICAgICAgJ0FjY2VzcyBNb2RpZmllcic6IG9wdGlvbnMuYWNjZXNzLFxuICAgICAgICAgICdEZWZhdWx0IFBpcGVsaW5lJzogb3B0aW9ucy5kZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdBY3RpdmUnOiBvcHRpb25zLmFjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnUHJvcGVydGllcyBGaWxlJzogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICdTU0wgVmVyaWZpY2F0aW9uJzogb3B0aW9ucy52ZXJpZnlTc2wgPT09IGZhbHNlID8gJ0Rpc2FibGVkJyA6ICdFbmFibGVkJyxcbiAgICAgICAgICAnRHJ5IFJ1bic6IG9wdGlvbnMuZHJ5UnVuID8gJ1llcycgOiAnTm8nLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ0ZpbGUgVmFsaWRhdGlvbicpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGZpbGUgZXhpc3RzXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhvcHRpb25zLmZpbGUpKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignUHJvcGVydGllcyBmaWxlIG5vdCBmb3VuZCcsIHsgcGF0aDogb3B0aW9ucy5maWxlIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7b3B0aW9ucy5maWxlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZmlsZSBleHRlbnNpb25cbiAgICAgICAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShvcHRpb25zLmZpbGUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChmaWxlRXh0ICE9PSAnLmpzb24nKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdGaWxlIGV4dGVuc2lvbiBpcyBub3QgLmpzb24nLCB7IGV4dGVuc2lvbjogZmlsZUV4dCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVTdGF0cyA9IGZzLnN0YXRTeW5jKG9wdGlvbnMuZmlsZSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplXG4gICAgICAgIGlmIChmaWxlU3RhdHMuc2l6ZSA+IEZJTEVfU0laRV9MSU1JVFMuUElQRUxJTkVfUFJPUFMpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdQcm9wZXJ0aWVzIGZpbGUgaXMgdG9vIGxhcmdlJywge1xuICAgICAgICAgICAgc2l6ZTogZm9ybWF0RmlsZVNpemUoZmlsZVN0YXRzLnNpemUpLFxuICAgICAgICAgICAgbGltaXQ6IGZvcm1hdEZpbGVTaXplKEZJTEVfU0laRV9MSU1JVFMuUElQRUxJTkVfUFJPUFMpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydGllcyBmaWxlIGV4Y2VlZHMgc2l6ZSBsaW1pdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdGaWxlIHZhbGlkYXRpb24gcGFzc2VkJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdGaWxlIFBhdGgnOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgJ0ZpbGUgU2l6ZSc6IGZvcm1hdEZpbGVTaXplKGZpbGVTdGF0cy5zaXplKSxcbiAgICAgICAgICAnRXh0ZW5zaW9uJzogZmlsZUV4dCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVhZCBhbmQgcGFyc2UgcHJvcGVydGllcyBmaWxlXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdSZWFkaW5nIHBpcGVsaW5lIHByb3BlcnRpZXMuLi4nKTtcblxuICAgICAgICBjb25zdCBmaWxlQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhvcHRpb25zLmZpbGUsICd1dGYtOCcpO1xuXG4gICAgICAgIGxldCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcHJvcHMgPSBKU09OLnBhcnNlKGZpbGVDb250ZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIEpTT04gaW4gcHJvcGVydGllcyBmaWxlJywge1xuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICAgIGhpbnQ6ICdFbnN1cmUgdGhlIGZpbGUgY29udGFpbnMgdmFsaWQgSlNPTiBzeW50YXgnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydGllcyBmaWxlIG11c3QgY29udGFpbiB2YWxpZCBKU09OJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBwcm9wZXJ0aWVzIHN0cnVjdHVyZVxuICAgICAgICBpZiAodHlwZW9mIHByb3BzICE9PSAnb2JqZWN0JyB8fCBwcm9wcyA9PT0gbnVsbCkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0ludmFsaWQgcHJvcGVydGllcyBmb3JtYXQnLCB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlb2YgcHJvcHMsXG4gICAgICAgICAgICBoaW50OiAnUHJvcGVydGllcyBtdXN0IGJlIGEgSlNPTiBvYmplY3QnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydGllcyBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9wQ291bnQgPSBPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoO1xuXG4gICAgICAgIHByaW50U3VjY2VzcygnUHJvcGVydGllcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdUb3RhbCBLZXlzJzogcHJvcENvdW50LnRvU3RyaW5nKCksXG4gICAgICAgICAgJ1NhbXBsZSBLZXlzJzogT2JqZWN0LmtleXMocHJvcHMpLnNsaWNlKDAsIDUpLmpvaW4oJywgJykgKyAocHJvcENvdW50ID4gNSA/ICcuLi4nIDogJycpLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBwcm9wZXJ0aWVzIGNvbnRlbnRcbiAgICAgICAgaWYgKHByb3BDb3VudCA9PT0gMCkge1xuICAgICAgICAgIHByaW50V2FybmluZygnUHJvcGVydGllcyBvYmplY3QgaXMgZW1wdHkgLSBwaXBlbGluZSB3aWxsIGhhdmUgbm8gY29uZmlndXJhdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZSBwcm9qZWN0ICYgb3JnYW5pemF0aW9uOiBwcmVmZXIgQ0xJIGZsYWdzLCBmYWxsIGJhY2sgdG9cbiAgICAgICAgLy8gdmFsdWVzIGVtYmVkZGVkIGluc2lkZSB0aGUgcHJvcHMgZmlsZSAoYnVpbGRlclByb3BzKS5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRQcm9qZWN0ID0gb3B0aW9ucy5wcm9qZWN0ID8/IChwcm9wcy5wcm9qZWN0IGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkT3JnYW5pemF0aW9uID0gb3B0aW9ucy5vcmdhbml6YXRpb24gPz8gKHByb3BzLm9yZ2FuaXphdGlvbiBhcyBzdHJpbmcgfCB1bmRlZmluZWQpO1xuXG4gICAgICAgIGlmICghcmVzb2x2ZWRQcm9qZWN0KSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcsIHtcbiAgICAgICAgICAgIGhpbnQ6ICdQcm92aWRlIC1wLy0tcHJvamVjdCBmbGFnIG9yIGluY2x1ZGUgXCJwcm9qZWN0XCIgaW4gdGhlIHByb3BzIGZpbGUnLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzb2x2ZWRPcmdhbml6YXRpb24pIHtcbiAgICAgICAgICBwcmludEVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnLCB7XG4gICAgICAgICAgICBoaW50OiAnUHJvdmlkZSAtby8tLW9yZ2FuaXphdGlvbiBmbGFnIG9yIGluY2x1ZGUgXCJvcmdhbml6YXRpb25cIiBpbiB0aGUgcHJvcHMgZmlsZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJ1aWxkIHJlcXVlc3QgcGF5bG9hZCDigJQgcmVzb2x2ZSBwaXBlbGluZU5hbWUgdXNpbmcgc2FtZSBzdHJhdGVneSBhcyBwaXBlbGluZS1idWlsZGVyLnRzOlxuICAgICAgICAvLyAgIHByb3BzLnBpcGVsaW5lTmFtZSA/PyBgJHtvcmdhbml6YXRpb259LSR7cHJvamVjdH0tcGlwZWxpbmVgXG4gICAgICAgIGNvbnN0IHNhbml0aXplID0gKHM6IHN0cmluZykgPT4gcy5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgJ18nKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCByZXNvbHZlZFBpcGVsaW5lTmFtZSA9IG9wdGlvbnMubmFtZVxuICAgICAgICAgID8/IChwcm9wcy5waXBlbGluZU5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKVxuICAgICAgICAgID8/IGAke3Nhbml0aXplKHJlc29sdmVkT3JnYW5pemF0aW9uKX0tJHtzYW5pdGl6ZShyZXNvbHZlZFByb2plY3QpfS1waXBlbGluZWA7XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZDogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0ge1xuICAgICAgICAgIHByb2plY3Q6IHJlc29sdmVkUHJvamVjdCxcbiAgICAgICAgICBvcmdhbml6YXRpb246IHJlc29sdmVkT3JnYW5pemF0aW9uLFxuICAgICAgICAgIHBpcGVsaW5lTmFtZTogcmVzb2x2ZWRQaXBlbGluZU5hbWUsXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIG9wdGlvbmFsIGZpZWxkcyBvbmx5IGlmIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLmFjY2Vzcykge1xuICAgICAgICAgIHBheWxvYWQuYWNjZXNzTW9kaWZpZXIgPSBvcHRpb25zLmFjY2VzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXlsb2FkLmlzRGVmYXVsdCA9IG9wdGlvbnMuZGVmYXVsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5hY3RpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBheWxvYWQuaXNBY3RpdmUgPSBvcHRpb25zLmFjdGl2ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERyeSBydW4gbW9kZVxuICAgICAgICBpZiAob3B0aW9ucy5kcnlSdW4pIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIC0gUmVxdWVzdCBQcmV2aWV3Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocGF5bG9hZCwgbnVsbCwgMikpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFN1Y2Nlc3MoJ+KckyBWYWxpZGF0aW9uIGNvbXBsZXRlIC0gbm8gcGlwZWxpbmUgY3JlYXRlZCAoZHJ5IHJ1biBtb2RlKScpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludEluZm8oJ1RvIGNyZWF0ZSB0aGUgcGlwZWxpbmUsIHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IC0tZHJ5LXJ1bicpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBhdXRoZW50aWNhdGVkIEFQSSBjbGllbnRcbiAgICAgICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbiAgICAgICAgY29uc3QgY29uZmlnID0gY2xpZW50LmdldENvbmZpZygpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBwaXBlbGluZVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignQ3JlYXRpbmcgUGlwZWxpbmUnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdDcmVhdGluZyBwaXBlbGluZS4uLicpLnN0YXJ0KCk7XG4gICAgICAgIGxldCByYXdSZXNwb25zZTogUGlwZWxpbmVSZXNwb25zZTtcbiAgICAgICAgbGV0IHJlcXVlc3REdXJhdGlvbjogbnVtYmVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3RTdGFydCA9IERhdGUubm93KCk7XG4gICAgICAgICAgcmF3UmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxQaXBlbGluZVJlc3BvbnNlPihcbiAgICAgICAgICAgIGNvbmZpZy5hcGkucGlwZWxpbmVVcmwsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVxdWVzdER1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHJlcXVlc3RTdGFydDtcbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1BpcGVsaW5lIGNyZWF0ZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1BpcGVsaW5lIGNyZWF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBleHRyYWN0U2luZ2xlUmVzcG9uc2U8UGlwZWxpbmU+KHJhd1Jlc3BvbnNlLCAncGlwZWxpbmUnLCAnaWQnKTtcblxuICAgICAgICBpZiAoIXBpcGVsaW5lPy5pZCkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ0ludmFsaWQgcGlwZWxpbmUgcmVzcG9uc2UnLCB7XG4gICAgICAgICAgICByZXNwb25zZUtleXM6IHJhd1Jlc3BvbnNlID8gT2JqZWN0LmtleXMocmF3UmVzcG9uc2UpIDogJyhudWxsKScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQaXBlbGluZSBjcmVhdGlvbiBmYWlsZWQgLSBubyB2YWxpZCBwaXBlbGluZSBkYXRhIHJlY2VpdmVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbign4pyTIFBpcGVsaW5lIENyZWF0ZWQgU3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgICAgICAgLy8gRGlzcGxheSBjcmVhdGVkIHBpcGVsaW5lIGluZm9cbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1BpcGVsaW5lIElEJzogZ3JlZW4oYm9sZChwaXBlbGluZS5pZCkpLFxuICAgICAgICAgICdQcm9qZWN0JzogcGlwZWxpbmUucHJvamVjdCxcbiAgICAgICAgICAnT3JnYW5pemF0aW9uJzogcGlwZWxpbmUub3JnYW5pemF0aW9uLFxuICAgICAgICAgICdOYW1lJzogcGlwZWxpbmUucGlwZWxpbmVOYW1lIHx8ICcobm90IHNldCknLFxuICAgICAgICAgICdBY2Nlc3MnOiBwaXBlbGluZS5hY2Nlc3NNb2RpZmllciB8fCAncHJpdmF0ZScsXG4gICAgICAgICAgJ0RlZmF1bHQnOiBwaXBlbGluZS5pc0RlZmF1bHQgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0FjdGl2ZSc6IHBpcGVsaW5lLmlzQWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdQcm9wZXJ0aWVzJzogcGlwZWxpbmUucHJvcHMgPyBgJHtPYmplY3Qua2V5cyhwaXBlbGluZS5wcm9wcykubGVuZ3RofSBrZXlzYCA6ICcobm90IHJldHVybmVkKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwaXBlbGluZS5jcmVhdGVkQXQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHBpcGVsaW5lLmNyZWF0ZWRBdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBlcmZvcm1hbmNlIG1ldHJpY3NcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnRXhlY3V0aW9uIElEJzogZXhlY3V0aW9uSWQsXG4gICAgICAgICAgJ1JlcXVlc3QgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihyZXF1ZXN0RHVyYXRpb24pLFxuICAgICAgICAgICdUb3RhbCBEdXJhdGlvbic6IGZvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTYXZlIHBpcGVsaW5lIGluZm8gdG8gZmlsZVxuICAgICAgICBjb25zdCBvdXRwdXREaXIgPSAnLi9vdXRwdXQnO1xuICAgICAgICBlbnN1cmVPdXRwdXREaXJlY3Rvcnkob3V0cHV0RGlyKTtcblxuICAgICAgICBjb25zdCBvdXRwdXRGaWxlID0gcGF0aC5qb2luKG91dHB1dERpciwgYHBpcGVsaW5lLSR7cGlwZWxpbmUuaWR9Lmpzb25gKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRGaWxlLCBKU09OLnN0cmluZ2lmeShwaXBlbGluZSwgbnVsbCwgMikpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQaXBlbGluZSBkZXRhaWxzIHNhdmVkIHRvIGZpbGUnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ091dHB1dCBGaWxlJzogb3V0cHV0RmlsZSxcbiAgICAgICAgICAnRmlsZSBTaXplJzogZm9ybWF0RmlsZVNpemUoZnMuc3RhdFN5bmMob3V0cHV0RmlsZSkuc2l6ZSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIE5leHQgc3RlcHNcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ05leHQgU3RlcHMnKTtcbiAgICAgICAgY29uc29sZS5sb2coZGltKCdZb3UgY2FuIG5vdzonKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y3lhbign4oCiJyl9IERlcGxveTogJHtib2xkKGBkZXBsb3kgLS1pZCAke3BpcGVsaW5lLmlkfWApfWApO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke2N5YW4oJ+KAoicpfSBWaWV3OiAke2JvbGQoYGdldC1waXBlbGluZSAtLWlkICR7cGlwZWxpbmUuaWR9YCl9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y3lhbign4oCiJyl9IEFQSTogJHtjb25maWcuYXBpLmJhc2VVcmx9JHtjb25maWcuYXBpLnBpcGVsaW5lVXJsfS8ke3BpcGVsaW5lLmlkfWApO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdjcmVhdGUtcGlwZWxpbmUnLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwcm9qZWN0OiBvcHRpb25zLnByb2plY3QsXG4gICAgICAgICAgICBvcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICAgIGRyeVJ1bjogb3B0aW9ucy5kcnlSdW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59Il19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers the `deploy` command with the CLI program.
|
|
4
|
+
*
|
|
5
|
+
* Fetches pipeline properties by ID from the platform API, then
|
|
6
|
+
* runs `cdk deploy` to provision the pipeline infrastructure in AWS.
|
|
7
|
+
* For synthesis only, use `pipeline-manager synth`.
|
|
8
|
+
*
|
|
9
|
+
* Requires service credentials to be pre-stored in AWS Secrets Manager.
|
|
10
|
+
* Create them first with: `pipeline-manager store-token`
|
|
11
|
+
*
|
|
12
|
+
* @param program - The root Commander program instance to attach the command to.
|
|
13
|
+
*/
|
|
14
|
+
export declare function deploy(program: Command): void;
|
|
15
|
+
//# sourceMappingURL=deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiK7C"}
|