codefresh 0.79.0 → 0.80.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/Dockerfile +1 -1
- package/codefresh-release.yml +12 -9
- package/codefresh.yml +9 -6
- package/lib/binary/downloader.js +61 -13
- package/lib/interface/cli/commands/offline-logs/offload-to-file.cmd.js +12 -14
- package/lib/interface/cli/commands/offline-logs/offload-to-file.spec.js +110 -53
- package/lib/interface/cli/commands/offline-logs/utils.js +131 -126
- package/lib/interface/cli/completion/tree.json +1 -1
- package/package.json +7 -8
- package/yarn.lock +39 -15
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:12.22.
|
|
14
|
+
FROM node:12.22.12-alpine3.15
|
|
15
15
|
|
|
16
16
|
RUN apk --update add --no-cache ca-certificates git curl bash jq
|
|
17
17
|
|
package/codefresh-release.yml
CHANGED
|
@@ -14,11 +14,11 @@ steps:
|
|
|
14
14
|
title: "Validate running on master branch"
|
|
15
15
|
image: codefresh/build-cli
|
|
16
16
|
commands:
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
- >-
|
|
18
|
+
if [ "${{CF_BRANCH}}" != "master" ]; then
|
|
19
|
+
echo This pipeline should be run only on master
|
|
20
|
+
exit 1
|
|
21
|
+
fi
|
|
22
22
|
|
|
23
23
|
main_clone:
|
|
24
24
|
stage: prepare
|
|
@@ -177,13 +177,13 @@ steps:
|
|
|
177
177
|
|
|
178
178
|
archive_win:
|
|
179
179
|
stage: build
|
|
180
|
-
title: "Archiving
|
|
180
|
+
title: "Archiving win distribution"
|
|
181
181
|
image: codefresh/build-cli
|
|
182
182
|
commands:
|
|
183
183
|
- "rm -rf ./dist/win"
|
|
184
184
|
- "mkdir -p ./dist/win"
|
|
185
185
|
- "cp --force README.md LICENSE ./dist/win"
|
|
186
|
-
- "cp --force ./dist/codefresh-win ./dist/win/codefresh.exe"
|
|
186
|
+
- "cp --force ./dist/codefresh-win.exe ./dist/win/codefresh.exe"
|
|
187
187
|
- "zip codefresh-v${{PACKAGE_VERSION}}-win-x64.zip README.md LICENSE -j ./dist/win/codefresh.exe "
|
|
188
188
|
when:
|
|
189
189
|
steps:
|
|
@@ -209,6 +209,7 @@ steps:
|
|
|
209
209
|
- success
|
|
210
210
|
|
|
211
211
|
create_release:
|
|
212
|
+
stage: github
|
|
212
213
|
title: "Create github release"
|
|
213
214
|
image: codefresh/build-cli
|
|
214
215
|
fail_fast: false
|
|
@@ -221,6 +222,7 @@ steps:
|
|
|
221
222
|
- success
|
|
222
223
|
|
|
223
224
|
get_release:
|
|
225
|
+
stage: github
|
|
224
226
|
title: "Get github release"
|
|
225
227
|
image: codefresh/build-cli
|
|
226
228
|
commands:
|
|
@@ -233,6 +235,7 @@ steps:
|
|
|
233
235
|
- name: create_release
|
|
234
236
|
on:
|
|
235
237
|
- success
|
|
238
|
+
- failure
|
|
236
239
|
|
|
237
240
|
upload_linux:
|
|
238
241
|
stage: github
|
|
@@ -318,7 +321,7 @@ steps:
|
|
|
318
321
|
image: codefresh/build-cli
|
|
319
322
|
commands:
|
|
320
323
|
- VERSION=v${{PACKAGE_VERSION}}
|
|
321
|
-
-
|
|
324
|
+
- curl -L https://github.com/codefresh-io/cli/releases/download/$VERSION/codefresh-$VERSION-macos-x64.tar.gz > $VERSION.tar.gz
|
|
322
325
|
- echo "compute SHA256 ..."
|
|
323
326
|
- SHA256="$(shasum -a 256 ./$VERSION.tar.gz | awk '{print $1}')"
|
|
324
327
|
- echo "generate file from template ..."
|
|
@@ -332,7 +335,7 @@ steps:
|
|
|
332
335
|
}" https://api.github.com/repos/codefresh-io/homebrew-cli/contents/Formula/codefresh.rb
|
|
333
336
|
when:
|
|
334
337
|
steps:
|
|
335
|
-
- name:
|
|
338
|
+
- name: upload_macos
|
|
336
339
|
on:
|
|
337
340
|
- success
|
|
338
341
|
|
package/codefresh.yml
CHANGED
|
@@ -59,12 +59,15 @@ steps:
|
|
|
59
59
|
commands:
|
|
60
60
|
- yarn test
|
|
61
61
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
# Disabled e2e tests because of flakyness
|
|
63
|
+
# need to fix flakyness before enabling again.
|
|
64
|
+
#
|
|
65
|
+
# e2e_tests:
|
|
66
|
+
# title: 'Running e2e tests'
|
|
67
|
+
# image: codefresh/build-cli
|
|
68
|
+
# commands:
|
|
69
|
+
# - "echo Running e2e on account: ${{CF_ACCOUNT}}"
|
|
70
|
+
# - CF_API_KEY=${{CF_E2E_API_KEY}} yarn e2e
|
|
68
71
|
when:
|
|
69
72
|
branch:
|
|
70
73
|
ignore: [ master ]
|
package/lib/binary/downloader.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
const Promise = require('bluebird');
|
|
2
2
|
const _ = require('lodash');
|
|
3
|
-
const decompress = require('decompress');
|
|
4
|
-
const decompressTargz = require('decompress-targz');
|
|
5
|
-
const decompressUnzip = require('decompress-unzip');
|
|
6
3
|
const rp = require('request-promise');
|
|
7
4
|
const request = require('request');
|
|
8
5
|
const compareVersions = require('compare-versions');
|
|
6
|
+
const zip = require('zip');
|
|
7
|
+
const tarStream = require('tar-stream');
|
|
9
8
|
const {
|
|
10
9
|
resolve, join,
|
|
11
10
|
} = require('path');
|
|
@@ -13,12 +12,62 @@ const {
|
|
|
13
12
|
homedir, arch,
|
|
14
13
|
} = require('os');
|
|
15
14
|
const {
|
|
16
|
-
existsSync, mkdirSync, readFileSync, createWriteStream, writeFile,
|
|
15
|
+
existsSync, mkdirSync, readFileSync, createWriteStream, writeFile, readFile,
|
|
16
|
+
createReadStream,
|
|
17
17
|
} = require('fs');
|
|
18
|
-
const {
|
|
18
|
+
const { createGunzip } = require('zlib');
|
|
19
|
+
const { promisify } = require('util');
|
|
20
|
+
let { pipeline } = require('stream');
|
|
21
|
+
const { to } = require('../logic/cli-config/errors/awaitTo');
|
|
22
|
+
|
|
23
|
+
pipeline = promisify(pipeline);
|
|
19
24
|
|
|
20
25
|
const CODEFRESH_PATH = resolve(homedir(), '.Codefresh');
|
|
21
26
|
|
|
27
|
+
async function unzipFile(zipPath, outputPath) {
|
|
28
|
+
const zipBuffer = await Promise.fromCallback((cb) => readFile(zipPath, cb));
|
|
29
|
+
const zr = zip.Reader(zipBuffer);
|
|
30
|
+
|
|
31
|
+
const fileWrites = [];
|
|
32
|
+
zr.forEach((entry) => {
|
|
33
|
+
if (!entry.isFile()) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const outputFilePath = join(outputPath, entry.getName());
|
|
38
|
+
fileWrites.push(Promise.fromCallback((cb) => writeFile(outputFilePath, entry.getData(), { mode: entry.getMode() }, cb)));
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
return Promise.all(fileWrites);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async function untarFile(tarPath, outputPath) {
|
|
45
|
+
const zipFile = createReadStream(tarPath);
|
|
46
|
+
const unzipStream = createGunzip();
|
|
47
|
+
const extract = tarStream.extract();
|
|
48
|
+
|
|
49
|
+
extract.on('entry', async (headers, stream, next) => {
|
|
50
|
+
if (headers.type !== 'file') {
|
|
51
|
+
return next();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
const outputFilePath = join(outputPath, headers.name);
|
|
56
|
+
const outputFile = createWriteStream(outputFilePath, { mode: headers.mode });
|
|
57
|
+
await pipeline(stream, outputFile);
|
|
58
|
+
return next();
|
|
59
|
+
} catch (error) {
|
|
60
|
+
return next(error);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
return await pipeline(
|
|
65
|
+
zipFile,
|
|
66
|
+
unzipStream,
|
|
67
|
+
extract,
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
22
71
|
function _ensureDirectory(location) {
|
|
23
72
|
if (existsSync(location)) {
|
|
24
73
|
return Promise.resolve();
|
|
@@ -79,13 +128,13 @@ function _buildLocalOSProperties() {
|
|
|
79
128
|
async function _writeFiles({
|
|
80
129
|
zipPath, location, version, versionPath,
|
|
81
130
|
}) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return Promise.fromCallback(cb => writeFile(versionPath, version, cb));
|
|
131
|
+
if (zipPath.endsWith('.zip')) {
|
|
132
|
+
await unzipFile(zipPath, location);
|
|
133
|
+
} else {
|
|
134
|
+
await untarFile(zipPath, location);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return Promise.fromCallback((cb) => writeFile(versionPath, version, cb));
|
|
89
138
|
}
|
|
90
139
|
|
|
91
140
|
class Downloader {
|
|
@@ -144,7 +193,6 @@ class Downloader {
|
|
|
144
193
|
});
|
|
145
194
|
}
|
|
146
195
|
|
|
147
|
-
|
|
148
196
|
return new Promise((resolveFn, rejectFn) => {
|
|
149
197
|
resp.on('end', async () => {
|
|
150
198
|
const [err] = await to(_writeFiles({
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
1
2
|
const { MongoClient, ObjectId } = require("mongodb");
|
|
2
3
|
const moment = require("moment");
|
|
3
4
|
const Command = require("../../Command");
|
|
@@ -34,7 +35,7 @@ const offloadToFile = async function (
|
|
|
34
35
|
}
|
|
35
36
|
const cutoffDateId = objectIdFromDate(cutoffDateObj.toDate());
|
|
36
37
|
|
|
37
|
-
const minLog = await findMinLog(collectionObj, cutoffDateId
|
|
38
|
+
const minLog = await findMinLog(collectionObj, cutoffDateId);
|
|
38
39
|
|
|
39
40
|
if (!minLog) {
|
|
40
41
|
console.info(
|
|
@@ -61,25 +62,22 @@ const offloadToFile = async function (
|
|
|
61
62
|
const lowerBoundId = objectIdFromDate(lowerBound.toDate());
|
|
62
63
|
const upperBoundId = objectIdFromDate(upperBound.toDate());
|
|
63
64
|
|
|
64
|
-
const
|
|
65
|
+
const logsCursor = await collectionObj
|
|
65
66
|
.find({
|
|
66
67
|
_id: {
|
|
67
68
|
$gte: ObjectId(lowerBoundId),
|
|
68
69
|
$lt: ObjectId(upperBoundId),
|
|
69
70
|
},
|
|
70
|
-
})
|
|
71
|
-
.toArray();
|
|
71
|
+
});
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
writeLogsToFile(upperBound, lowerBound, collection, logsToArchive, path);
|
|
73
|
+
await writeLogsToFile(upperBound, lowerBound, collection, logsCursor, path);
|
|
75
74
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
75
|
+
await collectionObj.deleteMany({
|
|
76
|
+
_id: {
|
|
77
|
+
$gte: ObjectId(lowerBoundId),
|
|
78
|
+
$lt: ObjectId(upperBoundId),
|
|
79
|
+
},
|
|
80
|
+
});
|
|
83
81
|
}
|
|
84
82
|
};
|
|
85
83
|
|
|
@@ -152,7 +150,7 @@ const command = new Command({
|
|
|
152
150
|
path
|
|
153
151
|
);
|
|
154
152
|
} catch (e) {
|
|
155
|
-
console.
|
|
153
|
+
console.error(e);
|
|
156
154
|
failedCollections.push(collection);
|
|
157
155
|
errors.push(error);
|
|
158
156
|
}
|
|
@@ -1,59 +1,116 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable no-unused-vars */
|
|
2
|
+
const moment = require('moment');
|
|
2
3
|
const { writeLogsToFile, checkRemnant } = require('./utils');
|
|
3
|
-
const fs = require('fs')
|
|
4
|
+
const fs = require('fs');
|
|
4
5
|
|
|
5
6
|
describe('offload-to-file', () => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
7
|
+
describe('writeLogsToFile', () => {
|
|
8
|
+
it('writes the input data to file', async () => {
|
|
9
|
+
const upperBound = '2021-08-10';
|
|
10
|
+
const lowerBound = '2021-08-01';
|
|
11
|
+
const collection = 'logs';
|
|
12
|
+
const pathMock = 'some/path';
|
|
13
|
+
let writerResult = '';
|
|
14
|
+
const expectedWrite = '[\n{"key1":"val"},\n{"key2":"val"},\n{"key3":"val"},\n{"key4":"val"}\n]';
|
|
15
|
+
class LogsCursor {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.logs = [{ key1: 'val' }, { key2: 'val' }, { key3: 'val' }, { key4: 'val' }];
|
|
18
|
+
this.pointer = 0;
|
|
19
|
+
this.next = jest.fn(() => {
|
|
20
|
+
let currentDoc = null;
|
|
21
|
+
if (this.pointer < this.logs.length) {
|
|
22
|
+
currentDoc = this.logs[this.pointer];
|
|
23
|
+
}
|
|
24
|
+
this.pointer += 1;
|
|
25
|
+
return currentDoc;
|
|
26
|
+
});
|
|
27
|
+
this.isClosed = jest.fn(() => this.pointer > this.logs.length);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const writerMock = {
|
|
31
|
+
write: jest.fn((text) => {
|
|
32
|
+
writerResult = `${writerResult}${text}`;
|
|
33
|
+
}),
|
|
34
|
+
close: jest.fn(),
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
fs.createWriteStream = jest.fn(path => writerMock);
|
|
38
|
+
await writeLogsToFile(upperBound, lowerBound, collection, new LogsCursor(), pathMock);
|
|
39
|
+
expect(fs.createWriteStream.mock.calls.length).toBe(1);
|
|
40
|
+
expect(fs.createWriteStream.mock.calls[0][0]).toContain(pathMock);
|
|
41
|
+
expect(writerMock.write.mock.calls.length).toBe(6);
|
|
42
|
+
expect(writerResult).toBe(expectedWrite);
|
|
43
|
+
expect(writerMock.close.mock.calls.length).toBe(1);
|
|
44
|
+
});
|
|
45
|
+
it('creates the correct file name', async () => {
|
|
46
|
+
const upperBound = '2021-08-10';
|
|
47
|
+
const lowerBound = '2021-08-01';
|
|
48
|
+
const collection = 'logs';
|
|
49
|
+
const expectedPath = 'some/path/2021-08-01-2021-08-09-logs.json';
|
|
50
|
+
const somePath = 'some/path';
|
|
51
|
+
class LogsCursor {
|
|
52
|
+
constructor() {
|
|
53
|
+
this.logs = [{ key1: 'val' }, { key2: 'val' }, { key3: 'val' }, { key4: 'val' }];
|
|
54
|
+
this.pointer = 0;
|
|
55
|
+
this.next = jest.fn(() => {
|
|
56
|
+
let currentDoc = null;
|
|
57
|
+
if (this.pointer < this.logs.length) {
|
|
58
|
+
currentDoc = this.logs[this.pointer];
|
|
59
|
+
}
|
|
60
|
+
this.pointer += 1;
|
|
61
|
+
return currentDoc;
|
|
62
|
+
});
|
|
63
|
+
this.isClosed = jest.fn(() => this.pointer > this.logs.length);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const writerMock = {
|
|
67
|
+
write: jest.fn(text => text),
|
|
68
|
+
close: jest.fn(),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
fs.createWriteStream = jest.fn(path => writerMock);
|
|
72
|
+
await writeLogsToFile(upperBound, lowerBound, collection, new LogsCursor(), somePath);
|
|
73
|
+
expect(fs.createWriteStream.mock.calls.length).toBe(1);
|
|
74
|
+
expect(fs.createWriteStream.mock.calls[0][0]).toBe(expectedPath);
|
|
75
|
+
});
|
|
76
|
+
it('checks leap year date calculation', async () => {
|
|
77
|
+
const upperBound = '2020-03-01';
|
|
78
|
+
const lowerBound = '2020-02-01';
|
|
79
|
+
const collection = 'logs';
|
|
80
|
+
const expectedPath = 'some/path/2020-02-01-2020-02-29-logs.json';
|
|
81
|
+
const somePath = 'some/path';
|
|
82
|
+
class LogsCursor {
|
|
83
|
+
constructor() {
|
|
84
|
+
this.logs = [{ key1: 'val' }, { key2: 'val' }, { key3: 'val' }, { key4: 'val' }];
|
|
85
|
+
this.pointer = 0;
|
|
86
|
+
this.next = jest.fn(() => {
|
|
87
|
+
let currentDoc = null;
|
|
88
|
+
if (this.pointer < this.logs.length) {
|
|
89
|
+
currentDoc = this.logs[this.pointer];
|
|
90
|
+
}
|
|
91
|
+
this.pointer += 1;
|
|
92
|
+
return currentDoc;
|
|
93
|
+
});
|
|
94
|
+
this.isClosed = jest.fn(() => this.pointer > this.logs.length);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const writerMock = {
|
|
98
|
+
write: jest.fn(text => text),
|
|
99
|
+
close: jest.fn(),
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
fs.createWriteStream = jest.fn(path => writerMock);
|
|
103
|
+
await writeLogsToFile(upperBound, lowerBound, collection, new LogsCursor(), somePath);
|
|
104
|
+
expect(fs.createWriteStream.mock.calls.length).toBe(1);
|
|
105
|
+
expect(fs.createWriteStream.mock.calls[0][0]).toBe(expectedPath);
|
|
106
|
+
});
|
|
49
107
|
});
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
108
|
+
describe('checkRemnant', () => {
|
|
109
|
+
it('checkes days remnant to make sure time range is not going off boundaries', () => {
|
|
110
|
+
const lowerBound = '2020-08-01';
|
|
111
|
+
const cutoffDateObj = moment('2020-08-01').add(1, 'days').startOf('day');
|
|
112
|
+
const result = checkRemnant(lowerBound, cutoffDateObj);
|
|
113
|
+
expect(result).toBe(1);
|
|
114
|
+
});
|
|
57
115
|
});
|
|
58
|
-
});
|
|
59
116
|
});
|
|
@@ -1,159 +1,164 @@
|
|
|
1
|
-
|
|
2
|
-
const
|
|
3
|
-
const
|
|
1
|
+
/* eslint-disable no-await-in-loop */
|
|
2
|
+
const readline = require('readline');
|
|
3
|
+
const moment = require('moment');
|
|
4
|
+
const { ObjectId } = require('mongodb');
|
|
4
5
|
|
|
5
|
-
const { join } = require(
|
|
6
|
-
const fs = require(
|
|
6
|
+
const { join } = require('path');
|
|
7
|
+
const fs = require('fs');
|
|
7
8
|
|
|
8
|
-
const defaultCollections = [
|
|
9
|
+
const defaultCollections = ['logs', 'metadata'];
|
|
9
10
|
|
|
10
11
|
// converts date to objectId for filter purposes
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
12
|
+
function objectIdFromDate(date) {
|
|
13
|
+
return `${Math.floor(date.getTime() / 1000).toString(16)}0000000000000000`;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function createRangeStr(lowerBound, upperBound, collection) {
|
|
17
|
+
const upperBoundDate = moment(upperBound).subtract(1, 'days');
|
|
18
|
+
const fileDateRange = `${moment(lowerBound).format('YYYY-MM-DD')}-${upperBoundDate.format('YYYY-MM-DD')}`;
|
|
19
|
+
return `${fileDateRange}-${collection}`;
|
|
20
|
+
}
|
|
14
21
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
22
|
+
async function writeLogsToFile(
|
|
23
|
+
upperBound,
|
|
24
|
+
lowerBound,
|
|
25
|
+
collection,
|
|
26
|
+
logsCursor,
|
|
27
|
+
path,
|
|
21
28
|
) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
const fileName = `${createRangeStr(lowerBound, upperBound, collection)}.json`;
|
|
30
|
+
const absPath = join(path, fileName);
|
|
31
|
+
const stream = fs.createWriteStream(absPath);
|
|
32
|
+
let count = 0;
|
|
33
|
+
stream.write('[');
|
|
34
|
+
|
|
35
|
+
let comma = '';
|
|
36
|
+
while (!logsCursor.isClosed()) {
|
|
37
|
+
const doc = await logsCursor.next();
|
|
38
|
+
if (doc) {
|
|
39
|
+
const data = JSON.stringify(doc);
|
|
40
|
+
stream.write(`${comma}\n${data}`);
|
|
41
|
+
comma = ',';
|
|
42
|
+
count += 1;
|
|
43
|
+
} else {
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
28
47
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
)}-${upperBoundDate.format("YYYY-MM-DD")}`;
|
|
34
|
-
return `${fileDateRange}-${collection}`;
|
|
48
|
+
stream.write('\n]');
|
|
49
|
+
stream.close();
|
|
50
|
+
|
|
51
|
+
console.info(`${count} logs from collection '${collection}' were offloaded to '${absPath}'`);
|
|
35
52
|
}
|
|
36
53
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
minLogId.getTimestamp()
|
|
41
|
-
).startOf("day");
|
|
54
|
+
function getMinDate(minLog) {
|
|
55
|
+
const minLogId = ObjectId(minLog._id);
|
|
56
|
+
return moment(minLogId.getTimestamp()).startOf('day');
|
|
42
57
|
}
|
|
43
58
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
///////////////////////////////////////////////////////////////
|
|
48
|
-
const ensureIndex = async function (database, collection) {
|
|
49
|
-
const collectionObj = database.collection(collection);
|
|
50
|
-
const indexName = "accountId_1_jobId_1";
|
|
59
|
+
function checkRemnant(lowerBound, cutoffDateObj) {
|
|
60
|
+
return Math.ceil(cutoffDateObj.diff(lowerBound, 'days'));
|
|
61
|
+
}
|
|
51
62
|
|
|
52
|
-
|
|
63
|
+
async function ensureIndex(database, collection) {
|
|
64
|
+
const collectionObj = database.collection(collection);
|
|
65
|
+
const indexName = 'accountId_1_jobId_1';
|
|
53
66
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
67
|
+
const indexExist = await collectionObj.indexExists(indexName);
|
|
68
|
+
|
|
69
|
+
if (indexExist) {
|
|
70
|
+
console.info(`index '${indexName}' already exists in collection '${collection}'`);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
60
73
|
|
|
61
|
-
|
|
74
|
+
const documentsCount = await collectionObj.estimatedDocumentCount();
|
|
62
75
|
|
|
63
|
-
|
|
76
|
+
const queryStr = `There are approximately ${documentsCount} documents on collection '${collection}'.
|
|
64
77
|
do you want to create an index for it? (creating an index for a large collection may take a while,
|
|
65
78
|
but can improve performance on future read operations) [yes/no] `;
|
|
66
79
|
|
|
67
|
-
|
|
80
|
+
const userInput = await this.getUserInput(queryStr);
|
|
68
81
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
82
|
+
if (!userInput) {
|
|
83
|
+
console.info(`skipping collection '${collection}'`);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
73
86
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
);
|
|
81
|
-
};
|
|
87
|
+
await collectionObj.createIndex(
|
|
88
|
+
{ accountId: 1, jobId: 1 },
|
|
89
|
+
{ background: true },
|
|
90
|
+
);
|
|
91
|
+
console.info(`index '${indexName}' was created for collection '${collection}'`);
|
|
92
|
+
}
|
|
82
93
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
94
|
+
async function getUserInput(queryStr) {
|
|
95
|
+
const rl = readline.createInterface({
|
|
96
|
+
input: process.stdin,
|
|
97
|
+
output: process.stdout,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const questionAsync = query =>
|
|
101
|
+
new Promise(resolve => rl.question(query, resolve));
|
|
102
|
+
|
|
103
|
+
try {
|
|
104
|
+
const userInput = (await questionAsync(queryStr)).toLowerCase();
|
|
105
|
+
|
|
106
|
+
switch (userInput) {
|
|
107
|
+
case 'yes':
|
|
108
|
+
case 'y':
|
|
109
|
+
return true;
|
|
110
|
+
case 'no':
|
|
111
|
+
case 'n':
|
|
112
|
+
return false;
|
|
113
|
+
default:
|
|
114
|
+
console.warn('invalid input');
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
} finally {
|
|
118
|
+
rl.close();
|
|
105
119
|
}
|
|
106
|
-
|
|
107
|
-
rl.close();
|
|
108
|
-
}
|
|
109
|
-
};
|
|
120
|
+
}
|
|
110
121
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return
|
|
115
|
-
})
|
|
116
|
-
return (collectionsList.indexOf(targetCollection) >= 0);
|
|
122
|
+
async function collectionExists(dbObject, targetCollection) {
|
|
123
|
+
const collectionsObjectList = await dbObject.listCollections().toArray();
|
|
124
|
+
const collectionsList = collectionsObjectList.map(object => object.name);
|
|
125
|
+
return (collectionsList.indexOf(targetCollection) >= 0);
|
|
117
126
|
}
|
|
118
127
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
128
|
+
async function findMinLog(collectionObj, UpperBoundDateId) {
|
|
129
|
+
const minLog = await collectionObj
|
|
130
|
+
.find({ _id: { $lt: ObjectId(UpperBoundDateId) } })
|
|
131
|
+
.sort({ _id: 1 })
|
|
132
|
+
.limit(1)
|
|
133
|
+
.toArray();
|
|
125
134
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
135
|
+
if (minLog.length === 0) {
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
129
138
|
|
|
130
|
-
|
|
139
|
+
return minLog[0];
|
|
131
140
|
}
|
|
132
141
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
"Cursor error. Archiving operation may not be completed.\
|
|
142
|
-
The old logs were not deleted from the source collection."
|
|
143
|
-
);
|
|
144
|
-
}
|
|
142
|
+
function checkCursorState(cursor, collection, targetCollection) {
|
|
143
|
+
if (!cursor.cursorState.killed) {
|
|
144
|
+
console.info(`logs from '${collection}' were archived to '${targetCollection}'`);
|
|
145
|
+
} else {
|
|
146
|
+
// eslint-disable-next-line no-multi-str
|
|
147
|
+
throw new Error('Cursor error. Archiving operation may not be completed.\
|
|
148
|
+
The old logs were not deleted from the source collection.');
|
|
149
|
+
}
|
|
145
150
|
}
|
|
146
151
|
|
|
147
152
|
module.exports = {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
153
|
+
objectIdFromDate,
|
|
154
|
+
writeLogsToFile,
|
|
155
|
+
checkRemnant,
|
|
156
|
+
ensureIndex,
|
|
157
|
+
getUserInput,
|
|
158
|
+
collectionExists,
|
|
159
|
+
findMinLog,
|
|
160
|
+
checkCursorState,
|
|
161
|
+
createRangeStr,
|
|
162
|
+
getMinDate,
|
|
163
|
+
defaultCollections,
|
|
159
164
|
};
|
|
@@ -1 +1 @@
|
|
|
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":{"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":{}}}
|
|
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":{"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":{},"init":{},"info":{},"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":{}}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codefresh",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.80.0",
|
|
4
4
|
"description": "Codefresh command line utility",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"preferGlobal": true,
|
|
@@ -49,15 +49,12 @@
|
|
|
49
49
|
"cf-errors": "^0.1.16",
|
|
50
50
|
"chalk": "^4.1.0",
|
|
51
51
|
"cli-progress": "3.10.0",
|
|
52
|
-
"codefresh-sdk": "^1.
|
|
52
|
+
"codefresh-sdk": "^1.11.0",
|
|
53
53
|
"colors": "1.4.0",
|
|
54
54
|
"columnify": "^1.5.4",
|
|
55
55
|
"compare-versions": "^3.4.0",
|
|
56
56
|
"copy-dir": "^0.3.0",
|
|
57
57
|
"debug": "^3.1.0",
|
|
58
|
-
"decompress": "^4.2.1",
|
|
59
|
-
"decompress-targz": "^4.1.1",
|
|
60
|
-
"decompress-unzip": "^4.0.1",
|
|
61
58
|
"diff": "^3.5.0",
|
|
62
59
|
"dockerode": "^2.5.7",
|
|
63
60
|
"draftlog": "^1.0.12",
|
|
@@ -72,7 +69,7 @@
|
|
|
72
69
|
"kubernetes-client": "^9.0.0",
|
|
73
70
|
"lodash": "^4.17.21",
|
|
74
71
|
"mkdirp": "^0.5.1",
|
|
75
|
-
"moment": "^2.
|
|
72
|
+
"moment": "^2.29.4",
|
|
76
73
|
"mongodb": "^3.7.3",
|
|
77
74
|
"node-forge": "^1.3.0",
|
|
78
75
|
"ora": "^5.4.1",
|
|
@@ -84,10 +81,12 @@
|
|
|
84
81
|
"requestretry": "^7.0.2",
|
|
85
82
|
"rimraf": "^2.6.2",
|
|
86
83
|
"semver": "^7.3.2",
|
|
84
|
+
"tar-stream": "^2.2.0",
|
|
87
85
|
"uuid": "^3.1.0",
|
|
88
86
|
"yaml": "^1.10.0",
|
|
89
87
|
"yargs": "^15.4.1",
|
|
90
|
-
"yargs-parser": "^13.0.0"
|
|
88
|
+
"yargs-parser": "^13.0.0",
|
|
89
|
+
"zip": "^1.2.0"
|
|
91
90
|
},
|
|
92
91
|
"devDependencies": {
|
|
93
92
|
"@types/node-forge": "^1.0.1",
|
|
@@ -114,4 +113,4 @@
|
|
|
114
113
|
"./test-setup.js"
|
|
115
114
|
]
|
|
116
115
|
}
|
|
117
|
-
}
|
|
116
|
+
}
|
package/yarn.lock
CHANGED
|
@@ -739,6 +739,11 @@ balanced-match@^1.0.0:
|
|
|
739
739
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
|
740
740
|
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
|
741
741
|
|
|
742
|
+
base64-js@0.0.2:
|
|
743
|
+
version "0.0.2"
|
|
744
|
+
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.2.tgz#024f0f72afa25b75f9c0ee73cd4f55ec1bed9784"
|
|
745
|
+
integrity sha512-Pj9L87dCdGcKlSqPVUjD+q96pbIx1zQQLb2CUiWURfjiBELv84YX+0nGnKmyT/9KkC7PQk7UN1w+Al8bBozaxQ==
|
|
746
|
+
|
|
742
747
|
base64-js@^1.0.2:
|
|
743
748
|
version "1.3.1"
|
|
744
749
|
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
|
|
@@ -811,6 +816,14 @@ bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.7.2:
|
|
|
811
816
|
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
|
|
812
817
|
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
|
|
813
818
|
|
|
819
|
+
bops@~0.1.1:
|
|
820
|
+
version "0.1.1"
|
|
821
|
+
resolved "https://registry.yarnpkg.com/bops/-/bops-0.1.1.tgz#062e02a8daa801fa10f2e5dbe6740cff801fe17e"
|
|
822
|
+
integrity sha512-Cx1zStcMp+YoFan8OgudNPMih82eJZE+27feki1WeyoFTR9Ye7AR1SUW3saE6QQvdS/g52aJ2IojBjWOiRiLbw==
|
|
823
|
+
dependencies:
|
|
824
|
+
base64-js "0.0.2"
|
|
825
|
+
to-utf8 "0.0.1"
|
|
826
|
+
|
|
814
827
|
brace-expansion@^1.1.7:
|
|
815
828
|
version "1.1.11"
|
|
816
829
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
|
@@ -1164,32 +1177,31 @@ code-point-at@^1.0.0:
|
|
|
1164
1177
|
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
|
1165
1178
|
integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
|
|
1166
1179
|
|
|
1167
|
-
codefresh-sdk@^1.
|
|
1168
|
-
version "1.
|
|
1169
|
-
resolved "https://registry.yarnpkg.com/codefresh-sdk/-/codefresh-sdk-1.
|
|
1170
|
-
integrity sha512-
|
|
1180
|
+
codefresh-sdk@^1.11.0:
|
|
1181
|
+
version "1.11.0"
|
|
1182
|
+
resolved "https://registry.yarnpkg.com/codefresh-sdk/-/codefresh-sdk-1.11.0.tgz#5b3b1c01a3f0e33f060ab4b313e4e27c4308b02c"
|
|
1183
|
+
integrity sha512-TuF22j9o/vg6gTZvqIA0J1Ca2jiRa8qsvYsCmk4hV1ZDnSqUAomPLlCpiL2qxdouy/Cja54y0HUoRowsqGvU4A==
|
|
1171
1184
|
dependencies:
|
|
1172
1185
|
"@codefresh-io/cf-receiver" "0.0.1-alpha19"
|
|
1173
1186
|
bluebird "^3.7.2"
|
|
1174
1187
|
cf-errors "^0.1.16"
|
|
1175
1188
|
compare-versions "^3.4.0"
|
|
1176
1189
|
debug "^4.1.1"
|
|
1177
|
-
decompress "^4.2.1"
|
|
1178
|
-
decompress-targz "^4.1.1"
|
|
1179
|
-
decompress-unzip "^4.0.1"
|
|
1180
1190
|
firebase "git+https://github.com/codefresh-io/firebase.git#80b2ed883ff281cd67b53bd0f6a0bbd6f330fed5"
|
|
1181
1191
|
fs-extra "^7.0.1"
|
|
1182
1192
|
js-yaml "^3.13.1"
|
|
1183
1193
|
jsonwebtoken "^8.4.0"
|
|
1184
1194
|
lodash "^4.17.21"
|
|
1185
|
-
moment "^2.
|
|
1195
|
+
moment "^2.29.4"
|
|
1186
1196
|
recursive-readdir "^2.2.2"
|
|
1187
1197
|
request "2.88.2"
|
|
1188
1198
|
request-promise "4.2.6"
|
|
1189
1199
|
requestretry "^7.0.2"
|
|
1190
1200
|
swagger-client "~3.13.7"
|
|
1201
|
+
tar-stream "^2.2.0"
|
|
1191
1202
|
uniqid "^5.4.0"
|
|
1192
1203
|
uuid "^3.3.2"
|
|
1204
|
+
zip "^1.2.0"
|
|
1193
1205
|
|
|
1194
1206
|
collection-visit@^1.0.0:
|
|
1195
1207
|
version "1.0.0"
|
|
@@ -1471,7 +1483,7 @@ decompress-tarbz2@^4.0.0:
|
|
|
1471
1483
|
seek-bzip "^1.0.5"
|
|
1472
1484
|
unbzip2-stream "^1.0.9"
|
|
1473
1485
|
|
|
1474
|
-
decompress-targz@^4.0.0
|
|
1486
|
+
decompress-targz@^4.0.0:
|
|
1475
1487
|
version "4.1.1"
|
|
1476
1488
|
resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
|
|
1477
1489
|
integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
|
|
@@ -1490,7 +1502,7 @@ decompress-unzip@^4.0.1:
|
|
|
1490
1502
|
pify "^2.3.0"
|
|
1491
1503
|
yauzl "^2.4.2"
|
|
1492
1504
|
|
|
1493
|
-
decompress@^4.0.0
|
|
1505
|
+
decompress@^4.0.0:
|
|
1494
1506
|
version "4.2.1"
|
|
1495
1507
|
resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118"
|
|
1496
1508
|
integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==
|
|
@@ -4277,10 +4289,10 @@ mkdirp@^0.5.1:
|
|
|
4277
4289
|
dependencies:
|
|
4278
4290
|
minimist "^1.2.5"
|
|
4279
4291
|
|
|
4280
|
-
moment@^2.
|
|
4281
|
-
version "2.
|
|
4282
|
-
resolved "https://registry.yarnpkg.com/moment/-/moment-2.
|
|
4283
|
-
integrity sha512-
|
|
4292
|
+
moment@^2.29.4:
|
|
4293
|
+
version "2.29.4"
|
|
4294
|
+
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
|
|
4295
|
+
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
|
|
4284
4296
|
|
|
4285
4297
|
mongodb@^3.7.3:
|
|
4286
4298
|
version "3.7.3"
|
|
@@ -6048,7 +6060,7 @@ tar-stream@^1.1.2, tar-stream@^1.5.2:
|
|
|
6048
6060
|
to-buffer "^1.1.1"
|
|
6049
6061
|
xtend "^4.0.0"
|
|
6050
6062
|
|
|
6051
|
-
tar-stream@^2.1.4:
|
|
6063
|
+
tar-stream@^2.1.4, tar-stream@^2.2.0:
|
|
6052
6064
|
version "2.2.0"
|
|
6053
6065
|
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
|
|
6054
6066
|
integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
|
|
@@ -6149,6 +6161,11 @@ to-regex@^3.0.1, to-regex@^3.0.2:
|
|
|
6149
6161
|
regex-not "^1.0.2"
|
|
6150
6162
|
safe-regex "^1.1.0"
|
|
6151
6163
|
|
|
6164
|
+
to-utf8@0.0.1:
|
|
6165
|
+
version "0.0.1"
|
|
6166
|
+
resolved "https://registry.yarnpkg.com/to-utf8/-/to-utf8-0.0.1.tgz#d17aea72ff2fba39b9e43601be7b3ff72e089852"
|
|
6167
|
+
integrity sha512-zks18/TWT1iHO3v0vFp5qLKOG27m67ycq/Y7a7cTiRuUNlc4gf3HGnkRgMv0NyhnfTamtkYBJl+YeD1/j07gBQ==
|
|
6168
|
+
|
|
6152
6169
|
tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0:
|
|
6153
6170
|
version "2.5.0"
|
|
6154
6171
|
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
|
|
@@ -6737,3 +6754,10 @@ yauzl@^2.4.2:
|
|
|
6737
6754
|
dependencies:
|
|
6738
6755
|
buffer-crc32 "~0.2.3"
|
|
6739
6756
|
fd-slicer "~1.1.0"
|
|
6757
|
+
|
|
6758
|
+
zip@^1.2.0:
|
|
6759
|
+
version "1.2.0"
|
|
6760
|
+
resolved "https://registry.yarnpkg.com/zip/-/zip-1.2.0.tgz#ad0ad42265309be42eb56fc86194e17c24e66a9c"
|
|
6761
|
+
integrity sha512-8B4Z9BXJKkI8BkHhKvQan4rwCzUENnj95YHFYrI7F1NbqKCIdW86kujctzEB+kJ6XapHPiAhiZ9xi5GbW5SPdw==
|
|
6762
|
+
dependencies:
|
|
6763
|
+
bops "~0.1.1"
|