codefresh 0.84.0 → 0.84.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dockerfile +1 -1
- package/Dockerfile-debian +1 -1
- package/Dockerfile-debian-rootless +1 -1
- package/Dockerfile-rootless +1 -1
- package/docs/content/pipelines/Run Pipeline.md +8 -30
- package/lib/interface/cli/commands/annotation/create.cmd.js +1 -1
- package/lib/interface/cli/commands/pipeline/pipeline.sdk.spec.js +6 -75
- package/lib/interface/cli/commands/pipeline/run.base.js +6 -24
- package/lib/interface/cli/commands/pipeline/run.cmd.js +1 -19
- package/lib/interface/cli/commands/project/apply.cmd.js +10 -3
- package/lib/interface/cli/commands/project/create.cmd.js +12 -3
- package/lib/interface/cli/completion/tree.json +1 -1
- package/lib/interface/cli/defaults.js +0 -1
- package/lib/interface/cli/helpers/general.js +9 -79
- package/package.json +1 -1
- package/yarn.lock +17 -29
- package/lib/interface/cli/commands/pipeline/test-files/var.json +0 -12
- package/lib/interface/cli/commands/pipeline/test-files/var.yml +0 -5
package/Dockerfile
CHANGED
|
@@ -11,7 +11,7 @@ RUN pip install yq==${YQ_VERSION}
|
|
|
11
11
|
RUN pyinstaller --noconfirm --onefile --log-level DEBUG --clean --distpath /tmp/ $(which yq)
|
|
12
12
|
|
|
13
13
|
# Main
|
|
14
|
-
FROM node:18.
|
|
14
|
+
FROM node:18.16.0-alpine3.17
|
|
15
15
|
|
|
16
16
|
RUN apk --update add --no-cache ca-certificates git curl bash jq
|
|
17
17
|
|
package/Dockerfile-debian
CHANGED
|
@@ -11,7 +11,7 @@ RUN pip install yq==${YQ_VERSION}
|
|
|
11
11
|
RUN pyinstaller --noconfirm --onefile --log-level DEBUG --clean --distpath /tmp/ $(which yq)
|
|
12
12
|
|
|
13
13
|
# Main
|
|
14
|
-
FROM node:18.
|
|
14
|
+
FROM node:18.16.0-bullseye-slim
|
|
15
15
|
|
|
16
16
|
RUN apt update
|
|
17
17
|
RUN apt -y install ca-certificates git curl bash jq busybox && ln -s /bin/busybox /usr/bin/[[
|
|
@@ -11,7 +11,7 @@ RUN pip install yq==${YQ_VERSION}
|
|
|
11
11
|
RUN pyinstaller --noconfirm --onefile --log-level DEBUG --clean --distpath /tmp/ $(which yq)
|
|
12
12
|
|
|
13
13
|
# Main
|
|
14
|
-
FROM node:18.
|
|
14
|
+
FROM node:18.16.0-bullseye-slim
|
|
15
15
|
|
|
16
16
|
RUN apt update
|
|
17
17
|
RUN apt -y install ca-certificates git curl bash jq busybox && ln -s /bin/busybox /usr/bin/[[
|
package/Dockerfile-rootless
CHANGED
|
@@ -11,7 +11,7 @@ RUN pip install yq==${YQ_VERSION}
|
|
|
11
11
|
RUN pyinstaller --noconfirm --onefile --log-level DEBUG --clean --distpath /tmp/ $(which yq)
|
|
12
12
|
|
|
13
13
|
# Main
|
|
14
|
-
FROM node:18.
|
|
14
|
+
FROM node:18.16.0-alpine3.17
|
|
15
15
|
|
|
16
16
|
RUN apk --update add --no-cache ca-certificates git curl bash jq
|
|
17
17
|
|
|
@@ -15,44 +15,22 @@ The pipeline will be triggered multiple times according to the array length.
|
|
|
15
15
|
|
|
16
16
|
#### Variable yaml file with 2 sets of variables
|
|
17
17
|
```yaml
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
18
|
+
- key: value
|
|
19
|
+
key2: key1
|
|
20
|
+
- key: value
|
|
21
|
+
key2: key2
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
#### Variable json file with 2 sets of variables
|
|
25
25
|
```json
|
|
26
26
|
[
|
|
27
27
|
{
|
|
28
|
-
"
|
|
29
|
-
"
|
|
28
|
+
"key": "value",
|
|
29
|
+
"key2": "key1"
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
```
|
|
37
|
-
### Use encrypted variables in Codefresh build runs
|
|
38
|
-
#### Variable yaml file with single variable set with encrypted variables
|
|
39
|
-
```yaml
|
|
40
|
-
- key:
|
|
41
|
-
val: value
|
|
42
|
-
encrypted: true
|
|
43
|
-
key2: val2
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
#### Variable json file single variable set with encrypted variables
|
|
48
|
-
```json
|
|
49
|
-
[
|
|
50
|
-
{
|
|
51
|
-
"key": {
|
|
52
|
-
"val": "value",
|
|
53
|
-
"encrypted": true
|
|
54
|
-
},
|
|
55
|
-
"key2": "key1"
|
|
32
|
+
"key": "value",
|
|
33
|
+
"key2": "key2"
|
|
56
34
|
}
|
|
57
35
|
]
|
|
58
36
|
```
|
|
@@ -31,7 +31,7 @@ const command = new Command({
|
|
|
31
31
|
.example('codefresh create annotation image 2dfacdaad466 coverage=75%', 'Annotate entity with a single label')
|
|
32
32
|
.example('codefresh create annotation image 2dfacdaad466 coverage=75% tests_passed=true', 'Annotate entity with multiple labels')
|
|
33
33
|
// eslint-disable-next-line max-len
|
|
34
|
-
.example('codefresh create annotation
|
|
34
|
+
.example('codefresh create annotation image 2dfacdaad466 coverage=75% tests_passed=true --display coverage', 'Annotate entity with multiple labels and display selection'),
|
|
35
35
|
handler: async (argv) => {
|
|
36
36
|
const { entityType, entityId, labels, display } = argv;
|
|
37
37
|
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
const yaml = require('js-yaml');
|
|
2
|
-
const request = require('requestretry');
|
|
3
|
-
const fs = require('fs');
|
|
4
1
|
const DEFAULTS = require('../../defaults');
|
|
5
2
|
const getCmd = require('./get.cmd').toCommand();
|
|
6
3
|
const deleteCmd = require('./delete.cmd').toCommand();
|
|
@@ -13,21 +10,18 @@ jest.mock('../../helpers/validation'); // eslint-disable-line
|
|
|
13
10
|
jest.mock('../../../../../check-version');
|
|
14
11
|
jest.mock('../../completion/helpers', () => { // eslint-disable-line
|
|
15
12
|
return {
|
|
16
|
-
authContextWrapper:
|
|
13
|
+
authContextWrapper: func => func,
|
|
17
14
|
};
|
|
18
15
|
});
|
|
19
16
|
|
|
20
|
-
jest.mock('../../helpers/general', () => ({
|
|
21
|
-
...jest.requireActual('../../helpers/general'),
|
|
22
|
-
isCompatibleApiVersion: () => true,
|
|
23
|
-
}));
|
|
24
|
-
|
|
25
17
|
jest.mock('../../../../logic/entities/Pipeline', () => { // eslint-disable-line
|
|
26
18
|
return {
|
|
27
|
-
fromResponse:
|
|
19
|
+
fromResponse: res => res,
|
|
28
20
|
};
|
|
29
21
|
});
|
|
30
22
|
|
|
23
|
+
const request = require('requestretry');
|
|
24
|
+
|
|
31
25
|
const DEFAULT_RESPONSE = request.__defaultResponse();
|
|
32
26
|
|
|
33
27
|
describe('pipeline', () => {
|
|
@@ -63,11 +57,11 @@ describe('pipeline', () => {
|
|
|
63
57
|
});
|
|
64
58
|
|
|
65
59
|
it('should return default limit', async () => {
|
|
66
|
-
expect(_getLimit(undefined,
|
|
60
|
+
expect(_getLimit(undefined,false)).toEqual(DEFAULTS.GET_LIMIT_RESULTS);
|
|
67
61
|
});
|
|
68
62
|
|
|
69
63
|
it('should return `unlimited` value', async () => {
|
|
70
|
-
expect(_getLimit(undefined,
|
|
64
|
+
expect(_getLimit(undefined,true)).toEqual(DEFAULTS.GET_ALL_PIPELINES_LIMIT);
|
|
71
65
|
});
|
|
72
66
|
});
|
|
73
67
|
|
|
@@ -90,69 +84,6 @@ describe('pipeline', () => {
|
|
|
90
84
|
});
|
|
91
85
|
});
|
|
92
86
|
|
|
93
|
-
describe('run', () => {
|
|
94
|
-
it('should handle running pipeline with encrypted variables', async () => {
|
|
95
|
-
const argv = { name: 'some name',
|
|
96
|
-
detach: true,
|
|
97
|
-
annotation: [],
|
|
98
|
-
variable: [
|
|
99
|
-
'secret=secret',
|
|
100
|
-
'VAR1=VAL1',
|
|
101
|
-
],
|
|
102
|
-
encrypted: ['secret'],
|
|
103
|
-
};
|
|
104
|
-
const pip = new CfPipeline(argv);
|
|
105
|
-
await pip.run();
|
|
106
|
-
expect(pip.executionRequests[0].options.variables).toEqual([
|
|
107
|
-
{
|
|
108
|
-
key: 'secret',
|
|
109
|
-
value: 'secret',
|
|
110
|
-
encrypted: true,
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
key: 'VAR1',
|
|
114
|
-
value: 'VAL1',
|
|
115
|
-
},
|
|
116
|
-
]);
|
|
117
|
-
await verifyResponsesReturned([DEFAULT_RESPONSE]); // eslint-disable-line
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('should handle running pipeline with encrypted variables passing inside json file', async () => {
|
|
121
|
-
const rawFile = fs.readFileSync('lib/interface/cli/commands/pipeline/test-files/var.json', 'utf8');
|
|
122
|
-
|
|
123
|
-
const argv = { name: 'some name',
|
|
124
|
-
detach: true,
|
|
125
|
-
annotation: [],
|
|
126
|
-
'var-file': JSON.parse(rawFile),
|
|
127
|
-
};
|
|
128
|
-
const pip = new CfPipeline(argv);
|
|
129
|
-
await pip.run();
|
|
130
|
-
expect(pip.executionRequests[0].options.variables).toEqual(
|
|
131
|
-
[{ key: 'help6', value: '85858' },
|
|
132
|
-
{ key: 'should_be_encrepted', value: '0000' },
|
|
133
|
-
{ encrypted: true, key: 'help7', value: 'test' }],
|
|
134
|
-
);
|
|
135
|
-
await verifyResponsesReturned([DEFAULT_RESPONSE]); // eslint-disable-line
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
it('should handle running pipeline with encrypted variables passing inside yaml file', async () => {
|
|
139
|
-
const rawFile = fs.readFileSync('lib/interface/cli/commands/pipeline//test-files/var.yml', 'utf8');
|
|
140
|
-
|
|
141
|
-
const argv = { name: 'some name',
|
|
142
|
-
detach: true,
|
|
143
|
-
annotation: [],
|
|
144
|
-
'var-file': yaml.safeLoad(rawFile),
|
|
145
|
-
};
|
|
146
|
-
const pip = new CfPipeline(argv);
|
|
147
|
-
await pip.run();
|
|
148
|
-
expect(pip.executionRequests[0].options.variables).toEqual(
|
|
149
|
-
[{ key: 'VAR1', value: 'VAL1' },
|
|
150
|
-
{ encrypted: true, key: 'VAR2', value: 'VAL2' }],
|
|
151
|
-
);
|
|
152
|
-
await verifyResponsesReturned([DEFAULT_RESPONSE]); // eslint-disable-line
|
|
153
|
-
});
|
|
154
|
-
});
|
|
155
|
-
|
|
156
87
|
describe('runImpl', () => {
|
|
157
88
|
it('should handle running pipeline', async () => {
|
|
158
89
|
const argv = { name: 'some name', detach: true };
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
const _ = require('lodash');
|
|
2
2
|
const Promise = require('bluebird');
|
|
3
|
-
const
|
|
4
|
-
const { prepareKeyValueFromCLIEnvOption,
|
|
5
|
-
markEncryptedFlagOnRequestedVariables,
|
|
6
|
-
prepareKeyValueObjectsFromEnvFileOption,
|
|
7
|
-
prepareKeyValueObjectsFromCLIEnvOption,
|
|
8
|
-
isCompatibleApiVersion,
|
|
9
|
-
} = require('../../helpers/general');
|
|
3
|
+
const { prepareKeyValueFromCLIEnvOption } = require('../../helpers/general');
|
|
10
4
|
const { validatePipelineYaml } = require('../../helpers/validation');
|
|
11
5
|
const { printResult } = require('../root/validate.cmd');
|
|
6
|
+
const CFError = require('cf-errors');
|
|
12
7
|
const { sdk } = require('../../../../logic');
|
|
13
|
-
const defaults = require('../../defaults');
|
|
14
8
|
|
|
15
9
|
class RunBaseCommand {
|
|
16
10
|
constructor(argv) {
|
|
@@ -61,34 +55,22 @@ class RunBaseCommand {
|
|
|
61
55
|
packName,
|
|
62
56
|
},
|
|
63
57
|
};
|
|
64
|
-
|
|
65
|
-
supportedVersion: defaults.MIN_API_VERSION_FOR_ENCRYPTED_VARS_SUPPORT_IN_RUN_CMD,
|
|
66
|
-
});
|
|
58
|
+
|
|
67
59
|
if (variablesFromFile) {
|
|
68
60
|
_.forEach(variablesFromFile, (variables) => {
|
|
69
61
|
const request = _.cloneDeep(executionRequestTemplate);
|
|
70
|
-
|
|
71
|
-
request.options.variables = prepareKeyValueObjectsFromEnvFileOption(variables);
|
|
72
|
-
} else {
|
|
73
|
-
request.options.variables = variables;
|
|
74
|
-
}
|
|
62
|
+
request.options.variables = variables;
|
|
75
63
|
this.executionRequests.push(request);
|
|
76
64
|
});
|
|
77
65
|
} else {
|
|
78
|
-
|
|
79
|
-
if (encryptedVarsSupported) {
|
|
80
|
-
const varsArr = prepareKeyValueObjectsFromCLIEnvOption(this.argv.variable);
|
|
81
|
-
variables = markEncryptedFlagOnRequestedVariables(varsArr, this.argv.encrypted);
|
|
82
|
-
} else {
|
|
83
|
-
variables = prepareKeyValueFromCLIEnvOption(this.argv.variable);
|
|
84
|
-
}
|
|
66
|
+
const variables = prepareKeyValueFromCLIEnvOption(this.argv.variable);
|
|
85
67
|
const request = _.cloneDeep(executionRequestTemplate);
|
|
86
68
|
request.options.variables = variables;
|
|
87
69
|
request.options.contexts = contexts;
|
|
88
70
|
this.executionRequests.push(request);
|
|
89
71
|
}
|
|
90
72
|
|
|
91
|
-
const results = await Promise.all(this.executionRequests.map(
|
|
73
|
+
const results = await Promise.all(this.executionRequests.map(request => this.runImpl(request)));
|
|
92
74
|
const findMaxReducer = (accumulator, currentValue) => (currentValue > accumulator ? currentValue : accumulator);
|
|
93
75
|
const exitCode = results.reduce(findMaxReducer);
|
|
94
76
|
await this.postRunRequest();
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
const debug = require('debug')('codefresh:cli:run:pipeline');
|
|
2
2
|
const Command = require('../../Command');
|
|
3
|
-
const { crudFilenameOption
|
|
3
|
+
const { crudFilenameOption } = require('../../helpers/general');
|
|
4
4
|
const RunLocalCommand = require('./run.local');
|
|
5
5
|
const RunExternalCommand = require('./run.cf');
|
|
6
|
-
const defaults = require('../../defaults');
|
|
7
6
|
|
|
8
7
|
function getCommandFlavor(argv) {
|
|
9
8
|
if (argv.local) {
|
|
@@ -87,22 +86,6 @@ const run = new Command({
|
|
|
87
86
|
default: [],
|
|
88
87
|
alias: 'v',
|
|
89
88
|
})
|
|
90
|
-
.option('encrypted', {
|
|
91
|
-
array: true,
|
|
92
|
-
alias: 'e',
|
|
93
|
-
describe: 'Variable names to encrypt',
|
|
94
|
-
default: [],
|
|
95
|
-
})
|
|
96
|
-
.check(async (argv) => {
|
|
97
|
-
const encryptedVarsSupported = await isCompatibleApiVersion({
|
|
98
|
-
supportedVersion: defaults.MIN_API_VERSION_FOR_ENCRYPTED_VARS_SUPPORT_IN_RUN_CMD,
|
|
99
|
-
});
|
|
100
|
-
if (!encryptedVarsSupported && argv.encrypted.length > 0) {
|
|
101
|
-
throw new Error('The "encrypted" option is only supported in API versions '
|
|
102
|
-
+ `equal to or greater than ${defaults.MIN_API_VERSION_FOR_ENCRYPTED_VARS_SUPPORT_IN_RUN_CMD}.`);
|
|
103
|
-
}
|
|
104
|
-
return true;
|
|
105
|
-
})
|
|
106
89
|
.option('detach', {
|
|
107
90
|
alias: 'd',
|
|
108
91
|
describe: 'Run pipeline and print build ID',
|
|
@@ -143,7 +126,6 @@ const run = new Command({
|
|
|
143
126
|
.example('codefresh run PIPELINE_ID | PIPELINE_NAME -b=master', 'Defining the source control context using a branch')
|
|
144
127
|
.example('codefresh run PIPELINE_ID | PIPELINE_NAME -s=52b992e783d2f84dd0123c70ac8623b4f0f938d1', 'Defining the source control context using a commit')
|
|
145
128
|
.example('codefresh run PIPELINE_ID | PIPELINE_NAME -b=master -v key1=value1 -v key2=value2', 'Setting variables through the command')
|
|
146
|
-
.example('codefresh run PIPELINE_ID | PIPELINE_NAME -b=master -v key1=value1 -v key2=value2 -e key1', 'Setting variables through the command with encrypted option')
|
|
147
129
|
.example('codefresh run PIPELINE_ID | PIPELINE_NAME -b=master --var-file ./var_file.yml', 'Settings variables through a yml file')
|
|
148
130
|
.example('codefresh run PIPELINE_ID | PIPELINE_NAME -b=master --context context', 'Inject contexts to the pipeline execution')
|
|
149
131
|
.example('codefresh run PIPELINE_ID | PIPELINE_NAME --skip step1 step2 step3', 'Skip specific steps');
|
|
@@ -4,7 +4,7 @@ const _ = require('lodash');
|
|
|
4
4
|
const { sdk } = require('../../../../logic');
|
|
5
5
|
|
|
6
6
|
const applyRoot = require('../root/apply.cmd');
|
|
7
|
-
const { prepareKeyValueObjectsFromCLIEnvOption, ignoreHttpError
|
|
7
|
+
const { prepareKeyValueObjectsFromCLIEnvOption, ignoreHttpError } = require('../../helpers/general');
|
|
8
8
|
|
|
9
9
|
const command = new Command({
|
|
10
10
|
command: 'project [id|name]',
|
|
@@ -61,7 +61,14 @@ const command = new Command({
|
|
|
61
61
|
encrypted,
|
|
62
62
|
} = argv;
|
|
63
63
|
|
|
64
|
-
const
|
|
64
|
+
const variableMap = _.reduce(variables, (acc, v) => _.assign(acc, { [v.key]: v }), {});
|
|
65
|
+
_.forEach(encrypted, (varName) => {
|
|
66
|
+
const variable = variableMap[varName];
|
|
67
|
+
if (!variable) {
|
|
68
|
+
throw new CFError(`Variable is not provided: "${varName}"`);
|
|
69
|
+
}
|
|
70
|
+
variable.encrypted = true;
|
|
71
|
+
});
|
|
65
72
|
|
|
66
73
|
let project = await sdk.projects.get({ id }).catch(ignoreHttpError);
|
|
67
74
|
project = project || await sdk.projects.getByName({ name }).catch(ignoreHttpError);
|
|
@@ -74,7 +81,7 @@ const command = new Command({
|
|
|
74
81
|
const updatePayload = _.pickBy({
|
|
75
82
|
projectName,
|
|
76
83
|
tags: tags || existingTags,
|
|
77
|
-
variables:
|
|
84
|
+
variables: variables || existingVariables,
|
|
78
85
|
}, _.identity);
|
|
79
86
|
|
|
80
87
|
await sdk.projects.patch({ id: project.id }, updatePayload);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
const Command = require('../../Command');
|
|
2
|
+
const CFError = require('cf-errors');
|
|
3
|
+
const _ = require('lodash');
|
|
2
4
|
const { sdk } = require('../../../../logic');
|
|
3
5
|
const createRoot = require('../root/create.cmd');
|
|
4
6
|
const { checkOrProjectExists } = require('../../helpers/validation');
|
|
5
|
-
const { prepareKeyValueObjectsFromCLIEnvOption
|
|
7
|
+
const { prepareKeyValueObjectsFromCLIEnvOption } = require('../../helpers/general');
|
|
6
8
|
|
|
7
9
|
const command = new Command({
|
|
8
10
|
command: 'project <name>',
|
|
@@ -50,10 +52,17 @@ const command = new Command({
|
|
|
50
52
|
encrypted,
|
|
51
53
|
} = argv;
|
|
52
54
|
|
|
53
|
-
const
|
|
55
|
+
const variableMap = _.reduce(variables, (acc, v) => _.assign(acc, { [v.key]: v }), {});
|
|
56
|
+
_.forEach(encrypted, (varName) => {
|
|
57
|
+
const variable = variableMap[varName];
|
|
58
|
+
if (!variable) {
|
|
59
|
+
throw new CFError(`Variable is not provided: "${varName}"`);
|
|
60
|
+
}
|
|
61
|
+
variable.encrypted = true;
|
|
62
|
+
});
|
|
54
63
|
|
|
55
64
|
await checkOrProjectExists(projectName);
|
|
56
|
-
await sdk.projects.create({ projectName, tags, variables
|
|
65
|
+
await sdk.projects.create({ projectName, tags, variables });
|
|
57
66
|
console.log(`Project: "${projectName}" created`);
|
|
58
67
|
},
|
|
59
68
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"codefresh":{"analyze":{},"completion":{},"completions":{"alias":"completion"},"tag":{},"untag":{},"offline-logs":{"ensure-index":{},"offload-to-collection":{},"offload-to-file":{}},"add":{"repository":{},"repo":{"alias":"repository"}},"annotate":{"image":{},"img":{"alias":"image"}},"patch":{"__optionHandlers":["../commands/root/apply.completion.js"],"agent":{"__optionHandlers":["../commands/root/apply.completion.js"]},"board":{"__optionHandlers":["../commands/root/apply.completion.js"]},"project":{"__optionHandlers":["../commands/root/apply.completion.js"]},"runtime-environments":{"__optionHandlers":["../commands/root/apply.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"section":{"__optionHandlers":["../commands/root/apply.completion.js"]},"system-runtime-environments":{"__optionHandlers":["../commands/root/apply.completion.js"]},"sys-re":{"alias":"system-runtime-environments"},"system-runtime-environment":{"alias":"system-runtime-environments"},"teams":{"__optionHandlers":["../commands/root/apply.completion.js"]},"team":{"alias":"teams"},"tm":{"alias":"teams"},"tokens":{"__optionHandlers":["../commands/root/apply.completion.js"]},"token":{"alias":"tokens"},"helm-repo":{"__optionHandlers":["../commands/root/apply.completion.js"]},"context":{"__optionHandlers":["../commands/root/apply.completion.js"]},"ctx":{"alias":"context"}},"auth":{"create-context":{},"current-context":{},"get-contexts":{},"use-context":{}},"components":{"download":{},"update":{}},"create":{"__optionHandlers":["../commands/root/create.completion.js"],"agent":{"__optionHandlers":["../commands/root/create.completion.js"]},"clusters":{"__optionHandlers":["../commands/root/create.completion.js"]},"cluster":{"alias":"clusters"},"annotation":{"__optionHandlers":["../commands/root/create.completion.js"]},"board":{"__optionHandlers":["../commands/root/create.completion.js"]},"composition":{"__optionHandlers":["../commands/composition/create.completion.js","../commands/root/create.completion.js"]},"com":{"alias":"composition"},"project":{"__optionHandlers":["../commands/root/create.completion.js"]},"runtime-environments":{"__optionHandlers":["../commands/root/create.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"section":{"__optionHandlers":["../commands/root/create.completion.js"]},"teams":{"__optionHandlers":["../commands/root/create.completion.js"]},"team":{"alias":"teams"},"tm":{"alias":"teams"},"token":{"__optionHandlers":["../commands/root/create.completion.js"]},"helm-repo":{"__optionHandlers":["../commands/root/create.completion.js"]},"registry":{"__optionHandlers":["../commands/root/create.completion.js"],"standard":{"__optionHandlers":["../commands/root/create.completion.js"]}},"trigger":{"__optionHandlers":["../commands/root/create.completion.js"]},"t":{"alias":"trigger"},"trigger-event":{"__optionHandlers":["../commands/root/create.completion.js"]},"te":{"alias":"trigger-event"},"workflow-data-item":{"__optionHandlers":["../commands/root/create.completion.js"]},"wdi":{"alias":"workflow-data-item"},"context":{"__optionHandlers":["../commands/root/create.completion.js"],"config":{"__optionHandlers":["../commands/root/create.completion.js"]},"secret":{"__optionHandlers":["../commands/root/create.completion.js"]},"secret-yaml":{"__optionHandlers":["../commands/root/create.completion.js"]},"yaml":{"__optionHandlers":["../commands/root/create.completion.js"]},"git":{"__optionHandlers":["../commands/root/create.completion.js"],"bitbucket":{"__optionHandlers":["../commands/root/create.completion.js"]},"github":{"__optionHandlers":["../commands/root/create.completion.js"]},"gitlab":{"__optionHandlers":["../commands/root/create.completion.js"]},"stash":{"__optionHandlers":["../commands/root/create.completion.js"]}},"helm-repository":{"__optionHandlers":["../commands/root/create.completion.js"],"http":{"__optionHandlers":["../commands/root/create.completion.js"]},"s3":{"__optionHandlers":["../commands/root/create.completion.js"]}},"secret-store":{"__optionHandlers":["../commands/root/create.completion.js"],"hashicorp-vault":{"__optionHandlers":["../commands/root/create.completion.js"]},"kubernetes-runtime":{"__optionHandlers":["../commands/root/create.completion.js"]},"kubernetes":{"__optionHandlers":["../commands/root/create.completion.js"]}}},"ctx":{"alias":"context","config":{"__optionHandlers":["../commands/root/create.completion.js"]},"secret":{"__optionHandlers":["../commands/root/create.completion.js"]},"secret-yaml":{"__optionHandlers":["../commands/root/create.completion.js"]},"yaml":{"__optionHandlers":["../commands/root/create.completion.js"]},"git":{"__optionHandlers":["../commands/root/create.completion.js"],"bitbucket":{"__optionHandlers":["../commands/root/create.completion.js"]},"github":{"__optionHandlers":["../commands/root/create.completion.js"]},"gitlab":{"__optionHandlers":["../commands/root/create.completion.js"]},"stash":{"__optionHandlers":["../commands/root/create.completion.js"]}},"helm-repository":{"__optionHandlers":["../commands/root/create.completion.js"],"http":{"__optionHandlers":["../commands/root/create.completion.js"]},"s3":{"__optionHandlers":["../commands/root/create.completion.js"]}},"secret-store":{"__optionHandlers":["../commands/root/create.completion.js"],"hashicorp-vault":{"__optionHandlers":["../commands/root/create.completion.js"]},"kubernetes-runtime":{"__optionHandlers":["../commands/root/create.completion.js"]},"kubernetes":{"__optionHandlers":["../commands/root/create.completion.js"]}}}},"delete":{"__optionHandlers":["../commands/root/delete.completion.js"],"agent":{"__optionHandlers":["../commands/root/delete.completion.js"]},"annotation":{"__optionHandlers":["../commands/root/delete.completion.js"]},"board":{"__optionHandlers":["../commands/root/delete.completion.js"]},"cluster":{"__optionHandlers":["../commands/root/delete.completion.js"]},"clusters":{"alias":"cluster"},"composition":{"__optionHandlers":["../commands/root/delete.completion.js"]},"com":{"alias":"composition"},"environment":{"__optionHandlers":["../commands/root/delete.completion.js"]},"env":{"alias":"environment"},"project":{"__optionHandlers":["../commands/root/delete.completion.js"]},"repository":{"__optionHandlers":["../commands/root/delete.completion.js"]},"repo":{"alias":"repository"},"runtime-environments":{"__optionHandlers":["../commands/root/delete.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"section":{"__optionHandlers":["../commands/root/delete.completion.js"]},"step-type":{"__optionHandlers":["../commands/root/delete.completion.js"]},"system-runtime-environments":{"__optionHandlers":["../commands/root/delete.completion.js"]},"sys-re":{"alias":"system-runtime-environments"},"system-runtime-environment":{"alias":"system-runtime-environments"},"teams":{"__optionHandlers":["../commands/root/delete.completion.js"]},"team":{"alias":"teams"},"tm":{"alias":"teams"},"tokens":{"__optionHandlers":["../commands/root/delete.completion.js"]},"token":{"alias":"tokens"},"helm-repo":{"__optionHandlers":["../commands/root/delete.completion.js"]},"pipeline":{"__optionHandlers":["../commands/root/delete.completion.js"]},"pip":{"alias":"pipeline"},"registry":{"__optionHandlers":["../commands/root/delete.completion.js"]},"trigger":{"__optionHandlers":["../commands/root/delete.completion.js"]},"t":{"alias":"trigger"},"trigger-event":{"__optionHandlers":["../commands/root/delete.completion.js"]},"te":{"alias":"trigger-event"},"context":{"__optionHandlers":["../commands/root/delete.completion.js"]},"ctx":{"alias":"context"}},"diff":{"__optionHandlers":["../commands/root/diff.completion.js"],"runtime-environments":{"__optionHandlers":["../commands/root/diff.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"system-runtime-environments":{"__optionHandlers":["../commands/root/diff.completion.js"]},"sys-re":{"alias":"system-runtime-environments"},"system-runtime-environment":{"alias":"system-runtime-environments"}},"download":{"audit":{}},"generate":{"image-pull-secret":{}},"get":{"__optionHandlers":["../commands/root/get.completion.js"],"agents":{"__optionHandlers":["../commands/root/get.completion.js"]},"agent":{"alias":"agents"},"annotation":{"__optionHandlers":["../commands/root/get.completion.js"]},"boards":{"__optionHandlers":["../commands/root/get.completion.js"]},"board":{"alias":"boards"},"clusters":{"__optionHandlers":["../commands/root/get.completion.js"]},"cluster":{"alias":"clusters"},"compositions":{"__optionHandlers":["../commands/root/get.completion.js"]},"com":{"alias":"compositions"},"composition":{"alias":"compositions"},"environments":{"__optionHandlers":["../commands/root/get.completion.js"]},"env":{"alias":"environments"},"environment":{"alias":"environments"},"images":{"__optionHandlers":["../commands/root/get.completion.js"]},"img":{"alias":"images"},"image":{"alias":"images"},"projects":{"__optionHandlers":["../commands/root/get.completion.js"]},"project":{"alias":"projects"},"repository":{"__optionHandlers":["../commands/root/get.completion.js"]},"repo":{"alias":"repository"},"runtime-environments":{"__optionHandlers":["../commands/root/get.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"sections":{"__optionHandlers":["../commands/root/get.completion.js"]},"section":{"alias":"sections"},"step-types":{"__positionalHandler":"../commands/step/get.completion.js","__optionHandlers":["../commands/root/get.completion.js"]},"step-type":{"alias":"step-types"},"system-runtime-environments":{"__optionHandlers":["../commands/root/get.completion.js"]},"sys-re":{"alias":"system-runtime-environments"},"system-runtime-environment":{"alias":"system-runtime-environments"},"teams":{"__optionHandlers":["../commands/root/get.completion.js"]},"team":{"alias":"teams"},"tm":{"alias":"teams"},"tokens":{"__optionHandlers":["../commands/root/get.completion.js"]},"token":{"alias":"tokens"},"helm-repo":{"__optionHandlers":["../commands/root/get.completion.js"]},"pipelines":{"__positionalHandler":"../commands/pipeline/get.completion.js","__optionHandlers":["../commands/root/get.completion.js"]},"pip":{"alias":"pipelines"},"pipeline":{"alias":"pipelines"},"registry":{"__optionHandlers":["../commands/root/get.completion.js"]},"triggers":{"__optionHandlers":["../commands/root/get.completion.js"]},"trigger":{"alias":"triggers"},"t":{"alias":"triggers"},"trigger-events":{"__optionHandlers":["../commands/root/get.completion.js"]},"trigger-event":{"alias":"trigger-events"},"te":{"alias":"trigger-events"},"trigger-types":{"__optionHandlers":["../commands/root/get.completion.js"]},"trigger-type":{"alias":"trigger-types"},"tt":{"alias":"trigger-types"},"builds":{"__optionHandlers":["../commands/root/get.completion.js"]},"build":{"alias":"builds"},"workflow-data-item":{"__optionHandlers":["../commands/root/get.completion.js"]},"wdi":{"alias":"workflow-data-item"},"contexts":{"__optionHandlers":["../commands/root/get.completion.js"]},"ctx":{"alias":"contexts"},"context":{"alias":"contexts"}},"install":{"runtime":{},"agent":{},"app-proxy":{},"monitor":{},"gitops":{}},"replace":{"__optionHandlers":["../commands/root/replace.completion.js"],"composition":{"__optionHandlers":["../commands/composition/replace.completion.js","../commands/root/replace.completion.js"]},"com":{"alias":"composition"}},"runner":{"delete":{},"execute-test-pipeline":{},"info":{},"init":{},"upgrade":{}},"synchronize":{"teams":{},"team":{"alias":"teams"},"tm":{"alias":"teams"}},"uninstall":{"agent":{},"app-proxy":{},"runtime":{},"monitor":{},"gitops":{}},"upgrade":{"app-proxy":{},"gitops":{}},"validate":{"__positionalHandler":"../commands/root/validate.completion.js"},"version":{},"attach":{},"cli-config":{"get":{},"help":{},"profile":{},"set":{}},"set-helm-config":{},"install-chart":{},"helm-promotion":{},"delete-release":{},"rollback-release":{},"test-release":{},"run":{"__optionHandlers":["../commands/pipeline/run.completion.js"]},"approve":{},"deny":{},"logs":{},"restart":{},"terminate":{},"wait":{}}}
|
|
1
|
+
{"codefresh":{"analyze":{},"completion":{},"completions":{"alias":"completion"},"tag":{},"untag":{},"offline-logs":{"ensure-index":{},"offload-to-collection":{},"offload-to-file":{}},"run":{"__optionHandlers":["../commands/pipeline/run.completion.js"]},"add":{"repository":{},"repo":{"alias":"repository"}},"annotate":{"image":{},"img":{"alias":"image"}},"patch":{"__optionHandlers":["../commands/root/apply.completion.js"],"agent":{"__optionHandlers":["../commands/root/apply.completion.js"]},"board":{"__optionHandlers":["../commands/root/apply.completion.js"]},"project":{"__optionHandlers":["../commands/root/apply.completion.js"]},"runtime-environments":{"__optionHandlers":["../commands/root/apply.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"section":{"__optionHandlers":["../commands/root/apply.completion.js"]},"system-runtime-environments":{"__optionHandlers":["../commands/root/apply.completion.js"]},"sys-re":{"alias":"system-runtime-environments"},"system-runtime-environment":{"alias":"system-runtime-environments"},"teams":{"__optionHandlers":["../commands/root/apply.completion.js"]},"team":{"alias":"teams"},"tm":{"alias":"teams"},"tokens":{"__optionHandlers":["../commands/root/apply.completion.js"]},"token":{"alias":"tokens"},"helm-repo":{"__optionHandlers":["../commands/root/apply.completion.js"]},"context":{"__optionHandlers":["../commands/root/apply.completion.js"]},"ctx":{"alias":"context"}},"auth":{"create-context":{},"current-context":{},"get-contexts":{},"use-context":{}},"components":{"download":{},"update":{}},"create":{"__optionHandlers":["../commands/root/create.completion.js"],"agent":{"__optionHandlers":["../commands/root/create.completion.js"]},"clusters":{"__optionHandlers":["../commands/root/create.completion.js"]},"cluster":{"alias":"clusters"},"annotation":{"__optionHandlers":["../commands/root/create.completion.js"]},"board":{"__optionHandlers":["../commands/root/create.completion.js"]},"composition":{"__optionHandlers":["../commands/composition/create.completion.js","../commands/root/create.completion.js"]},"com":{"alias":"composition"},"project":{"__optionHandlers":["../commands/root/create.completion.js"]},"runtime-environments":{"__optionHandlers":["../commands/root/create.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"section":{"__optionHandlers":["../commands/root/create.completion.js"]},"teams":{"__optionHandlers":["../commands/root/create.completion.js"]},"team":{"alias":"teams"},"tm":{"alias":"teams"},"token":{"__optionHandlers":["../commands/root/create.completion.js"]},"helm-repo":{"__optionHandlers":["../commands/root/create.completion.js"]},"registry":{"__optionHandlers":["../commands/root/create.completion.js"],"standard":{"__optionHandlers":["../commands/root/create.completion.js"]}},"trigger":{"__optionHandlers":["../commands/root/create.completion.js"]},"t":{"alias":"trigger"},"trigger-event":{"__optionHandlers":["../commands/root/create.completion.js"]},"te":{"alias":"trigger-event"},"workflow-data-item":{"__optionHandlers":["../commands/root/create.completion.js"]},"wdi":{"alias":"workflow-data-item"},"context":{"__optionHandlers":["../commands/root/create.completion.js"],"config":{"__optionHandlers":["../commands/root/create.completion.js"]},"secret":{"__optionHandlers":["../commands/root/create.completion.js"]},"secret-yaml":{"__optionHandlers":["../commands/root/create.completion.js"]},"yaml":{"__optionHandlers":["../commands/root/create.completion.js"]},"git":{"__optionHandlers":["../commands/root/create.completion.js"],"bitbucket":{"__optionHandlers":["../commands/root/create.completion.js"]},"github":{"__optionHandlers":["../commands/root/create.completion.js"]},"gitlab":{"__optionHandlers":["../commands/root/create.completion.js"]},"stash":{"__optionHandlers":["../commands/root/create.completion.js"]}},"helm-repository":{"__optionHandlers":["../commands/root/create.completion.js"],"http":{"__optionHandlers":["../commands/root/create.completion.js"]},"s3":{"__optionHandlers":["../commands/root/create.completion.js"]}},"secret-store":{"__optionHandlers":["../commands/root/create.completion.js"],"hashicorp-vault":{"__optionHandlers":["../commands/root/create.completion.js"]},"kubernetes-runtime":{"__optionHandlers":["../commands/root/create.completion.js"]},"kubernetes":{"__optionHandlers":["../commands/root/create.completion.js"]}}},"ctx":{"alias":"context","config":{"__optionHandlers":["../commands/root/create.completion.js"]},"secret":{"__optionHandlers":["../commands/root/create.completion.js"]},"secret-yaml":{"__optionHandlers":["../commands/root/create.completion.js"]},"yaml":{"__optionHandlers":["../commands/root/create.completion.js"]},"git":{"__optionHandlers":["../commands/root/create.completion.js"],"bitbucket":{"__optionHandlers":["../commands/root/create.completion.js"]},"github":{"__optionHandlers":["../commands/root/create.completion.js"]},"gitlab":{"__optionHandlers":["../commands/root/create.completion.js"]},"stash":{"__optionHandlers":["../commands/root/create.completion.js"]}},"helm-repository":{"__optionHandlers":["../commands/root/create.completion.js"],"http":{"__optionHandlers":["../commands/root/create.completion.js"]},"s3":{"__optionHandlers":["../commands/root/create.completion.js"]}},"secret-store":{"__optionHandlers":["../commands/root/create.completion.js"],"hashicorp-vault":{"__optionHandlers":["../commands/root/create.completion.js"]},"kubernetes-runtime":{"__optionHandlers":["../commands/root/create.completion.js"]},"kubernetes":{"__optionHandlers":["../commands/root/create.completion.js"]}}}},"delete":{"__optionHandlers":["../commands/root/delete.completion.js"],"agent":{"__optionHandlers":["../commands/root/delete.completion.js"]},"annotation":{"__optionHandlers":["../commands/root/delete.completion.js"]},"board":{"__optionHandlers":["../commands/root/delete.completion.js"]},"cluster":{"__optionHandlers":["../commands/root/delete.completion.js"]},"clusters":{"alias":"cluster"},"composition":{"__optionHandlers":["../commands/root/delete.completion.js"]},"com":{"alias":"composition"},"environment":{"__optionHandlers":["../commands/root/delete.completion.js"]},"env":{"alias":"environment"},"pipeline":{"__optionHandlers":["../commands/root/delete.completion.js"]},"pip":{"alias":"pipeline"},"project":{"__optionHandlers":["../commands/root/delete.completion.js"]},"repository":{"__optionHandlers":["../commands/root/delete.completion.js"]},"repo":{"alias":"repository"},"runtime-environments":{"__optionHandlers":["../commands/root/delete.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"section":{"__optionHandlers":["../commands/root/delete.completion.js"]},"step-type":{"__optionHandlers":["../commands/root/delete.completion.js"]},"system-runtime-environments":{"__optionHandlers":["../commands/root/delete.completion.js"]},"sys-re":{"alias":"system-runtime-environments"},"system-runtime-environment":{"alias":"system-runtime-environments"},"teams":{"__optionHandlers":["../commands/root/delete.completion.js"]},"team":{"alias":"teams"},"tm":{"alias":"teams"},"tokens":{"__optionHandlers":["../commands/root/delete.completion.js"]},"token":{"alias":"tokens"},"helm-repo":{"__optionHandlers":["../commands/root/delete.completion.js"]},"registry":{"__optionHandlers":["../commands/root/delete.completion.js"]},"trigger":{"__optionHandlers":["../commands/root/delete.completion.js"]},"t":{"alias":"trigger"},"trigger-event":{"__optionHandlers":["../commands/root/delete.completion.js"]},"te":{"alias":"trigger-event"},"context":{"__optionHandlers":["../commands/root/delete.completion.js"]},"ctx":{"alias":"context"}},"diff":{"__optionHandlers":["../commands/root/diff.completion.js"],"runtime-environments":{"__optionHandlers":["../commands/root/diff.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"system-runtime-environments":{"__optionHandlers":["../commands/root/diff.completion.js"]},"sys-re":{"alias":"system-runtime-environments"},"system-runtime-environment":{"alias":"system-runtime-environments"}},"download":{"audit":{}},"generate":{"image-pull-secret":{}},"get":{"__optionHandlers":["../commands/root/get.completion.js"],"agents":{"__optionHandlers":["../commands/root/get.completion.js"]},"agent":{"alias":"agents"},"annotation":{"__optionHandlers":["../commands/root/get.completion.js"]},"boards":{"__optionHandlers":["../commands/root/get.completion.js"]},"board":{"alias":"boards"},"clusters":{"__optionHandlers":["../commands/root/get.completion.js"]},"cluster":{"alias":"clusters"},"compositions":{"__optionHandlers":["../commands/root/get.completion.js"]},"com":{"alias":"compositions"},"composition":{"alias":"compositions"},"environments":{"__optionHandlers":["../commands/root/get.completion.js"]},"env":{"alias":"environments"},"environment":{"alias":"environments"},"images":{"__optionHandlers":["../commands/root/get.completion.js"]},"img":{"alias":"images"},"image":{"alias":"images"},"pipelines":{"__positionalHandler":"../commands/pipeline/get.completion.js","__optionHandlers":["../commands/root/get.completion.js"]},"pip":{"alias":"pipelines"},"pipeline":{"alias":"pipelines"},"projects":{"__optionHandlers":["../commands/root/get.completion.js"]},"project":{"alias":"projects"},"repository":{"__optionHandlers":["../commands/root/get.completion.js"]},"repo":{"alias":"repository"},"runtime-environments":{"__optionHandlers":["../commands/root/get.completion.js"]},"re":{"alias":"runtime-environments"},"runtime-environment":{"alias":"runtime-environments"},"sections":{"__optionHandlers":["../commands/root/get.completion.js"]},"section":{"alias":"sections"},"step-types":{"__positionalHandler":"../commands/step/get.completion.js","__optionHandlers":["../commands/root/get.completion.js"]},"step-type":{"alias":"step-types"},"system-runtime-environments":{"__optionHandlers":["../commands/root/get.completion.js"]},"sys-re":{"alias":"system-runtime-environments"},"system-runtime-environment":{"alias":"system-runtime-environments"},"teams":{"__optionHandlers":["../commands/root/get.completion.js"]},"team":{"alias":"teams"},"tm":{"alias":"teams"},"tokens":{"__optionHandlers":["../commands/root/get.completion.js"]},"token":{"alias":"tokens"},"helm-repo":{"__optionHandlers":["../commands/root/get.completion.js"]},"registry":{"__optionHandlers":["../commands/root/get.completion.js"]},"triggers":{"__optionHandlers":["../commands/root/get.completion.js"]},"trigger":{"alias":"triggers"},"t":{"alias":"triggers"},"trigger-events":{"__optionHandlers":["../commands/root/get.completion.js"]},"trigger-event":{"alias":"trigger-events"},"te":{"alias":"trigger-events"},"trigger-types":{"__optionHandlers":["../commands/root/get.completion.js"]},"trigger-type":{"alias":"trigger-types"},"tt":{"alias":"trigger-types"},"builds":{"__optionHandlers":["../commands/root/get.completion.js"]},"build":{"alias":"builds"},"workflow-data-item":{"__optionHandlers":["../commands/root/get.completion.js"]},"wdi":{"alias":"workflow-data-item"},"contexts":{"__optionHandlers":["../commands/root/get.completion.js"]},"ctx":{"alias":"contexts"},"context":{"alias":"contexts"}},"install":{"runtime":{},"agent":{},"app-proxy":{},"monitor":{},"gitops":{}},"replace":{"__optionHandlers":["../commands/root/replace.completion.js"],"composition":{"__optionHandlers":["../commands/composition/replace.completion.js","../commands/root/replace.completion.js"]},"com":{"alias":"composition"}},"runner":{"delete":{},"execute-test-pipeline":{},"info":{},"init":{},"upgrade":{}},"synchronize":{"teams":{},"team":{"alias":"teams"},"tm":{"alias":"teams"}},"uninstall":{"agent":{},"app-proxy":{},"runtime":{},"monitor":{},"gitops":{}},"upgrade":{"app-proxy":{},"gitops":{}},"validate":{"__positionalHandler":"../commands/root/validate.completion.js"},"version":{},"attach":{},"cli-config":{"get":{},"help":{},"profile":{},"set":{}},"set-helm-config":{},"install-chart":{},"helm-promotion":{},"delete-release":{},"rollback-release":{},"test-release":{},"approve":{},"deny":{},"logs":{},"restart":{},"terminate":{},"wait":{}}}
|
|
@@ -13,7 +13,6 @@ const DEFAULTS = {
|
|
|
13
13
|
MAX_CONSECUTIVE_ERRORS_LIMIT: 10,
|
|
14
14
|
CODEFRESH_PATH: path.resolve(homedir(), '.Codefresh'),
|
|
15
15
|
ENGINE_IMAGE: process.env.ENGINE_IMAGE || 'codefresh/engine:master',
|
|
16
|
-
MIN_API_VERSION_FOR_ENCRYPTED_VARS_SUPPORT_IN_RUN_CMD: '21.221.14',
|
|
17
16
|
};
|
|
18
17
|
|
|
19
18
|
module.exports = DEFAULTS;
|
|
@@ -1,43 +1,15 @@
|
|
|
1
|
-
const debug = require('debug')('codefresh:cli:helpers:general');
|
|
2
1
|
const Promise = require('bluebird');
|
|
3
2
|
const _ = require('lodash');
|
|
4
3
|
const fs = require('fs');
|
|
5
4
|
const yaml = require('js-yaml');
|
|
5
|
+
const defaults = require('../defaults');
|
|
6
6
|
const CFError = require('cf-errors');
|
|
7
7
|
const path = require('path');
|
|
8
|
-
const semver = require('semver');
|
|
9
|
-
const request = require('requestretry');
|
|
10
|
-
const defaults = require('../defaults');
|
|
11
8
|
const Output = require('../../../output/Output');
|
|
12
9
|
const { sdk } = require('../../../logic');
|
|
13
10
|
|
|
14
11
|
const isDebug = () => (process.env.DEBUG || '').includes(defaults.DEBUG_PATTERN);
|
|
15
12
|
|
|
16
|
-
async function getApiVersion(token, url) {
|
|
17
|
-
const RequestOptions = {
|
|
18
|
-
url: `${url}/api/user`,
|
|
19
|
-
headers: {
|
|
20
|
-
Authorization: token,
|
|
21
|
-
},
|
|
22
|
-
json: true,
|
|
23
|
-
maxAttempts: 3, // Retry up to 3 times
|
|
24
|
-
timeout: 10000,
|
|
25
|
-
};
|
|
26
|
-
try {
|
|
27
|
-
const res = await request(RequestOptions);
|
|
28
|
-
return _.get(res, 'headers.api_version');
|
|
29
|
-
} catch (error) {
|
|
30
|
-
debug('Failed to get API version:', error);
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async function isCompatibleApiVersion({ supportedVersion }) {
|
|
36
|
-
const token = _.get(sdk, 'config.context.token');
|
|
37
|
-
const url = _.get(sdk, 'config.context.url', defaults.URL);
|
|
38
|
-
const apiVersion = token ? await getApiVersion(token, url) : null;
|
|
39
|
-
return !!(apiVersion && semver.gte(apiVersion, supportedVersion));
|
|
40
|
-
}
|
|
41
13
|
|
|
42
14
|
const wrapHandler = (handler, requiresAuthentication) => {
|
|
43
15
|
return async (argv) => {
|
|
@@ -134,39 +106,6 @@ const prepareKeyValueObjectsFromCLIEnvOption = (environmentVariables) => {
|
|
|
134
106
|
return variables;
|
|
135
107
|
};
|
|
136
108
|
|
|
137
|
-
/**
|
|
138
|
-
* will return an array of objects { key, value, encrypted } from parsing an array of objects: key=value ,key: {value: "value", encrypted: true }
|
|
139
|
-
* @param environmentVariables
|
|
140
|
-
* @returns Array of { key, value, encrypted }
|
|
141
|
-
*/
|
|
142
|
-
const prepareKeyValueObjectsFromEnvFileOption = (environmentVariables) => _.map(environmentVariables, (value, key) => {
|
|
143
|
-
if (_.isObject(value)) {
|
|
144
|
-
const { value: val, encrypted } = value;
|
|
145
|
-
return { key, value: val, encrypted };
|
|
146
|
-
}
|
|
147
|
-
return { key, value };
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* The function takes in a list of requested variables and an array of encrypted variable names,
|
|
152
|
-
* and sets the encrypted flag to true on each corresponding variable object in the list.
|
|
153
|
-
* @param environmentVariables
|
|
154
|
-
* @param encrypted
|
|
155
|
-
* @returns Array of { key, value, encrypted }
|
|
156
|
-
*/
|
|
157
|
-
const markEncryptedFlagOnRequestedVariables = (requestedVariables, encrypted) => {
|
|
158
|
-
const variables = _.cloneDeep(requestedVariables);
|
|
159
|
-
const variableMap = _.reduce(variables, (acc, v) => _.assign(acc, { [v.key]: v }), {});
|
|
160
|
-
_.forEach(encrypted, (varName) => {
|
|
161
|
-
const variable = variableMap[varName];
|
|
162
|
-
if (!variable) {
|
|
163
|
-
throw new CFError(`Variable is not provided: "${varName}"`);
|
|
164
|
-
}
|
|
165
|
-
variable.encrypted = true;
|
|
166
|
-
});
|
|
167
|
-
return variables;
|
|
168
|
-
};
|
|
169
|
-
|
|
170
109
|
const crudFilenameOption = (yargs, options = {}) => {
|
|
171
110
|
const filenameOption = {
|
|
172
111
|
alias: options.alias || 'f',
|
|
@@ -183,19 +122,13 @@ const crudFilenameOption = (yargs, options = {}) => {
|
|
|
183
122
|
.coerce(options.name || 'filename', (arg) => {
|
|
184
123
|
try {
|
|
185
124
|
const rawFile = fs.readFileSync(path.resolve(process.cwd(), arg), 'utf8');
|
|
186
|
-
let content;
|
|
187
125
|
if (arg.endsWith('.json')) {
|
|
188
|
-
|
|
189
|
-
} else if (arg.endsWith('.yml') || arg.endsWith('yaml')) {
|
|
190
|
-
content = options.raw ? rawFile : yaml.safeLoad(rawFile);
|
|
191
|
-
} else {
|
|
192
|
-
throw new CFError('File extension is not recognized');
|
|
126
|
+
return options.raw ? rawFile : JSON.parse(rawFile);
|
|
193
127
|
}
|
|
194
|
-
if (
|
|
195
|
-
return
|
|
128
|
+
if (arg.endsWith('.yml') || arg.endsWith('yaml')) {
|
|
129
|
+
return options.raw ? rawFile : yaml.safeLoad(rawFile);
|
|
196
130
|
}
|
|
197
|
-
throw new CFError('
|
|
198
|
-
+ 'For more information how to pass a valid file, go to https://codefresh-io.github.io/cli/pipelines/run-pipeline/');
|
|
131
|
+
throw new CFError('File extension is not recognized');
|
|
199
132
|
} catch (err) {
|
|
200
133
|
const error = new CFError({
|
|
201
134
|
message: 'Failed to read file',
|
|
@@ -228,15 +161,15 @@ const selectColumnsOption = (yargs, options = {}) => {
|
|
|
228
161
|
};
|
|
229
162
|
|
|
230
163
|
function pathExists(p) {
|
|
231
|
-
return new Promise(
|
|
232
|
-
.then(
|
|
164
|
+
return new Promise(resolve => fs.access(p, resolve))
|
|
165
|
+
.then(err => !err);
|
|
233
166
|
}
|
|
234
167
|
|
|
235
168
|
const readFile = Promise.promisify(fs.readFile);
|
|
236
169
|
|
|
237
170
|
function watchFile(filename, listener) {
|
|
238
171
|
fs.watchFile(filename, { interval: 500 }, listener);
|
|
239
|
-
const unwatcher =
|
|
172
|
+
const unwatcher = f => () => fs.unwatchFile(f);
|
|
240
173
|
['exit', 'SIGINT', 'SIGUSR1', 'SIGUSR2', 'uncaughtException', 'SIGTERM'].forEach((eventType) => {
|
|
241
174
|
process.on(eventType, unwatcher(filename));
|
|
242
175
|
});
|
|
@@ -244,7 +177,7 @@ function watchFile(filename, listener) {
|
|
|
244
177
|
|
|
245
178
|
function ignoreHttpError(e) {
|
|
246
179
|
if (!e.statusCode) {
|
|
247
|
-
throw e
|
|
180
|
+
throw e
|
|
248
181
|
}
|
|
249
182
|
return undefined;
|
|
250
183
|
}
|
|
@@ -299,7 +232,4 @@ module.exports = {
|
|
|
299
232
|
detectProxy,
|
|
300
233
|
keyValueArrayToObject,
|
|
301
234
|
addProxyVariables,
|
|
302
|
-
markEncryptedFlagOnRequestedVariables,
|
|
303
|
-
prepareKeyValueObjectsFromEnvFileOption,
|
|
304
|
-
isCompatibleApiVersion,
|
|
305
235
|
};
|
package/package.json
CHANGED
package/yarn.lock
CHANGED
|
@@ -2763,9 +2763,9 @@ html-encoding-sniffer@^1.0.2:
|
|
|
2763
2763
|
whatwg-encoding "^1.0.1"
|
|
2764
2764
|
|
|
2765
2765
|
http-cache-semantics@^4.0.0:
|
|
2766
|
-
version "4.1.
|
|
2767
|
-
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.
|
|
2768
|
-
integrity sha512-
|
|
2766
|
+
version "4.1.1"
|
|
2767
|
+
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
|
|
2768
|
+
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
|
|
2769
2769
|
|
|
2770
2770
|
"http-parser-js@>=0.4.0 <0.4.11":
|
|
2771
2771
|
version "0.4.10"
|
|
@@ -3700,9 +3700,9 @@ jest@^23.6.0:
|
|
|
3700
3700
|
jest-cli "^23.6.0"
|
|
3701
3701
|
|
|
3702
3702
|
jose@^1.25.2:
|
|
3703
|
-
version "1.
|
|
3704
|
-
resolved "https://registry.yarnpkg.com/jose/-/jose-1.
|
|
3705
|
-
integrity sha512-
|
|
3703
|
+
version "1.28.2"
|
|
3704
|
+
resolved "https://registry.yarnpkg.com/jose/-/jose-1.28.2.tgz#97f4aa608d0020ae5c1051a2a33247b957401e5a"
|
|
3705
|
+
integrity sha512-wWy51U2MXxYi3g8zk2lsQ8M6O1lartpkxuq1TYexzPKYLgHLZkCjklaATP36I5BUoWjF2sInB9U1Qf18fBZxNA==
|
|
3706
3706
|
dependencies:
|
|
3707
3707
|
"@panva/asn1.js" "^1.0.0"
|
|
3708
3708
|
|
|
@@ -4247,14 +4247,7 @@ mimic-response@^2.0.0:
|
|
|
4247
4247
|
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
|
|
4248
4248
|
integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
|
|
4249
4249
|
|
|
4250
|
-
minimatch@^3.0.3, minimatch@^3.0.4:
|
|
4251
|
-
version "3.0.4"
|
|
4252
|
-
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
|
4253
|
-
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
|
4254
|
-
dependencies:
|
|
4255
|
-
brace-expansion "^1.1.7"
|
|
4256
|
-
|
|
4257
|
-
minimatch@^3.0.5:
|
|
4250
|
+
minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5:
|
|
4258
4251
|
version "3.1.2"
|
|
4259
4252
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
|
4260
4253
|
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
|
@@ -4830,12 +4823,7 @@ path-key@^3.1.0:
|
|
|
4830
4823
|
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
|
4831
4824
|
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
|
4832
4825
|
|
|
4833
|
-
path-parse@^1.0.5, path-parse@^1.0.6:
|
|
4834
|
-
version "1.0.6"
|
|
4835
|
-
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
|
4836
|
-
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
|
4837
|
-
|
|
4838
|
-
path-parse@^1.0.7:
|
|
4826
|
+
path-parse@^1.0.5, path-parse@^1.0.6, path-parse@^1.0.7:
|
|
4839
4827
|
version "1.0.7"
|
|
4840
4828
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
|
4841
4829
|
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
|
@@ -6326,9 +6314,9 @@ unbzip2-stream@^1.0.9:
|
|
|
6326
6314
|
through "^2.3.8"
|
|
6327
6315
|
|
|
6328
6316
|
underscore@^1.9.1:
|
|
6329
|
-
version "1.
|
|
6330
|
-
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.
|
|
6331
|
-
integrity sha512
|
|
6317
|
+
version "1.13.6"
|
|
6318
|
+
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441"
|
|
6319
|
+
integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
|
|
6332
6320
|
|
|
6333
6321
|
union-value@^1.0.0:
|
|
6334
6322
|
version "1.0.1"
|
|
@@ -6639,16 +6627,16 @@ ws@^5.2.0:
|
|
|
6639
6627
|
async-limiter "~1.0.0"
|
|
6640
6628
|
|
|
6641
6629
|
ws@^6.1.0:
|
|
6642
|
-
version "6.2.
|
|
6643
|
-
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.
|
|
6644
|
-
integrity sha512-
|
|
6630
|
+
version "6.2.2"
|
|
6631
|
+
resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e"
|
|
6632
|
+
integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==
|
|
6645
6633
|
dependencies:
|
|
6646
6634
|
async-limiter "~1.0.0"
|
|
6647
6635
|
|
|
6648
6636
|
ws@^7.2.3:
|
|
6649
|
-
version "7.
|
|
6650
|
-
resolved "https://registry.yarnpkg.com/ws/-/ws-7.
|
|
6651
|
-
integrity sha512-
|
|
6637
|
+
version "7.5.9"
|
|
6638
|
+
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
|
|
6639
|
+
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
|
|
6652
6640
|
|
|
6653
6641
|
xml-name-validator@^3.0.0:
|
|
6654
6642
|
version "3.0.0"
|