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.
Files changed (36) hide show
  1. package/.gitattributes +1 -1
  2. package/.projenrc.ts +25 -10
  3. package/README.md +27 -0
  4. package/bin/publib-ca +2 -0
  5. package/lib/bin/publib-ca.d.ts +1 -0
  6. package/lib/bin/publib-ca.js +154 -0
  7. package/lib/codeartifact/codeartifact-cli.d.ts +31 -0
  8. package/lib/codeartifact/codeartifact-cli.js +133 -0
  9. package/lib/codeartifact/codeartifact-repo.d.ts +69 -0
  10. package/lib/codeartifact/codeartifact-repo.js +299 -0
  11. package/lib/codeartifact/display.d.ts +1 -0
  12. package/lib/codeartifact/display.js +11 -0
  13. package/lib/codeartifact/files.d.ts +15 -0
  14. package/lib/codeartifact/files.js +104 -0
  15. package/lib/codeartifact/shell.d.ts +51 -0
  16. package/lib/codeartifact/shell.js +132 -0
  17. package/lib/codeartifact/staging/maven.d.ts +5 -0
  18. package/lib/codeartifact/staging/maven.js +120 -0
  19. package/lib/codeartifact/staging/npm.d.ts +4 -0
  20. package/lib/codeartifact/staging/npm.js +84 -0
  21. package/lib/codeartifact/staging/nuget.d.ts +4 -0
  22. package/lib/codeartifact/staging/nuget.js +76 -0
  23. package/lib/codeartifact/staging/parallel-shell.d.ts +6 -0
  24. package/lib/codeartifact/staging/parallel-shell.js +49 -0
  25. package/lib/codeartifact/staging/pip.d.ts +4 -0
  26. package/lib/codeartifact/staging/pip.js +52 -0
  27. package/lib/codeartifact/usage-dir.d.ts +55 -0
  28. package/lib/codeartifact/usage-dir.js +160 -0
  29. package/lib/help/corking.d.ts +15 -0
  30. package/lib/help/corking.js +57 -0
  31. package/lib/help/shell.d.ts +4 -0
  32. package/lib/help/shell.js +4 -2
  33. package/lib/help/sleep.d.ts +1 -0
  34. package/lib/help/sleep.js +8 -0
  35. package/package.json +16 -2
  36. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29kZWFydGlmYWN0L3NoZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkRBQStDO0FBQy9DLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0I7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxLQUFLLENBQUMsT0FBMEIsRUFBRSxVQUF3QixFQUFFOztJQUNoRixJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7S0FDMUQ7SUFFRCw0QkFBNEI7SUFDNUIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzdFLENBQUMsTUFBQSxPQUFPLENBQUMsTUFBTSxtQ0FBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sZUFBZSxJQUFJLENBQUMsQ0FBQztJQUVwRSxJQUFJLE1BQU0sR0FBc0MsTUFBQSxPQUFPLENBQUMsTUFBTSxtQ0FBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ2pGLFFBQVEsTUFBQSxPQUFPLENBQUMsSUFBSSxtQ0FBSSxRQUFRLEVBQUU7UUFDaEMsS0FBSyxRQUFRO1lBQ1gsTUFBTTtRQUNSLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxPQUFPO1lBQ1YsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUNuQixNQUFNO0tBQ1Q7SUFFRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO1FBQ3ZCLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ3pCO0lBRUQsTUFBTSxHQUFHLEdBQUcsTUFBQSxPQUFP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aWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuLyoqXG4gKiBBIHNoZWxsIGNvbW1hbmQgdGhhdCBkb2VzIHdoYXQgeW91IHdhbnRcbiAqXG4gKiBJcyBwbGF0Zm9ybS1hd2FyZSwgaGFuZGxlcyBlcnJvcnMgbmljZWx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2hlbGwoY29tbWFuZDogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM6IFNoZWxsT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+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=