@aws-cdk-testing/cli-integ 2.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +16 -0
- package/README.md +151 -0
- package/bin/apply-patches +19 -0
- package/bin/download-and-run-old-tests +52 -0
- package/bin/query-github +2 -0
- package/bin/query-github.d.ts +1 -0
- package/bin/query-github.js +55 -0
- package/bin/run-suite +2 -0
- package/bin/run-suite.d.ts +1 -0
- package/bin/run-suite.js +126 -0
- package/bin/stage-distribution +2 -0
- package/bin/stage-distribution.d.ts +1 -0
- package/bin/stage-distribution.js +209 -0
- package/bin/test-root +2 -0
- package/bin/test-root.d.ts +1 -0
- package/bin/test-root.js +6 -0
- package/entrypoints/test-cli-regression-against-current-code.sh +11 -0
- package/entrypoints/test-cli-regression-against-latest-release.sh +11 -0
- package/entrypoints/test-cli-regression.bash +83 -0
- package/entrypoints/test.sh +12 -0
- package/lib/aws.d.ts +55 -0
- package/lib/aws.js +243 -0
- package/lib/corking.d.ts +13 -0
- package/lib/corking.js +34 -0
- package/lib/files.d.ts +15 -0
- package/lib/files.js +80 -0
- package/lib/github.d.ts +4 -0
- package/lib/github.js +43 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.js +25 -0
- package/lib/integ-test.d.ts +11 -0
- package/lib/integ-test.js +55 -0
- package/lib/lists.d.ts +1 -0
- package/lib/lists.js +12 -0
- package/lib/memoize.d.ts +6 -0
- package/lib/memoize.js +19 -0
- package/lib/npm.d.ts +4 -0
- package/lib/npm.js +15 -0
- package/lib/package-sources/release-source.d.ts +22 -0
- package/lib/package-sources/release-source.js +67 -0
- package/lib/package-sources/repo-source.d.ts +23 -0
- package/lib/package-sources/repo-source.js +92 -0
- package/lib/package-sources/repo-tools/npm +2 -0
- package/lib/package-sources/repo-tools/npm.d.ts +1 -0
- package/lib/package-sources/repo-tools/npm.js +42 -0
- package/lib/package-sources/source.d.ts +24 -0
- package/lib/package-sources/source.js +3 -0
- package/lib/package-sources/subprocess.d.ts +3 -0
- package/lib/package-sources/subprocess.js +18 -0
- package/lib/resource-pool.d.ts +54 -0
- package/lib/resource-pool.js +120 -0
- package/lib/resources.d.ts +1 -0
- package/lib/resources.js +6 -0
- package/lib/shell.d.ts +59 -0
- package/lib/shell.js +118 -0
- package/lib/staging/codeartifact.d.ts +44 -0
- package/lib/staging/codeartifact.js +258 -0
- package/lib/staging/maven.d.ts +5 -0
- package/lib/staging/maven.js +83 -0
- package/lib/staging/npm.d.ts +4 -0
- package/lib/staging/npm.js +56 -0
- package/lib/staging/nuget.d.ts +4 -0
- package/lib/staging/nuget.js +71 -0
- package/lib/staging/parallel-shell.d.ts +6 -0
- package/lib/staging/parallel-shell.js +46 -0
- package/lib/staging/pypi.d.ts +4 -0
- package/lib/staging/pypi.js +49 -0
- package/lib/staging/usage-dir.d.ts +31 -0
- package/lib/staging/usage-dir.js +87 -0
- package/lib/with-aws.d.ts +13 -0
- package/lib/with-aws.js +60 -0
- package/lib/with-cdk-app.d.ts +146 -0
- package/lib/with-cdk-app.js +398 -0
- package/lib/with-packages.d.ts +5 -0
- package/lib/with-packages.js +14 -0
- package/lib/with-sam.d.ts +33 -0
- package/lib/with-sam.js +240 -0
- package/lib/with-temporary-directory.d.ts +5 -0
- package/lib/with-temporary-directory.js +32 -0
- package/lib/xpmutex.d.ts +43 -0
- package/lib/xpmutex.js +207 -0
- package/package.json +73 -0
- package/resources/cdk-apps/app/app.js +463 -0
- package/resources/cdk-apps/app/cdk.json +7 -0
- package/resources/cdk-apps/app/docker/Dockerfile +2 -0
- package/resources/cdk-apps/app/docker/Dockerfile.Custom +2 -0
- package/resources/cdk-apps/app/lambda/index.js +4 -0
- package/resources/cdk-apps/app/lambda/response.json +3 -0
- package/resources/cdk-apps/app/nested-stack.js +49 -0
- package/resources/cdk-apps/cfn-include-app/.gitignore +1 -0
- package/resources/cdk-apps/cfn-include-app/cdk.json +4 -0
- package/resources/cdk-apps/cfn-include-app/cfn-include-app.js +21 -0
- package/resources/cdk-apps/cfn-include-app/example-template.json +13 -0
- package/resources/cdk-apps/sam_cdk_integ_app/bin/test-app.js +11 -0
- package/resources/cdk-apps/sam_cdk_integ_app/cdk.json +6 -0
- package/resources/cdk-apps/sam_cdk_integ_app/lib/nested-stack.js +19 -0
- package/resources/cdk-apps/sam_cdk_integ_app/lib/test-stack.js +134 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/.no-packagejson-validator +0 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/Dockerfile +9 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/app.js +22 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/docker/DockerImageFunctionConstruct/package.json +18 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/go/GoFunctionConstruct/go.mod +5 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/go/GoFunctionConstruct/go.sum +17 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/go/GoFunctionConstruct/main.go +17 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/.no-packagejson-validator +0 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/app.ts +16 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/package-lock.json +12 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/nodejs/NodeJsFunctionConstruct/package.json +5 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/python/Function/app.py +15 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/python/Function/requirements.txt +1 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/python/Layer/layer_version_dependency.py +5 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/python/Layer/requirements.txt +1 -0
- package/resources/cdk-apps/sam_cdk_integ_app/src/rest-api-definition.yaml +12 -0
- package/resources/cli-regression-patches/v1.119.0/NOTES.md +5 -0
- package/resources/cli-regression-patches/v1.119.0/cli.integtest.js +659 -0
- package/resources/cli-regression-patches/v1.130.0/NOTES.md +12 -0
- package/resources/cli-regression-patches/v1.130.0/app/app.js +378 -0
- package/resources/cli-regression-patches/v1.130.0/bootstrapping.integtest.js +220 -0
- package/resources/cli-regression-patches/v1.44.0/NOTES.md +18 -0
- package/resources/cli-regression-patches/v1.44.0/bootstrapping.integtest.js +126 -0
- package/resources/cli-regression-patches/v1.44.0/test.sh +26 -0
- package/resources/cli-regression-patches/v1.61.1/NOTES.md +2 -0
- package/resources/cli-regression-patches/v1.61.1/skip-tests.txt +16 -0
- package/resources/cli-regression-patches/v1.62.0/NOTES.md +2 -0
- package/resources/cli-regression-patches/v1.62.0/aws-helpers.js +245 -0
- package/resources/cli-regression-patches/v1.63.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v1.63.0/skip-tests.txt +7 -0
- package/resources/cli-regression-patches/v1.64.0/NOTES.md +3 -0
- package/resources/cli-regression-patches/v1.64.0/cdk-helpers.js +325 -0
- package/resources/cli-regression-patches/v1.64.0/cli.integtest.js +599 -0
- package/resources/cli-regression-patches/v1.64.1/NOTES.md +3 -0
- package/resources/cli-regression-patches/v1.64.1/cdk-helpers.js +324 -0
- package/resources/cli-regression-patches/v1.64.1/cli.integtest.js +599 -0
- package/resources/cli-regression-patches/v1.67.0/NOTES.md +2 -0
- package/resources/cli-regression-patches/v1.67.0/cdk-helpers.js +331 -0
- package/resources/cloud-assemblies/0.36.0/InitStack.template.json +1 -0
- package/resources/cloud-assemblies/0.36.0/manifest.json +19 -0
- package/resources/cloud-assemblies/1.10.0-lookup-default-vpc/InitStack.template.json +2 -0
- package/resources/cloud-assemblies/1.10.0-lookup-default-vpc/manifest.json.js +37 -0
- package/resources/cloud-assemblies/1.10.0-request-azs/InitStack.template.json +2 -0
- package/resources/cloud-assemblies/1.10.0-request-azs/manifest.json.js +34 -0
- package/resources/integ.jest.config.js +25 -0
- package/skip-tests.txt +8 -0
- package/tests/cli-integ-tests/README.md +47 -0
- package/tests/cli-integ-tests/bootstrapping.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/bootstrapping.integtest.js +271 -0
- package/tests/cli-integ-tests/cli.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/cli.integtest.js +1029 -0
- package/tests/init-csharp/init-csharp.integtest.d.ts +1 -0
- package/tests/init-csharp/init-csharp.integtest.js +14 -0
- package/tests/init-fsharp/init-fsharp.integtest.d.ts +1 -0
- package/tests/init-fsharp/init-fsharp.integtest.js +14 -0
- package/tests/init-java/init-java.integtest.d.ts +1 -0
- package/tests/init-java/init-java.integtest.js +14 -0
- package/tests/init-javascript/init-javascript.integtest.d.ts +1 -0
- package/tests/init-javascript/init-javascript.integtest.js +15 -0
- package/tests/init-python/init-python.integtest.d.ts +1 -0
- package/tests/init-python/init-python.integtest.js +19 -0
- package/tests/init-typescript-app/init-typescript-app.integtest.d.ts +1 -0
- package/tests/init-typescript-app/init-typescript-app.integtest.js +49 -0
- package/tests/init-typescript-lib/init-typescript-lib.integtest.d.ts +1 -0
- package/tests/init-typescript-lib/init-typescript-lib.integtest.js +13 -0
- package/tests/uberpackage/uberpackage.integtest.d.ts +1 -0
- package/tests/uberpackage/uberpackage.integtest.js +11 -0
package/lib/shell.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import * as child_process from 'child_process';
|
|
3
|
+
import { TestContext } from './integ-test';
|
|
4
|
+
import { TemporaryDirectoryContext } from './with-temporary-directory';
|
|
5
|
+
/**
|
|
6
|
+
* A shell command that does what you want
|
|
7
|
+
*
|
|
8
|
+
* Is platform-aware, handles errors nicely.
|
|
9
|
+
*/
|
|
10
|
+
export declare function shell(command: string[], options?: ShellOptions): Promise<string>;
|
|
11
|
+
export interface ShellOptions extends child_process.SpawnOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Properties to add to 'env'
|
|
14
|
+
*/
|
|
15
|
+
readonly modEnv?: Record<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Don't fail when exiting with an error
|
|
18
|
+
*
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
readonly allowErrExit?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Whether to capture stderr
|
|
24
|
+
*
|
|
25
|
+
* @default true
|
|
26
|
+
*/
|
|
27
|
+
readonly captureStderr?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Pass output here
|
|
30
|
+
*
|
|
31
|
+
* @default stdout unless quiet=true
|
|
32
|
+
*/
|
|
33
|
+
readonly output?: NodeJS.WritableStream;
|
|
34
|
+
/**
|
|
35
|
+
* Only return stderr. For example, this is used to validate
|
|
36
|
+
* that when CI=true, all logs are sent to stdout.
|
|
37
|
+
*
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
readonly onlyStderr?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Don't log to stdout
|
|
43
|
+
*
|
|
44
|
+
* @default always
|
|
45
|
+
*/
|
|
46
|
+
readonly show?: 'always' | 'never' | 'error';
|
|
47
|
+
}
|
|
48
|
+
export declare class ShellHelper {
|
|
49
|
+
private readonly _cwd;
|
|
50
|
+
private readonly _output;
|
|
51
|
+
static fromContext(context: TestContext & TemporaryDirectoryContext): ShellHelper;
|
|
52
|
+
constructor(_cwd: string, _output: NodeJS.WritableStream);
|
|
53
|
+
shell(command: string[], options?: Omit<ShellOptions, 'cwd' | 'output'>): Promise<string>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* rm -rf reimplementation, don't want to depend on an NPM package for this
|
|
57
|
+
*/
|
|
58
|
+
export declare function rimraf(fsPath: string): void;
|
|
59
|
+
export declare function addToShellPath(x: string): void;
|
package/lib/shell.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addToShellPath = exports.rimraf = exports.ShellHelper = exports.shell = void 0;
|
|
4
|
+
const child_process = require("child_process");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
/**
|
|
8
|
+
* A shell command that does what you want
|
|
9
|
+
*
|
|
10
|
+
* Is platform-aware, handles errors nicely.
|
|
11
|
+
*/
|
|
12
|
+
async function shell(command, options = {}) {
|
|
13
|
+
if (options.modEnv && options.env) {
|
|
14
|
+
throw new Error('Use either env or modEnv but not both');
|
|
15
|
+
}
|
|
16
|
+
// Always output the command
|
|
17
|
+
(options.output ?? process.stdout).write(`💻 ${command.join(' ')}\n`);
|
|
18
|
+
let output = options.output ?? process.stdout;
|
|
19
|
+
switch (options.show ?? 'always') {
|
|
20
|
+
case 'always':
|
|
21
|
+
break;
|
|
22
|
+
case 'never':
|
|
23
|
+
case 'error':
|
|
24
|
+
output = undefined;
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
if (process.env.VERBOSE) {
|
|
28
|
+
output = process.stdout;
|
|
29
|
+
}
|
|
30
|
+
const env = options.env ?? (options.modEnv ? { ...process.env, ...options.modEnv } : process.env);
|
|
31
|
+
const child = child_process.spawn(command[0], command.slice(1), {
|
|
32
|
+
...options,
|
|
33
|
+
env,
|
|
34
|
+
// Need this for Windows where we want .cmd and .bat to be found as well.
|
|
35
|
+
shell: true,
|
|
36
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
37
|
+
});
|
|
38
|
+
return new Promise((resolve, reject) => {
|
|
39
|
+
const stdout = new Array();
|
|
40
|
+
const stderr = new Array();
|
|
41
|
+
child.stdout.on('data', chunk => {
|
|
42
|
+
output?.write(chunk);
|
|
43
|
+
stdout.push(chunk);
|
|
44
|
+
});
|
|
45
|
+
child.stderr.on('data', chunk => {
|
|
46
|
+
output?.write(chunk);
|
|
47
|
+
if (options.captureStderr ?? true) {
|
|
48
|
+
stderr.push(chunk);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
child.once('error', reject);
|
|
52
|
+
child.once('close', code => {
|
|
53
|
+
const stderrOutput = Buffer.concat(stderr).toString('utf-8');
|
|
54
|
+
const stdoutOutput = Buffer.concat(stdout).toString('utf-8');
|
|
55
|
+
const out = (options.onlyStderr ? stderrOutput : stdoutOutput + stderrOutput).trim();
|
|
56
|
+
if (code === 0 || options.allowErrExit) {
|
|
57
|
+
resolve(out);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
if (options.show === 'error') {
|
|
61
|
+
(options.output ?? process.stdout).write(out + '\n');
|
|
62
|
+
}
|
|
63
|
+
reject(new Error(`'${command.join(' ')}' exited with error code ${code}.`));
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
exports.shell = shell;
|
|
69
|
+
class ShellHelper {
|
|
70
|
+
constructor(_cwd, _output) {
|
|
71
|
+
this._cwd = _cwd;
|
|
72
|
+
this._output = _output;
|
|
73
|
+
}
|
|
74
|
+
static fromContext(context) {
|
|
75
|
+
return new ShellHelper(context.integTestDir, context.output);
|
|
76
|
+
}
|
|
77
|
+
async shell(command, options = {}) {
|
|
78
|
+
return shell(command, {
|
|
79
|
+
output: this._output,
|
|
80
|
+
cwd: this._cwd,
|
|
81
|
+
...options,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.ShellHelper = ShellHelper;
|
|
86
|
+
/**
|
|
87
|
+
* rm -rf reimplementation, don't want to depend on an NPM package for this
|
|
88
|
+
*/
|
|
89
|
+
function rimraf(fsPath) {
|
|
90
|
+
try {
|
|
91
|
+
const isDir = fs.lstatSync(fsPath).isDirectory();
|
|
92
|
+
if (isDir) {
|
|
93
|
+
for (const file of fs.readdirSync(fsPath)) {
|
|
94
|
+
rimraf(path.join(fsPath, file));
|
|
95
|
+
}
|
|
96
|
+
fs.rmdirSync(fsPath);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
fs.unlinkSync(fsPath);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (e) {
|
|
103
|
+
// We will survive ENOENT
|
|
104
|
+
if (e.code !== 'ENOENT') {
|
|
105
|
+
throw e;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.rimraf = rimraf;
|
|
110
|
+
function addToShellPath(x) {
|
|
111
|
+
const parts = process.env.PATH?.split(':') ?? [];
|
|
112
|
+
if (!parts.includes(x)) {
|
|
113
|
+
parts.unshift(x);
|
|
114
|
+
}
|
|
115
|
+
process.env.PATH = parts.join(':');
|
|
116
|
+
}
|
|
117
|
+
exports.addToShellPath = addToShellPath;
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzaGVsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBK0M7QUFDL0MseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUk3Qjs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLEtBQUssQ0FBQyxPQUFpQixFQUFFLFVBQXdCLEVBQUU7SUFDdkUsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsNEJBQTRCO0lBQzVCLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdEUsSUFBSSxNQUFNLEdBQXNDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNqRixRQUFRLE9BQU8sQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFO1FBQ2hDLEtBQUssUUFBUTtZQUNYLE1BQU07UUFDUixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssT0FBTztZQUNWLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDbkIsTUFBTTtLQUNUO0lBRUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRTtRQUN2QixNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUN6QjtJQUVELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWxHLE1BQU0sS0FBSyxHQUFH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QyxDQUFDO0FBUkQsd0NBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFRlc3RDb250ZXh0IH0gZnJvbSAnLi9pbnRlZy10ZXN0JztcbmltcG9ydCB7IFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQgfSBmcm9tICcuL3dpdGgtdGVtcG9yYXJ5LWRpcmVjdG9yeSc7XG5cbi8qKlxuICogQSBzaGVsbCBjb21tYW5kIHRoYXQgZG9lcyB3aGF0IHlvdSB3YW50XG4gKlxuICogSXMgcGxhdGZvcm0tYXdhcmUsIGhhbmRsZXMgZXJyb3JzIG5pY2VseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNoZWxsKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBTaGVsbE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLm1vZEVudiAmJiBvcHRpb25zLmVudikge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlIGVpdGhlciBlbnYgb3IgbW9kRW52IGJ1dCBub3QgYm90aCcpO1xuICB9XG5cbiAgLy8gQWx3YXlzIG91dHB1dCB0aGUgY29tbWFuZFxuICAob3B0aW9ucy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQpLndyaXRlKGDwn5K7ICR7Y29tbWFuZC5qb2luKCcgJyl9XFxuYCk7XG5cbiAgbGV0IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtIHwgdW5kZWZpbmVkID0gb3B0aW9ucy5vdXRwdXQgPz8gcHJvY2Vzcy5zdGRvdXQ7XG4gIHN3aXRjaCAob3B0aW9ucy5zaG93ID8/ICdhbHdheXMnKSB7XG4gICAgY2FzZSAnYWx3YXlzJzpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ25ldmVyJzpcbiAgICBjYXNlICdlcnJvcic6XG4gICAgICBvdXRwdXQgPSB1bmRlZmluZWQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5WRVJCT1NFKSB7XG4gICAgb3V0cHV0ID0gcHJvY2Vzcy5zdGRvdXQ7XG4gIH1cblxuICBjb25zdCBlbnYgPSBvcHRpb25zLmVudiA/PyAob3B0aW9ucy5tb2RFbnYgPyB7IC4uLnByb2Nlc3MuZW52LCAuLi5vcHRpb25zLm1vZEVudiB9IDogcHJvY2Vzcy5lbnYpO1xuXG4gIGNvbnN0IGNoaWxkID0gY2hpbGRfcHJvY2Vzcy5zcGF3bihjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbnYsXG4gICAgLy8gTmVlZCB0aGlzIGZvciBXaW5kb3dzIHdoZXJlIHdlIHdhbnQgLmNtZCBhbmQgLmJhdCB0byBiZSBmb3VuZCBhcyB3ZWxsLlxuICAgIHNoZWxsOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHN0ZG91dCA9IG5ldyBBcnJheTxCdWZmZXI+KCk7XG4gICAgY29uc3Qgc3RkZXJyID0gbmV3IEFycmF5PEJ1ZmZlcj4oKTtcblxuICAgIGNoaWxkLnN0ZG91dCEub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICBvdXRwdXQ/LndyaXRlKGNodW5rKTtcbiAgICAgIHN0ZG91dC5wdXNoKGNodW5rKTtcbiAgICB9KTtcblxuICAgIGNoaWxkLnN0ZGVyciEub24oJ2RhdGEnLCBjaHVuayA9PiB7XG4gICAgICBvdXRwdXQ/LndyaXRlKGNodW5rKTtcbiAgICAgIGlmIChvcHRpb25zLmNhcHR1cmVTdGRlcnIgPz8gdHJ1ZSkge1xuICAgICAgICBzdGRlcnIucHVzaChjaHVuayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG5cbiAgICBjaGlsZC5vbmNlKCdjbG9zZScsIGNvZGUgPT4ge1xuICAgICAgY29uc3Qgc3RkZXJyT3V0cHV0ID0gQnVmZmVyLmNvbmNhdChzdGRlcnIpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3Qgc3Rkb3V0T3V0cHV0ID0gQnVmZmVyLmNvbmNhdChzdGRvdXQpLnRvU3RyaW5nKCd1dGYtOCcpO1xuICAgICAgY29uc3Qgb3V0ID0gKG9wdGlvbnMub25seVN0ZGVyciA/IHN0ZGVyck91dHB1dCA6IHN0ZG91dE91dHB1dCArIHN0ZGVyck91dHB1dCkudHJpbSgpO1xuICAgICAgaWYgKGNvZGUgPT09IDAgfHwgb3B0aW9ucy5hbGxvd0VyckV4aXQpIHtcbiAgICAgICAgcmVzb2x2ZShvdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2hvdyA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIChvcHRpb25zLm91dHB1dCA/PyBwcm9jZXNzLnN0ZG91dCkud3JpdGUob3V0ICsgJ1xcbicpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCcke2NvbW1hbmQuam9pbignICcpfScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAke2NvZGV9LmApKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hlbGxPcHRpb25zIGV4dGVuZHMgY2hpbGRfcHJvY2Vzcy5TcGF3bk9wdGlvbnMge1xuICAvKipcbiAgICogUHJvcGVydGllcyB0byBhZGQgdG8gJ2VudidcbiAgICovXG4gIHJlYWRvbmx5IG1vZEVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIERvbid0IGZhaWwgd2hlbiBleGl0aW5nIHdpdGggYW4gZXJyb3JcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93RXJyRXhpdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2FwdHVyZSBzdGRlcnJcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2FwdHVyZVN0ZGVycj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhc3Mgb3V0cHV0IGhlcmVcbiAgICpcbiAgICogQGRlZmF1bHQgc3Rkb3V0IHVubGVzcyBxdWlldD10cnVlXG4gICAqL1xuICByZWFkb25seSBvdXRwdXQ/OiBOb2RlSlMuV3JpdGFibGVTdHJlYW07XG5cbiAgLyoqXG4gICAqIE9ubHkgcmV0dXJuIHN0ZGVyci4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgdXNlZCB0byB2YWxpZGF0ZVxuICAgKiB0aGF0IHdoZW4gQ0k9dHJ1ZSwgYWxsIGxvZ3MgYXJlIHNlbnQgdG8gc3Rkb3V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgb25seVN0ZGVycj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvbid0IGxvZyB0byBzdGRvdXRcbiAgICpcbiAgICogQGRlZmF1bHQgYWx3YXlzXG4gICAqL1xuICByZWFkb25seSBzaG93PzogJ2Fsd2F5cycgfCAnbmV2ZXInIHwgJ2Vycm9yJztcbn1cblxuZXhwb3J0IGNsYXNzIFNoZWxsSGVscGVyIHtcbiAgcHVibGljIHN0YXRpYyBmcm9tQ29udGV4dChjb250ZXh0OiBUZXN0Q29udGV4dCAmIFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQpIHtcbiAgICByZXR1cm4gbmV3IFNoZWxsSGVscGVyKGNvbnRleHQuaW50ZWdUZXN0RGlyLCBjb250ZXh0Lm91dHB1dCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jd2Q6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXQ6IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkgeyB9XG5cbiAgcHVibGljIGFzeW5jIHNoZWxsKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBPbWl0PFNoZWxsT3B0aW9ucywgJ2N3ZCcgfCAnb3V0cHV0Jz4gPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHNoZWxsKGNvbW1hbmQsIHtcbiAgICAgIG91dHB1dDogdGhpcy5fb3V0cHV0LFxuICAgICAgY3dkOiB0aGlzLl9jd2QsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcm0gLXJmIHJlaW1wbGVtZW50YXRpb24sIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIGFuIE5QTSBwYWNrYWdlIGZvciB0aGlzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByaW1yYWYoZnNQYXRoOiBzdHJpbmcpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpc0RpciA9IGZzLmxzdGF0U3luYyhmc1BhdGgpLmlzRGlyZWN0b3J5KCk7XG5cbiAgICBpZiAoaXNEaXIpIHtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmcy5yZWFkZGlyU3luYyhmc1BhdGgpKSB7XG4gICAgICAgIHJpbXJhZihwYXRoLmpvaW4oZnNQYXRoLCBmaWxlKSk7XG4gICAgICB9XG4gICAgICBmcy5ybWRpclN5bmMoZnNQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnMudW5saW5rU3luYyhmc1BhdGgpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFdlIHdpbGwgc3Vydml2ZSBFTk9FTlRcbiAgICBpZiAoZS5jb2RlICE9PSAnRU5PRU5UJykgeyB0aHJvdyBlOyB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFRvU2hlbGxQYXRoKHg6IHN0cmluZykge1xuICBjb25zdCBwYXJ0cyA9IHByb2Nlc3MuZW52LlBBVEg/LnNwbGl0KCc6JykgPz8gW107XG5cbiAgaWYgKCFwYXJ0cy5pbmNsdWRlcyh4KSkge1xuICAgIHBhcnRzLnVuc2hpZnQoeCk7XG4gIH1cblxuICBwcm9jZXNzLmVudi5QQVRIID0gcGFydHMuam9pbignOicpO1xufSJdfQ==
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare class TestRepository {
|
|
2
|
+
readonly repositoryName: string;
|
|
3
|
+
static readonly DEFAULT_DOMAIN = "test-cdk";
|
|
4
|
+
static newRandom(): Promise<TestRepository>;
|
|
5
|
+
static newWithName(name: string): Promise<TestRepository>;
|
|
6
|
+
static existing(repositoryName: string): TestRepository;
|
|
7
|
+
/**
|
|
8
|
+
* Garbage collect repositories
|
|
9
|
+
*/
|
|
10
|
+
static gc(): Promise<void>;
|
|
11
|
+
readonly npmUpstream = "npm-upstream";
|
|
12
|
+
readonly pypiUpstream = "pypi-upstream";
|
|
13
|
+
readonly nugetUpstream = "nuget-upstream";
|
|
14
|
+
readonly mavenUpstream = "maven-upstream";
|
|
15
|
+
readonly domain = "test-cdk";
|
|
16
|
+
private readonly codeArtifact;
|
|
17
|
+
private _loginInformation;
|
|
18
|
+
private constructor();
|
|
19
|
+
prepare(): Promise<void>;
|
|
20
|
+
loginInformation(): Promise<LoginInformation>;
|
|
21
|
+
delete(): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* List all packages and mark them as "allow upstream versions".
|
|
24
|
+
*
|
|
25
|
+
* If we don't do this and we publish `foo@2.3.4-rc.0`, then we can't
|
|
26
|
+
* download `foo@2.3.0` anymore because by default CodeArtifact will
|
|
27
|
+
* block different versions from the same package.
|
|
28
|
+
*/
|
|
29
|
+
markAllUpstreamAllow(): Promise<void>;
|
|
30
|
+
private ensureDomain;
|
|
31
|
+
private ensureUpstreams;
|
|
32
|
+
private ensureRepository;
|
|
33
|
+
private domainExists;
|
|
34
|
+
private repositoryExists;
|
|
35
|
+
private listPackages;
|
|
36
|
+
}
|
|
37
|
+
export interface LoginInformation {
|
|
38
|
+
readonly authToken: string;
|
|
39
|
+
readonly repositoryName: string;
|
|
40
|
+
readonly npmEndpoint: string;
|
|
41
|
+
readonly mavenEndpoint: string;
|
|
42
|
+
readonly nugetEndpoint: string;
|
|
43
|
+
readonly pypiEndpoint: string;
|
|
44
|
+
}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TestRepository = void 0;
|
|
4
|
+
const AWS = require("aws-sdk");
|
|
5
|
+
const aws_1 = require("../aws");
|
|
6
|
+
const COLLECT_BY_TAG = 'collect-by';
|
|
7
|
+
const REPO_LIFETIME_MS = 24 * 3600 * 1000; // One day
|
|
8
|
+
class TestRepository {
|
|
9
|
+
constructor(repositoryName) {
|
|
10
|
+
this.repositoryName = repositoryName;
|
|
11
|
+
this.npmUpstream = 'npm-upstream';
|
|
12
|
+
this.pypiUpstream = 'pypi-upstream';
|
|
13
|
+
this.nugetUpstream = 'nuget-upstream';
|
|
14
|
+
this.mavenUpstream = 'maven-upstream';
|
|
15
|
+
this.domain = TestRepository.DEFAULT_DOMAIN;
|
|
16
|
+
this.codeArtifact = new AWS.CodeArtifact();
|
|
17
|
+
}
|
|
18
|
+
static async newRandom() {
|
|
19
|
+
const qualifier = Math.random().toString(36).replace(/[^a-z0-9]+/g, '');
|
|
20
|
+
const repo = new TestRepository(`test-${qualifier}`);
|
|
21
|
+
await repo.prepare();
|
|
22
|
+
return repo;
|
|
23
|
+
}
|
|
24
|
+
static async newWithName(name) {
|
|
25
|
+
const repo = new TestRepository(name);
|
|
26
|
+
await repo.prepare();
|
|
27
|
+
return repo;
|
|
28
|
+
}
|
|
29
|
+
static existing(repositoryName) {
|
|
30
|
+
return new TestRepository(repositoryName);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Garbage collect repositories
|
|
34
|
+
*/
|
|
35
|
+
static async gc() {
|
|
36
|
+
if (!await TestRepository.existing('*dummy*').domainExists()) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const codeArtifact = new AWS.CodeArtifact();
|
|
40
|
+
let nextToken;
|
|
41
|
+
do {
|
|
42
|
+
const page = await codeArtifact.listRepositories({ nextToken }).promise();
|
|
43
|
+
for (const repo of page.repositories ?? []) {
|
|
44
|
+
const tags = await codeArtifact.listTagsForResource({ resourceArn: repo.arn }).promise();
|
|
45
|
+
const collectable = tags?.tags?.find(t => t.key === COLLECT_BY_TAG && Number(t.value) < Date.now());
|
|
46
|
+
if (collectable) {
|
|
47
|
+
// eslint-disable-next-line no-console
|
|
48
|
+
console.log('Deleting', repo.name);
|
|
49
|
+
await codeArtifact.deleteRepository({
|
|
50
|
+
domain: repo.domainName,
|
|
51
|
+
repository: repo.name,
|
|
52
|
+
}).promise();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
nextToken = page.nextToken;
|
|
56
|
+
} while (nextToken);
|
|
57
|
+
}
|
|
58
|
+
async prepare() {
|
|
59
|
+
await this.ensureDomain();
|
|
60
|
+
await this.ensureUpstreams();
|
|
61
|
+
await this.ensureRepository(this.repositoryName, {
|
|
62
|
+
description: 'Testing repository',
|
|
63
|
+
upstreams: [
|
|
64
|
+
this.npmUpstream,
|
|
65
|
+
this.pypiUpstream,
|
|
66
|
+
this.nugetUpstream,
|
|
67
|
+
this.mavenUpstream,
|
|
68
|
+
],
|
|
69
|
+
tags: {
|
|
70
|
+
[COLLECT_BY_TAG]: `${Date.now() + REPO_LIFETIME_MS}`,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async loginInformation() {
|
|
75
|
+
if (this._loginInformation) {
|
|
76
|
+
return this._loginInformation;
|
|
77
|
+
}
|
|
78
|
+
this._loginInformation = {
|
|
79
|
+
authToken: (await this.codeArtifact.getAuthorizationToken({ domain: this.domain, durationSeconds: 12 * 3600 }).promise()).authorizationToken,
|
|
80
|
+
repositoryName: this.repositoryName,
|
|
81
|
+
npmEndpoint: (await this.codeArtifact.getRepositoryEndpoint({ domain: this.domain, repository: this.repositoryName, format: 'npm' }).promise()).repositoryEndpoint,
|
|
82
|
+
mavenEndpoint: (await this.codeArtifact.getRepositoryEndpoint({ domain: this.domain, repository: this.repositoryName, format: 'maven' }).promise()).repositoryEndpoint,
|
|
83
|
+
nugetEndpoint: (await this.codeArtifact.getRepositoryEndpoint({ domain: this.domain, repository: this.repositoryName, format: 'nuget' }).promise()).repositoryEndpoint,
|
|
84
|
+
pypiEndpoint: (await this.codeArtifact.getRepositoryEndpoint({ domain: this.domain, repository: this.repositoryName, format: 'pypi' }).promise()).repositoryEndpoint,
|
|
85
|
+
};
|
|
86
|
+
return this._loginInformation;
|
|
87
|
+
}
|
|
88
|
+
async delete() {
|
|
89
|
+
try {
|
|
90
|
+
await this.codeArtifact.deleteRepository({
|
|
91
|
+
domain: this.domain,
|
|
92
|
+
repository: this.repositoryName,
|
|
93
|
+
}).promise();
|
|
94
|
+
// eslint-disable-next-line no-console
|
|
95
|
+
console.log('Deleted', this.repositoryName);
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
if (e.code !== 'ResourceNotFoundException') {
|
|
99
|
+
throw e;
|
|
100
|
+
}
|
|
101
|
+
// Okay
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* List all packages and mark them as "allow upstream versions".
|
|
106
|
+
*
|
|
107
|
+
* If we don't do this and we publish `foo@2.3.4-rc.0`, then we can't
|
|
108
|
+
* download `foo@2.3.0` anymore because by default CodeArtifact will
|
|
109
|
+
* block different versions from the same package.
|
|
110
|
+
*/
|
|
111
|
+
async markAllUpstreamAllow() {
|
|
112
|
+
for await (const pkg of this.listPackages({ upstream: 'BLOCK' })) {
|
|
113
|
+
await retryThrottled(() => this.codeArtifact.putPackageOriginConfiguration({
|
|
114
|
+
domain: this.domain,
|
|
115
|
+
repository: this.repositoryName,
|
|
116
|
+
format: pkg.format,
|
|
117
|
+
package: pkg.package,
|
|
118
|
+
namespace: pkg.namespace,
|
|
119
|
+
restrictions: {
|
|
120
|
+
publish: 'ALLOW',
|
|
121
|
+
upstream: 'ALLOW',
|
|
122
|
+
},
|
|
123
|
+
}).promise());
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async ensureDomain() {
|
|
127
|
+
if (await this.domainExists()) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
await this.codeArtifact.createDomain({
|
|
131
|
+
domain: this.domain,
|
|
132
|
+
tags: [{ key: 'testing', value: 'true' }],
|
|
133
|
+
}).promise();
|
|
134
|
+
}
|
|
135
|
+
async ensureUpstreams() {
|
|
136
|
+
await this.ensureRepository(this.npmUpstream, {
|
|
137
|
+
description: 'The upstream repository for NPM',
|
|
138
|
+
external: 'public:npmjs',
|
|
139
|
+
});
|
|
140
|
+
await this.ensureRepository(this.mavenUpstream, {
|
|
141
|
+
description: 'The upstream repository for Maven',
|
|
142
|
+
external: 'public:maven-central',
|
|
143
|
+
});
|
|
144
|
+
await this.ensureRepository(this.nugetUpstream, {
|
|
145
|
+
description: 'The upstream repository for NuGet',
|
|
146
|
+
external: 'public:nuget-org',
|
|
147
|
+
});
|
|
148
|
+
await this.ensureRepository(this.pypiUpstream, {
|
|
149
|
+
description: 'The upstream repository for PyPI',
|
|
150
|
+
external: 'public:pypi',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
async ensureRepository(name, options) {
|
|
154
|
+
if (await this.repositoryExists(name)) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
await this.codeArtifact.createRepository({
|
|
158
|
+
domain: this.domain,
|
|
159
|
+
repository: name,
|
|
160
|
+
description: options?.description,
|
|
161
|
+
upstreams: options?.upstreams?.map(repositoryName => ({ repositoryName })),
|
|
162
|
+
tags: options?.tags ? Object.entries(options.tags).map(([key, value]) => ({ key, value })) : undefined,
|
|
163
|
+
}).promise();
|
|
164
|
+
if (options?.external) {
|
|
165
|
+
const externalConnection = options.external;
|
|
166
|
+
await retry(() => this.codeArtifact.associateExternalConnection({
|
|
167
|
+
domain: this.domain,
|
|
168
|
+
repository: name,
|
|
169
|
+
externalConnection,
|
|
170
|
+
}).promise());
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
async domainExists() {
|
|
174
|
+
try {
|
|
175
|
+
await this.codeArtifact.describeDomain({ domain: this.domain }).promise();
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
if (e.code !== 'ResourceNotFoundException') {
|
|
180
|
+
throw e;
|
|
181
|
+
}
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async repositoryExists(name) {
|
|
186
|
+
try {
|
|
187
|
+
await this.codeArtifact.describeRepository({ domain: this.domain, repository: name }).promise();
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
if (e.code !== 'ResourceNotFoundException') {
|
|
192
|
+
throw e;
|
|
193
|
+
}
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async *listPackages(filter = {}) {
|
|
198
|
+
let response = await retryThrottled(() => this.codeArtifact.listPackages({
|
|
199
|
+
domain: this.domain,
|
|
200
|
+
repository: this.repositoryName,
|
|
201
|
+
...filter,
|
|
202
|
+
}).promise());
|
|
203
|
+
while (true) {
|
|
204
|
+
for (const p of response.packages ?? []) {
|
|
205
|
+
yield p;
|
|
206
|
+
}
|
|
207
|
+
if (!response.nextToken) {
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
response = await retryThrottled(() => this.codeArtifact.listPackages({
|
|
211
|
+
domain: this.domain,
|
|
212
|
+
repository: this.repositoryName,
|
|
213
|
+
...filter,
|
|
214
|
+
nextToken: response.nextToken,
|
|
215
|
+
}).promise());
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
exports.TestRepository = TestRepository;
|
|
220
|
+
TestRepository.DEFAULT_DOMAIN = 'test-cdk';
|
|
221
|
+
async function retry(block) {
|
|
222
|
+
let attempts = 3;
|
|
223
|
+
while (true) {
|
|
224
|
+
try {
|
|
225
|
+
return await block();
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
if (attempts-- === 0) {
|
|
229
|
+
throw e;
|
|
230
|
+
}
|
|
231
|
+
// eslint-disable-next-line no-console
|
|
232
|
+
console.debug(e.message);
|
|
233
|
+
await aws_1.sleep(500);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
async function retryThrottled(block) {
|
|
238
|
+
let time = 100;
|
|
239
|
+
let attempts = 15;
|
|
240
|
+
while (true) {
|
|
241
|
+
try {
|
|
242
|
+
return await block();
|
|
243
|
+
}
|
|
244
|
+
catch (e) {
|
|
245
|
+
// eslint-disable-next-line no-console
|
|
246
|
+
console.debug(e.message);
|
|
247
|
+
if (e.code !== 'ThrottlingException') {
|
|
248
|
+
throw e;
|
|
249
|
+
}
|
|
250
|
+
if (attempts-- === 0) {
|
|
251
|
+
throw e;
|
|
252
|
+
}
|
|
253
|
+
await aws_1.sleep(Math.floor(Math.random() * time));
|
|
254
|
+
time *= 2;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWFydGlmYWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29kZWFydGlmYWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixnQ0FBK0I7QUFFL0IsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVO0FBRXJELE1BQWEsY0FBYztJQThEekIsWUFBb0MsY0FBc0I7UUFBdEIsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFWMUMsZ0JBQVcsR0FBRyxjQUFjLENBQUM7UUFDN0IsaUJBQVksR0FBRyxlQUFlLENBQUM7UUFDL0Isa0JBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUNqQyxrQkFBYSxHQUFHLGdCQUFnQixDQUFDO1FBQ2pDLFdBQU0sR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFDO1FBRXRDLGlCQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFLdkQsQ0FBQztJQTVETSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVM7UUFDM0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXhFLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLFFBQVEsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFZO1FBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLE9BQU8s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LEVBQUUsQ0FBQztTQUN0QjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQUUsTUFBTSxDQUFDLENBQUM7YUFBRTtZQUNsQyxzQ0FBc0M7WUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekIsTUFBTSxXQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEI7S0FDRjtBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsY0FBYyxDQUFJLEtBQXVCO0lBQ3RELElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNsQixPQUFPLElBQUksRUFBRTtRQUNYLElBQUk7WUFDRixPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUM7U0FDdEI7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUU7Z0JBQUUsTUFBTSxDQUFDLENBQUM7YUFBRTtZQUNsRCxJQUFJLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFBRSxNQUFNLENBQUMsQ0FBQzthQUFFO1lBQ2xDLE1BQU0sV0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxJQUFJLENBQUMsQ0FBQztTQUNYO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgc2xlZXAgfSBmcm9tICcuLi9hd3MnO1xuXG5jb25zdCBDT0xMRUNUX0JZX1RBRyA9ICdjb2xsZWN0LWJ5JztcbmNvbnN0IFJFUE9fTElGRVRJTUVfTVMgPSAyNCAqIDM2MDAgKiAxMDAwOyAvLyBPbmUgZGF5XG5cbmV4cG9ydCBjbGFzcyBUZXN0UmVwb3NpdG9yeSB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9ET01BSU4gPSAndGVzdC1jZGsnO1xuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbmV3UmFuZG9tKCkge1xuICAgIGNvbnN0IHF1YWxpZmllciA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnJlcGxhY2UoL1teYS16MC05XSsvZywgJycpO1xuXG4gICAgY29uc3QgcmVwbyA9IG5ldyBUZXN0UmVwb3NpdG9yeShgdGVzdC0ke3F1YWxpZmllcn1gKTtcbiAgICBhd2FpdCByZXBvLnByZXBhcmUoKTtcbiAgICByZXR1cm4gcmVwbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbmV3V2l0aE5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVwbyA9IG5ldyBUZXN0UmVwb3NpdG9yeShuYW1lKTtcbiAgICBhd2FpdCByZXBvLnByZXBhcmUoKTtcbiAgICByZXR1cm4gcmVwbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZXhpc3RpbmcocmVwb3NpdG9yeU5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgVGVzdFJlcG9zaXRvcnkocmVwb3NpdG9yeU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdhcmJhZ2UgY29sbGVjdCByZXBvc2l0b3JpZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZ2MoKSB7XG4gICAgaWYgKCFhd2FpdCBUZXN0UmVwb3NpdG9yeS5leGlzdGluZygnKmR1bW15KicpLmRvbWFpbkV4aXN0cygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29kZUFydGlmYWN0ID0gbmV3IEFXUy5Db2RlQXJ0aWZhY3QoKTtcblxuICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBkbyB7XG4gICAgICBjb25zdCBwYWdlID0gYXdhaXQgY29kZUFydGlmYWN0Lmxpc3RSZXBvc2l0b3JpZXMoeyBuZXh0VG9rZW4gfSkucHJvbWlzZSgpO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlcG8gb2YgcGFnZS5yZXBvc2l0b3JpZXMgPz8gW10pIHtcbiAgICAgICAgY29uc3QgdGFncyA9IGF3YWl0IGNvZGVBcnRpZmFjdC5saXN0VGFnc0ZvclJlc291cmNlKHsgcmVzb3VyY2VBcm46IHJlcG8uYXJuISB9KS5wcm9taXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbGxlY3RhYmxlID0gdGFncz8udGFncz8uZmluZCh0ID0+IHQua2V5ID09PSBDT0xMRUNUX0JZX1RBRyAmJiBOdW1iZXIodC52YWx1ZSkgPCBEYXRlLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbGxlY3RhYmxlKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLmxvZygnRGVsZXRpbmcnLCByZXBvLm5hbWUpO1xuICAgICAgICAgIGF3YWl0IGNvZGVBcnRpZmFjdC5kZWxldGVSZXBvc2l0b3J5KHtcbiAgICAgICAgICAgIGRvbWFpbjogcmVwby5kb21haW5OYW1lISxcbiAgICAgICAgICAgIHJlcG9zaXRvcnk6IHJlcG8ubmFtZSEsXG4gICAgICAgICAgfSkucHJvbWlzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHRUb2tlbiA9IHBhZ2UubmV4dFRva2VuO1xuICAgIH0gd2hpbGUgKG5leHRUb2tlbik7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgbnBtVXBzdHJlYW0gPSAnbnBtLXVwc3RyZWFtJztcbiAgcHVibGljIHJlYWRvbmx5IHB5cGlVcHN0cmVhbSA9ICdweXBpLXVwc3RyZWFtJztcbiAgcHVibGljIHJlYWRvbmx5IG51Z2V0VXBzdHJlYW0gPSAnbnVnZXQtdXBzdHJlYW0nO1xuICBwdWJsaWMgcmVhZG9ubHkgbWF2ZW5VcHN0cmVhbSA9ICdtYXZlbi11cHN0cmVhbSc7XG4gIHB1YmxpYyByZWFkb25seSBkb21haW4gPSBUZXN0UmVwb3NpdG9yeS5ERUZBVUxUX0RPTUFJTjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVBcnRpZmFjdCA9IG5ldyBBV1MuQ29kZUFydGlmYWN0KCk7XG5cbiAgcHJpdmF0ZSBfbG9naW5JbmZvcm1hdGlvbjogTG9naW5JbmZvcm1hdGlvbiB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSByZXBvc2l0b3J5TmFtZTogc3RyaW5nKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZSgpIHtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZURvbWFpbigpO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlVXBzdHJlYW1zKCk7XG5cbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlcG9zaXRvcnkodGhpcy5yZXBvc2l0b3J5TmFtZSwge1xuICAgICAgZGVzY3JpcHRpb246ICdUZXN0aW5nIHJlcG9zaXRvcnknLFxuICAgICAgdXBzdHJlYW1zOiBbXG4gICAgICAgIHRoaXMubnBtVXBzdHJlYW0sXG4gICAgICAgIHRoaXMucHlwaVVwc3RyZWFtLFxuICAgICAgICB0aGlzLm51Z2V0VXBzdHJlYW0sXG4gICAgICAgIHRoaXMubWF2ZW5VcHN0cmVhbSxcbiAgICAgIF0sXG4gICAgICB0YWdzOiB7XG4gICAgICAgIFtDT0xMRUNUX0JZX1RBR106IGAke0RhdGUubm93KCkgKyBSRVBPX0xJRkVUSU1FX01TfWAsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luSW5mb3JtYXRpb24oKTogUHJvbWlzZTxMb2dpbkluZm9ybWF0aW9uPiB7XG4gICAgaWYgKHRoaXMuX2xvZ2luSW5mb3JtYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLl9sb2dpbkluZm9ybWF0aW9uO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2luSW5mb3JtYXRpb24gPSB7XG4gICAgICBhdXRoVG9rZW46IChhd2FpdCB0aGlzLmNvZGVBcnRpZmFjdC5nZXRBdXRob3JpemF0aW9uVG9rZW4oeyBkb21haW46IHRoaXMuZG9tYWluLCBkdXJhdGlvblNlY29uZHM6IDEyICogMzYwMCB9KS5wcm9taXNlKCkpLmF1dGhvcml6YXRpb25Ub2tlbiEsXG4gICAgICByZXBvc2l0b3J5TmFtZTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgIG5wbUVuZHBvaW50OiAoYXdhaXQgdGhpcy5jb2RlQXJ0aWZhY3QuZ2V0UmVwb3NpdG9yeUVuZHBvaW50KHsgZG9tYWluOiB0aGlzLmRvbWFpbiwgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSwgZm9ybWF0OiAnbnBtJyB9KS5wcm9taXNlKCkpLnJlcG9zaXRvcnlFbmRwb2ludCEsXG4gICAgICBtYXZlbkVuZHBvaW50OiAoYXdhaXQgdGhpcy5jb2RlQXJ0aWZhY3QuZ2V0UmVwb3NpdG9yeUVuZHBvaW50KHsgZG9tYWluOiB0aGlzLmRvbWFpbiwgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSwgZm9ybWF0OiAnbWF2ZW4nIH0pLnByb21pc2UoKSkucmVwb3NpdG9yeUVuZHBvaW50ISxcbiAgICAgIG51Z2V0RW5kcG9pbnQ6IChhd2FpdCB0aGlzLmNvZGVBcnRpZmFjdC5nZXRSZXBvc2l0b3J5RW5kcG9pbnQoeyBkb21haW46IHRoaXMuZG9tYWluLCByZXBvc2l0b3J5OiB0aGlzLnJlcG9zaXRvcnlOYW1lLCBmb3JtYXQ6ICdudWdldCcgfSkucHJvbWlzZSgpKS5yZXBvc2l0b3J5RW5kcG9pbnQhLFxuICAgICAgcHlwaUVuZHBvaW50OiAoYXdhaXQgdGhpcy5jb2RlQXJ0aWZhY3QuZ2V0UmVwb3NpdG9yeUVuZHBvaW50KHsgZG9tYWluOiB0aGlzLmRvbWFpbiwgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSwgZm9ybWF0OiAncHlwaScgfSkucHJvbWlzZSgpKS5yZXBvc2l0b3J5RW5kcG9pbnQhLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuX2xvZ2luSW5mb3JtYXRpb247XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvZGVBcnRpZmFjdC5kZWxldGVSZXBvc2l0b3J5KHtcbiAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgICAgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgIH0pLnByb21pc2UoKTtcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCdEZWxldGVkJywgdGhpcy5yZXBvc2l0b3J5TmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSAhPT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7IHRocm93IGU7IH1cbiAgICAgIC8vIE9rYXlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBhbGwgcGFja2FnZXMgYW5kIG1hcmsgdGhlbSBhcyBcImFsbG93IHVwc3RyZWFtIHZlcnNpb25zXCIuXG4gICAqXG4gICAqIElmIHdlIGRvbid0IGRvIHRoaXMgYW5kIHdlIHB1Ymxpc2ggYGZvb0AyLjMuNC1yYy4wYCwgdGhlbiB3ZSBjYW4ndFxuICAgKiBkb3dubG9hZCBgZm9vQDIuMy4wYCBhbnltb3JlIGJlY2F1c2UgYnkgZGVmYXVsdCBDb2RlQXJ0aWZhY3Qgd2lsbFxuICAgKiBibG9jayBkaWZmZXJlbnQgdmVyc2lvbnMgZnJvbSB0aGUgc2FtZSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1hcmtBbGxVcHN0cmVhbUFsbG93KCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgcGtnIG9mIHRoaXMubGlzdFBhY2thZ2VzKHsgdXBzdHJlYW06ICdCTE9DSycgfSkpIHtcbiAgICAgIGF3YWl0IHJldHJ5VGhyb3R0bGVkKCgpID0+IHRoaXMuY29kZUFydGlmYWN0LnB1dFBhY2thZ2VPcmlnaW5Db25maWd1cmF0aW9uKHtcbiAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgICAgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcblxuICAgICAgICBmb3JtYXQ6IHBrZy5mb3JtYXQhLFxuICAgICAgICBwYWNrYWdlOiBwa2cucGFja2FnZSEsXG4gICAgICAgIG5hbWVzcGFjZTogcGtnLm5hbWVzcGFjZSEsXG4gICAgICAgIHJlc3RyaWN0aW9uczoge1xuICAgICAgICAgIHB1Ymxpc2g6ICdBTExPVycsXG4gICAgICAgICAgdXBzdHJlYW06ICdBTExPVycsXG4gICAgICAgIH0sXG4gICAgICB9KS5wcm9taXNlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlRG9tYWluKCkge1xuICAgIGlmIChhd2FpdCB0aGlzLmRvbWFpbkV4aXN0cygpKSB7IHJldHVybjsgfVxuICAgIGF3YWl0IHRoaXMuY29kZUFydGlmYWN0LmNyZWF0ZURvbWFpbih7XG4gICAgICBkb21haW46IHRoaXMuZG9tYWluLFxuICAgICAgdGFnczogW3sga2V5OiAndGVzdGluZycsIHZhbHVlOiAndHJ1ZScgfV0sXG4gICAgfSkucHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVVcHN0cmVhbXMoKSB7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZXBvc2l0b3J5KHRoaXMubnBtVXBzdHJlYW0sIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkgZm9yIE5QTScsXG4gICAgICBleHRlcm5hbDogJ3B1YmxpYzpucG1qcycsXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZXBvc2l0b3J5KHRoaXMubWF2ZW5VcHN0cmVhbSwge1xuICAgICAgZGVzY3JpcHRpb246ICdUaGUgdXBzdHJlYW0gcmVwb3NpdG9yeSBmb3IgTWF2ZW4nLFxuICAgICAgZXh0ZXJuYWw6ICdwdWJsaWM6bWF2ZW4tY2VudHJhbCcsXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVSZXBvc2l0b3J5KHRoaXMubnVnZXRVcHN0cmVhbSwge1xuICAgICAgZGVzY3JpcHRpb246ICdUaGUgdXBzdHJlYW0gcmVwb3NpdG9yeSBmb3IgTnVHZXQnLFxuICAgICAgZXh0ZXJuYWw6ICdwdWJsaWM6bnVnZXQtb3JnJyxcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLmVuc3VyZVJlcG9zaXRvcnkodGhpcy5weXBpVXBzdHJlYW0sIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkgZm9yIFB5UEknLFxuICAgICAgZXh0ZXJuYWw6ICdwdWJsaWM6cHlwaScsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVJlcG9zaXRvcnkobmFtZTogc3RyaW5nLCBvcHRpb25zPzoge1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nLFxuICAgIHJlYWRvbmx5IGV4dGVybmFsPzogc3RyaW5nLFxuICAgIHJlYWRvbmx5IHVwc3RyZWFtcz86IHN0cmluZ1tdLFxuICAgIHJlYWRvbmx5IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICB9KSB7XG4gICAgaWYgKGF3YWl0IHRoaXMucmVwb3NpdG9yeUV4aXN0cyhuYW1lKSkgeyByZXR1cm47IH1cblxuICAgIGF3YWl0IHRoaXMuY29kZUFydGlmYWN0LmNyZWF0ZVJlcG9zaXRvcnkoe1xuICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgIHJlcG9zaXRvcnk6IG5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucz8uZGVzY3JpcHRpb24sXG4gICAgICB1cHN0cmVhbXM6IG9wdGlvbnM/LnVwc3RyZWFtcz8ubWFwKHJlcG9zaXRvcnlOYW1lID0+ICh7IHJlcG9zaXRvcnlOYW1lIH0pKSxcbiAgICAgIHRhZ3M6IG9wdGlvbnM/LnRhZ3MgPyBPYmplY3QuZW50cmllcyhvcHRpb25zLnRhZ3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKSA6IHVuZGVmaW5lZCxcbiAgICB9KS5wcm9taXNlKCk7XG5cbiAgICBpZiAob3B0aW9ucz8uZXh0ZXJuYWwpIHtcbiAgICAgIGNvbnN0IGV4dGVybmFsQ29ubmVjdGlvbiA9IG9wdGlvbnMuZXh0ZXJuYWw7XG4gICAgICBhd2FpdCByZXRyeSgoKSA9PiB0aGlzLmNvZGVBcnRpZmFjdC5hc3NvY2lhdGVFeHRlcm5hbENvbm5lY3Rpb24oe1xuICAgICAgICBkb21haW46IHRoaXMuZG9tYWluLFxuICAgICAgICByZXBvc2l0b3J5OiBuYW1lLFxuICAgICAgICBleHRlcm5hbENvbm5lY3Rpb24sXG4gICAgICB9KS5wcm9taXNlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9tYWluRXhpc3RzKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvZGVBcnRpZmFjdC5kZXNjcmliZURvbWFpbih7IGRvbWFpbjogdGhpcy5kb21haW4gfSkucHJvbWlzZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSAhPT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7IHRocm93IGU7IH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlcG9zaXRvcnlFeGlzdHMobmFtZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29kZUFydGlmYWN0LmRlc2NyaWJlUmVwb3NpdG9yeSh7IGRvbWFpbjogdGhpcy5kb21haW4sIHJlcG9zaXRvcnk6IG5hbWUgfSkucHJvbWlzZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUuY29kZSAhPT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7IHRocm93IGU7IH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jKiBsaXN0UGFja2FnZXMoZmlsdGVyOiBQaWNrPEFXUy5Db2RlQXJ0aWZhY3QuTGlzdFBhY2thZ2VzUmVxdWVzdCwgJ3Vwc3RyZWFtJ3wncHVibGlzaCd8J2Zvcm1hdCc+ID0ge30pIHtcbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCByZXRyeVRocm90dGxlZCgoKSA9PiB0aGlzLmNvZGVBcnRpZmFjdC5saXN0UGFja2FnZXMoe1xuICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgIHJlcG9zaXRvcnk6IHRoaXMucmVwb3NpdG9yeU5hbWUsXG4gICAgICAuLi5maWx0ZXIsXG4gICAgfSkucHJvbWlzZSgpKTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBmb3IgKGNvbnN0IHAgb2YgcmVzcG9uc2UucGFja2FnZXMgPz8gW10pIHtcbiAgICAgICAgeWllbGQgcDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXNwb25zZS5uZXh0VG9rZW4pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgcmV0cnlUaHJvdHRsZWQoKCkgPT4gdGhpcy5jb2RlQXJ0aWZhY3QubGlzdFBhY2thZ2VzKHtcbiAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgICAgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICBuZXh0VG9rZW46IHJlc3BvbnNlLm5leHRUb2tlbixcbiAgICAgIH0pLnByb21pc2UoKSk7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJ5PEE+KGJsb2NrOiAoKSA9PiBQcm9taXNlPEE+KSB7XG4gIGxldCBhdHRlbXB0cyA9IDM7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBibG9jaygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChhdHRlbXB0cy0tID09PSAwKSB7IHRocm93IGU7IH1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICBhd2FpdCBzbGVlcCg1MDApO1xuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXRyeVRocm90dGxlZDxBPihibG9jazogKCkgPT4gUHJvbWlzZTxBPikge1xuICBsZXQgdGltZSA9IDEwMDtcbiAgbGV0IGF0dGVtcHRzID0gMTU7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBibG9jaygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmRlYnVnKGUubWVzc2FnZSk7XG4gICAgICBpZiAoZS5jb2RlICE9PSAnVGhyb3R0bGluZ0V4Y2VwdGlvbicpIHsgdGhyb3cgZTsgfVxuICAgICAgaWYgKGF0dGVtcHRzLS0gPT09IDApIHsgdGhyb3cgZTsgfVxuICAgICAgYXdhaXQgc2xlZXAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGltZSkpO1xuICAgICAgdGltZSAqPSAyO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luSW5mb3JtYXRpb24ge1xuICByZWFkb25seSBhdXRoVG9rZW46IHN0cmluZztcbiAgcmVhZG9ubHkgcmVwb3NpdG9yeU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbnBtRW5kcG9pbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbWF2ZW5FbmRwb2ludDogc3RyaW5nO1xuICByZWFkb25seSBudWdldEVuZHBvaW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHB5cGlFbmRwb2ludDogc3RyaW5nO1xufSJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { LoginInformation } from './codeartifact';
|
|
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,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeMavenSettingsFile = exports.uploadJavaPackages = exports.mavenLogin = void 0;
|
|
4
|
+
/* eslint-disable no-console */
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const files_1 = require("../files");
|
|
7
|
+
const shell_1 = require("../shell");
|
|
8
|
+
const parallel_shell_1 = require("./parallel-shell");
|
|
9
|
+
// Do not try to JIT the Maven binary
|
|
10
|
+
const NO_JIT = '-XX:+TieredCompilation -XX:TieredStopAtLevel=1';
|
|
11
|
+
async function mavenLogin(login, usageDir) {
|
|
12
|
+
await writeMavenSettingsFile(settingsFile(usageDir), login);
|
|
13
|
+
// Write env var
|
|
14
|
+
// Twiddle JVM settings a bit to make Maven survive running on a CodeBuild box.
|
|
15
|
+
await usageDir.addToEnv({
|
|
16
|
+
MAVEN_OPTS: `-Duser.home=${usageDir.directory} ${NO_JIT} ${process.env.MAVEN_OPTS ?? ''}`.trim(),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
exports.mavenLogin = mavenLogin;
|
|
20
|
+
function settingsFile(usageDir) {
|
|
21
|
+
// If we configure usageDir as a fake home directory Maven will find this file.
|
|
22
|
+
// (No other way to configure the settings file as part of the environment).
|
|
23
|
+
return path.join(usageDir.directory, '.m2', 'settings.xml');
|
|
24
|
+
}
|
|
25
|
+
async function uploadJavaPackages(packages, login, usageDir) {
|
|
26
|
+
await parallel_shell_1.parallelShell(packages, async (pkg, output) => {
|
|
27
|
+
console.log(`⏳ ${pkg}`);
|
|
28
|
+
await shell_1.shell(['mvn',
|
|
29
|
+
`--settings=${settingsFile(usageDir)}`,
|
|
30
|
+
'org.apache.maven.plugins:maven-deploy-plugin:3.0.0:deploy-file',
|
|
31
|
+
`-Durl=${login.mavenEndpoint}`,
|
|
32
|
+
'-DrepositoryId=codeartifact',
|
|
33
|
+
`-DpomFile=${pkg}`,
|
|
34
|
+
`-Dfile=${pkg.replace(/.pom$/, '.jar')}`,
|
|
35
|
+
`-Dsources=${pkg.replace(/.pom$/, '-sources.jar')}`,
|
|
36
|
+
`-Djavadoc=${pkg.replace(/.pom$/, '-javadoc.jar')}`], {
|
|
37
|
+
output,
|
|
38
|
+
modEnv: {
|
|
39
|
+
// Do not try to JIT the Maven binary
|
|
40
|
+
MAVEN_OPTS: `${NO_JIT} ${process.env.MAVEN_OPTS ?? ''}`.trim(),
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
console.log(`✅ ${pkg}`);
|
|
44
|
+
}, (pkg, output) => {
|
|
45
|
+
if (output.toString().includes('409 Conflict')) {
|
|
46
|
+
console.log(`❌ ${pkg}: already exists. Skipped.`);
|
|
47
|
+
return 'skip';
|
|
48
|
+
}
|
|
49
|
+
return 'fail';
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
exports.uploadJavaPackages = uploadJavaPackages;
|
|
53
|
+
async function writeMavenSettingsFile(filename, login) {
|
|
54
|
+
await files_1.writeFile(filename, `<?xml version="1.0" encoding="UTF-8" ?>
|
|
55
|
+
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
|
|
56
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
57
|
+
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
|
|
58
|
+
http://maven.apache.org/xsd/settings-1.0.0.xsd">
|
|
59
|
+
<servers>
|
|
60
|
+
<server>
|
|
61
|
+
<id>codeartifact</id>
|
|
62
|
+
<username>aws</username>
|
|
63
|
+
<password>${login.authToken}</password>
|
|
64
|
+
</server>
|
|
65
|
+
</servers>
|
|
66
|
+
<profiles>
|
|
67
|
+
<profile>
|
|
68
|
+
<id>default</id>
|
|
69
|
+
<repositories>
|
|
70
|
+
<repository>
|
|
71
|
+
<id>codeartifact</id>
|
|
72
|
+
<url>${login.mavenEndpoint}</url>
|
|
73
|
+
</repository>
|
|
74
|
+
</repositories>
|
|
75
|
+
</profile>
|
|
76
|
+
</profiles>
|
|
77
|
+
<activeProfiles>
|
|
78
|
+
<activeProfile>default</activeProfile>
|
|
79
|
+
</activeProfiles>
|
|
80
|
+
</settings>`);
|
|
81
|
+
}
|
|
82
|
+
exports.writeMavenSettingsFile = writeMavenSettingsFile;
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF2ZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYXZlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsNkJBQTZCO0FBQzdCLG9DQUFxQztBQUNyQyxvQ0FBaUM7QUFFakMscURBQWlEO0FBR2pELHFDQUFxQztBQUNyQyxNQUFNLE1BQU0sR0FBRyxnREFBZ0QsQ0FBQztBQUV6RCxLQUFLLFVBQVUsVUFBVSxDQUFDLEtBQXVCLEVBQUUsUUFBa0I7SUFDMUUsTUFBTSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFNUQsZ0JBQWdCO0lBQ2hCLCtFQUErRTtJQUMvRSxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDdEIsVUFBVSxFQUFFLGVBQWUsUUFBUSxDQUFDLFNBQVMsSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFO0tBQ2pHLENBQUMsQ0FBQztBQUNMLENBQUM7QUFSRCxnQ0FRQztBQUVELFNBQVMsWUFBWSxDQUFDLFFBQWtCO0lBQ3RDLCtFQUErRTtJQUMvRSw0RUFBNEU7SUFDNUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzlELENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsUUFBa0IsRUFBRSxLQUF1QixFQUFFLFFBQWtCO0lBQ3RHLE1BQU0sOEJBQWEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztRQUV4QixNQUFNLGFBQUssQ0FBQyxDQUFDLEtBQUs7WUFDaEIsY0FBYyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEMsZ0VBQWdFO1lBQ2hFLFNBQVMsS0FBSyxDQUFDLGFBQWEsRUFBRTtZQUM5Qiw2QkFBNkI7WUFDN0IsYUFBYSxHQUFHLEVBQUU7WUFDbEIsVUFBVSxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsRUFBRTtZQUN4QyxhQUFhLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxFQUFFO1lBQ25ELGFBQWEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3RELE1BQU07WUFDTixNQUFNLEVBQUU7Z0JBQ04scUNBQXFDO2dCQUNyQyxVQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFO2FBQy9EO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ2QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLDRCQUE0QixDQUFDLENBQUM7WUFDbEQsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQTdCRCxnREE2QkM7QUFFTSxLQUFLLFVBQVUsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxLQUF1QjtJQUNwRixNQUFNLGlCQUFTLENBQUMsUUFBUSxFQUFFOzs7Ozs7Ozs7b0JBU1IsS0FBSyxDQUFDLFNBQVM7Ozs7Ozs7OzttQkFTaEIsS0FBSyxDQUFDLGFBQWE7Ozs7Ozs7O2NBUXhCLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBNUJELHdEQTRCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3cml0ZUZpbGUgfSBmcm9tICcuLi9maWxlcyc7XG5pbXBvcnQgeyBzaGVsbCB9IGZyb20gJy4uL3NoZWxsJztcbmltcG9ydCB7IExvZ2luSW5mb3JtYXRpb24gfSBmcm9tICcuL2NvZGVhcnRpZmFjdCc7XG5pbXBvcnQgeyBwYXJhbGxlbFNoZWxsIH0gZnJvbSAnLi9wYXJhbGxlbC1zaGVsbCc7XG5pbXBvcnQgeyBVc2FnZURpciB9IGZyb20gJy4vdXNhZ2UtZGlyJztcblxuLy8gRG8gbm90IHRyeSB0byBKSVQgdGhlIE1hdmVuIGJpbmFyeVxuY29uc3QgTk9fSklUID0gJy1YWDorVGllcmVkQ29tcGlsYXRpb24gLVhYOlRpZXJlZFN0b3BBdExldmVsPTEnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWF2ZW5Mb2dpbihsb2dpbjogTG9naW5JbmZvcm1hdGlvbiwgdXNhZ2VEaXI6IFVzYWdlRGlyKSB7XG4gIGF3YWl0IHdyaXRlTWF2ZW5TZXR0aW5nc0ZpbGUoc2V0dGluZ3NGaWxlKHVzYWdlRGlyKSwgbG9naW4pO1xuXG4gIC8vIFdyaXRlIGVudiB2YXJcbiAgLy8gVHdpZGRsZSBKVk0gc2V0dGluZ3MgYSBiaXQgdG8gbWFrZSBNYXZlbiBzdXJ2aXZlIHJ1bm5pbmcgb24gYSBDb2RlQnVpbGQgYm94LlxuICBhd2FpdCB1c2FnZURpci5hZGRUb0Vudih7XG4gICAgTUFWRU5fT1BUUzogYC1EdXNlci5ob21lPSR7dXNhZ2VEaXIuZGlyZWN0b3J5fSAke05PX0pJVH0gJHtwcm9jZXNzLmVudi5NQVZFTl9PUFRTID8/ICcnfWAudHJpbSgpLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0dGluZ3NGaWxlKHVzYWdlRGlyOiBVc2FnZURpcikge1xuICAvLyBJZiB3ZSBjb25maWd1cmUgdXNhZ2VEaXIgYXMgYSBmYWtlIGhvbWUgZGlyZWN0b3J5IE1hdmVuIHdpbGwgZmluZCB0aGlzIGZpbGUuXG4gIC8vIChObyBvdGhlciB3YXkgdG8gY29uZmlndXJlIHRoZSBzZXR0aW5ncyBmaWxlIGFzIHBhcnQgb2YgdGhlIGVudmlyb25tZW50KS5cbiAgcmV0dXJuIHBhdGguam9pbih1c2FnZURpci5kaXJlY3RvcnksICcubTInLCAnc2V0dGluZ3MueG1sJyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGxvYWRKYXZhUGFja2FnZXMocGFja2FnZXM6IHN0cmluZ1tdLCBsb2dpbjogTG9naW5JbmZvcm1hdGlvbiwgdXNhZ2VEaXI6IFVzYWdlRGlyKSB7XG4gIGF3YWl0IHBhcmFsbGVsU2hlbGwocGFja2FnZXMsIGFzeW5jIChwa2csIG91dHB1dCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGDij7MgJHtwa2d9YCk7XG5cbiAgICBhd2FpdCBzaGVsbChbJ212bicsXG4gICAgICBgLS1zZXR0aW5ncz0ke3NldHRpbmdzRmlsZSh1c2FnZURpcil9YCxcbiAgICAgICdvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM6bWF2ZW4tZGVwbG95LXBsdWdpbjozLjAuMDpkZXBsb3ktZmlsZScsXG4gICAgICBgLUR1cmw9JHtsb2dpbi5tYXZlbkVuZHBvaW50fWAsXG4gICAgICAnLURyZXBvc2l0b3J5SWQ9Y29kZWFydGlmYWN0JyxcbiAgICAgIGAtRHBvbUZpbGU9JHtwa2d9YCxcbiAgICAgIGAtRGZpbGU9JHtwa2cucmVwbGFjZSgvLnBvbSQvLCAnLmphcicpfWAsXG4gICAgICBgLURzb3VyY2VzPSR7cGtnLnJlcGxhY2UoLy5wb20kLywgJy1zb3VyY2VzLmphcicpfWAsXG4gICAgICBgLURqYXZhZG9jPSR7cGtnLnJlcGxhY2UoLy5wb20kLywgJy1qYXZhZG9jLmphcicpfWBdLCB7XG4gICAgICBvdXRwdXQsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgLy8gRG8gbm90IHRyeSB0byBKSVQgdGhlIE1hdmVuIGJpbmFyeVxuICAgICAgICBNQVZFTl9PUFRTOiBgJHtOT19KSVR9ICR7cHJvY2Vzcy5lbnYuTUFWRU5fT1BUUyA/PyAnJ31gLnRyaW0oKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhg4pyFICR7cGtnfWApO1xuICB9LFxuICAocGtnLCBvdXRwdXQpID0+IHtcbiAgICBpZiAob3V0cHV0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzQwOSBDb25mbGljdCcpKSB7XG4gICAgICBjb25zb2xlLmxvZyhg4p2MICR7cGtnfTogYWxyZWFkeSBleGlzdHMuIFNraXBwZWQuYCk7XG4gICAgICByZXR1cm4gJ3NraXAnO1xuICAgIH1cbiAgICByZXR1cm4gJ2ZhaWwnO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlTWF2ZW5TZXR0aW5nc0ZpbGUoZmlsZW5hbWU6IHN0cmluZywgbG9naW46IExvZ2luSW5mb3JtYXRpb24pIHtcbiAgYXdhaXQgd3JpdGVGaWxlKGZpbGVuYW1lLCBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIiA/PlxuICA8c2V0dGluZ3MgeG1sbnM9XCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9TRVRUSU5HUy8xLjAuMFwiXG4gICAgICAgICAgICB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiXG4gICAgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249XCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9TRVRUSU5HUy8xLjAuMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2Qvc2V0dGluZ3MtMS4wLjAueHNkXCI+XG4gICAgPHNlcnZlcnM+XG4gICAgICA8c2VydmVyPlxuICAgICAgICA8aWQ+Y29kZWFydGlmYWN0PC9pZD5cbiAgICAgICAgPHVzZXJuYW1lPmF3czwvdXNlcm5hbWU+XG4gICAgICAgIDxwYXNzd29yZD4ke2xvZ2luLmF1dGhUb2tlbn08L3Bhc3N3b3JkPlxuICAgICAgPC9zZXJ2ZXI+XG4gICAgPC9zZXJ2ZXJzPlxuICAgIDxwcm9maWxlcz5cbiAgICAgIDxwcm9maWxlPlxuICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+XG4gICAgICAgIDxyZXBvc2l0b3JpZXM+XG4gICAgICAgICAgPHJlcG9zaXRvcnk+XG4gICAgICAgICAgICA8aWQ+Y29kZWFydGlmYWN0PC9pZD5cbiAgICAgICAgICAgIDx1cmw+JHtsb2dpbi5tYXZlbkVuZHBvaW50fTwvdXJsPlxuICAgICAgICAgIDwvcmVwb3NpdG9yeT5cbiAgICAgICAgPC9yZXBvc2l0b3JpZXM+XG4gICAgICA8L3Byb2ZpbGU+XG4gICAgPC9wcm9maWxlcz5cbiAgICA8YWN0aXZlUHJvZmlsZXM+XG4gICAgICA8YWN0aXZlUHJvZmlsZT5kZWZhdWx0PC9hY3RpdmVQcm9maWxlPlxuICAgIDwvYWN0aXZlUHJvZmlsZXM+XG4gIDwvc2V0dGluZ3M+YCk7XG59XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { LoginInformation } from './codeartifact';
|
|
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>;
|