jsii-release 0.2.674 → 0.2.676
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/.gitattributes +1 -1
- package/.projenrc.ts +25 -10
- package/README.md +27 -0
- package/bin/publib-ca +2 -0
- package/lib/bin/publib-ca.d.ts +1 -0
- package/lib/bin/publib-ca.js +154 -0
- package/lib/codeartifact/codeartifact-cli.d.ts +31 -0
- package/lib/codeartifact/codeartifact-cli.js +133 -0
- package/lib/codeartifact/codeartifact-repo.d.ts +69 -0
- package/lib/codeartifact/codeartifact-repo.js +299 -0
- package/lib/codeartifact/display.d.ts +1 -0
- package/lib/codeartifact/display.js +11 -0
- package/lib/codeartifact/files.d.ts +15 -0
- package/lib/codeartifact/files.js +104 -0
- package/lib/codeartifact/shell.d.ts +51 -0
- package/lib/codeartifact/shell.js +132 -0
- package/lib/codeartifact/staging/maven.d.ts +5 -0
- package/lib/codeartifact/staging/maven.js +120 -0
- package/lib/codeartifact/staging/npm.d.ts +4 -0
- package/lib/codeartifact/staging/npm.js +84 -0
- package/lib/codeartifact/staging/nuget.d.ts +4 -0
- package/lib/codeartifact/staging/nuget.js +76 -0
- package/lib/codeartifact/staging/parallel-shell.d.ts +6 -0
- package/lib/codeartifact/staging/parallel-shell.js +49 -0
- package/lib/codeartifact/staging/pip.d.ts +4 -0
- package/lib/codeartifact/staging/pip.js +52 -0
- package/lib/codeartifact/usage-dir.d.ts +55 -0
- package/lib/codeartifact/usage-dir.js +160 -0
- package/lib/help/corking.d.ts +15 -0
- package/lib/help/corking.js +57 -0
- package/lib/help/shell.d.ts +4 -0
- package/lib/help/shell.js +4 -2
- package/lib/help/sleep.d.ts +1 -0
- package/lib/help/sleep.js +8 -0
- package/package.json +16 -2
- package/package.json.bak +16 -2
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.addToShellPath = exports.rimraf = exports.shell = void 0;
|
|
27
|
+
const child_process = __importStar(require("child_process"));
|
|
28
|
+
const fs = __importStar(require("fs"));
|
|
29
|
+
const path = __importStar(require("path"));
|
|
30
|
+
/**
|
|
31
|
+
* A shell command that does what you want
|
|
32
|
+
*
|
|
33
|
+
* Is platform-aware, handles errors nicely.
|
|
34
|
+
*/
|
|
35
|
+
async function shell(command, options = {}) {
|
|
36
|
+
var _a, _b, _c, _d;
|
|
37
|
+
if (options.modEnv && options.env) {
|
|
38
|
+
throw new Error('Use either env or modEnv but not both');
|
|
39
|
+
}
|
|
40
|
+
// Always output the command
|
|
41
|
+
const commandAsString = Array.isArray(command) ? command.join(' ') : command;
|
|
42
|
+
((_a = options.output) !== null && _a !== void 0 ? _a : process.stdout).write(`💻 ${commandAsString}\n`);
|
|
43
|
+
let output = (_b = options.output) !== null && _b !== void 0 ? _b : process.stdout;
|
|
44
|
+
switch ((_c = options.show) !== null && _c !== void 0 ? _c : 'always') {
|
|
45
|
+
case 'always':
|
|
46
|
+
break;
|
|
47
|
+
case 'never':
|
|
48
|
+
case 'error':
|
|
49
|
+
output = undefined;
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
if (process.env.VERBOSE) {
|
|
53
|
+
output = process.stdout;
|
|
54
|
+
}
|
|
55
|
+
const env = (_d = options.env) !== null && _d !== void 0 ? _d : (options.modEnv ? { ...process.env, ...options.modEnv } : process.env);
|
|
56
|
+
const spawnOptions = {
|
|
57
|
+
...options,
|
|
58
|
+
env,
|
|
59
|
+
// Need this for Windows where we want .cmd and .bat to be found as well.
|
|
60
|
+
shell: true,
|
|
61
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
62
|
+
};
|
|
63
|
+
const child = Array.isArray(command)
|
|
64
|
+
? child_process.spawn(command[0], command.slice(1), spawnOptions)
|
|
65
|
+
: child_process.spawn(command, spawnOptions);
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
const stdout = new Array();
|
|
68
|
+
const stderr = new Array();
|
|
69
|
+
child.stdout.on('data', chunk => {
|
|
70
|
+
output === null || output === void 0 ? void 0 : output.write(chunk);
|
|
71
|
+
stdout.push(chunk);
|
|
72
|
+
});
|
|
73
|
+
child.stderr.on('data', chunk => {
|
|
74
|
+
var _a;
|
|
75
|
+
output === null || output === void 0 ? void 0 : output.write(chunk);
|
|
76
|
+
if ((_a = options.captureStderr) !== null && _a !== void 0 ? _a : true) {
|
|
77
|
+
stderr.push(chunk);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
child.once('error', reject);
|
|
81
|
+
child.once('close', code => {
|
|
82
|
+
var _a;
|
|
83
|
+
const stderrOutput = Buffer.concat(stderr).toString('utf-8');
|
|
84
|
+
const stdoutOutput = Buffer.concat(stdout).toString('utf-8');
|
|
85
|
+
const out = (options.onlyStderr ? stderrOutput : stdoutOutput + stderrOutput).trim();
|
|
86
|
+
if (code === 0 || options.allowErrExit) {
|
|
87
|
+
resolve(out);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
if (options.show === 'error') {
|
|
91
|
+
((_a = options.output) !== null && _a !== void 0 ? _a : process.stdout).write(out + '\n');
|
|
92
|
+
}
|
|
93
|
+
reject(new Error(`'${commandAsString}' exited with error code ${code}.`));
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
exports.shell = shell;
|
|
99
|
+
/**
|
|
100
|
+
* rm -rf reimplementation, don't want to depend on an NPM package for this
|
|
101
|
+
*/
|
|
102
|
+
function rimraf(fsPath) {
|
|
103
|
+
try {
|
|
104
|
+
const isDir = fs.lstatSync(fsPath).isDirectory();
|
|
105
|
+
if (isDir) {
|
|
106
|
+
for (const file of fs.readdirSync(fsPath)) {
|
|
107
|
+
rimraf(path.join(fsPath, file));
|
|
108
|
+
}
|
|
109
|
+
fs.rmdirSync(fsPath);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
fs.unlinkSync(fsPath);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
// We will survive ENOENT
|
|
117
|
+
if (e.code !== 'ENOENT') {
|
|
118
|
+
throw e;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.rimraf = rimraf;
|
|
123
|
+
function addToShellPath(x) {
|
|
124
|
+
var _a, _b;
|
|
125
|
+
const parts = (_b = (_a = process.env.PATH) === null || _a === void 0 ? void 0 : _a.split(':')) !== null && _b !== void 0 ? _b : [];
|
|
126
|
+
if (!parts.includes(x)) {
|
|
127
|
+
parts.unshift(x);
|
|
128
|
+
}
|
|
129
|
+
process.env.PATH = parts.join(':');
|
|
130
|
+
}
|
|
131
|
+
exports.addToShellPath = addToShellPath;
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29kZWFydGlmYWN0L3NoZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkRBQStDO0FBQy9DLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0I7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxLQUFLLENBQUMsT0FBMEIsRUFBRSxVQUF3QixFQUFFOztJQUNoRixJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7S0FDMUQ7SUFFRCw0QkFBNEI7SUFDNUIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzdFLENBQUMsTUFBQSxPQUFPLENBQUMsTUFBTSxtQ0FBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sZUFBZSxJQUFJLENBQUMsQ0FBQztJQUVwRSxJQUFJLE1BQU0sR0FBc0MsTUFBQSxPQUFPLENBQUMsTUFBTSxtQ0FBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ2pGLFFBQVEsTUFBQSxPQUFPLENBQUMsSUFBSSxtQ0FBSSxRQUFRLEVBQUU7UUFDaEMsS0FBSyxRQUFRO1lBQ1gsTUFBTTtRQUNSLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxPQUFPO1lBQ1YsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNuQixNQUFNO0tBQ1Q7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO1FBQ3ZCLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ3pCO0lBRUQsTUFBTSxHQUFHLEdBQUcsTUFBQSxPQUFPLENBQUMsR0FBRyxtQ0FBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEcsTUFBTSxZQUFZLEdBQXdIO1FBQ3hJLEdBQUcsT0FBTztRQUNWLEdBQUc7UUFDSCx5RUFBeUU7UUFDekUsS0FBSyxFQUFFLElBQUk7UUFDWCxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztLQUNsQyxDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDbEMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztJQUUvQyxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUVuQyxLQUFLLENBQUMsTUFBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBRUgsS0FBSyxDQUFDLE1BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFOztZQUMvQixNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLElBQUksTUFBQSxPQUFPLENBQUMsYUFBYSxtQ0FBSSxJQUFJLEVBQUU7Z0JBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTVCLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFOztZQUN6QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RCxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JGLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDZDtpQkFBTTtnQkFDTCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO29CQUM1QixDQUFDLE1BQUEsT0FBTyxDQUFDLE1BQU0sbUNBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7aUJBQ3REO2dCQUNELE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLGVBQWUsNEJBQTRCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMzRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBcEVELHNCQW9FQztBQTZDRDs7R0FFRztBQUNILFNBQWdCLE1BQU0sQ0FBQyxNQUFjO0lBQ25DLElBQUk7UUFDRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRWpELElBQUksS0FBSyxFQUFFO1lBQ1QsS0FBSyxNQUFNLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNqQztZQUNELEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEI7YUFBTTtZQUNMLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkI7S0FDRjtJQUFDLE9BQU8sQ0FBTSxFQUFFO1FBQ2YseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFBRSxNQUFNLENBQUMsQ0FBQztTQUFFO0tBQ3RDO0FBQ0gsQ0FBQztBQWhCRCx3QkFnQkM7QUFFRCxTQUFnQixjQUFjLENBQUMsQ0FBUzs7SUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBQSxNQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSwwQ0FBRSxLQUFLLENBQUMsR0FBRyxDQUFDLG1DQUFJLEVBQUUsQ0FBQztJQUVqRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xCO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBUkQsd0NBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBBIHNoZWxsIGNvbW1hbmQgdGhhdCBkb2VzIHdoYXQgeW91IHdhbnRcbiAqXG4gKiBJcyBwbGF0Zm9ybS1hd2FyZSwgaGFuZGxlcyBlcnJvcnMgbmljZWx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hlbGwoY29tbWFuZDogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM6IFNoZWxsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKG9wdGlvbnMubW9kRW52ICYmIG9wdGlvbnMuZW52KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVc2UgZWl0aGVyIGVudiBvciBtb2RFbnYgYnV0IG5vdCBib3RoJyk7XG4gIH1cblxuICAvLyBBbHdheXMgb3V0cHV0IHRoZSBjb21tYW5kXG4gIGNvbnN0IGNvbW1hbmRBc1N0cmluZyA9IEFycmF5LmlzQXJyYXkoY29tbWFuZCkgPyBjb21tYW5kLmpvaW4oJyAnKSA6IGNvbW1hbmQ7XG4gIChvcHRpb25zLm91dHB1dCA/PyBwcm9jZXNzLnN0ZG91dCkud3JpdGUoYPCfkrsgJHtjb21tYW5kQXNTdHJpbmd9XFxuYCk7XG5cbiAgbGV0IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkID0gb3B0aW9ucy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQ7XG4gIHN3aXRjaCAob3B0aW9ucy5zaG93ID8/ICdhbHdheXMnKSB7XG4gICAgY2FzZSAnYWx3YXlzJzpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25ldmVyJzpcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICBvdXRwdXQgPSB1bmRlZmluZWQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5WRVJCT1NFKSB7XG4gICAgb3V0cHV0ID0gcHJvY2Vzcy5zdGRvdXQ7XG4gIH1cblxuICBjb25zdCBlbnYgPSBvcHRpb25zLmVudiA/PyAob3B0aW9ucy5tb2RFbnYgPyB7IC4uLnByb2Nlc3MuZW52LCAuLi5vcHRpb25zLm1vZEVudiB9IDogcHJvY2Vzcy5lbnYpO1xuICBjb25zdCBzcGF3bk9wdGlvbnM6IGNoaWxkX3Byb2Nlc3MuU3Bhd25PcHRpb25zV2l0aFN0ZGlvVHVwbGU8Y2hpbGRfcHJvY2Vzcy5TdGRpb051bGwsIGNoaWxkX3Byb2Nlc3MuU3RkaW9QaXBlLCBjaGlsZF9wcm9jZXNzLlN0ZGlvUGlwZT4gPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbnYsXG4gICAgLy8gTmVlZCB0aGlzIGZvciBXaW5kb3dzIHdoZXJlIHdlIHdhbnQgLmNtZCBhbmQgLmJhdCB0byBiZSBmb3VuZCBhcyB3ZWxsLlxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfTtcblxuICBjb25zdCBjaGlsZCA9IEFycmF5LmlzQXJyYXkoY29tbWFuZClcbiAgICA/IGNoaWxkX3Byb2Nlc3Muc3Bhd24oY29tbWFuZFswXSwgY29tbWFuZC5zbGljZSgxKSwgc3Bhd25PcHRpb25zKVxuICAgIDogY2hpbGRfcHJvY2Vzcy5zcGF3bihjb21tYW5kLCBzcGF3bk9wdGlvbnMpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzdGRvdXQgPSBuZXcgQXJyYXk8QnVmZmVyPigpO1xuICAgIGNvbnN0IHN0ZGVyciA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG5cbiAgICBjaGlsZC5zdGRvdXQhLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgb3V0cHV0Py53cml0ZShjaHVuayk7XG4gICAgICBzdGRvdXQucHVzaChjaHVuayk7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5zdGRlcnIhLm9uKCdkYXRhJywgY2h1bmsgPT4ge1xuICAgICAgb3V0cHV0Py53cml0ZShjaHVuayk7XG4gICAgICBpZiAob3B0aW9ucy5jYXB0dXJlU3RkZXJyID8/IHRydWUpIHtcbiAgICAgICAgc3RkZXJyLnB1c2goY2h1bmspO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2hpbGQub25jZSgnZXJyb3InLCByZWplY3QpO1xuXG4gICAgY2hpbGQub25jZSgnY2xvc2UnLCBjb2RlID0+IHtcbiAgICAgIGNvbnN0IHN0ZGVyck91dHB1dCA9IEJ1ZmZlci5jb25jYXQoc3RkZXJyKS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIGNvbnN0IHN0ZG91dE91dHB1dCA9IEJ1ZmZlci5jb25jYXQoc3Rkb3V0KS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIGNvbnN0IG91dCA9IChvcHRpb25zLm9ubHlTdGRlcnIgPyBzdGRlcnJPdXRwdXQgOiBzdGRvdXRPdXRwdXQgKyBzdGRlcnJPdXRwdXQpLnRyaW0oKTtcbiAgICAgIGlmIChjb2RlID09PSAwIHx8IG9wdGlvbnMuYWxsb3dFcnJFeGl0KSB7XG4gICAgICAgIHJlc29sdmUob3V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcHRpb25zLnNob3cgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICAob3B0aW9ucy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQpLndyaXRlKG91dCArICdcXG4nKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QobmV3IEVycm9yKGAnJHtjb21tYW5kQXNTdHJpbmd9JyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICR7Y29kZX0uYCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaGVsbE9wdGlvbnMgZXh0ZW5kcyBjaGlsZF9wcm9jZXNzLlNwYXduT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHRvIGFkZCB0byAnZW52J1xuICAgKi9cbiAgcmVhZG9ubHkgbW9kRW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogRG9uJ3QgZmFpbCB3aGVuIGV4aXRpbmcgd2l0aCBhbiBlcnJvclxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dFcnJFeGl0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjYXB0dXJlIHN0ZGVyclxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjYXB0dXJlU3RkZXJyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGFzcyBvdXRwdXQgaGVyZVxuICAgKlxuICAgKiBAZGVmYXVsdCBzdGRvdXQgdW5sZXNzIHF1aWV0PXRydWVcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dD86IE5vZGVKUy5Xcml0YWJsZVN0cmVhbTtcblxuICAvKipcbiAgICogT25seSByZXR1cm4gc3RkZXJyLiBGb3IgZXhhbXBsZSwgdGhpcyBpcyB1c2VkIHRvIHZhbGlkYXRlXG4gICAqIHRoYXQgd2hlbiBDST10cnVlLCBhbGwgbG9ncyBhcmUgc2VudCB0byBzdGRvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBvbmx5U3RkZXJyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG9uJ3QgbG9nIHRvIHN0ZG91dFxuICAgKlxuICAgKiBAZGVmYXVsdCBhbHdheXNcbiAgICovXG4gIHJlYWRvbmx5IHNob3c/OiAnYWx3YXlzJyB8ICduZXZlcicgfCAnZXJyb3InO1xufVxuXG4vKipcbiAqIHJtIC1yZiByZWltcGxlbWVudGF0aW9uLCBkb24ndCB3YW50IHRvIGRlcGVuZCBvbiBhbiBOUE0gcGFja2FnZSBmb3IgdGhpc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmltcmFmKGZzUGF0aDogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgaXNEaXIgPSBmcy5sc3RhdFN5bmMoZnNQYXRoKS5pc0RpcmVjdG9yeSgpO1xuXG4gICAgaWYgKGlzRGlyKSB7XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZnMucmVhZGRpclN5bmMoZnNQYXRoKSkge1xuICAgICAgICByaW1yYWYocGF0aC5qb2luKGZzUGF0aCwgZmlsZSkpO1xuICAgICAgfVxuICAgICAgZnMucm1kaXJTeW5jKGZzUGF0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZzLnVubGlua1N5bmMoZnNQYXRoKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIC8vIFdlIHdpbGwgc3Vydml2ZSBFTk9FTlRcbiAgICBpZiAoZS5jb2RlICE9PSAnRU5PRU5UJykgeyB0aHJvdyBlOyB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvU2hlbGxQYXRoKHg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHByb2Nlc3MuZW52LlBBVEg/LnNwbGl0KCc6JykgPz8gW107XG5cbiAgaWYgKCFwYXJ0cy5pbmNsdWRlcyh4KSkge1xuICAgIHBhcnRzLnVuc2hpZnQoeCk7XG4gIH1cblxuICBwcm9jZXNzLmVudi5QQVRIID0gcGFydHMuam9pbignOicpO1xufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { LoginInformation } from '../codeartifact-repo';
|
|
2
|
+
import { UsageDir } from '../usage-dir';
|
|
3
|
+
export declare function mavenLogin(login: LoginInformation, usageDir: UsageDir): Promise<void>;
|
|
4
|
+
export declare function uploadJavaPackages(packages: string[], login: LoginInformation, usageDir: UsageDir): Promise<void>;
|
|
5
|
+
export declare function writeMavenSettingsFile(filename: string, login: LoginInformation): Promise<void>;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.writeMavenSettingsFile = exports.uploadJavaPackages = exports.mavenLogin = void 0;
|
|
27
|
+
/* eslint-disable no-console */
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
const fs_extra_1 = require("fs-extra");
|
|
30
|
+
const parallel_shell_1 = require("./parallel-shell");
|
|
31
|
+
const display_1 = require("../display");
|
|
32
|
+
const files_1 = require("../files");
|
|
33
|
+
const shell_1 = require("../shell");
|
|
34
|
+
// Do not try to JIT the Maven binary
|
|
35
|
+
const NO_JIT = '-XX:+TieredCompilation -XX:TieredStopAtLevel=1';
|
|
36
|
+
async function mavenLogin(login, usageDir) {
|
|
37
|
+
var _a;
|
|
38
|
+
await writeMavenSettingsFile(settingsFile(usageDir), login);
|
|
39
|
+
// Write env var
|
|
40
|
+
// Twiddle JVM settings a bit to make Maven survive running on a CodeBuild box.
|
|
41
|
+
await usageDir.addToEnv({
|
|
42
|
+
MAVEN_OPTS: `-Duser.home=${usageDir.directory} ${NO_JIT} ${(_a = process.env.MAVEN_OPTS) !== null && _a !== void 0 ? _a : ''}`.trim(),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
exports.mavenLogin = mavenLogin;
|
|
46
|
+
function settingsFile(usageDir) {
|
|
47
|
+
// If we configure usageDir as a fake home directory Maven will find this file.
|
|
48
|
+
// (No other way to configure the settings file as part of the environment).
|
|
49
|
+
return path.join(usageDir.directory, '.m2', 'settings.xml');
|
|
50
|
+
}
|
|
51
|
+
async function uploadJavaPackages(packages, login, usageDir) {
|
|
52
|
+
if (packages.length === 0) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
(0, display_1.header)('Java');
|
|
56
|
+
await (0, parallel_shell_1.parallelShell)(packages, async (pkg, output) => {
|
|
57
|
+
var _a;
|
|
58
|
+
console.log(`⏳ ${pkg}`);
|
|
59
|
+
const sourcesFile = pkg.replace(/.pom$/, '-sources.jar');
|
|
60
|
+
const javadocFile = pkg.replace(/.pom$/, '-javadoc.jar');
|
|
61
|
+
await (0, shell_1.shell)(['mvn',
|
|
62
|
+
`--settings=${settingsFile(usageDir)}`,
|
|
63
|
+
'org.apache.maven.plugins:maven-deploy-plugin:3.0.0:deploy-file',
|
|
64
|
+
`-Durl=${login.mavenEndpoint}`,
|
|
65
|
+
'-DrepositoryId=codeartifact',
|
|
66
|
+
`-DpomFile=${pkg}`,
|
|
67
|
+
`-Dfile=${pkg.replace(/.pom$/, '.jar')}`,
|
|
68
|
+
...await (0, fs_extra_1.pathExists)(sourcesFile) ? [`-Dsources=${sourcesFile}`] : [],
|
|
69
|
+
...await (0, fs_extra_1.pathExists)(javadocFile) ? [`-Djavadoc=${javadocFile}`] : []], {
|
|
70
|
+
output,
|
|
71
|
+
modEnv: {
|
|
72
|
+
// Do not try to JIT the Maven binary
|
|
73
|
+
MAVEN_OPTS: `${NO_JIT} ${(_a = process.env.MAVEN_OPTS) !== null && _a !== void 0 ? _a : ''}`.trim(),
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
console.log(`✅ ${pkg}`);
|
|
77
|
+
}, (pkg, output) => {
|
|
78
|
+
if (output.toString().includes('409 Conflict')) {
|
|
79
|
+
console.log(`❌ ${pkg}: already exists. Skipped.`);
|
|
80
|
+
return 'skip';
|
|
81
|
+
}
|
|
82
|
+
if (output.toString().includes('Too Many Requests')) {
|
|
83
|
+
console.log(`♻️ ${pkg}: Too many requests. Retrying.`);
|
|
84
|
+
return 'retry';
|
|
85
|
+
}
|
|
86
|
+
return 'fail';
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
exports.uploadJavaPackages = uploadJavaPackages;
|
|
90
|
+
async function writeMavenSettingsFile(filename, login) {
|
|
91
|
+
await (0, files_1.writeFile)(filename, `<?xml version="1.0" encoding="UTF-8" ?>
|
|
92
|
+
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
|
93
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
94
|
+
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
|
|
95
|
+
http://maven.apache.org/xsd/settings-1.0.0.xsd">
|
|
96
|
+
<servers>
|
|
97
|
+
<server>
|
|
98
|
+
<id>codeartifact</id>
|
|
99
|
+
<username>aws</username>
|
|
100
|
+
<password>${login.authToken}</password>
|
|
101
|
+
</server>
|
|
102
|
+
</servers>
|
|
103
|
+
<profiles>
|
|
104
|
+
<profile>
|
|
105
|
+
<id>default</id>
|
|
106
|
+
<repositories>
|
|
107
|
+
<repository>
|
|
108
|
+
<id>codeartifact</id>
|
|
109
|
+
<url>${login.mavenEndpoint}</url>
|
|
110
|
+
</repository>
|
|
111
|
+
</repositories>
|
|
112
|
+
</profile>
|
|
113
|
+
</profiles>
|
|
114
|
+
<activeProfiles>
|
|
115
|
+
<activeProfile>default</activeProfile>
|
|
116
|
+
</activeProfiles>
|
|
117
|
+
</settings>`);
|
|
118
|
+
}
|
|
119
|
+
exports.writeMavenSettingsFile = writeMavenSettingsFile;
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF2ZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29kZWFydGlmYWN0L3N0YWdpbmcvbWF2ZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsMkNBQTZCO0FBQzdCLHVDQUFzQztBQUN0QyxxREFBaUQ7QUFFakQsd0NBQW9DO0FBQ3BDLG9DQUFxQztBQUNyQyxvQ0FBaUM7QUFHakMscUNBQXFDO0FBQ3JDLE1BQU0sTUFBTSxHQUFHLGdEQUFnRCxDQUFDO0FBRXpELEtBQUssVUFBVSxVQUFVLENBQUMsS0FBdUIsRUFBRSxRQUFrQjs7SUFDMUUsTUFBTSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFNUQsZ0JBQWdCO0lBQ2hCLCtFQUErRTtJQUMvRSxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDdEIsVUFBVSxFQUFFLGVBQWUsUUFBUSxDQUFDLFNBQVMsSUFBSSxNQUFNLElBQUksTUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsbUNBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFO0tBQ2pHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFSRCxnQ0FRQztBQUVELFNBQVMsWUFBWSxDQUFDLFFBQWtCO0lBQ3RDLCtFQUErRTtJQUMvRSw0RUFBNEU7SUFDNUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsUUFBa0IsRUFBRSxLQUF1QixFQUFFLFFBQWtCO0lBQ3RHLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDekIsT0FBTztLQUNSO0lBRUQsSUFBQSxnQkFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2YsTUFBTSxJQUFBLDhCQUFhLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7O1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXhCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRXpELE1BQU0sSUFBQSxhQUFLLEVBQUMsQ0FBQyxLQUFLO1lBQ2hCLGNBQWMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RDLGdFQUFnRTtZQUNoRSxTQUFTLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDOUIsNkJBQTZCO1lBQzdCLGFBQWEsR0FBRyxFQUFFO1lBQ2xCLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDeEMsR0FBRyxNQUFNLElBQUEscUJBQVUsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEUsR0FBRyxNQUFNLElBQUEscUJBQVUsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZFLE1BQU07WUFDTixNQUFNLEVBQUU7Z0JBQ04scUNBQXFDO2dCQUNyQyxVQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksTUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsbUNBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFO2FBQy9EO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDRCQUE0QixDQUFDLENBQUM7WUFDbEQsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLGdDQUFnQyxDQUFDLENBQUM7WUFDdkQsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUF6Q0QsZ0RBeUNDO0FBRU0sS0FBSyxVQUFVLHNCQUFzQixDQUFDLFFBQWdCLEVBQUUsS0FBdUI7SUFDcEYsTUFBTSxJQUFBLGlCQUFTLEVBQUMsUUFBUSxFQUFFOzs7Ozs7Ozs7b0JBU1IsS0FBSyxDQUFDLFNBQVM7Ozs7Ozs7OzttQkFTaEIsS0FBSyxDQUFDLGFBQWE7Ozs7Ozs7O2NBUXhCLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBNUJELHdEQTRCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcGFyYWxsZWxTaGVsbCB9IGZyb20gJy4vcGFyYWxsZWwtc2hlbGwnO1xuaW1wb3J0IHsgTG9naW5JbmZvcm1hdGlvbiB9IGZyb20gJy4uL2NvZGVhcnRpZmFjdC1yZXBvJztcbmltcG9ydCB7IGhlYWRlciB9IGZyb20gJy4uL2Rpc3BsYXknO1xuaW1wb3J0IHsgd3JpdGVGaWxlIH0gZnJvbSAnLi4vZmlsZXMnO1xuaW1wb3J0IHsgc2hlbGwgfSBmcm9tICcuLi9zaGVsbCc7XG5pbXBvcnQgeyBVc2FnZURpciB9IGZyb20gJy4uL3VzYWdlLWRpcic7XG5cbi8vIERvIG5vdCB0cnkgdG8gSklUIHRoZSBNYXZlbiBiaW5hcnlcbmNvbnN0IE5PX0pJVCA9ICctWFg6K1RpZXJlZENvbXBpbGF0aW9uIC1YWDpUaWVyZWRTdG9wQXRMZXZlbD0xJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hdmVuTG9naW4obG9naW46IExvZ2luSW5mb3JtYXRpb24sIHVzYWdlRGlyOiBVc2FnZURpcikge1xuICBhd2FpdCB3cml0ZU1hdmVuU2V0dGluZ3NGaWxlKHNldHRpbmdzRmlsZSh1c2FnZURpciksIGxvZ2luKTtcblxuICAvLyBXcml0ZSBlbnYgdmFyXG4gIC8vIFR3aWRkbGUgSlZNIHNldHRpbmdzIGEgYml0IHRvIG1ha2UgTWF2ZW4gc3Vydml2ZSBydW5uaW5nIG9uIGEgQ29kZUJ1aWxkIGJveC5cbiAgYXdhaXQgdXNhZ2VEaXIuYWRkVG9FbnYoe1xuICAgIE1BVkVOX09QVFM6IGAtRHVzZXIuaG9tZT0ke3VzYWdlRGlyLmRpcmVjdG9yeX0gJHtOT19KSVR9ICR7cHJvY2Vzcy5lbnYuTUFWRU5fT1BUUyA/PyAnJ31gLnRyaW0oKSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldHRpbmdzRmlsZSh1c2FnZURpcjogVXNhZ2VEaXIpIHtcbiAgLy8gSWYgd2UgY29uZmlndXJlIHVzYWdlRGlyIGFzIGEgZmFrZSBob21lIGRpcmVjdG9yeSBNYXZlbiB3aWxsIGZpbmQgdGhpcyBmaWxlLlxuICAvLyAoTm8gb3RoZXIgd2F5IHRvIGNvbmZpZ3VyZSB0aGUgc2V0dGluZ3MgZmlsZSBhcyBwYXJ0IG9mIHRoZSBlbnZpcm9ubWVudCkuXG4gIHJldHVybiBwYXRoLmpvaW4odXNhZ2VEaXIuZGlyZWN0b3J5LCAnLm0yJywgJ3NldHRpbmdzLnhtbCcpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBsb2FkSmF2YVBhY2thZ2VzKHBhY2thZ2VzOiBzdHJpbmdbXSwgbG9naW46IExvZ2luSW5mb3JtYXRpb24sIHVzYWdlRGlyOiBVc2FnZURpcikge1xuICBpZiAocGFja2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaGVhZGVyKCdKYXZhJyk7XG4gIGF3YWl0IHBhcmFsbGVsU2hlbGwocGFja2FnZXMsIGFzeW5jIChwa2csIG91dHB1dCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGDij7MgJHtwa2d9YCk7XG5cbiAgICBjb25zdCBzb3VyY2VzRmlsZSA9IHBrZy5yZXBsYWNlKC8ucG9tJC8sICctc291cmNlcy5qYXInKTtcbiAgICBjb25zdCBqYXZhZG9jRmlsZSA9IHBrZy5yZXBsYWNlKC8ucG9tJC8sICctamF2YWRvYy5qYXInKTtcblxuICAgIGF3YWl0IHNoZWxsKFsnbXZuJyxcbiAgICAgIGAtLXNldHRpbmdzPSR7c2V0dGluZ3NGaWxlKHVzYWdlRGlyKX1gLFxuICAgICAgJ29yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczptYXZlbi1kZXBsb3ktcGx1Z2luOjMuMC4wOmRlcGxveS1maWxlJyxcbiAgICAgIGAtRHVybD0ke2xvZ2luLm1hdmVuRW5kcG9pbnR9YCxcbiAgICAgICctRHJlcG9zaXRvcnlJZD1jb2RlYXJ0aWZhY3QnLFxuICAgICAgYC1EcG9tRmlsZT0ke3BrZ31gLFxuICAgICAgYC1EZmlsZT0ke3BrZy5yZXBsYWNlKC8ucG9tJC8sICcuamFyJyl9YCxcbiAgICAgIC4uLmF3YWl0IHBhdGhFeGlzdHMoc291cmNlc0ZpbGUpID8gW2AtRHNvdXJjZXM9JHtzb3VyY2VzRmlsZX1gXSA6IFtdLFxuICAgICAgLi4uYXdhaXQgcGF0aEV4aXN0cyhqYXZhZG9jRmlsZSkgPyBbYC1EamF2YWRvYz0ke2phdmFkb2NGaWxlfWBdIDogW11dLCB7XG4gICAgICBvdXRwdXQsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgLy8gRG8gbm90IHRyeSB0byBKSVQgdGhlIE1hdmVuIGJpbmFyeVxuICAgICAgICBNQVZFTl9PUFRTOiBgJHtOT19KSVR9ICR7cHJvY2Vzcy5lbnYuTUFWRU5fT1BUUyA/PyAnJ31gLnRyaW0oKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhg4pyFICR7cGtnfWApO1xuICB9LFxuICAocGtnLCBvdXRwdXQpID0+IHtcbiAgICBpZiAob3V0cHV0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzQwOSBDb25mbGljdCcpKSB7XG4gICAgICBjb25zb2xlLmxvZyhg4p2MICR7cGtnfTogYWxyZWFkeSBleGlzdHMuIFNraXBwZWQuYCk7XG4gICAgICByZXR1cm4gJ3NraXAnO1xuICAgIH1cbiAgICBpZiAob3V0cHV0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1RvbyBNYW55IFJlcXVlc3RzJykpIHtcbiAgICAgIGNvbnNvbGUubG9nKGDimbvvuI8gJHtwa2d9OiBUb28gbWFueSByZXF1ZXN0cy4gUmV0cnlpbmcuYCk7XG4gICAgICByZXR1cm4gJ3JldHJ5JztcbiAgICB9XG4gICAgcmV0dXJuICdmYWlsJztcbiAgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZU1hdmVuU2V0dGluZ3NGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGxvZ2luOiBMb2dpbkluZm9ybWF0aW9uKSB7XG4gIGF3YWl0IHdyaXRlRmlsZShmaWxlbmFtZSwgYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCIgPz5cbiAgPHNldHRpbmdzIHhtbG5zPVwiaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvU0VUVElOR1MvMS4wLjBcIlxuICAgICAgICAgICAgeG1sbnM6eHNpPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2VcIlxuICAgICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPVwiaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvU0VUVElOR1MvMS4wLjBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL3NldHRpbmdzLTEuMC4wLnhzZFwiPlxuICAgIDxzZXJ2ZXJzPlxuICAgICAgPHNlcnZlcj5cbiAgICAgICAgPGlkPmNvZGVhcnRpZmFjdDwvaWQ+XG4gICAgICAgIDx1c2VybmFtZT5hd3M8L3VzZXJuYW1lPlxuICAgICAgICA8cGFzc3dvcmQ+JHtsb2dpbi5hdXRoVG9rZW59PC9wYXNzd29yZD5cbiAgICAgIDwvc2VydmVyPlxuICAgIDwvc2VydmVycz5cbiAgICA8cHJvZmlsZXM+XG4gICAgICA8cHJvZmlsZT5cbiAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPlxuICAgICAgICA8cmVwb3NpdG9yaWVzPlxuICAgICAgICAgIDxyZXBvc2l0b3J5PlxuICAgICAgICAgICAgPGlkPmNvZGVhcnRpZmFjdDwvaWQ+XG4gICAgICAgICAgICA8dXJsPiR7bG9naW4ubWF2ZW5FbmRwb2ludH08L3VybD5cbiAgICAgICAgICA8L3JlcG9zaXRvcnk+XG4gICAgICAgIDwvcmVwb3NpdG9yaWVzPlxuICAgICAgPC9wcm9maWxlPlxuICAgIDwvcHJvZmlsZXM+XG4gICAgPGFjdGl2ZVByb2ZpbGVzPlxuICAgICAgPGFjdGl2ZVByb2ZpbGU+ZGVmYXVsdDwvYWN0aXZlUHJvZmlsZT5cbiAgICA8L2FjdGl2ZVByb2ZpbGVzPlxuICA8L3NldHRpbmdzPmApO1xufVxuIl19
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LoginInformation } from '../codeartifact-repo';
|
|
2
|
+
import { UsageDir } from '../usage-dir';
|
|
3
|
+
export declare function npmLogin(login: LoginInformation, usageDir: UsageDir): Promise<void>;
|
|
4
|
+
export declare function uploadNpmPackages(packages: string[], login: LoginInformation, usageDir: UsageDir): Promise<void>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.uploadNpmPackages = exports.npmLogin = void 0;
|
|
27
|
+
/* eslint-disable no-console */
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
const parallel_shell_1 = require("./parallel-shell");
|
|
30
|
+
const display_1 = require("../display");
|
|
31
|
+
const files_1 = require("../files");
|
|
32
|
+
const shell_1 = require("../shell");
|
|
33
|
+
async function npmLogin(login, usageDir) {
|
|
34
|
+
// Creating an ~/.npmrc that references an envvar is what you're supposed to do. (https://docs.npmjs.com/private-modules/ci-server-config)
|
|
35
|
+
await writeNpmLoginToken(usageDir, login.npmEndpoint, '${NPM_TOKEN}');
|
|
36
|
+
// Add variables to env file
|
|
37
|
+
await usageDir.addToEnv(npmEnv(usageDir, login));
|
|
38
|
+
}
|
|
39
|
+
exports.npmLogin = npmLogin;
|
|
40
|
+
function npmEnv(usageDir, login) {
|
|
41
|
+
return {
|
|
42
|
+
npm_config_userconfig: path.join(usageDir.directory, '.npmrc'),
|
|
43
|
+
npm_config_registry: login.npmEndpoint,
|
|
44
|
+
npm_config_always_auth: 'true',
|
|
45
|
+
NPM_TOKEN: login.authToken,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function uploadNpmPackages(packages, login, usageDir) {
|
|
49
|
+
if (packages.length === 0) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
(0, display_1.header)('NPM');
|
|
53
|
+
await (0, parallel_shell_1.parallelShell)(packages, async (pkg, output) => {
|
|
54
|
+
console.log(`⏳ ${pkg}`);
|
|
55
|
+
// path.resolve() is required -- if the filename ends up looking like `js/bla.tgz` then NPM thinks it's a short form GitHub name.
|
|
56
|
+
await (0, shell_1.shell)(['npm', 'publish', path.resolve(pkg)], {
|
|
57
|
+
modEnv: npmEnv(usageDir, login),
|
|
58
|
+
show: 'error',
|
|
59
|
+
output,
|
|
60
|
+
});
|
|
61
|
+
console.log(`✅ ${pkg}`);
|
|
62
|
+
}, (pkg, output) => {
|
|
63
|
+
if (output.toString().includes('code EPUBLISHCONFLICT')) {
|
|
64
|
+
console.log(`❌ ${pkg}: already exists. Skipped.`);
|
|
65
|
+
return 'skip';
|
|
66
|
+
}
|
|
67
|
+
if (output.toString().includes('code EPRIVATE')) {
|
|
68
|
+
console.log(`❌ ${pkg}: is private. Skipped.`);
|
|
69
|
+
return 'skip';
|
|
70
|
+
}
|
|
71
|
+
return 'fail';
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
exports.uploadNpmPackages = uploadNpmPackages;
|
|
75
|
+
async function writeNpmLoginToken(usageDir, endpoint, token) {
|
|
76
|
+
const rcFile = path.join(usageDir.directory, '.npmrc');
|
|
77
|
+
const lines = await (0, files_1.loadLines)(rcFile);
|
|
78
|
+
const key = `${endpoint.replace(/^https:/, '')}:_authToken`;
|
|
79
|
+
(0, files_1.updateIniKey)(lines, key, token);
|
|
80
|
+
await (0, files_1.writeLines)(rcFile, lines);
|
|
81
|
+
return rcFile;
|
|
82
|
+
}
|
|
83
|
+
// Environment variable, .npmrc in same directory as package.json or in home dir
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvZGVhcnRpZmFjdC9zdGFnaW5nL25wbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQiwyQ0FBNkI7QUFDN0IscURBQWlEO0FBRWpELHdDQUFvQztBQUNwQyxvQ0FBK0Q7QUFDL0Qsb0NBQWlDO0FBRzFCLEtBQUssVUFBVSxRQUFRLENBQUMsS0FBdUIsRUFBRSxRQUFrQjtJQUN4RSwwSUFBMEk7SUFDMUksTUFBTSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUV0RSw0QkFBNEI7SUFDNUIsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBTkQsNEJBTUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxRQUFrQixFQUFFLEtBQXVCO0lBQ3pELE9BQU87UUFDTCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO1FBQzlELG1CQUFtQixFQUFFLEtBQUssQ0FBQyxXQUFXO1FBQ3RDLHNCQUFzQixFQUFFLE1BQU07UUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0tBQzNCLENBQUM7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLGlCQUFpQixDQUFDLFFBQWtCLEVBQUUsS0FBdUIsRUFBRSxRQUFrQjtJQUNyRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE9BQU87S0FDUjtJQUVELElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNkLE1BQU0sSUFBQSw4QkFBYSxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2xELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXhCLGlJQUFpSTtRQUNqSSxNQUFNLElBQUEsYUFBSyxFQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDakQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO1lBQy9CLElBQUksRUFBRSxPQUFPO1lBQ2IsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNqQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsRUFBRTtZQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyw0QkFBNEIsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsd0JBQXdCLENBQUMsQ0FBQztZQUM5QyxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBNUJELDhDQTRCQztBQUVELEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxRQUFrQixFQUFFLFFBQWdCLEVBQUUsS0FBYTtJQUNuRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLGlCQUFTLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFdEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDO0lBQzVELElBQUEsb0JBQVksRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRWhDLE1BQU0sSUFBQSxrQkFBVSxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsZ0ZBQWdGIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHBhcmFsbGVsU2hlbGwgfSBmcm9tICcuL3BhcmFsbGVsLXNoZWxsJztcbmltcG9ydCB7IExvZ2luSW5mb3JtYXRpb24gfSBmcm9tICcuLi9jb2RlYXJ0aWZhY3QtcmVwbyc7XG5pbXBvcnQgeyBoZWFkZXIgfSBmcm9tICcuLi9kaXNwbGF5JztcbmltcG9ydCB7IHVwZGF0ZUluaUtleSwgbG9hZExpbmVzLCB3cml0ZUxpbmVzIH0gZnJvbSAnLi4vZmlsZXMnO1xuaW1wb3J0IHsgc2hlbGwgfSBmcm9tICcuLi9zaGVsbCc7XG5pbXBvcnQgeyBVc2FnZURpciB9IGZyb20gJy4uL3VzYWdlLWRpcic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBucG1Mb2dpbihsb2dpbjogTG9naW5JbmZvcm1hdGlvbiwgdXNhZ2VEaXI6IFVzYWdlRGlyKSB7XG4gIC8vIENyZWF0aW5nIGFuIH4vLm5wbXJjIHRoYXQgcmVmZXJlbmNlcyBhbiBlbnZ2YXIgaXMgd2hhdCB5b3UncmUgc3VwcG9zZWQgdG8gZG8uIChodHRwczovL2RvY3MubnBtanMuY29tL3ByaXZhdGUtbW9kdWxlcy9jaS1zZXJ2ZXItY29uZmlnKVxuICBhd2FpdCB3cml0ZU5wbUxvZ2luVG9rZW4odXNhZ2VEaXIsIGxvZ2luLm5wbUVuZHBvaW50LCAnJHtOUE1fVE9LRU59Jyk7XG5cbiAgLy8gQWRkIHZhcmlhYmxlcyB0byBlbnYgZmlsZVxuICBhd2FpdCB1c2FnZURpci5hZGRUb0VudihucG1FbnYodXNhZ2VEaXIsIGxvZ2luKSk7XG59XG5cbmZ1bmN0aW9uIG5wbUVudih1c2FnZURpcjogVXNhZ2VEaXIsIGxvZ2luOiBMb2dpbkluZm9ybWF0aW9uKSB7XG4gIHJldHVybiB7XG4gICAgbnBtX2NvbmZpZ191c2VyY29uZmlnOiBwYXRoLmpvaW4odXNhZ2VEaXIuZGlyZWN0b3J5LCAnLm5wbXJjJyksXG4gICAgbnBtX2NvbmZpZ19yZWdpc3RyeTogbG9naW4ubnBtRW5kcG9pbnQsXG4gICAgbnBtX2NvbmZpZ19hbHdheXNfYXV0aDogJ3RydWUnLCAvLyBOZWNlc3NhcnkgZm9yIE5QTSA2LCBvdGhlcndpc2UgaXQgd2lsbCBzb21ldGltZXMgbm90IHBhc3MgdGhlIHRva2VuXG4gICAgTlBNX1RPS0VOOiBsb2dpbi5hdXRoVG9rZW4sXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGxvYWROcG1QYWNrYWdlcyhwYWNrYWdlczogc3RyaW5nW10sIGxvZ2luOiBMb2dpbkluZm9ybWF0aW9uLCB1c2FnZURpcjogVXNhZ2VEaXIpIHtcbiAgaWYgKHBhY2thZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGhlYWRlcignTlBNJyk7XG4gIGF3YWl0IHBhcmFsbGVsU2hlbGwocGFja2FnZXMsIGFzeW5jIChwa2csIG91dHB1dCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGDij7MgJHtwa2d9YCk7XG5cbiAgICAvLyBwYXRoLnJlc29sdmUoKSBpcyByZXF1aXJlZCAtLSBpZiB0aGUgZmlsZW5hbWUgZW5kcyB1cCBsb29raW5nIGxpa2UgYGpzL2JsYS50Z3pgIHRoZW4gTlBNIHRoaW5rcyBpdCdzIGEgc2hvcnQgZm9ybSBHaXRIdWIgbmFtZS5cbiAgICBhd2FpdCBzaGVsbChbJ25wbScsICdwdWJsaXNoJywgcGF0aC5yZXNvbHZlKHBrZyldLCB7XG4gICAgICBtb2RFbnY6IG5wbUVudih1c2FnZURpciwgbG9naW4pLFxuICAgICAgc2hvdzogJ2Vycm9yJyxcbiAgICAgIG91dHB1dCxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGDinIUgJHtwa2d9YCk7XG4gIH0sIChwa2csIG91dHB1dCkgPT4ge1xuICAgIGlmIChvdXRwdXQudG9TdHJpbmcoKS5pbmNsdWRlcygnY29kZSBFUFVCTElTSENPTkZMSUNUJykpIHtcbiAgICAgIGNvbnNvbGUubG9nKGDinYwgJHtwa2d9OiBhbHJlYWR5IGV4aXN0cy4gU2tpcHBlZC5gKTtcbiAgICAgIHJldHVybiAnc2tpcCc7XG4gICAgfVxuICAgIGlmIChvdXRwdXQudG9TdHJpbmcoKS5pbmNsdWRlcygnY29kZSBFUFJJVkFURScpKSB7XG4gICAgICBjb25zb2xlLmxvZyhg4p2MICR7cGtnfTogaXMgcHJpdmF0ZS4gU2tpcHBlZC5gKTtcbiAgICAgIHJldHVybiAnc2tpcCc7XG4gICAgfVxuICAgIHJldHVybiAnZmFpbCc7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZU5wbUxvZ2luVG9rZW4odXNhZ2VEaXI6IFVzYWdlRGlyLCBlbmRwb2ludDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSB7XG4gIGNvbnN0IHJjRmlsZSA9IHBhdGguam9pbih1c2FnZURpci5kaXJlY3RvcnksICcubnBtcmMnKTtcbiAgY29uc3QgbGluZXMgPSBhd2FpdCBsb2FkTGluZXMocmNGaWxlKTtcblxuICBjb25zdCBrZXkgPSBgJHtlbmRwb2ludC5yZXBsYWNlKC9eaHR0cHM6LywgJycpfTpfYXV0aFRva2VuYDtcbiAgdXBkYXRlSW5pS2V5KGxpbmVzLCBrZXksIHRva2VuKTtcblxuICBhd2FpdCB3cml0ZUxpbmVzKHJjRmlsZSwgbGluZXMpO1xuICByZXR1cm4gcmNGaWxlO1xufVxuXG4vLyBFbnZpcm9ubWVudCB2YXJpYWJsZSwgLm5wbXJjIGluIHNhbWUgZGlyZWN0b3J5IGFzIHBhY2thZ2UuanNvbiBvciBpbiBob21lIGRpciJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LoginInformation } from '../codeartifact-repo';
|
|
2
|
+
import { UsageDir } from '../usage-dir';
|
|
3
|
+
export declare function nugetLogin(login: LoginInformation, usageDir: UsageDir): Promise<void>;
|
|
4
|
+
export declare function uploadDotnetPackages(packages: string[], usageDir: UsageDir): Promise<void>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uploadDotnetPackages = exports.nugetLogin = void 0;
|
|
4
|
+
/* eslint-disable no-console */
|
|
5
|
+
const parallel_shell_1 = require("./parallel-shell");
|
|
6
|
+
const display_1 = require("../display");
|
|
7
|
+
const files_1 = require("../files");
|
|
8
|
+
const shell_1 = require("../shell");
|
|
9
|
+
async function nugetLogin(login, usageDir) {
|
|
10
|
+
// NuGet.Config MUST live in the current directory or in the home directory, and there is no environment
|
|
11
|
+
// variable to configure its location.
|
|
12
|
+
await writeNuGetConfigFile(usageDir.cwdFile('NuGet.Config'), login);
|
|
13
|
+
}
|
|
14
|
+
exports.nugetLogin = nugetLogin;
|
|
15
|
+
async function uploadDotnetPackages(packages, usageDir) {
|
|
16
|
+
if (packages.length === 0) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
(0, display_1.header)('.NET');
|
|
20
|
+
await usageDir.copySelectCwdFileHere('NuGet.Config');
|
|
21
|
+
await (0, parallel_shell_1.parallelShell)(packages, async (pkg, output) => {
|
|
22
|
+
console.log(`⏳ ${pkg}`);
|
|
23
|
+
await (0, shell_1.shell)(['dotnet', 'nuget', 'push',
|
|
24
|
+
pkg,
|
|
25
|
+
'--source', 'CodeArtifact',
|
|
26
|
+
'--no-symbols',
|
|
27
|
+
'--force-english-output',
|
|
28
|
+
'--disable-buffering',
|
|
29
|
+
'--timeout', '600',
|
|
30
|
+
'--skip-duplicate'], {
|
|
31
|
+
output,
|
|
32
|
+
});
|
|
33
|
+
console.log(`✅ ${pkg}`);
|
|
34
|
+
}, (pkg, output) => {
|
|
35
|
+
if (output.toString().includes('Conflict')) {
|
|
36
|
+
console.log(`❌ ${pkg}: already exists. Skipped.`);
|
|
37
|
+
return 'skip';
|
|
38
|
+
}
|
|
39
|
+
if (output.includes('System.Threading.AbandonedMutexException')) {
|
|
40
|
+
console.log(`♻️ ${pkg}: AbandonedMutexException. Probably a sign of throttling, retrying.`);
|
|
41
|
+
return 'retry';
|
|
42
|
+
}
|
|
43
|
+
if (output.includes('Too Many Requests')) {
|
|
44
|
+
console.log(`♻️ ${pkg}: Too many requests. Retrying.`);
|
|
45
|
+
return 'retry';
|
|
46
|
+
}
|
|
47
|
+
if (output.includes('System.IO.IOException: The system cannot open the device or file specified.')) {
|
|
48
|
+
console.log(`♻️ ${pkg}: Some error that we've seen before as a result of throttling. Retrying.`);
|
|
49
|
+
return 'retry';
|
|
50
|
+
}
|
|
51
|
+
return 'fail';
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
exports.uploadDotnetPackages = uploadDotnetPackages;
|
|
55
|
+
async function writeNuGetConfigFile(filename, login) {
|
|
56
|
+
// `dotnet nuget push` has an `--api-key` parameter, but CodeArtifact
|
|
57
|
+
// does not support that. We must authenticate with Basic auth.
|
|
58
|
+
await (0, files_1.writeFile)(filename, `<?xml version="1.0" encoding="utf-8"?>
|
|
59
|
+
<configuration>
|
|
60
|
+
<packageSources>
|
|
61
|
+
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
|
|
62
|
+
<add key="CodeArtifact" value="${login.nugetEndpoint}v3/index.json" />
|
|
63
|
+
</packageSources>
|
|
64
|
+
<activePackageSource>
|
|
65
|
+
<add key="CodeArtifact" value="${login.nugetEndpoint}v3/index.json" />
|
|
66
|
+
</activePackageSource>
|
|
67
|
+
<packageSourceCredentials>
|
|
68
|
+
<CodeArtifact>
|
|
69
|
+
<add key="Username" value="aws" />
|
|
70
|
+
<add key="ClearTextPassword" value="${login.authToken}" />
|
|
71
|
+
</CodeArtifact>
|
|
72
|
+
</packageSourceCredentials>
|
|
73
|
+
</configuration>`);
|
|
74
|
+
}
|
|
75
|
+
// NuGet.Config in current directory
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVnZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29kZWFydGlmYWN0L3N0YWdpbmcvbnVnZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQStCO0FBQy9CLHFEQUFpRDtBQUVqRCx3Q0FBb0M7QUFDcEMsb0NBQXFDO0FBQ3JDLG9DQUFpQztBQUcxQixLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQXVCLEVBQUUsUUFBa0I7SUFDMUUsd0dBQXdHO0lBQ3hHLHNDQUFzQztJQUN0QyxNQUFNLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUpELGdDQUlDO0FBRU0sS0FBSyxVQUFVLG9CQUFvQixDQUFDLFFBQWtCLEVBQUUsUUFBa0I7SUFDL0UsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN6QixPQUFPO0tBQ1I7SUFFRCxJQUFBLGdCQUFNLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDZixNQUFNLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUVyRCxNQUFNLElBQUEsOEJBQWEsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV4QixNQUFNLElBQUEsYUFBSyxFQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNO1lBQ3BDLEdBQUc7WUFDSCxVQUFVLEVBQUUsY0FBYztZQUMxQixjQUFjO1lBQ2Qsd0JBQXdCO1lBQ3hCLHFCQUFxQjtZQUNyQixXQUFXLEVBQUUsS0FBSztZQUNsQixrQkFBa0IsQ0FBQyxFQUFFO1lBQ3JCLE1BQU07U0FDUCxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDZCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsNEJBQTRCLENBQUMsQ0FBQztZQUNsRCxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLDBDQUEwQyxDQUFDLEVBQUU7WUFDL0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcscUVBQXFFLENBQUMsQ0FBQztZQUM1RixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLGdDQUFnQyxDQUFDLENBQUM7WUFDdkQsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsNkVBQTZFLENBQUMsRUFBRTtZQUNsRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRywwRUFBMEUsQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBM0NELG9EQTJDQztBQUVELEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLEtBQXVCO0lBQzNFLHFFQUFxRTtJQUNyRSwrREFBK0Q7SUFDL0QsTUFBTSxJQUFBLGlCQUFTLEVBQUMsUUFBUSxFQUFFOzs7O3FDQUlTLEtBQUssQ0FBQyxhQUFhOzs7cUNBR25CLEtBQUssQ0FBQyxhQUFhOzs7Ozs4Q0FLVixLQUFLLENBQUMsU0FBUzs7O2lCQUc1QyxDQUFDLENBQUM7QUFDbkIsQ0FBQztBQUVELG9DQUFvQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7IHBhcmFsbGVsU2hlbGwgfSBmcm9tICcuL3BhcmFsbGVsLXNoZWxsJztcbmltcG9ydCB7IExvZ2luSW5mb3JtYXRpb24gfSBmcm9tICcuLi9jb2RlYXJ0aWZhY3QtcmVwbyc7XG5pbXBvcnQgeyBoZWFkZXIgfSBmcm9tICcuLi9kaXNwbGF5JztcbmltcG9ydCB7IHdyaXRlRmlsZSB9IGZyb20gJy4uL2ZpbGVzJztcbmltcG9ydCB7IHNoZWxsIH0gZnJvbSAnLi4vc2hlbGwnO1xuaW1wb3J0IHsgVXNhZ2VEaXIgfSBmcm9tICcuLi91c2FnZS1kaXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbnVnZXRMb2dpbihsb2dpbjogTG9naW5JbmZvcm1hdGlvbiwgdXNhZ2VEaXI6IFVzYWdlRGlyKSB7XG4gIC8vIE51R2V0LkNvbmZpZyBNVVNUIGxpdmUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yIGluIHRoZSBob21lIGRpcmVjdG9yeSwgYW5kIHRoZXJlIGlzIG5vIGVudmlyb25tZW50XG4gIC8vIHZhcmlhYmxlIHRvIGNvbmZpZ3VyZSBpdHMgbG9jYXRpb24uXG4gIGF3YWl0IHdyaXRlTnVHZXRDb25maWdGaWxlKHVzYWdlRGlyLmN3ZEZpbGUoJ051R2V0LkNvbmZpZycpLCBsb2dpbik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGxvYWREb3RuZXRQYWNrYWdlcyhwYWNrYWdlczogc3RyaW5nW10sIHVzYWdlRGlyOiBVc2FnZURpcikge1xuICBpZiAocGFja2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaGVhZGVyKCcuTkVUJyk7XG4gIGF3YWl0IHVzYWdlRGlyLmNvcHlTZWxlY3RDd2RGaWxlSGVyZSgnTnVHZXQuQ29uZmlnJyk7XG5cbiAgYXdhaXQgcGFyYWxsZWxTaGVsbChwYWNrYWdlcywgYXN5bmMgKHBrZywgb3V0cHV0KSA9PiB7XG4gICAgY29uc29sZS5sb2coYOKPsyAke3BrZ31gKTtcblxuICAgIGF3YWl0IHNoZWxsKFsnZG90bmV0JywgJ251Z2V0JywgJ3B1c2gnLFxuICAgICAgcGtnLFxuICAgICAgJy0tc291cmNlJywgJ0NvZGVBcnRpZmFjdCcsXG4gICAgICAnLS1uby1zeW1ib2xzJyxcbiAgICAgICctLWZvcmNlLWVuZ2xpc2gtb3V0cHV0JyxcbiAgICAgICctLWRpc2FibGUtYnVmZmVyaW5nJyxcbiAgICAgICctLXRpbWVvdXQnLCAnNjAwJyxcbiAgICAgICctLXNraXAtZHVwbGljYXRlJ10sIHtcbiAgICAgIG91dHB1dCxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGDinIUgJHtwa2d9YCk7XG4gIH0sXG4gIChwa2csIG91dHB1dCkgPT4ge1xuICAgIGlmIChvdXRwdXQudG9TdHJpbmcoKS5pbmNsdWRlcygnQ29uZmxpY3QnKSkge1xuICAgICAgY29uc29sZS5sb2coYOKdjCAke3BrZ306IGFscmVhZHkgZXhpc3RzLiBTa2lwcGVkLmApO1xuICAgICAgcmV0dXJuICdza2lwJztcbiAgICB9XG4gICAgaWYgKG91dHB1dC5pbmNsdWRlcygnU3lzdGVtLlRocmVhZGluZy5BYmFuZG9uZWRNdXRleEV4Y2VwdGlvbicpKSB7XG4gICAgICBjb25zb2xlLmxvZyhg4pm777iPICR7cGtnfTogQWJhbmRvbmVkTXV0ZXhFeGNlcHRpb24uIFByb2JhYmx5IGEgc2lnbiBvZiB0aHJvdHRsaW5nLCByZXRyeWluZy5gKTtcbiAgICAgIHJldHVybiAncmV0cnknO1xuICAgIH1cbiAgICBpZiAob3V0cHV0LmluY2x1ZGVzKCdUb28gTWFueSBSZXF1ZXN0cycpKSB7XG4gICAgICBjb25zb2xlLmxvZyhg4pm777iPICR7cGtnfTogVG9vIG1hbnkgcmVxdWVzdHMuIFJldHJ5aW5nLmApO1xuICAgICAgcmV0dXJuICdyZXRyeSc7XG4gICAgfVxuICAgIGlmIChvdXRwdXQuaW5jbHVkZXMoJ1N5c3RlbS5JTy5JT0V4Y2VwdGlvbjogVGhlIHN5c3RlbSBjYW5ub3Qgb3BlbiB0aGUgZGV2aWNlIG9yIGZpbGUgc3BlY2lmaWVkLicpKSB7XG4gICAgICBjb25zb2xlLmxvZyhg4pm777iPICR7cGtnfTogU29tZSBlcnJvciB0aGF0IHdlJ3ZlIHNlZW4gYmVmb3JlIGFzIGEgcmVzdWx0IG9mIHRocm90dGxpbmcuIFJldHJ5aW5nLmApO1xuICAgICAgcmV0dXJuICdyZXRyeSc7XG4gICAgfVxuICAgIHJldHVybiAnZmFpbCc7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZU51R2V0Q29uZmlnRmlsZShmaWxlbmFtZTogc3RyaW5nLCBsb2dpbjogTG9naW5JbmZvcm1hdGlvbikge1xuICAvLyBgZG90bmV0IG51Z2V0IHB1c2hgIGhhcyBhbiBgLS1hcGkta2V5YCBwYXJhbWV0ZXIsIGJ1dCBDb2RlQXJ0aWZhY3RcbiAgLy8gZG9lcyBub3Qgc3VwcG9ydCB0aGF0LiBXZSBtdXN0IGF1dGhlbnRpY2F0ZSB3aXRoIEJhc2ljIGF1dGguXG4gIGF3YWl0IHdyaXRlRmlsZShmaWxlbmFtZSwgYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCI/PlxuPGNvbmZpZ3VyYXRpb24+XG4gIDxwYWNrYWdlU291cmNlcz5cbiAgICA8YWRkIGtleT1cIm51Z2V0Lm9yZ1wiIHZhbHVlPVwiaHR0cHM6Ly9hcGkubnVnZXQub3JnL3YzL2luZGV4Lmpzb25cIiBwcm90b2NvbFZlcnNpb249XCIzXCIgLz5cbiAgICA8YWRkIGtleT1cIkNvZGVBcnRpZmFjdFwiIHZhbHVlPVwiJHtsb2dpbi5udWdldEVuZHBvaW50fXYzL2luZGV4Lmpzb25cIiAvPlxuICA8L3BhY2thZ2VTb3VyY2VzPlxuICA8YWN0aXZlUGFja2FnZVNvdXJjZT5cbiAgICA8YWRkIGtleT1cIkNvZGVBcnRpZmFjdFwiIHZhbHVlPVwiJHtsb2dpbi5udWdldEVuZHBvaW50fXYzL2luZGV4Lmpzb25cIiAvPlxuICA8L2FjdGl2ZVBhY2thZ2VTb3VyY2U+XG4gIDxwYWNrYWdlU291cmNlQ3JlZGVudGlhbHM+XG4gICAgPENvZGVBcnRpZmFjdD5cbiAgICAgICAgPGFkZCBrZXk9XCJVc2VybmFtZVwiIHZhbHVlPVwiYXdzXCIgLz5cbiAgICAgICAgPGFkZCBrZXk9XCJDbGVhclRleHRQYXNzd29yZFwiIHZhbHVlPVwiJHtsb2dpbi5hdXRoVG9rZW59XCIgLz5cbiAgICAgIDwvQ29kZUFydGlmYWN0PlxuICA8L3BhY2thZ2VTb3VyY2VDcmVkZW50aWFscz5cbjwvY29uZmlndXJhdGlvbj5gKTtcbn1cblxuLy8gTnVHZXQuQ29uZmlnIGluIGN1cnJlbnQgZGlyZWN0b3J5Il19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export type ErrorResponse = 'fail' | 'skip' | 'retry';
|
|
3
|
+
/**
|
|
4
|
+
* Run a function in parallel with cached output
|
|
5
|
+
*/
|
|
6
|
+
export declare function parallelShell<A>(inputs: A[], block: (x: A, output: NodeJS.WritableStream) => Promise<void>, swallowError?: (x: A, output: string) => ErrorResponse): Promise<void>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parallelShell = void 0;
|
|
7
|
+
const p_queue_1 = __importDefault(require("p-queue"));
|
|
8
|
+
const corking_1 = require("../../help/corking");
|
|
9
|
+
const sleep_1 = require("../../help/sleep");
|
|
10
|
+
/**
|
|
11
|
+
* Run a function in parallel with cached output
|
|
12
|
+
*/
|
|
13
|
+
async function parallelShell(inputs, block, swallowError) {
|
|
14
|
+
// Limit to 10 for now, too many instances of Maven exhaust the CodeBuild instance memory
|
|
15
|
+
const q = new p_queue_1.default({ concurrency: Number(process.env.CONCURRENCY) || 10 });
|
|
16
|
+
await q.addAll(inputs.map(input => async () => {
|
|
17
|
+
let attempts = 10;
|
|
18
|
+
let sleepMs = 500;
|
|
19
|
+
while (true) {
|
|
20
|
+
const output = new corking_1.MemoryStream();
|
|
21
|
+
try {
|
|
22
|
+
await block(input, output);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
switch (swallowError === null || swallowError === void 0 ? void 0 : swallowError(input, output.toString())) {
|
|
27
|
+
case 'skip':
|
|
28
|
+
return;
|
|
29
|
+
case 'retry':
|
|
30
|
+
if (--attempts > 0) {
|
|
31
|
+
await (0, sleep_1.sleep)(Math.floor(Math.random() * sleepMs));
|
|
32
|
+
sleepMs *= 2;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
case 'fail':
|
|
37
|
+
case undefined:
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
// eslint-disable-next-line no-console
|
|
41
|
+
console.error(output.toString());
|
|
42
|
+
throw e;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}));
|
|
46
|
+
await q.onEmpty();
|
|
47
|
+
}
|
|
48
|
+
exports.parallelShell = parallelShell;
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwtc2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29kZWFydGlmYWN0L3N0YWdpbmcvcGFyYWxsZWwtc2hlbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0RBQTZCO0FBQzdCLGdEQUFrRDtBQUNsRCw0Q0FBeUM7QUFLekM7O0dBRUc7QUFDSSxLQUFLLFVBQVUsYUFBYSxDQUNqQyxNQUFXLEVBQ1gsS0FBNkQsRUFDN0QsWUFBc0Q7SUFFdEQseUZBQXlGO0lBQ3pGLE1BQU0sQ0FBQyxHQUFHLElBQUksaUJBQU0sQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDNUMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNsQixPQUFPLElBQUksRUFBRTtZQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksc0JBQVksRUFBRSxDQUFDO1lBQ2xDLElBQUk7Z0JBQ0YsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMzQixPQUFPO2FBQ1I7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixRQUFRLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUU7b0JBQ2hELEtBQUssTUFBTTt3QkFDVCxPQUFPO29CQUVULEtBQUssT0FBTzt3QkFDVixJQUFJLEVBQUUsUUFBUSxHQUFHLENBQUMsRUFBRTs0QkFDbEIsTUFBTSxJQUFBLGFBQUssRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDOzRCQUNqRCxPQUFPLElBQUksQ0FBQyxDQUFDOzRCQUNiLFNBQVM7eUJBQ1Y7d0JBQ0QsTUFBTTtvQkFFUixLQUFLLE1BQU0sQ0FBQztvQkFDWixLQUFLLFNBQVM7d0JBQ1osTUFBTTtpQkFDVDtnQkFFRCxzQ0FBc0M7Z0JBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxDQUFDO2FBQ1Q7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFSixNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBekNELHNDQXlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQUXVldWUgZnJvbSAncC1xdWV1ZSc7XG5pbXBvcnQgeyBNZW1vcnlTdHJlYW0gfSBmcm9tICcuLi8uLi9oZWxwL2NvcmtpbmcnO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuLi8uLi9oZWxwL3NsZWVwJztcblxuXG5leHBvcnQgdHlwZSBFcnJvclJlc3BvbnNlID0gJ2ZhaWwnIHwgJ3NraXAnIHwgJ3JldHJ5JztcblxuLyoqXG4gKiBSdW4gYSBmdW5jdGlvbiBpbiBwYXJhbGxlbCB3aXRoIGNhY2hlZCBvdXRwdXRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcmFsbGVsU2hlbGw8QT4oXG4gIGlucHV0czogQVtdLFxuICBibG9jazogKHg6IEEsIG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSA9PiBQcm9taXNlPHZvaWQ+LFxuICBzd2FsbG93RXJyb3I/OiAoeDogQSwgb3V0cHV0OiBzdHJpbmcpID0+IEVycm9yUmVzcG9uc2UsXG4pIHtcbiAgLy8gTGltaXQgdG8gMTAgZm9yIG5vdywgdG9vIG1hbnkgaW5zdGFuY2VzIG9mIE1hdmVuIGV4aGF1c3QgdGhlIENvZGVCdWlsZCBpbnN0YW5jZSBtZW1vcnlcbiAgY29uc3QgcSA9IG5ldyBQUXVldWUoeyBjb25jdXJyZW5jeTogTnVtYmVyKHByb2Nlc3MuZW52LkNPTkNVUlJFTkNZKSB8fCAxMCB9KTtcbiAgYXdhaXQgcS5hZGRBbGwoaW5wdXRzLm1hcChpbnB1dCA9PiBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGF0dGVtcHRzID0gMTA7XG4gICAgbGV0IHNsZWVwTXMgPSA1MDA7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IG5ldyBNZW1vcnlTdHJlYW0oKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGJsb2NrKGlucHV0LCBvdXRwdXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHN3aXRjaCAoc3dhbGxvd0Vycm9yPy4oaW5wdXQsIG91dHB1dC50b1N0cmluZygpKSkge1xuICAgICAgICAgIGNhc2UgJ3NraXAnOlxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgY2FzZSAncmV0cnknOlxuICAgICAgICAgICAgaWYgKC0tYXR0ZW1wdHMgPiAwKSB7XG4gICAgICAgICAgICAgIGF3YWl0IHNsZWVwKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNsZWVwTXMpKTtcbiAgICAgICAgICAgICAgc2xlZXBNcyAqPSAyO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnZmFpbCc6XG4gICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3Iob3V0cHV0LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfSkpO1xuXG4gIGF3YWl0IHEub25FbXB0eSgpO1xufSJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LoginInformation } from '../codeartifact-repo';
|
|
2
|
+
import { UsageDir } from '../usage-dir';
|
|
3
|
+
export declare function pipLogin(login: LoginInformation, usageDir: UsageDir): Promise<void>;
|
|
4
|
+
export declare function uploadPythonPackages(packages: string[], login: LoginInformation): Promise<void>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uploadPythonPackages = exports.pipLogin = void 0;
|
|
4
|
+
/* eslint-disable no-console */
|
|
5
|
+
const parallel_shell_1 = require("./parallel-shell");
|
|
6
|
+
const display_1 = require("../display");
|
|
7
|
+
const shell_1 = require("../shell");
|
|
8
|
+
async function pipLogin(login, usageDir) {
|
|
9
|
+
// Write pip config file and set environment var
|
|
10
|
+
const pipConfig = await usageDir.putFile('pip.conf', [
|
|
11
|
+
'[global]',
|
|
12
|
+
`index-url = https://aws:${login.authToken}@${login.pypiEndpoint.replace(/^https:\/\//, '')}simple/`,
|
|
13
|
+
].join('\n'));
|
|
14
|
+
await usageDir.addToEnv({
|
|
15
|
+
PIP_CONFIG_FILE: pipConfig,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
exports.pipLogin = pipLogin;
|
|
19
|
+
async function uploadPythonPackages(packages, login) {
|
|
20
|
+
if (packages.length === 0) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
(0, display_1.header)('Python');
|
|
24
|
+
await (0, shell_1.shell)(['pip', 'install', 'twine'], { show: 'error' });
|
|
25
|
+
// Even though twine supports uploading all packages in one go, we have to upload them
|
|
26
|
+
// individually since CodeArtifact does not support Twine's `--skip-existing`. Fun beans.
|
|
27
|
+
await (0, parallel_shell_1.parallelShell)(packages, async (pkg, output) => {
|
|
28
|
+
console.log(`⏳ ${pkg}`);
|
|
29
|
+
await (0, shell_1.shell)(['twine', 'upload', '--verbose', pkg], {
|
|
30
|
+
modEnv: {
|
|
31
|
+
TWINE_USERNAME: 'aws',
|
|
32
|
+
TWINE_PASSWORD: login.authToken,
|
|
33
|
+
TWINE_REPOSITORY_URL: login.pypiEndpoint,
|
|
34
|
+
},
|
|
35
|
+
show: 'error',
|
|
36
|
+
output,
|
|
37
|
+
});
|
|
38
|
+
console.log(`✅ ${pkg}`);
|
|
39
|
+
}, (pkg, output) => {
|
|
40
|
+
if (output.toString().includes('This package is configured to block new versions') || output.toString().includes('409 Conflict')) {
|
|
41
|
+
console.log(`❌ ${pkg}: already exists. Skipped.`);
|
|
42
|
+
return 'skip';
|
|
43
|
+
}
|
|
44
|
+
if (output.includes('429 Too Many Requests ')) {
|
|
45
|
+
console.log(`♻️ ${pkg}: 429 Too Many Requests. Retrying.`);
|
|
46
|
+
return 'retry';
|
|
47
|
+
}
|
|
48
|
+
return 'fail';
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
exports.uploadPythonPackages = uploadPythonPackages;
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvZGVhcnRpZmFjdC9zdGFnaW5nL3BpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IscURBQWlEO0FBRWpELHdDQUFvQztBQUNwQyxvQ0FBaUM7QUFHMUIsS0FBSyxVQUFVLFFBQVEsQ0FBQyxLQUF1QixFQUFFLFFBQWtCO0lBQ3hFLGdEQUFnRDtJQUNoRCxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1FBQ25ELFVBQVU7UUFDViwyQkFBMkIsS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLFNBQVM7S0FDckcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVkLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN0QixlQUFlLEVBQUUsU0FBUztLQUMzQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBVkQsNEJBVUM7QUFFTSxLQUFLLFVBQVUsb0JBQW9CLENBQUMsUUFBa0IsRUFBRSxLQUF1QjtJQUNwRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE9BQU87S0FDUjtJQUVELElBQUEsZ0JBQU0sRUFBQyxRQUFRLENBQUMsQ0FBQztJQUNqQixNQUFNLElBQUEsYUFBSyxFQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRTVELHNGQUFzRjtJQUN0Rix5RkFBeUY7SUFDekYsTUFBTSxJQUFBLDhCQUFhLEVBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFeEIsTUFBTSxJQUFBLGFBQUssRUFBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELE1BQU0sRUFBRTtnQkFDTixjQUFjLEVBQUUsS0FBSztnQkFDckIsY0FBYyxFQUFFLEtBQUssQ0FBQyxTQUFTO2dCQUMvQixvQkFBb0IsRUFBRSxLQUFLLENBQUMsWUFBWTthQUN6QztZQUNELElBQUksRUFBRSxPQUFPO1lBQ2IsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNqQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsa0RBQWtELENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ2hJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDRCQUE0QixDQUFDLENBQUM7WUFDbEQsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLG9DQUFvQyxDQUFDLENBQUM7WUFDM0QsT0FBTyxPQUFPLENBQUM7U0FDaEI7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFuQ0Qsb0RBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgcGFyYWxsZWxTaGVsbCB9IGZyb20gJy4vcGFyYWxsZWwtc2hlbGwnO1xuaW1wb3J0IHsgTG9naW5JbmZvcm1hdGlvbiB9IGZyb20gJy4uL2NvZGVhcnRpZmFjdC1yZXBvJztcbmltcG9ydCB7IGhlYWRlciB9IGZyb20gJy4uL2Rpc3BsYXknO1xuaW1wb3J0IHsgc2hlbGwgfSBmcm9tICcuLi9zaGVsbCc7XG5pbXBvcnQgeyBVc2FnZURpciB9IGZyb20gJy4uL3VzYWdlLWRpcic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwaXBMb2dpbihsb2dpbjogTG9naW5JbmZvcm1hdGlvbiwgdXNhZ2VEaXI6IFVzYWdlRGlyKSB7XG4gIC8vIFdyaXRlIHBpcCBjb25maWcgZmlsZSBhbmQgc2V0IGVudmlyb25tZW50IHZhclxuICBjb25zdCBwaXBDb25maWcgPSBhd2FpdCB1c2FnZURpci5wdXRGaWxlKCdwaXAuY29uZicsIFtcbiAgICAnW2dsb2JhbF0nLFxuICAgIGBpbmRleC11cmwgPSBodHRwczovL2F3czoke2xvZ2luLmF1dGhUb2tlbn1AJHtsb2dpbi5weXBpRW5kcG9pbnQucmVwbGFjZSgvXmh0dHBzOlxcL1xcLy8sICcnKX1zaW1wbGUvYCxcbiAgXS5qb2luKCdcXG4nKSk7XG5cbiAgYXdhaXQgdXNhZ2VEaXIuYWRkVG9FbnYoe1xuICAgIFBJUF9DT05GSUdfRklMRTogcGlwQ29uZmlnLFxuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwbG9hZFB5dGhvblBhY2thZ2VzKHBhY2thZ2VzOiBzdHJpbmdbXSwgbG9naW46IExvZ2luSW5mb3JtYXRpb24pIHtcbiAgaWYgKHBhY2thZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGhlYWRlcignUHl0aG9uJyk7XG4gIGF3YWl0IHNoZWxsKFsncGlwJywgJ2luc3RhbGwnLCAndHdpbmUnXSwgeyBzaG93OiAnZXJyb3InIH0pO1xuXG4gIC8vIEV2ZW4gdGhvdWdoIHR3aW5lIHN1cHBvcnRzIHVwbG9hZGluZyBhbGwgcGFja2FnZXMgaW4gb25lIGdvLCB3ZSBoYXZlIHRvIHVwbG9hZCB0aGVtXG4gIC8vIGluZGl2aWR1YWxseSBzaW5jZSBDb2RlQXJ0aWZhY3QgZG9lcyBub3Qgc3VwcG9ydCBUd2luZSdzIGAtLXNraXAtZXhpc3RpbmdgLiBGdW4gYmVhbnMuXG4gIGF3YWl0IHBhcmFsbGVsU2hlbGwocGFja2FnZXMsIGFzeW5jIChwa2csIG91dHB1dCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGDij7MgJHtwa2d9YCk7XG5cbiAgICBhd2FpdCBzaGVsbChbJ3R3aW5lJywgJ3VwbG9hZCcsICctLXZlcmJvc2UnLCBwa2ddLCB7XG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgVFdJTkVfVVNFUk5BTUU6ICdhd3MnLFxuICAgICAgICBUV0lORV9QQVNTV09SRDogbG9naW4uYXV0aFRva2VuLFxuICAgICAgICBUV0lORV9SRVBPU0lUT1JZX1VSTDogbG9naW4ucHlwaUVuZHBvaW50LFxuICAgICAgfSxcbiAgICAgIHNob3c6ICdlcnJvcicsXG4gICAgICBvdXRwdXQsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhg4pyFICR7cGtnfWApO1xuICB9LCAocGtnLCBvdXRwdXQpID0+IHtcbiAgICBpZiAob3V0cHV0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1RoaXMgcGFja2FnZSBpcyBjb25maWd1cmVkIHRvIGJsb2NrIG5ldyB2ZXJzaW9ucycpIHx8IG91dHB1dC50b1N0cmluZygpLmluY2x1ZGVzKCc0MDkgQ29uZmxpY3QnKSkge1xuICAgICAgY29uc29sZS5sb2coYOKdjCAke3BrZ306IGFscmVhZHkgZXhpc3RzLiBTa2lwcGVkLmApO1xuICAgICAgcmV0dXJuICdza2lwJztcbiAgICB9XG4gICAgaWYgKG91dHB1dC5pbmNsdWRlcygnNDI5IFRvbyBNYW55IFJlcXVlc3RzICcpKSB7XG4gICAgICBjb25zb2xlLmxvZyhg4pm777iPICR7cGtnfTogNDI5IFRvbyBNYW55IFJlcXVlc3RzLiBSZXRyeWluZy5gKTtcbiAgICAgIHJldHVybiAncmV0cnknO1xuICAgIH1cbiAgICByZXR1cm4gJ2ZhaWwnO1xuICB9KTtcbn0iXX0=
|