@aws-cdk-testing/cli-integ 2.173.3 → 3.0.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/.eslintrc.js +9 -0
- package/LICENSE +2 -1
- package/bin/query-github.js +3 -3
- package/bin/query-github.ts +56 -0
- package/bin/run-suite.js +3 -3
- package/bin/run-suite.ts +140 -0
- package/bin/stage-distribution.js +3 -2
- package/bin/stage-distribution.ts +267 -0
- package/bin/test-root.ts +3 -0
- package/lib/aws.js +9 -6
- package/lib/aws.ts +263 -0
- package/lib/corking.ts +33 -0
- package/lib/eventually.js +3 -3
- package/lib/eventually.ts +42 -0
- package/lib/files.js +3 -2
- package/lib/files.ts +80 -0
- package/lib/github.js +6 -5
- package/lib/github.ts +43 -0
- package/lib/index.ts +13 -0
- package/lib/integ-test.ts +81 -0
- package/lib/lists.ts +9 -0
- package/lib/memoize.ts +14 -0
- package/lib/npm.ts +41 -0
- package/lib/package-sources/release-source.js +3 -2
- package/lib/package-sources/release-source.ts +81 -0
- package/lib/package-sources/repo-source.ts +111 -0
- package/lib/package-sources/repo-tools/npm.js +5 -4
- package/lib/package-sources/repo-tools/npm.ts +48 -0
- package/lib/package-sources/source.ts +35 -0
- package/lib/package-sources/subprocess.ts +15 -0
- package/lib/resource-pool.js +2 -2
- package/lib/resource-pool.ts +140 -0
- package/lib/resources.ts +4 -0
- package/lib/shell.js +8 -5
- package/lib/shell.ts +168 -0
- package/lib/staging/codeartifact.js +11 -8
- package/lib/staging/codeartifact.ts +387 -0
- package/lib/staging/maven.js +5 -3
- package/lib/staging/maven.ts +95 -0
- package/lib/staging/npm.ts +62 -0
- package/lib/staging/nuget.ts +75 -0
- package/lib/staging/parallel-shell.js +2 -2
- package/lib/staging/parallel-shell.ts +51 -0
- package/lib/staging/pypi.ts +50 -0
- package/lib/staging/usage-dir.ts +99 -0
- package/lib/with-aws.js +3 -2
- package/lib/with-aws.ts +67 -0
- package/lib/with-cdk-app.js +23 -14
- package/lib/with-cdk-app.ts +742 -0
- package/lib/with-cli-lib.ts +134 -0
- package/lib/with-packages.ts +15 -0
- package/lib/with-sam.js +7 -4
- package/lib/with-sam.ts +288 -0
- package/lib/with-temporary-directory.ts +35 -0
- package/lib/with-timeout.ts +33 -0
- package/lib/xpmutex.js +2 -2
- package/lib/xpmutex.ts +218 -0
- package/package.json +84 -62
- package/resources/cloud-assemblies/0.36.0/cdk.out +1 -0
- package/resources/cloud-assemblies/1.10.0-lookup-default-vpc/cdk.out +1 -0
- package/resources/cloud-assemblies/1.10.0-request-azs/cdk.out +1 -0
- package/tests/cli-integ-tests/bootstrapping.integtest.js +22 -13
- package/tests/cli-integ-tests/bootstrapping.integtest.ts +493 -0
- package/tests/cli-integ-tests/cli-lib.integtest.js +3 -2
- package/tests/cli-integ-tests/cli-lib.integtest.ts +90 -0
- package/tests/cli-integ-tests/cli.integtest.js +76 -49
- package/tests/cli-integ-tests/cli.integtest.ts +2874 -0
- package/tests/cli-integ-tests/garbage-collection.integtest.js +2 -2
- package/tests/cli-integ-tests/garbage-collection.integtest.ts +392 -0
- package/tests/init-csharp/init-csharp.integtest.ts +15 -0
- package/tests/init-fsharp/init-fsharp.integtest.ts +15 -0
- package/tests/init-go/init-go.integtest.ts +23 -0
- package/tests/init-java/init-java.integtest.ts +14 -0
- package/tests/init-javascript/init-javascript.integtest.ts +59 -0
- package/tests/init-python/init-python.integtest.ts +20 -0
- package/tests/init-typescript-app/init-typescript-app.integtest.ts +66 -0
- package/tests/init-typescript-lib/init-typescript-lib.integtest.ts +13 -0
- package/tests/tool-integrations/amplify.integtest.ts +43 -0
- package/tests/tool-integrations/with-tool-context.ts +14 -0
- package/tests/uberpackage/uberpackage.integtest.ts +11 -0
- package/resources/cdk-apps/cfn-include-app/.gitignore +0 -1
package/lib/corking.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Routines for corking stdout and stderr
|
|
3
|
+
*/
|
|
4
|
+
import * as stream from 'stream';
|
|
5
|
+
|
|
6
|
+
export class MemoryStream extends stream.Writable {
|
|
7
|
+
private parts = new Array<Buffer>();
|
|
8
|
+
|
|
9
|
+
public _write(chunk: Buffer, _encoding: string, callback: (error?: Error | null) => void): void {
|
|
10
|
+
this.parts.push(chunk);
|
|
11
|
+
callback();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public buffer() {
|
|
15
|
+
return Buffer.concat(this.parts);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public clear() {
|
|
19
|
+
this.parts.splice(0, this.parts.length);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public async flushTo(strm: NodeJS.WritableStream): Promise<void> {
|
|
23
|
+
const flushed = strm.write(this.buffer());
|
|
24
|
+
if (!flushed) {
|
|
25
|
+
return new Promise(ok => strm.once('drain', ok));
|
|
26
|
+
}
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public toString() {
|
|
31
|
+
return this.buffer().toString();
|
|
32
|
+
}
|
|
33
|
+
}
|
package/lib/eventually.js
CHANGED
|
@@ -15,8 +15,8 @@ const DEFAULT_MAX_ATTEMPTS = 10;
|
|
|
15
15
|
*/
|
|
16
16
|
const eventually = async (call, options) => {
|
|
17
17
|
const opts = {
|
|
18
|
-
interval: options
|
|
19
|
-
maxAttempts: options
|
|
18
|
+
interval: (options === null || options === void 0 ? void 0 : options.interval) ? options.interval : DEFAULT_INTERVAL,
|
|
19
|
+
maxAttempts: (options === null || options === void 0 ? void 0 : options.maxAttempts) ? options.maxAttempts : DEFAULT_MAX_ATTEMPTS,
|
|
20
20
|
};
|
|
21
21
|
while (opts.maxAttempts-- >= 0) {
|
|
22
22
|
try {
|
|
@@ -31,4 +31,4 @@ const eventually = async (call, options) => {
|
|
|
31
31
|
throw new Error('An unexpected error has occurred.');
|
|
32
32
|
};
|
|
33
33
|
exports.default = eventually;
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnR1YWxseS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV2ZW50dWFsbHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFTQSxNQUFNLElBQUksR0FBRyxDQUFDLEVBQVUsRUFBaUIsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDOUIsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFFaEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFLLElBQXNCLEVBQUUsT0FBMkIsRUFBYyxFQUFFO0lBQzlGLE1BQU0sSUFBSSxHQUFHO1FBQ1gsUUFBUSxFQUFFLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLFFBQVEsRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBQ2pFLFdBQVcsRUFBRSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjtLQUMvRSxDQUFDO0lBRUYsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxHQUFHLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUMsQ0FBQztBQUVGLGtCQUFlLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHBhcmFtIG1heEF0dGVtcHRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0c1xuICogQHBhcmFtIGludGVydmFsIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyB0byBvYnNlcnZlIGJldHdlZW4gYXR0ZW1wdHNcbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnR1YWxseU9wdGlvbnMgPSB7XG4gIG1heEF0dGVtcHRzPzogbnVtYmVyO1xuICBpbnRlcnZhbD86IG51bWJlcjtcbn07XG5cbmNvbnN0IHdhaXQgPSAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbmNvbnN0IERFRkFVTFRfSU5URVJWQUwgPSAxMDAwO1xuY29uc3QgREVGQVVMVF9NQVhfQVRURU1QVFMgPSAxMDtcblxuLyoqXG4gKiBSdW5zIGEgZnVuY3Rpb24gb24gYW4gaW50ZXJ2YWwgdW50aWwgdGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGhhc1xuICogYmVlbiByZWFjaGVkLlxuICpcbiAqIERlZmF1bHQgaW50ZXJ2YWwgPSAxMDAwIG1pbGxpc2Vjb25kc1xuICogRGVmYXVsdCBtYXhBdHRlbXB0cyA9IDEwXG4gKlxuICogQHBhcmFtIGZuIGZ1bmN0aW9uIHRvIHJ1blxuICogQHBhcmFtIG9wdGlvbnMgRXZlbnR1YWxseU9wdGlvbnNcbiAqL1xuY29uc3QgZXZlbnR1YWxseSA9IGFzeW5jIDxUPihjYWxsOiAoKSA9PiBQcm9taXNlPFQ+LCBvcHRpb25zPzogRXZlbnR1YWxseU9wdGlvbnMpOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3Qgb3B0cyA9IHtcbiAgICBpbnRlcnZhbDogb3B0aW9ucz8uaW50ZXJ2YWwgPyBvcHRpb25zLmludGVydmFsIDogREVGQVVMVF9JTlRFUlZBTCxcbiAgICBtYXhBdHRlbXB0czogb3B0aW9ucz8ubWF4QXR0ZW1wdHMgPyBvcHRpb25zLm1heEF0dGVtcHRzIDogREVGQVVMVF9NQVhfQVRURU1QVFMsXG4gIH07XG5cbiAgd2hpbGUgKG9wdHMubWF4QXR0ZW1wdHMtLSA+PSAwKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBjYWxsKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAob3B0cy5tYXhBdHRlbXB0cyA8PSAwKSB0aHJvdyBlcnI7XG4gICAgfVxuICAgIGF3YWl0IHdhaXQob3B0cy5pbnRlcnZhbCk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ0FuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VycmVkLicpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZXZlbnR1YWxseTtcbiJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param maxAttempts the maximum number of attempts
|
|
3
|
+
* @param interval interval in milliseconds to observe between attempts
|
|
4
|
+
*/
|
|
5
|
+
export type EventuallyOptions = {
|
|
6
|
+
maxAttempts?: number;
|
|
7
|
+
interval?: number;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const wait = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));
|
|
11
|
+
const DEFAULT_INTERVAL = 1000;
|
|
12
|
+
const DEFAULT_MAX_ATTEMPTS = 10;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Runs a function on an interval until the maximum number of attempts has
|
|
16
|
+
* been reached.
|
|
17
|
+
*
|
|
18
|
+
* Default interval = 1000 milliseconds
|
|
19
|
+
* Default maxAttempts = 10
|
|
20
|
+
*
|
|
21
|
+
* @param fn function to run
|
|
22
|
+
* @param options EventuallyOptions
|
|
23
|
+
*/
|
|
24
|
+
const eventually = async <T>(call: () => Promise<T>, options?: EventuallyOptions): Promise<T> => {
|
|
25
|
+
const opts = {
|
|
26
|
+
interval: options?.interval ? options.interval : DEFAULT_INTERVAL,
|
|
27
|
+
maxAttempts: options?.maxAttempts ? options.maxAttempts : DEFAULT_MAX_ATTEMPTS,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
while (opts.maxAttempts-- >= 0) {
|
|
31
|
+
try {
|
|
32
|
+
return await call();
|
|
33
|
+
} catch (err) {
|
|
34
|
+
if (opts.maxAttempts <= 0) throw err;
|
|
35
|
+
}
|
|
36
|
+
await wait(opts.interval);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
throw new Error('An unexpected error has occurred.');
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export default eventually;
|
package/lib/files.js
CHANGED
|
@@ -50,7 +50,8 @@ function findUp(name, directory = process.cwd()) {
|
|
|
50
50
|
* Docker-safe home directory
|
|
51
51
|
*/
|
|
52
52
|
function homeDir() {
|
|
53
|
-
|
|
53
|
+
var _a;
|
|
54
|
+
return (_a = os.userInfo().homedir) !== null && _a !== void 0 ? _a : os.homedir();
|
|
54
55
|
}
|
|
55
56
|
async function loadLines(filename) {
|
|
56
57
|
return await fs.pathExists(filename) ? (await fs.readFile(filename, { encoding: 'utf-8' })).trim().split('\n') : [];
|
|
@@ -76,4 +77,4 @@ function updateIniKey(lines, key, value) {
|
|
|
76
77
|
lines.push(prefix + value);
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmaWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLHdCQUlDO0FBRUQsOEJBUUM7QUFFRCw4QkFHQztBQUVELHNEQUlDO0FBRUQsd0JBY0M7QUFLRCwwQkFFQztBQUVELDhCQUVDO0FBRUQsZ0NBR0M7QUFLRCxvQ0FhQztBQS9FRCx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUV4QixLQUFLLFVBQVUsTUFBTSxDQUFDLFFBQWdCO0lBQzNDLElBQUksTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbEMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLENBQUM7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLFNBQVMsQ0FBQyxRQUFnQixFQUFFLElBQVk7SUFDNUQsSUFBSSxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdCLFFBQVEsSUFBSSxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBRXhCLE1BQU0sU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRU0sS0FBSyxVQUFVLFNBQVMsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO0lBQ2hFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDeEMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRU0sS0FBSyxVQUFVLHFCQUFxQixDQUFDLEdBQVcsRUFBRSxNQUFjO0lBQ3JFLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzNFLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBZ0IsTUFBTSxDQUFDLElBQVksRUFBRSxZQUFvQixPQUFPLENBQUMsR0FBRyxFQUFFO0lBQ3BFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9DLElBQUksaUJBQWlCLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixPQUFPOztJQUNyQixPQUFPLE1BQUEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sbUNBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9DLENBQUM7QUFFTSxLQUFLLFVBQVUsU0FBUyxDQUFDLFFBQWdCO0lBQzlDLE9BQU8sTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RILENBQUM7QUFFTSxLQUFLLFVBQVUsVUFBVSxDQUFDLFFBQWdCLEVBQUUsS0FBZTtJQUNoRSxrRUFBa0U7SUFDbEUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFlBQVksQ0FBQyxLQUFlLEVBQUUsR0FBVyxFQUFFLEtBQWE7SUFDdEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN6QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN0QyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUMxQixLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2IsTUFBTTtRQUNSLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcm1GaWxlKGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZW5hbWUpKSB7XG4gICAgYXdhaXQgZnMudW5saW5rKGZpbGVuYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkVG9GaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGxpbmU6IHN0cmluZykge1xuICBsZXQgY29udGVudHMgPSBhd2FpdCBmcy5wYXRoRXhpc3RzKGZpbGVuYW1lKSA/IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVuYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pIDogJyc7XG4gIGlmICghY29udGVudHMuZW5kc1dpdGgoJ1xcbicpKSB7XG4gICAgY29udGVudHMgKz0gJ1xcbic7XG4gIH1cbiAgY29udGVudHMgKz0gbGluZSArICdcXG4nO1xuXG4gIGF3YWl0IHdyaXRlRmlsZShmaWxlbmFtZSwgY29udGVudHMpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlKGZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnRzOiBzdHJpbmcpIHtcbiAgYXdhaXQgZnMubWtkaXJwKHBhdGguZGlybmFtZShmaWxlbmFtZSkpO1xuICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZW5hbWUsIGNvbnRlbnRzLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29weURpcmVjdG9yeUNvbnRlbnRzKGRpcjogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZykge1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgZnMucmVhZGRpcihwYXRoLmpvaW4oZGlyKSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSkge1xuICAgIGF3YWl0IGZzLmNvcHlGaWxlKHBhdGguam9pbihkaXIsIGZpbGUpLCBwYXRoLmpvaW4odGFyZ2V0LCBmaWxlKSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRVcChuYW1lOiBzdHJpbmcsIGRpcmVjdG9yeTogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGFic29sdXRlRGlyZWN0b3J5ID0gcGF0aC5yZXNvbHZlKGRpcmVjdG9yeSk7XG5cbiAgY29uc3QgZmlsZSA9IHBhdGguam9pbihkaXJlY3RvcnksIG5hbWUpO1xuICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlKSkge1xuICAgIHJldHVybiBmaWxlO1xuICB9XG5cbiAgY29uc3QgeyByb290IH0gPSBwYXRoLnBhcnNlKGFic29sdXRlRGlyZWN0b3J5KTtcbiAgaWYgKGFic29sdXRlRGlyZWN0b3J5ID09IHJvb3QpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRVcChuYW1lLCBwYXRoLmRpcm5hbWUoYWJzb2x1dGVEaXJlY3RvcnkpKTtcbn1cblxuLyoqXG4gKiBEb2NrZXItc2FmZSBob21lIGRpcmVjdG9yeVxuICovXG5leHBvcnQgZnVuY3Rpb24gaG9tZURpcigpIHtcbiAgcmV0dXJuIG9zLnVzZXJJbmZvKCkuaG9tZWRpciA/PyBvcy5ob21lZGlyKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkTGluZXMoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgcmV0dXJuIGF3YWl0IGZzLnBhdGhFeGlzdHMoZmlsZW5hbWUpID8gKGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVuYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKS50cmltKCkuc3BsaXQoJ1xcbicpIDogW107XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUxpbmVzKGZpbGVuYW1lOiBzdHJpbmcsIGxpbmVzOiBzdHJpbmdbXSkge1xuICAvLyBNdXN0IGVuZCBpbiBhIG5ld2xpbmUgb3Igb3VyIGJhc2ggc2NyaXB0IHdvbid0IHJlYWQgaXQgcHJvcGVybHlcbiAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVuYW1lLCBsaW5lcy5qb2luKCdcXG4nKSArICdcXG4nLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSBhIHNwYWNlbGVzcyBpbmkgZmlsZSBpbiBwbGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlSW5pS2V5KGxpbmVzOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7a2V5fT1gO1xuICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChsaW5lc1tpXS5zdGFydHNXaXRoKHByZWZpeCkpIHtcbiAgICAgIGxpbmVzW2ldID0gcHJlZml4ICsgdmFsdWU7XG4gICAgICBmb3VuZCA9IHRydWU7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKCFmb3VuZCkge1xuICAgIGxpbmVzLnB1c2gocHJlZml4ICsgdmFsdWUpO1xuICB9XG59XG4iXX0=
|
package/lib/files.ts
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as os from 'os';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs-extra';
|
|
4
|
+
|
|
5
|
+
export async function rmFile(filename: string) {
|
|
6
|
+
if (await fs.pathExists(filename)) {
|
|
7
|
+
await fs.unlink(filename);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export async function addToFile(filename: string, line: string) {
|
|
12
|
+
let contents = await fs.pathExists(filename) ? await fs.readFile(filename, { encoding: 'utf-8' }) : '';
|
|
13
|
+
if (!contents.endsWith('\n')) {
|
|
14
|
+
contents += '\n';
|
|
15
|
+
}
|
|
16
|
+
contents += line + '\n';
|
|
17
|
+
|
|
18
|
+
await writeFile(filename, contents);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export async function writeFile(filename: string, contents: string) {
|
|
22
|
+
await fs.mkdirp(path.dirname(filename));
|
|
23
|
+
await fs.writeFile(filename, contents, { encoding: 'utf-8' });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export async function copyDirectoryContents(dir: string, target: string) {
|
|
27
|
+
for (const file of await fs.readdir(path.join(dir), { encoding: 'utf-8' })) {
|
|
28
|
+
await fs.copyFile(path.join(dir, file), path.join(target, file));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function findUp(name: string, directory: string = process.cwd()): string | undefined {
|
|
33
|
+
const absoluteDirectory = path.resolve(directory);
|
|
34
|
+
|
|
35
|
+
const file = path.join(directory, name);
|
|
36
|
+
if (fs.existsSync(file)) {
|
|
37
|
+
return file;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const { root } = path.parse(absoluteDirectory);
|
|
41
|
+
if (absoluteDirectory == root) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return findUp(name, path.dirname(absoluteDirectory));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Docker-safe home directory
|
|
50
|
+
*/
|
|
51
|
+
export function homeDir() {
|
|
52
|
+
return os.userInfo().homedir ?? os.homedir();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export async function loadLines(filename: string): Promise<string[]> {
|
|
56
|
+
return await fs.pathExists(filename) ? (await fs.readFile(filename, { encoding: 'utf-8' })).trim().split('\n') : [];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export async function writeLines(filename: string, lines: string[]) {
|
|
60
|
+
// Must end in a newline or our bash script won't read it properly
|
|
61
|
+
await fs.writeFile(filename, lines.join('\n') + '\n', { encoding: 'utf-8' });
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Update a spaceless ini file in place
|
|
66
|
+
*/
|
|
67
|
+
export function updateIniKey(lines: string[], key: string, value: string) {
|
|
68
|
+
const prefix = `${key}=`;
|
|
69
|
+
let found = false;
|
|
70
|
+
for (let i = 0; i < lines.length; i++) {
|
|
71
|
+
if (lines[i].startsWith(prefix)) {
|
|
72
|
+
lines[i] = prefix + value;
|
|
73
|
+
found = true;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (!found) {
|
|
78
|
+
lines.push(prefix + value);
|
|
79
|
+
}
|
|
80
|
+
}
|
package/lib/github.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.fetchPreviousVersion = fetchPreviousVersion;
|
|
|
4
4
|
const rest_1 = require("@octokit/rest");
|
|
5
5
|
const semver = require("semver");
|
|
6
6
|
async function fetchPreviousVersion(token, options) {
|
|
7
|
+
var _a;
|
|
7
8
|
const github = new rest_1.Octokit({ auth: token });
|
|
8
9
|
const releases = await github.repos.listReleases({
|
|
9
10
|
owner: 'aws',
|
|
@@ -14,18 +15,18 @@ async function fetchPreviousVersion(token, options) {
|
|
|
14
15
|
// to previous major versions.
|
|
15
16
|
let previousMVRelease = undefined;
|
|
16
17
|
for (const release of releases.data) {
|
|
17
|
-
const version = release.name
|
|
18
|
+
const version = (_a = release.name) === null || _a === void 0 ? void 0 : _a.replace('v', '');
|
|
18
19
|
if (!version) {
|
|
19
20
|
continue;
|
|
20
21
|
}
|
|
21
22
|
// Any old version is fine
|
|
22
|
-
if (!options
|
|
23
|
+
if (!(options === null || options === void 0 ? void 0 : options.majorVersion) && !(options === null || options === void 0 ? void 0 : options.priorTo)) {
|
|
23
24
|
return version;
|
|
24
25
|
}
|
|
25
|
-
if (options
|
|
26
|
+
if ((options === null || options === void 0 ? void 0 : options.majorVersion) && `${semver.major(version)}` === options.majorVersion) {
|
|
26
27
|
return version;
|
|
27
28
|
}
|
|
28
|
-
if (options
|
|
29
|
+
if ((options === null || options === void 0 ? void 0 : options.priorTo) && semver.lt(version, options === null || options === void 0 ? void 0 : options.priorTo) && semver.major(version) === semver.major(options.priorTo)) {
|
|
29
30
|
return version;
|
|
30
31
|
}
|
|
31
32
|
// Otherwise return the most recent version that didn't match any
|
|
@@ -39,4 +40,4 @@ async function fetchPreviousVersion(token, options) {
|
|
|
39
40
|
throw new Error(`Unable to find previous version given ${JSON.stringify(options)}`);
|
|
40
41
|
}
|
|
41
42
|
;
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZ2l0aHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esb0RBdUNDO0FBMUNELHdDQUF3QztBQUN4QyxpQ0FBaUM7QUFFMUIsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEtBQWEsRUFBRSxPQUd6RDs7SUFDQyxNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDL0MsS0FBSyxFQUFFLEtBQUs7UUFDWixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDLENBQUM7SUFFSCxpRUFBaUU7SUFDakUscUVBQXFFO0lBQ3JFLDhCQUE4QjtJQUM5QixJQUFJLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztJQUNsQyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFBLE9BQU8sQ0FBQyxJQUFJLDBDQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQUMsU0FBUztRQUFDLENBQUM7UUFFM0IsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxZQUFZLENBQUEsSUFBSSxDQUFDLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sQ0FBQSxFQUFFLENBQUM7WUFDaEQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELElBQUksQ0FBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsWUFBWSxLQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNqRixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLEtBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4SCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZCLGlCQUFpQixHQUFHLE9BQU8sQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUNELElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUFDLE9BQU8saUJBQWlCLENBQUM7SUFBQyxDQUFDO0lBRXBELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFBQSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gJ0BvY3Rva2l0L3Jlc3QnO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByZXZpb3VzVmVyc2lvbih0b2tlbjogc3RyaW5nLCBvcHRpb25zPzoge1xuICBwcmlvclRvPzogc3RyaW5nO1xuICBtYWpvclZlcnNpb24/OiBzdHJpbmc7XG59KSB7XG4gIGNvbnN0IGdpdGh1YiA9IG5ldyBPY3Rva2l0KHsgYXV0aDogdG9rZW4gfSk7XG4gIGNvbnN0IHJlbGVhc2VzID0gYXdhaXQgZ2l0aHViLnJlcG9zLmxpc3RSZWxlYXNlcyh7XG4gICAgb3duZXI6ICdhd3MnLFxuICAgIHJlcG86ICdhd3MtY2RrJyxcbiAgfSk7XG5cbiAgLy8gdGhpcyByZXR1cm5zIGEgbGlzdCBpbiBkZXNjZW5kaW5nIG9yZGVyLCBuZXdlc3QgcmVsZWFzZXMgZmlyc3RcbiAgLy8gb3B0cyBmb3Igc2FtZSBtYWpvciB2ZXJzaW9uIHdoZXJlIHBvc3NpYmxlLCBmYWxsaW5nIGJhY2sgb3RoZXJ3aXNlXG4gIC8vIHRvIHByZXZpb3VzIG1ham9yIHZlcnNpb25zLlxuICBsZXQgcHJldmlvdXNNVlJlbGVhc2UgPSB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgcmVsZWFzZSBvZiByZWxlYXNlcy5kYXRhKSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IHJlbGVhc2UubmFtZT8ucmVwbGFjZSgndicsICcnKTtcbiAgICBpZiAoIXZlcnNpb24pIHsgY29udGludWU7IH1cblxuICAgIC8vIEFueSBvbGQgdmVyc2lvbiBpcyBmaW5lXG4gICAgaWYgKCFvcHRpb25zPy5tYWpvclZlcnNpb24gJiYgIW9wdGlvbnM/LnByaW9yVG8pIHtcbiAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5tYWpvclZlcnNpb24gJiYgYCR7c2VtdmVyLm1ham9yKHZlcnNpb24pfWAgPT09IG9wdGlvbnMubWFqb3JWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8ucHJpb3JUbyAmJiBzZW12ZXIubHQodmVyc2lvbiwgb3B0aW9ucz8ucHJpb3JUbykgJiYgc2VtdmVyLm1ham9yKHZlcnNpb24pID09PSBzZW12ZXIubWFqb3Iob3B0aW9ucy5wcmlvclRvKSkge1xuICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIHJldHVybiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiB0aGF0IGRpZG4ndCBtYXRjaCBhbnlcbiAgICBpZiAoIXByZXZpb3VzTVZSZWxlYXNlKSB7XG4gICAgICBwcmV2aW91c01WUmVsZWFzZSA9IHZlcnNpb247XG4gICAgfVxuICB9XG4gIGlmIChwcmV2aW91c01WUmVsZWFzZSkgeyByZXR1cm4gcHJldmlvdXNNVlJlbGVhc2U7IH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHByZXZpb3VzIHZlcnNpb24gZ2l2ZW4gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKTtcbn07XG4iXX0=
|
package/lib/github.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Octokit } from '@octokit/rest';
|
|
2
|
+
import * as semver from 'semver';
|
|
3
|
+
|
|
4
|
+
export async function fetchPreviousVersion(token: string, options?: {
|
|
5
|
+
priorTo?: string;
|
|
6
|
+
majorVersion?: string;
|
|
7
|
+
}) {
|
|
8
|
+
const github = new Octokit({ auth: token });
|
|
9
|
+
const releases = await github.repos.listReleases({
|
|
10
|
+
owner: 'aws',
|
|
11
|
+
repo: 'aws-cdk',
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
// this returns a list in descending order, newest releases first
|
|
15
|
+
// opts for same major version where possible, falling back otherwise
|
|
16
|
+
// to previous major versions.
|
|
17
|
+
let previousMVRelease = undefined;
|
|
18
|
+
for (const release of releases.data) {
|
|
19
|
+
const version = release.name?.replace('v', '');
|
|
20
|
+
if (!version) { continue; }
|
|
21
|
+
|
|
22
|
+
// Any old version is fine
|
|
23
|
+
if (!options?.majorVersion && !options?.priorTo) {
|
|
24
|
+
return version;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (options?.majorVersion && `${semver.major(version)}` === options.majorVersion) {
|
|
28
|
+
return version;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (options?.priorTo && semver.lt(version, options?.priorTo) && semver.major(version) === semver.major(options.priorTo)) {
|
|
32
|
+
return version;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Otherwise return the most recent version that didn't match any
|
|
36
|
+
if (!previousMVRelease) {
|
|
37
|
+
previousMVRelease = version;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (previousMVRelease) { return previousMVRelease; }
|
|
41
|
+
|
|
42
|
+
throw new Error(`Unable to find previous version given ${JSON.stringify(options)}`);
|
|
43
|
+
};
|
package/lib/index.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './aws';
|
|
2
|
+
export * from './corking';
|
|
3
|
+
export * from './integ-test';
|
|
4
|
+
export * from './memoize';
|
|
5
|
+
export * from './resource-pool';
|
|
6
|
+
export * from './with-cli-lib';
|
|
7
|
+
export * from './with-sam';
|
|
8
|
+
export * from './shell';
|
|
9
|
+
export * from './with-aws';
|
|
10
|
+
export * from './with-cdk-app';
|
|
11
|
+
export * from './with-packages';
|
|
12
|
+
export * from './with-temporary-directory';
|
|
13
|
+
export * from './resources';
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { MemoryStream } from './corking';
|
|
4
|
+
|
|
5
|
+
const SKIP_TESTS = fs.readFileSync(path.join(__dirname, '..', 'skip-tests.txt'), { encoding: 'utf-8' })
|
|
6
|
+
.split('\n')
|
|
7
|
+
.map(x => x.trim())
|
|
8
|
+
.filter(x => x && !x.startsWith('#'));
|
|
9
|
+
|
|
10
|
+
if (SKIP_TESTS) {
|
|
11
|
+
process.stderr.write(`ℹ️ Skipping tests: ${JSON.stringify(SKIP_TESTS)}\n`);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface TestContext {
|
|
15
|
+
readonly randomString: string;
|
|
16
|
+
readonly output: NodeJS.WritableStream;
|
|
17
|
+
log(s: string): void;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
if (process.env.JEST_TEST_CONCURRENT === 'true') {
|
|
21
|
+
process.stderr.write('ℹ️ JEST_TEST_CONCURRENT is true: tests will run concurrently and filters have no effect!\n0');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A wrapper for jest's 'test' which takes regression-disabled tests into account and prints a banner
|
|
26
|
+
*/
|
|
27
|
+
export function integTest(
|
|
28
|
+
name: string,
|
|
29
|
+
callback: (context: TestContext) => Promise<void>,
|
|
30
|
+
timeoutMillis?: number,
|
|
31
|
+
): void {
|
|
32
|
+
// Integ tests can run concurrently, and are responsible for blocking
|
|
33
|
+
// themselves if they cannot. Because `test.concurrent` executes the test
|
|
34
|
+
// code immediately, regardles of any `--testNamePattern`, this cannot be the
|
|
35
|
+
// default: test filtering simply does not work with `test.concurrent`.
|
|
36
|
+
// Instead, we make it opt-in only for the pipeline where we don't do any
|
|
37
|
+
// selection, but execute all tests unconditionally.
|
|
38
|
+
const testKind = process.env.JEST_TEST_CONCURRENT === 'true' ? test.concurrent : test;
|
|
39
|
+
const runner = shouldSkip(name) ? testKind.skip : testKind;
|
|
40
|
+
|
|
41
|
+
runner(name, async () => {
|
|
42
|
+
const output = new MemoryStream();
|
|
43
|
+
|
|
44
|
+
output.write('================================================================\n');
|
|
45
|
+
output.write(`${name}\n`);
|
|
46
|
+
output.write('================================================================\n');
|
|
47
|
+
|
|
48
|
+
const now = Date.now();
|
|
49
|
+
process.stderr.write(`[INTEG TEST::${name}] Starting (pid ${process.pid})...\n`);
|
|
50
|
+
try {
|
|
51
|
+
return await callback({
|
|
52
|
+
output,
|
|
53
|
+
randomString: randomString(),
|
|
54
|
+
log(s: string) {
|
|
55
|
+
output.write(`${s}\n`);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
} catch (e: any) {
|
|
59
|
+
process.stderr.write(`[INTEG TEST::${name}] Failed: ${e}\n`);
|
|
60
|
+
output.write(e.message);
|
|
61
|
+
output.write(e.stack);
|
|
62
|
+
// Print output only if the test fails. Use 'console.log' so the output is buffered by
|
|
63
|
+
// jest and prints without a stack trace (if verbose: false).
|
|
64
|
+
// eslint-disable-next-line no-console
|
|
65
|
+
console.log(output.buffer().toString());
|
|
66
|
+
throw e;
|
|
67
|
+
} finally {
|
|
68
|
+
const duration = Date.now() - now;
|
|
69
|
+
process.stderr.write(`[INTEG TEST::${name}] Done (${duration} ms).\n`);
|
|
70
|
+
}
|
|
71
|
+
}, timeoutMillis);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function shouldSkip(testName: string) {
|
|
75
|
+
return SKIP_TESTS.includes(testName);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function randomString() {
|
|
79
|
+
// Crazy
|
|
80
|
+
return Math.random().toString(36).replace(/[^a-z0-9]+/g, '');
|
|
81
|
+
}
|
package/lib/lists.ts
ADDED
package/lib/memoize.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return a memoized version of an function with 0 arguments.
|
|
3
|
+
*
|
|
4
|
+
* Async-safe.
|
|
5
|
+
*/
|
|
6
|
+
export function memoize0<A>(fn: () => Promise<A>): () => Promise<A> {
|
|
7
|
+
let promise: Promise<A> | undefined;
|
|
8
|
+
return () => {
|
|
9
|
+
if (!promise) {
|
|
10
|
+
promise = fn();
|
|
11
|
+
}
|
|
12
|
+
return promise;
|
|
13
|
+
};
|
|
14
|
+
}
|
package/lib/npm.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { spawnSync } from 'child_process';
|
|
2
|
+
|
|
3
|
+
const MINIMUM_VERSION = '3.9';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Use NPM preinstalled on the machine to look up a list of TypeScript versions
|
|
7
|
+
*/
|
|
8
|
+
export function typescriptVersionsSync(): string[] {
|
|
9
|
+
const { stdout } = spawnSync('npm', ['--silent', 'view', `typescript@>=${MINIMUM_VERSION}`, 'version', '--json'], { encoding: 'utf-8' });
|
|
10
|
+
|
|
11
|
+
const versions: string[] = JSON.parse(stdout);
|
|
12
|
+
return Array.from(new Set(versions.map(v => v.split('.').slice(0, 2).join('.'))));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Use NPM preinstalled on the machine to query publish times of versions
|
|
17
|
+
*/
|
|
18
|
+
export function typescriptVersionsYoungerThanDaysSync(days: number, versions: string[]): string[] {
|
|
19
|
+
const { stdout } = spawnSync('npm', ['--silent', 'view', 'typescript', 'time', '--json'], { encoding: 'utf-8' });
|
|
20
|
+
const versionTsMap: Record<string, string> = JSON.parse(stdout);
|
|
21
|
+
|
|
22
|
+
const cutoffDate = new Date(Date.now() - (days * 24 * 3600 * 1000));
|
|
23
|
+
const cutoffDateS = cutoffDate.toISOString();
|
|
24
|
+
|
|
25
|
+
const recentVersions = Object.entries(versionTsMap)
|
|
26
|
+
.filter(([_, dateS]) => dateS > cutoffDateS)
|
|
27
|
+
.map(([v]) => v);
|
|
28
|
+
|
|
29
|
+
// Input versions are of the form 3.9, 5.2, etc.
|
|
30
|
+
// Actual versions are of the form `3.9.15`, `5.3.0-dev.20511311`.
|
|
31
|
+
// Return only 2-digit versions for which there is a non-prerelease version in the set of recentVersions
|
|
32
|
+
// So a 2-digit versions that is followed by `.<digits>` until the end of the string.
|
|
33
|
+
return versions.filter((twoV) => {
|
|
34
|
+
const re = new RegExp(`^${reQuote(twoV)}\\.\\d+$`);
|
|
35
|
+
return recentVersions.some(fullV => fullV.match(re));
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function reQuote(str: string): string {
|
|
40
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
41
|
+
}
|
|
@@ -14,6 +14,7 @@ class ReleasePackageSourceSetup {
|
|
|
14
14
|
this.description = `release @ ${this.version}`;
|
|
15
15
|
}
|
|
16
16
|
async prepare() {
|
|
17
|
+
var _a;
|
|
17
18
|
this.tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'tmpcdk'));
|
|
18
19
|
fs.mkdirSync(this.tempDir, { recursive: true });
|
|
19
20
|
await (0, shell_1.shell)(['node', require.resolve('npm'), 'install', `aws-cdk@${this.version}`], {
|
|
@@ -21,7 +22,7 @@ class ReleasePackageSourceSetup {
|
|
|
21
22
|
});
|
|
22
23
|
process.env.CDK_CLI_PATH = this.tempDir;
|
|
23
24
|
process.env.VERSION = this.version;
|
|
24
|
-
process.env.FRAMEWORK_VERSION = this.frameworkVersion
|
|
25
|
+
process.env.FRAMEWORK_VERSION = (_a = this.frameworkVersion) !== null && _a !== void 0 ? _a : this.version;
|
|
25
26
|
}
|
|
26
27
|
async cleanup() {
|
|
27
28
|
if (this.tempDir) {
|
|
@@ -67,4 +68,4 @@ class ReleasePackageSource {
|
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
exports.ReleasePackageSource = ReleasePackageSource;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWxlYXNlLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUUvQixvQ0FBaUQ7QUFDakQsb0NBQXlEO0FBRXpELE1BQWEseUJBQXlCO0lBTXBDLFlBQTZCLE9BQWUsRUFBbUIsZ0JBQXlCO1FBQTNELFlBQU8sR0FBUCxPQUFPLENBQVE7UUFBbUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFTO1FBTC9FLFNBQUksR0FBRyxTQUFTLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxhQUFhLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUtuRCxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU87O1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRWhELE1BQU0sSUFBQSxhQUFLLEVBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtZQUNsRixHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDbEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsTUFBQSxJQUFJLENBQUMsZ0JBQWdCLG1DQUFJLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUEsY0FBTSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM0JELDhEQTJCQztBQUVELE1BQWEsb0JBQW9CO0lBSS9CO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBUSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVNLDJCQUEyQjtJQUNsQyxDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QixDQUFDLFVBQWtCO1FBQ3RELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUEsNkJBQXFCLEVBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFTSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFXLENBQUM7SUFDOUMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWtCLENBQUM7SUFDeEMsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQzFELElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdEMseUJBQXlCO1lBQ3pCLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3RCxDQUFDO2FBQU0sQ0FBQztZQUNOLHVCQUF1QjtZQUN2QixPQUFPLEdBQUcsZ0JBQWdCLFVBQVUsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBNUNELG9EQTRDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBJUGFja2FnZVNvdXJjZVNldHVwLCBJUGFja2FnZVNvdXJjZSB9IGZyb20gJy4vc291cmNlJztcbmltcG9ydCB7IGNvcHlEaXJlY3RvcnlDb250ZW50cyB9IGZyb20gJy4uL2ZpbGVzJztcbmltcG9ydCB7IHNoZWxsLCByaW1yYWYsIGFkZFRvU2hlbGxQYXRoIH0gZnJvbSAnLi4vc2hlbGwnO1xuXG5leHBvcnQgY2xhc3MgUmVsZWFzZVBhY2thZ2VTb3VyY2VTZXR1cCBpbXBsZW1lbnRzIElQYWNrYWdlU291cmNlU2V0dXAge1xuICByZWFkb25seSBuYW1lID0gJ3JlbGVhc2UnO1xuICByZWFkb25seSBkZXNjcmlwdGlvbiA9IGByZWxlYXNlIEAgJHt0aGlzLnZlcnNpb259YDtcblxuICBwcml2YXRlIHRlbXBEaXI/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgZnJhbWV3b3JrVmVyc2lvbj86IHN0cmluZykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByZXBhcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy50ZW1wRGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAndG1wY2RrJykpO1xuICAgIGZzLm1rZGlyU3luYyh0aGlzLnRlbXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgYXdhaXQgc2hlbGwoWydub2RlJywgcmVxdWlyZS5yZXNvbHZlKCducG0nKSwgJ2luc3RhbGwnLCBgYXdzLWNka0Ake3RoaXMudmVyc2lvbn1gXSwge1xuICAgICAgY3dkOiB0aGlzLnRlbXBEaXIsXG4gICAgfSk7XG5cbiAgICBwcm9jZXNzLmVudi5DREtfQ0xJX1BBVEggPSB0aGlzLnRlbXBEaXI7XG4gICAgcHJvY2Vzcy5lbnYuVkVSU0lPTiA9IHRoaXMudmVyc2lvbjtcbiAgICBwcm9jZXNzLmVudi5GUkFNRVdPUktfVkVSU0lPTiA9IHRoaXMuZnJhbWV3b3JrVmVyc2lvbiA/PyB0aGlzLnZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy50ZW1wRGlyKSB7XG4gICAgICByaW1yYWYodGhpcy50ZW1wRGlyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlbGVhc2VQYWNrYWdlU291cmNlIGltcGxlbWVudHMgSVBhY2thZ2VTb3VyY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaVBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jbGlQYXRoID0gcHJvY2Vzcy5lbnYuQ0RLX0NMSV9QQVRIITtcbiAgICB0aGlzLnZlcnNpb24gPSBwcm9jZXNzLmVudi5WRVJTSU9OITtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtYWtlQ2xpQXZhaWxhYmxlKCkge1xuICAgIGFkZFRvU2hlbGxQYXRoKHBhdGguam9pbih0aGlzLmNsaVBhdGgsICdub2RlX21vZHVsZXMnLCAnLmJpbicpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3NlcnRKc2lpUGFja2FnZXNBdmFpbGFibGUoKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaW5pdGlhbGl6ZURvdG5ldFBhY2thZ2VzKGN1cnJlbnREaXI6IHN0cmluZykge1xuICAgIGlmIChwcm9jZXNzLmVudi5DV0RfRklMRVNfRElSKSB7XG4gICAgICBhd2FpdCBjb3B5RGlyZWN0b3J5Q29udGVudHMocHJvY2Vzcy5lbnYuQ1dEX0ZJTEVTX0RJUiwgY3VycmVudERpcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1ham9yVmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy52ZXJzaW9uLnNwbGl0KCcuJylbMF0gYXMgc3RyaW5nO1xuICB9XG5cbiAgcHVibGljIHJlcXVlc3RlZENsaVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyByZXF1ZXN0ZWRGcmFtZXdvcmtWZXJzaW9uKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5GUkFNRVdPUktfVkVSU0lPTiE7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkQWxwaGFWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZnJhbWV3b3JrVmVyc2lvbiA9IHRoaXMucmVxdWVzdGVkRnJhbWV3b3JrVmVyc2lvbigpO1xuICAgIGlmIChmcmFtZXdvcmtWZXJzaW9uLmluY2x1ZGVzKCctcmMuJykpIHtcbiAgICAgIC8vIEZvciBhIHBpcGVsaW5lIHJlbGVhc2VcbiAgICAgIHJldHVybiBmcmFtZXdvcmtWZXJzaW9uLnJlcGxhY2UoLy1yY1xcLlxcZCskLywgJy1hbHBoYS45OTknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGEgc3RhYmxlIHJlbGVhc2VcbiAgICAgIHJldHVybiBgJHtmcmFtZXdvcmtWZXJzaW9ufS1hbHBoYS4wYDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import * as os from 'os';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as fs from 'fs-extra';
|
|
4
|
+
import { IPackageSourceSetup, IPackageSource } from './source';
|
|
5
|
+
import { copyDirectoryContents } from '../files';
|
|
6
|
+
import { shell, rimraf, addToShellPath } from '../shell';
|
|
7
|
+
|
|
8
|
+
export class ReleasePackageSourceSetup implements IPackageSourceSetup {
|
|
9
|
+
readonly name = 'release';
|
|
10
|
+
readonly description = `release @ ${this.version}`;
|
|
11
|
+
|
|
12
|
+
private tempDir?: string;
|
|
13
|
+
|
|
14
|
+
constructor(private readonly version: string, private readonly frameworkVersion?: string) {
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public async prepare(): Promise<void> {
|
|
18
|
+
this.tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'tmpcdk'));
|
|
19
|
+
fs.mkdirSync(this.tempDir, { recursive: true });
|
|
20
|
+
|
|
21
|
+
await shell(['node', require.resolve('npm'), 'install', `aws-cdk@${this.version}`], {
|
|
22
|
+
cwd: this.tempDir,
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
process.env.CDK_CLI_PATH = this.tempDir;
|
|
26
|
+
process.env.VERSION = this.version;
|
|
27
|
+
process.env.FRAMEWORK_VERSION = this.frameworkVersion ?? this.version;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public async cleanup(): Promise<void> {
|
|
31
|
+
if (this.tempDir) {
|
|
32
|
+
rimraf(this.tempDir);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export class ReleasePackageSource implements IPackageSource {
|
|
38
|
+
private readonly cliPath: string;
|
|
39
|
+
private readonly version: string;
|
|
40
|
+
|
|
41
|
+
constructor() {
|
|
42
|
+
this.cliPath = process.env.CDK_CLI_PATH!;
|
|
43
|
+
this.version = process.env.VERSION!;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public async makeCliAvailable() {
|
|
47
|
+
addToShellPath(path.join(this.cliPath, 'node_modules', '.bin'));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public assertJsiiPackagesAvailable() {
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public async initializeDotnetPackages(currentDir: string) {
|
|
54
|
+
if (process.env.CWD_FILES_DIR) {
|
|
55
|
+
await copyDirectoryContents(process.env.CWD_FILES_DIR, currentDir);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public majorVersion() {
|
|
60
|
+
return this.version.split('.')[0] as string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public requestedCliVersion() {
|
|
64
|
+
return this.version;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public requestedFrameworkVersion() {
|
|
68
|
+
return process.env.FRAMEWORK_VERSION!;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public requestedAlphaVersion(): string {
|
|
72
|
+
const frameworkVersion = this.requestedFrameworkVersion();
|
|
73
|
+
if (frameworkVersion.includes('-rc.')) {
|
|
74
|
+
// For a pipeline release
|
|
75
|
+
return frameworkVersion.replace(/-rc\.\d+$/, '-alpha.999');
|
|
76
|
+
} else {
|
|
77
|
+
// For a stable release
|
|
78
|
+
return `${frameworkVersion}-alpha.0`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|