@aws-cdk-testing/cli-integ 0.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 +202 -0
- package/NOTICE +16 -0
- package/README.md +205 -0
- package/bin/apply-patches +22 -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 +54 -0
- package/bin/query-github.ts +56 -0
- package/bin/run-suite +2 -0
- package/bin/run-suite.d.ts +1 -0
- package/bin/run-suite.js +131 -0
- package/bin/run-suite.ts +140 -0
- package/bin/stage-distribution +2 -0
- package/bin/stage-distribution.d.ts +1 -0
- package/bin/stage-distribution.js +217 -0
- package/bin/stage-distribution.ts +267 -0
- package/bin/test-root +2 -0
- package/bin/test-root.d.ts +1 -0
- package/bin/test-root.js +6 -0
- package/bin/test-root.ts +3 -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 +51 -0
- package/lib/aws.js +206 -0
- package/lib/aws.ts +263 -0
- package/lib/corking.d.ts +12 -0
- package/lib/corking.js +35 -0
- package/lib/corking.ts +33 -0
- package/lib/eventually.d.ts +20 -0
- package/lib/eventually.js +34 -0
- package/lib/eventually.ts +42 -0
- package/lib/files.d.ts +15 -0
- package/lib/files.js +80 -0
- package/lib/files.ts +80 -0
- package/lib/github.d.ts +4 -0
- package/lib/github.js +43 -0
- package/lib/github.ts +43 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.js +30 -0
- package/lib/index.ts +13 -0
- package/lib/integ-test.d.ts +10 -0
- package/lib/integ-test.js +70 -0
- package/lib/integ-test.ts +81 -0
- package/lib/lists.d.ts +1 -0
- package/lib/lists.js +11 -0
- package/lib/lists.ts +9 -0
- package/lib/memoize.d.ts +6 -0
- package/lib/memoize.js +18 -0
- package/lib/memoize.ts +14 -0
- package/lib/npm.d.ts +8 -0
- package/lib/npm.js +38 -0
- package/lib/npm.ts +41 -0
- package/lib/package-sources/release-source.d.ts +23 -0
- package/lib/package-sources/release-source.js +71 -0
- package/lib/package-sources/release-source.ts +81 -0
- package/lib/package-sources/repo-source.d.ts +30 -0
- package/lib/package-sources/repo-source.js +97 -0
- package/lib/package-sources/repo-source.ts +111 -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 +43 -0
- package/lib/package-sources/repo-tools/npm.ts +48 -0
- package/lib/package-sources/source.d.ts +28 -0
- package/lib/package-sources/source.js +3 -0
- package/lib/package-sources/source.ts +35 -0
- package/lib/package-sources/subprocess.d.ts +3 -0
- package/lib/package-sources/subprocess.js +17 -0
- package/lib/package-sources/subprocess.ts +15 -0
- package/lib/resource-pool.d.ts +50 -0
- package/lib/resource-pool.js +117 -0
- package/lib/resource-pool.ts +140 -0
- package/lib/resources.d.ts +1 -0
- package/lib/resources.js +6 -0
- package/lib/resources.ts +4 -0
- package/lib/shell.d.ts +56 -0
- package/lib/shell.js +123 -0
- package/lib/shell.ts +168 -0
- package/lib/staging/codeartifact.d.ts +44 -0
- package/lib/staging/codeartifact.js +281 -0
- package/lib/staging/codeartifact.ts +387 -0
- package/lib/staging/maven.d.ts +5 -0
- package/lib/staging/maven.js +91 -0
- package/lib/staging/maven.ts +95 -0
- package/lib/staging/npm.d.ts +4 -0
- package/lib/staging/npm.js +55 -0
- package/lib/staging/npm.ts +62 -0
- package/lib/staging/nuget.d.ts +4 -0
- package/lib/staging/nuget.js +69 -0
- package/lib/staging/nuget.ts +75 -0
- package/lib/staging/parallel-shell.d.ts +5 -0
- package/lib/staging/parallel-shell.js +45 -0
- package/lib/staging/parallel-shell.ts +51 -0
- package/lib/staging/pypi.d.ts +4 -0
- package/lib/staging/pypi.js +48 -0
- package/lib/staging/pypi.ts +50 -0
- package/lib/staging/usage-dir.d.ts +31 -0
- package/lib/staging/usage-dir.js +87 -0
- package/lib/staging/usage-dir.ts +99 -0
- package/lib/with-aws.d.ts +14 -0
- package/lib/with-aws.js +60 -0
- package/lib/with-aws.ts +67 -0
- package/lib/with-cdk-app.d.ts +210 -0
- package/lib/with-cdk-app.js +539 -0
- package/lib/with-cdk-app.ts +742 -0
- package/lib/with-cli-lib.d.ts +17 -0
- package/lib/with-cli-lib.js +123 -0
- package/lib/with-cli-lib.ts +134 -0
- package/lib/with-packages.d.ts +5 -0
- package/lib/with-packages.js +13 -0
- package/lib/with-packages.ts +15 -0
- package/lib/with-sam.d.ts +33 -0
- package/lib/with-sam.js +258 -0
- package/lib/with-sam.ts +288 -0
- package/lib/with-temporary-directory.d.ts +5 -0
- package/lib/with-temporary-directory.js +31 -0
- package/lib/with-temporary-directory.ts +35 -0
- package/lib/with-timeout.d.ts +19 -0
- package/lib/with-timeout.js +34 -0
- package/lib/with-timeout.ts +33 -0
- package/lib/xpmutex.d.ts +43 -0
- package/lib/xpmutex.js +207 -0
- package/lib/xpmutex.ts +218 -0
- package/package.json +111 -0
- package/resources/bootstrap-templates/session-tags.all-roles-deny-all.yaml +703 -0
- package/resources/bootstrap-templates/session-tags.deploy-role-deny-sqs.yaml +700 -0
- package/resources/cdk-apps/app/app.js +926 -0
- package/resources/cdk-apps/app/appsync.hotswap.graphql +3 -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 +65 -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/rollback-test-app/app.js +110 -0
- package/resources/cdk-apps/rollback-test-app/cdk.json +7 -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/cdk-apps/simple-app/app.js +26 -0
- package/resources/cdk-apps/simple-app/cdk.json +7 -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/cli-regression-patches/v2.130.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.130.0/node_modules/@aws-cdk-testing/cli-integ/resources/cdk-apps/sam_cdk_integ_app/lib/nested-stack.js +19 -0
- package/resources/cli-regression-patches/v2.130.0/node_modules/@aws-cdk-testing/cli-integ/resources/cdk-apps/sam_cdk_integ_app/lib/test-stack.js +134 -0
- package/resources/cli-regression-patches/v2.130.0/skip-tests.txt +5 -0
- package/resources/cli-regression-patches/v2.132.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.132.0/skip-tests.txt +4 -0
- package/resources/cli-regression-patches/v2.142.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.142.0/skip-tests.txt +4 -0
- package/resources/cli-regression-patches/v2.160.0/skip-tests.txt +2 -0
- package/resources/cli-regression-patches/v2.161.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.161.0/skip-tests.txt +5 -0
- package/resources/cli-regression-patches/v2.166.0/NOTES.md +1 -0
- package/resources/cli-regression-patches/v2.166.0/skip-tests.txt +2 -0
- package/resources/cloud-assemblies/0.36.0/InitStack.template.json +1 -0
- package/resources/cloud-assemblies/0.36.0/cdk.out +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/cdk.out +1 -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/cdk.out +1 -0
- package/resources/cloud-assemblies/1.10.0-request-azs/manifest.json.js +34 -0
- package/resources/integ.jest.config.js +25 -0
- package/resources/templates/sqs-template.json +36 -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 +412 -0
- package/tests/cli-integ-tests/bootstrapping.integtest.ts +493 -0
- package/tests/cli-integ-tests/cli-lib.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/cli-lib.integtest.js +62 -0
- package/tests/cli-integ-tests/cli-lib.integtest.ts +90 -0
- package/tests/cli-integ-tests/cli.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/cli.integtest.js +2104 -0
- package/tests/cli-integ-tests/cli.integtest.ts +2874 -0
- package/tests/cli-integ-tests/garbage-collection.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/garbage-collection.integtest.js +314 -0
- package/tests/cli-integ-tests/garbage-collection.integtest.ts +392 -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-csharp/init-csharp.integtest.ts +15 -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-fsharp/init-fsharp.integtest.ts +15 -0
- package/tests/init-go/init-go.integtest.d.ts +1 -0
- package/tests/init-go/init-go.integtest.js +21 -0
- package/tests/init-go/init-go.integtest.ts +23 -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-java/init-java.integtest.ts +14 -0
- package/tests/init-javascript/init-javascript.integtest.d.ts +1 -0
- package/tests/init-javascript/init-javascript.integtest.js +53 -0
- package/tests/init-javascript/init-javascript.integtest.ts +59 -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-python/init-python.integtest.ts +20 -0
- package/tests/init-typescript-app/init-typescript-app.integtest.d.ts +1 -0
- package/tests/init-typescript-app/init-typescript-app.integtest.js +54 -0
- package/tests/init-typescript-app/init-typescript-app.integtest.ts +66 -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/init-typescript-lib/init-typescript-lib.integtest.ts +13 -0
- package/tests/tool-integrations/amplify.integtest.d.ts +1 -0
- package/tests/tool-integrations/amplify.integtest.js +39 -0
- package/tests/tool-integrations/amplify.integtest.ts +43 -0
- package/tests/tool-integrations/with-tool-context.d.ts +9 -0
- package/tests/tool-integrations/with-tool-context.js +13 -0
- package/tests/tool-integrations/with-tool-context.ts +14 -0
- package/tests/uberpackage/uberpackage.integtest.d.ts +1 -0
- package/tests/uberpackage/uberpackage.integtest.js +11 -0
- package/tests/uberpackage/uberpackage.integtest.ts +11 -0
package/lib/npm.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.typescriptVersionsSync = typescriptVersionsSync;
|
|
4
|
+
exports.typescriptVersionsYoungerThanDaysSync = typescriptVersionsYoungerThanDaysSync;
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
const MINIMUM_VERSION = '3.9';
|
|
7
|
+
/**
|
|
8
|
+
* Use NPM preinstalled on the machine to look up a list of TypeScript versions
|
|
9
|
+
*/
|
|
10
|
+
function typescriptVersionsSync() {
|
|
11
|
+
const { stdout } = (0, child_process_1.spawnSync)('npm', ['--silent', 'view', `typescript@>=${MINIMUM_VERSION}`, 'version', '--json'], { encoding: 'utf-8' });
|
|
12
|
+
const versions = JSON.parse(stdout);
|
|
13
|
+
return Array.from(new Set(versions.map(v => v.split('.').slice(0, 2).join('.'))));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Use NPM preinstalled on the machine to query publish times of versions
|
|
17
|
+
*/
|
|
18
|
+
function typescriptVersionsYoungerThanDaysSync(days, versions) {
|
|
19
|
+
const { stdout } = (0, child_process_1.spawnSync)('npm', ['--silent', 'view', 'typescript', 'time', '--json'], { encoding: 'utf-8' });
|
|
20
|
+
const versionTsMap = JSON.parse(stdout);
|
|
21
|
+
const cutoffDate = new Date(Date.now() - (days * 24 * 3600 * 1000));
|
|
22
|
+
const cutoffDateS = cutoffDate.toISOString();
|
|
23
|
+
const recentVersions = Object.entries(versionTsMap)
|
|
24
|
+
.filter(([_, dateS]) => dateS > cutoffDateS)
|
|
25
|
+
.map(([v]) => v);
|
|
26
|
+
// Input versions are of the form 3.9, 5.2, etc.
|
|
27
|
+
// Actual versions are of the form `3.9.15`, `5.3.0-dev.20511311`.
|
|
28
|
+
// Return only 2-digit versions for which there is a non-prerelease version in the set of recentVersions
|
|
29
|
+
// So a 2-digit versions that is followed by `.<digits>` until the end of the string.
|
|
30
|
+
return versions.filter((twoV) => {
|
|
31
|
+
const re = new RegExp(`^${reQuote(twoV)}\\.\\d+$`);
|
|
32
|
+
return recentVersions.some(fullV => fullV.match(re));
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function reQuote(str) {
|
|
36
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibnBtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esd0RBS0M7QUFLRCxzRkFtQkM7QUFwQ0QsaURBQTBDO0FBRTFDLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQztBQUU5Qjs7R0FFRztBQUNILFNBQWdCLHNCQUFzQjtJQUNwQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSx5QkFBUyxFQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLGVBQWUsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXpJLE1BQU0sUUFBUSxHQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHFDQUFxQyxDQUFDLElBQVksRUFBRSxRQUFrQjtJQUNwRixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSx5QkFBUyxFQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pILE1BQU0sWUFBWSxHQUEyQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWhFLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEUsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRTdDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1NBQ2hELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1NBQzNDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5CLGdEQUFnRDtJQUNoRCxrRUFBa0U7SUFDbEUsd0dBQXdHO0lBQ3hHLHFGQUFxRjtJQUNyRixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUM5QixNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEdBQVc7SUFDMUIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcblxuY29uc3QgTUlOSU1VTV9WRVJTSU9OID0gJzMuOSc7XG5cbi8qKlxuICogVXNlIE5QTSBwcmVpbnN0YWxsZWQgb24gdGhlIG1hY2hpbmUgdG8gbG9vayB1cCBhIGxpc3Qgb2YgVHlwZVNjcmlwdCB2ZXJzaW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNjcmlwdFZlcnNpb25zU3luYygpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgc3Rkb3V0IH0gPSBzcGF3blN5bmMoJ25wbScsIFsnLS1zaWxlbnQnLCAndmlldycsIGB0eXBlc2NyaXB0QD49JHtNSU5JTVVNX1ZFUlNJT059YCwgJ3ZlcnNpb24nLCAnLS1qc29uJ10sIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgY29uc3QgdmVyc2lvbnM6IHN0cmluZ1tdID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KHZlcnNpb25zLm1hcCh2ID0+IHYuc3BsaXQoJy4nKS5zbGljZSgwLCAyKS5qb2luKCcuJykpKSk7XG59XG5cbi8qKlxuICogVXNlIE5QTSBwcmVpbnN0YWxsZWQgb24gdGhlIG1hY2hpbmUgdG8gcXVlcnkgcHVibGlzaCB0aW1lcyBvZiB2ZXJzaW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZXNjcmlwdFZlcnNpb25zWW91bmdlclRoYW5EYXlzU3luYyhkYXlzOiBudW1iZXIsIHZlcnNpb25zOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgeyBzdGRvdXQgfSA9IHNwYXduU3luYygnbnBtJywgWyctLXNpbGVudCcsICd2aWV3JywgJ3R5cGVzY3JpcHQnLCAndGltZScsICctLWpzb24nXSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgY29uc3QgdmVyc2lvblRzTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gSlNPTi5wYXJzZShzdGRvdXQpO1xuXG4gIGNvbnN0IGN1dG9mZkRhdGUgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gKGRheXMgKiAyNCAqIDM2MDAgKiAxMDAwKSk7XG4gIGNvbnN0IGN1dG9mZkRhdGVTID0gY3V0b2ZmRGF0ZS50b0lTT1N0cmluZygpO1xuXG4gIGNvbnN0IHJlY2VudFZlcnNpb25zID0gT2JqZWN0LmVudHJpZXModmVyc2lvblRzTWFwKVxuICAgIC5maWx0ZXIoKFtfLCBkYXRlU10pID0+IGRhdGVTID4gY3V0b2ZmRGF0ZVMpXG4gICAgLm1hcCgoW3ZdKSA9PiB2KTtcblxuICAvLyBJbnB1dCB2ZXJzaW9ucyBhcmUgb2YgdGhlIGZvcm0gMy45LCA1LjIsIGV0Yy5cbiAgLy8gQWN0dWFsIHZlcnNpb25zIGFyZSBvZiB0aGUgZm9ybSBgMy45LjE1YCwgYDUuMy4wLWRldi4yMDUxMTMxMWAuXG4gIC8vIFJldHVybiBvbmx5IDItZGlnaXQgdmVyc2lvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIGEgbm9uLXByZXJlbGVhc2UgdmVyc2lvbiBpbiB0aGUgc2V0IG9mIHJlY2VudFZlcnNpb25zXG4gIC8vIFNvIGEgMi1kaWdpdCB2ZXJzaW9ucyB0aGF0IGlzIGZvbGxvd2VkIGJ5IGAuPGRpZ2l0cz5gIHVudGlsIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cbiAgcmV0dXJuIHZlcnNpb25zLmZpbHRlcigodHdvVikgPT4ge1xuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7cmVRdW90ZSh0d29WKX1cXFxcLlxcXFxkKyRgKTtcbiAgICByZXR1cm4gcmVjZW50VmVyc2lvbnMuc29tZShmdWxsViA9PiBmdWxsVi5tYXRjaChyZSkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVRdW90ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbn1cbiJdfQ==
|
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
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { IPackageSourceSetup, IPackageSource } from './source';
|
|
2
|
+
export declare class ReleasePackageSourceSetup implements IPackageSourceSetup {
|
|
3
|
+
private readonly version;
|
|
4
|
+
private readonly frameworkVersion?;
|
|
5
|
+
readonly name = "release";
|
|
6
|
+
readonly description: string;
|
|
7
|
+
private tempDir?;
|
|
8
|
+
constructor(version: string, frameworkVersion?: string | undefined);
|
|
9
|
+
prepare(): Promise<void>;
|
|
10
|
+
cleanup(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare class ReleasePackageSource implements IPackageSource {
|
|
13
|
+
private readonly cliPath;
|
|
14
|
+
private readonly version;
|
|
15
|
+
constructor();
|
|
16
|
+
makeCliAvailable(): Promise<void>;
|
|
17
|
+
assertJsiiPackagesAvailable(): void;
|
|
18
|
+
initializeDotnetPackages(currentDir: string): Promise<void>;
|
|
19
|
+
majorVersion(): string;
|
|
20
|
+
requestedCliVersion(): string;
|
|
21
|
+
requestedFrameworkVersion(): string;
|
|
22
|
+
requestedAlphaVersion(): string;
|
|
23
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReleasePackageSource = exports.ReleasePackageSourceSetup = void 0;
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const fs = require("fs-extra");
|
|
7
|
+
const files_1 = require("../files");
|
|
8
|
+
const shell_1 = require("../shell");
|
|
9
|
+
class ReleasePackageSourceSetup {
|
|
10
|
+
constructor(version, frameworkVersion) {
|
|
11
|
+
this.version = version;
|
|
12
|
+
this.frameworkVersion = frameworkVersion;
|
|
13
|
+
this.name = 'release';
|
|
14
|
+
this.description = `release @ ${this.version}`;
|
|
15
|
+
}
|
|
16
|
+
async prepare() {
|
|
17
|
+
var _a;
|
|
18
|
+
this.tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'tmpcdk'));
|
|
19
|
+
fs.mkdirSync(this.tempDir, { recursive: true });
|
|
20
|
+
await (0, shell_1.shell)(['node', require.resolve('npm'), 'install', `aws-cdk@${this.version}`], {
|
|
21
|
+
cwd: this.tempDir,
|
|
22
|
+
});
|
|
23
|
+
process.env.CDK_CLI_PATH = this.tempDir;
|
|
24
|
+
process.env.VERSION = this.version;
|
|
25
|
+
process.env.FRAMEWORK_VERSION = (_a = this.frameworkVersion) !== null && _a !== void 0 ? _a : this.version;
|
|
26
|
+
}
|
|
27
|
+
async cleanup() {
|
|
28
|
+
if (this.tempDir) {
|
|
29
|
+
(0, shell_1.rimraf)(this.tempDir);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.ReleasePackageSourceSetup = ReleasePackageSourceSetup;
|
|
34
|
+
class ReleasePackageSource {
|
|
35
|
+
constructor() {
|
|
36
|
+
this.cliPath = process.env.CDK_CLI_PATH;
|
|
37
|
+
this.version = process.env.VERSION;
|
|
38
|
+
}
|
|
39
|
+
async makeCliAvailable() {
|
|
40
|
+
(0, shell_1.addToShellPath)(path.join(this.cliPath, 'node_modules', '.bin'));
|
|
41
|
+
}
|
|
42
|
+
assertJsiiPackagesAvailable() {
|
|
43
|
+
}
|
|
44
|
+
async initializeDotnetPackages(currentDir) {
|
|
45
|
+
if (process.env.CWD_FILES_DIR) {
|
|
46
|
+
await (0, files_1.copyDirectoryContents)(process.env.CWD_FILES_DIR, currentDir);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
majorVersion() {
|
|
50
|
+
return this.version.split('.')[0];
|
|
51
|
+
}
|
|
52
|
+
requestedCliVersion() {
|
|
53
|
+
return this.version;
|
|
54
|
+
}
|
|
55
|
+
requestedFrameworkVersion() {
|
|
56
|
+
return process.env.FRAMEWORK_VERSION;
|
|
57
|
+
}
|
|
58
|
+
requestedAlphaVersion() {
|
|
59
|
+
const frameworkVersion = this.requestedFrameworkVersion();
|
|
60
|
+
if (frameworkVersion.includes('-rc.')) {
|
|
61
|
+
// For a pipeline release
|
|
62
|
+
return frameworkVersion.replace(/-rc\.\d+$/, '-alpha.999');
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// For a stable release
|
|
66
|
+
return `${frameworkVersion}-alpha.0`;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.ReleasePackageSource = ReleasePackageSource;
|
|
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
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IPackageSourceSetup, IPackageSource } from './source';
|
|
2
|
+
export declare class RepoPackageSourceSetup implements IPackageSourceSetup {
|
|
3
|
+
private readonly repoRoot;
|
|
4
|
+
readonly name = "repo";
|
|
5
|
+
readonly description: string;
|
|
6
|
+
constructor(repoRoot: string);
|
|
7
|
+
prepare(): Promise<void>;
|
|
8
|
+
cleanup(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export declare class RepoPackageSource implements IPackageSource {
|
|
11
|
+
private readonly repoRoot;
|
|
12
|
+
constructor();
|
|
13
|
+
makeCliAvailable(): Promise<void>;
|
|
14
|
+
assertJsiiPackagesAvailable(): void;
|
|
15
|
+
initializeDotnetPackages(): Promise<void>;
|
|
16
|
+
majorVersion(): any;
|
|
17
|
+
requestedCliVersion(): string;
|
|
18
|
+
requestedFrameworkVersion(): string;
|
|
19
|
+
requestedAlphaVersion(): string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Return a { name -> directory } packages found in a Yarn monorepo
|
|
23
|
+
*
|
|
24
|
+
* Cached in YARN_MONOREPO_CACHE.
|
|
25
|
+
*/
|
|
26
|
+
export declare function findYarnPackages(root: string): Promise<Record<string, string>>;
|
|
27
|
+
/**
|
|
28
|
+
* Find the root directory of the repo from the current directory
|
|
29
|
+
*/
|
|
30
|
+
export declare function autoFindRoot(): Promise<string>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RepoPackageSource = exports.RepoPackageSourceSetup = void 0;
|
|
4
|
+
exports.findYarnPackages = findYarnPackages;
|
|
5
|
+
exports.autoFindRoot = autoFindRoot;
|
|
6
|
+
const os = require("os");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const fs = require("fs-extra");
|
|
9
|
+
const files_1 = require("../files");
|
|
10
|
+
const shell_1 = require("../shell");
|
|
11
|
+
class RepoPackageSourceSetup {
|
|
12
|
+
constructor(repoRoot) {
|
|
13
|
+
this.repoRoot = repoRoot;
|
|
14
|
+
this.name = 'repo';
|
|
15
|
+
this.description = `repo(${this.repoRoot})`;
|
|
16
|
+
}
|
|
17
|
+
async prepare() {
|
|
18
|
+
if (!await fs.pathExists(path.join(this.repoRoot, 'package.json')) || !await fs.pathExists(path.join(this.repoRoot, 'yarn.lock'))) {
|
|
19
|
+
throw new Error(`${this.repoRoot}: does not look like the repository root`);
|
|
20
|
+
}
|
|
21
|
+
process.env.REPO_ROOT = this.repoRoot;
|
|
22
|
+
process.env.REPO_PACKAGE_MAP = await writePackageMap(this.repoRoot);
|
|
23
|
+
(0, shell_1.addToShellPath)(path.resolve(__dirname, 'repo-tools'));
|
|
24
|
+
}
|
|
25
|
+
async cleanup() {
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.RepoPackageSourceSetup = RepoPackageSourceSetup;
|
|
29
|
+
class RepoPackageSource {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.repoRoot = process.env.REPO_ROOT;
|
|
32
|
+
}
|
|
33
|
+
async makeCliAvailable() {
|
|
34
|
+
(0, shell_1.addToShellPath)(path.join(this.repoRoot, 'packages', 'aws-cdk', 'bin'));
|
|
35
|
+
}
|
|
36
|
+
assertJsiiPackagesAvailable() {
|
|
37
|
+
throw new Error('jsii client packages are not available when using REPO source');
|
|
38
|
+
}
|
|
39
|
+
async initializeDotnetPackages() {
|
|
40
|
+
}
|
|
41
|
+
majorVersion() {
|
|
42
|
+
const releaseJson = fs.readJsonSync(path.resolve(this.repoRoot, 'release.json'));
|
|
43
|
+
return releaseJson.majorVersion;
|
|
44
|
+
}
|
|
45
|
+
requestedCliVersion() {
|
|
46
|
+
return '*';
|
|
47
|
+
}
|
|
48
|
+
requestedFrameworkVersion() {
|
|
49
|
+
return '*';
|
|
50
|
+
}
|
|
51
|
+
requestedAlphaVersion() {
|
|
52
|
+
return '*';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.RepoPackageSource = RepoPackageSource;
|
|
56
|
+
async function writePackageMap(repoRoot) {
|
|
57
|
+
const packages = await findYarnPackages(repoRoot);
|
|
58
|
+
const fileName = path.join(os.tmpdir(), 'package-map.json');
|
|
59
|
+
await fs.writeJson(fileName, packages);
|
|
60
|
+
return fileName;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Cache monorepo discovery results, we only want to do this once per run
|
|
64
|
+
*/
|
|
65
|
+
const YARN_MONOREPO_CACHE = {};
|
|
66
|
+
/**
|
|
67
|
+
* Return a { name -> directory } packages found in a Yarn monorepo
|
|
68
|
+
*
|
|
69
|
+
* Cached in YARN_MONOREPO_CACHE.
|
|
70
|
+
*/
|
|
71
|
+
async function findYarnPackages(root) {
|
|
72
|
+
if (!(root in YARN_MONOREPO_CACHE)) {
|
|
73
|
+
const outputDataString = JSON.parse(await (0, shell_1.shell)(['yarn', 'workspaces', '--json', 'info'], {
|
|
74
|
+
captureStderr: false,
|
|
75
|
+
cwd: root,
|
|
76
|
+
show: 'error',
|
|
77
|
+
})).data;
|
|
78
|
+
const output = JSON.parse(outputDataString);
|
|
79
|
+
const ret = {};
|
|
80
|
+
for (const [k, v] of Object.entries(output)) {
|
|
81
|
+
ret[k] = path.join(root, v.location);
|
|
82
|
+
}
|
|
83
|
+
YARN_MONOREPO_CACHE[root] = ret;
|
|
84
|
+
}
|
|
85
|
+
return YARN_MONOREPO_CACHE[root];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Find the root directory of the repo from the current directory
|
|
89
|
+
*/
|
|
90
|
+
async function autoFindRoot() {
|
|
91
|
+
const found = (0, files_1.findUp)('release.json');
|
|
92
|
+
if (!found) {
|
|
93
|
+
throw new Error(`Could not determine repository root: 'release.json' not found from ${process.cwd()}`);
|
|
94
|
+
}
|
|
95
|
+
return path.dirname(found);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwby1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXBvLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpRkEsNENBZ0JDO0FBS0Qsb0NBTUM7QUE1R0QseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwrQkFBK0I7QUFFL0Isb0NBQWtDO0FBQ2xDLG9DQUFpRDtBQUVqRCxNQUFhLHNCQUFzQjtJQUlqQyxZQUE2QixRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBSHBDLFNBQUksR0FBRyxNQUFNLENBQUM7UUFDZCxnQkFBVyxHQUFHLFFBQVEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDO0lBR2hELENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEksTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLDBDQUEwQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEUsSUFBQSxzQkFBYyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPO0lBQ3BCLENBQUM7Q0FDRjtBQW5CRCx3REFtQkM7QUFFRCxNQUFhLGlCQUFpQjtJQUc1QjtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFtQixDQUFDO0lBQ2xELENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCO1FBQzNCLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTSwyQkFBMkI7UUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFTSxLQUFLLENBQUMsd0JBQXdCO0lBQ3JDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDakYsT0FBTyxXQUFXLENBQUMsWUFBWSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRU0seUJBQXlCO1FBQzlCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRjtBQWxDRCw4Q0FrQ0M7QUFFRCxLQUFLLFVBQVUsZUFBZSxDQUFDLFFBQWdCO0lBQzdDLE1BQU0sUUFBUSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztJQUM1RCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sbUJBQW1CLEdBQXdCLEVBQUUsQ0FBQztBQUVwRDs7OztJQUlJO0FBQ0csS0FBSyxVQUFVLGdCQUFnQixDQUFDLElBQVk7SUFDakQsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLGdCQUFnQixHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFBLGFBQUssRUFBQyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ2hHLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLEdBQUcsRUFBRSxJQUFJO1lBQ1QsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxNQUFNLE1BQU0sR0FBeUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7UUFDdkMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDbEMsQ0FBQztJQUNELE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFlBQVk7SUFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBQSxjQUFNLEVBQUMsY0FBYyxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxzRUFBc0UsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgSVBhY2thZ2VTb3VyY2VTZXR1cCwgSVBhY2thZ2VTb3VyY2UgfSBmcm9tICcuL3NvdXJjZSc7XG5pbXBvcnQgeyBmaW5kVXAgfSBmcm9tICcuLi9maWxlcyc7XG5pbXBvcnQgeyBzaGVsbCwgYWRkVG9TaGVsbFBhdGggfSBmcm9tICcuLi9zaGVsbCc7XG5cbmV4cG9ydCBjbGFzcyBSZXBvUGFja2FnZVNvdXJjZVNldHVwIGltcGxlbWVudHMgSVBhY2thZ2VTb3VyY2VTZXR1cCB7XG4gIHJlYWRvbmx5IG5hbWUgPSAncmVwbyc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uID0gYHJlcG8oJHt0aGlzLnJlcG9Sb290fSlgO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcmVwb1Jvb3Q6IHN0cmluZykge1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHByZXBhcmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih0aGlzLnJlcG9Sb290LCAncGFja2FnZS5qc29uJykpIHx8ICFhd2FpdCBmcy5wYXRoRXhpc3RzKHBhdGguam9pbih0aGlzLnJlcG9Sb290LCAneWFybi5sb2NrJykpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5yZXBvUm9vdH06IGRvZXMgbm90IGxvb2sgbGlrZSB0aGUgcmVwb3NpdG9yeSByb290YCk7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuUkVQT19ST09UID0gdGhpcy5yZXBvUm9vdDtcbiAgICBwcm9jZXNzLmVudi5SRVBPX1BBQ0tBR0VfTUFQID0gYXdhaXQgd3JpdGVQYWNrYWdlTWFwKHRoaXMucmVwb1Jvb3QpO1xuICAgIGFkZFRvU2hlbGxQYXRoKHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdyZXBvLXRvb2xzJykpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlcG9QYWNrYWdlU291cmNlIGltcGxlbWVudHMgSVBhY2thZ2VTb3VyY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9Sb290OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5yZXBvUm9vdCA9IHByb2Nlc3MuZW52LlJFUE9fUk9PVCBhcyBzdHJpbmc7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbWFrZUNsaUF2YWlsYWJsZSgpIHtcbiAgICBhZGRUb1NoZWxsUGF0aChwYXRoLmpvaW4odGhpcy5yZXBvUm9vdCwgJ3BhY2thZ2VzJywgJ2F3cy1jZGsnLCAnYmluJykpO1xuICB9XG5cbiAgcHVibGljIGFzc2VydEpzaWlQYWNrYWdlc0F2YWlsYWJsZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2pzaWkgY2xpZW50IHBhY2thZ2VzIGFyZSBub3QgYXZhaWxhYmxlIHdoZW4gdXNpbmcgUkVQTyBzb3VyY2UnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplRG90bmV0UGFja2FnZXMoKSB7XG4gIH1cblxuICBwdWJsaWMgbWFqb3JWZXJzaW9uKCkge1xuICAgIGNvbnN0IHJlbGVhc2VKc29uID0gZnMucmVhZEpzb25TeW5jKHBhdGgucmVzb2x2ZSh0aGlzLnJlcG9Sb290LCAncmVsZWFzZS5qc29uJykpO1xuICAgIHJldHVybiByZWxlYXNlSnNvbi5tYWpvclZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkQ2xpVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnKic7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkRnJhbWV3b3JrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnKic7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdGVkQWxwaGFWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcqJztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVBhY2thZ2VNYXAocmVwb1Jvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHBhY2thZ2VzID0gYXdhaXQgZmluZFlhcm5QYWNrYWdlcyhyZXBvUm9vdCk7XG4gIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCAncGFja2FnZS1tYXAuanNvbicpO1xuICBhd2FpdCBmcy53cml0ZUpzb24oZmlsZU5hbWUsIHBhY2thZ2VzKTtcbiAgcmV0dXJuIGZpbGVOYW1lO1xufVxuXG4vKipcbiAqIENhY2hlIG1vbm9yZXBvIGRpc2NvdmVyeSByZXN1bHRzLCB3ZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbmNlIHBlciBydW5cbiAqL1xuY29uc3QgWUFSTl9NT05PUkVQT19DQUNIRTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4vKipcbiAgKiBSZXR1cm4gYSB7IG5hbWUgLT4gZGlyZWN0b3J5IH0gcGFja2FnZXMgZm91bmQgaW4gYSBZYXJuIG1vbm9yZXBvXG4gICpcbiAgKiBDYWNoZWQgaW4gWUFSTl9NT05PUkVQT19DQUNIRS5cbiAgKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmaW5kWWFyblBhY2thZ2VzKHJvb3Q6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBpZiAoIShyb290IGluIFlBUk5fTU9OT1JFUE9fQ0FDSEUpKSB7XG4gICAgY29uc3Qgb3V0cHV0RGF0YVN0cmluZzogc3RyaW5nID0gSlNPTi5wYXJzZShhd2FpdCBzaGVsbChbJ3lhcm4nLCAnd29ya3NwYWNlcycsICctLWpzb24nLCAnaW5mbyddLCB7XG4gICAgICBjYXB0dXJlU3RkZXJyOiBmYWxzZSxcbiAgICAgIGN3ZDogcm9vdCxcbiAgICAgIHNob3c6ICdlcnJvcicsXG4gICAgfSkpLmRhdGE7XG4gICAgY29uc3Qgb3V0cHV0OiBZYXJuV29ya3NwYWNlc091dHB1dCA9IEpTT04ucGFyc2Uob3V0cHV0RGF0YVN0cmluZyk7XG5cbiAgICBjb25zdCByZXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvdXRwdXQpKSB7XG4gICAgICByZXRba10gPSBwYXRoLmpvaW4ocm9vdCwgdi5sb2NhdGlvbik7XG4gICAgfVxuICAgIFlBUk5fTU9OT1JFUE9fQ0FDSEVbcm9vdF0gPSByZXQ7XG4gIH1cbiAgcmV0dXJuIFlBUk5fTU9OT1JFUE9fQ0FDSEVbcm9vdF07XG59XG5cbi8qKlxuICogRmluZCB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHJlcG8gZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1dG9GaW5kUm9vdCgpIHtcbiAgY29uc3QgZm91bmQgPSBmaW5kVXAoJ3JlbGVhc2UuanNvbicpO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHJlcG9zaXRvcnkgcm9vdDogJ3JlbGVhc2UuanNvbicgbm90IGZvdW5kIGZyb20gJHtwcm9jZXNzLmN3ZCgpfWApO1xuICB9XG4gIHJldHVybiBwYXRoLmRpcm5hbWUoZm91bmQpO1xufVxuXG50eXBlIFlhcm5Xb3Jrc3BhY2VzT3V0cHV0ID0gUmVjb3JkPHN0cmluZywgeyBsb2NhdGlvbjogc3RyaW5nIH0+O1xuIl19
|
|
@@ -0,0 +1,111 @@
|
|
|
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 { findUp } from '../files';
|
|
6
|
+
import { shell, addToShellPath } from '../shell';
|
|
7
|
+
|
|
8
|
+
export class RepoPackageSourceSetup implements IPackageSourceSetup {
|
|
9
|
+
readonly name = 'repo';
|
|
10
|
+
readonly description = `repo(${this.repoRoot})`;
|
|
11
|
+
|
|
12
|
+
constructor(private readonly repoRoot: string) {
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public async prepare(): Promise<void> {
|
|
16
|
+
if (!await fs.pathExists(path.join(this.repoRoot, 'package.json')) || !await fs.pathExists(path.join(this.repoRoot, 'yarn.lock'))) {
|
|
17
|
+
throw new Error(`${this.repoRoot}: does not look like the repository root`);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
process.env.REPO_ROOT = this.repoRoot;
|
|
21
|
+
process.env.REPO_PACKAGE_MAP = await writePackageMap(this.repoRoot);
|
|
22
|
+
addToShellPath(path.resolve(__dirname, 'repo-tools'));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public async cleanup(): Promise<void> {
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export class RepoPackageSource implements IPackageSource {
|
|
30
|
+
private readonly repoRoot: string;
|
|
31
|
+
|
|
32
|
+
constructor() {
|
|
33
|
+
this.repoRoot = process.env.REPO_ROOT as string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public async makeCliAvailable() {
|
|
37
|
+
addToShellPath(path.join(this.repoRoot, 'packages', 'aws-cdk', 'bin'));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public assertJsiiPackagesAvailable() {
|
|
41
|
+
throw new Error('jsii client packages are not available when using REPO source');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public async initializeDotnetPackages() {
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public majorVersion() {
|
|
48
|
+
const releaseJson = fs.readJsonSync(path.resolve(this.repoRoot, 'release.json'));
|
|
49
|
+
return releaseJson.majorVersion;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public requestedCliVersion(): string {
|
|
53
|
+
return '*';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public requestedFrameworkVersion(): string {
|
|
57
|
+
return '*';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public requestedAlphaVersion(): string {
|
|
61
|
+
return '*';
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async function writePackageMap(repoRoot: string): Promise<string> {
|
|
66
|
+
const packages = await findYarnPackages(repoRoot);
|
|
67
|
+
const fileName = path.join(os.tmpdir(), 'package-map.json');
|
|
68
|
+
await fs.writeJson(fileName, packages);
|
|
69
|
+
return fileName;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Cache monorepo discovery results, we only want to do this once per run
|
|
74
|
+
*/
|
|
75
|
+
const YARN_MONOREPO_CACHE: Record<string, any> = {};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Return a { name -> directory } packages found in a Yarn monorepo
|
|
79
|
+
*
|
|
80
|
+
* Cached in YARN_MONOREPO_CACHE.
|
|
81
|
+
*/
|
|
82
|
+
export async function findYarnPackages(root: string): Promise<Record<string, string>> {
|
|
83
|
+
if (!(root in YARN_MONOREPO_CACHE)) {
|
|
84
|
+
const outputDataString: string = JSON.parse(await shell(['yarn', 'workspaces', '--json', 'info'], {
|
|
85
|
+
captureStderr: false,
|
|
86
|
+
cwd: root,
|
|
87
|
+
show: 'error',
|
|
88
|
+
})).data;
|
|
89
|
+
const output: YarnWorkspacesOutput = JSON.parse(outputDataString);
|
|
90
|
+
|
|
91
|
+
const ret: Record<string, string> = {};
|
|
92
|
+
for (const [k, v] of Object.entries(output)) {
|
|
93
|
+
ret[k] = path.join(root, v.location);
|
|
94
|
+
}
|
|
95
|
+
YARN_MONOREPO_CACHE[root] = ret;
|
|
96
|
+
}
|
|
97
|
+
return YARN_MONOREPO_CACHE[root];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Find the root directory of the repo from the current directory
|
|
102
|
+
*/
|
|
103
|
+
export async function autoFindRoot() {
|
|
104
|
+
const found = findUp('release.json');
|
|
105
|
+
if (!found) {
|
|
106
|
+
throw new Error(`Could not determine repository root: 'release.json' not found from ${process.cwd()}`);
|
|
107
|
+
}
|
|
108
|
+
return path.dirname(found);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
type YarnWorkspacesOutput = Record<string, { location: string }>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const child_process = require("child_process");
|
|
5
|
+
const fs = require("fs-extra");
|
|
6
|
+
let argv = process.argv.slice(2);
|
|
7
|
+
// eslint-disable-next-line no-console
|
|
8
|
+
console.log('fake npm');
|
|
9
|
+
if (argv[0] === 'install') {
|
|
10
|
+
if (!process.env.REPO_PACKAGE_MAP) {
|
|
11
|
+
throw new Error('REPO_PACKAGE_MAP not set');
|
|
12
|
+
}
|
|
13
|
+
const repoPackageMap = fs.readJsonSync(process.env.REPO_PACKAGE_MAP, { encoding: 'utf-8' });
|
|
14
|
+
// Replace paths in the 'package.json' in the current directory
|
|
15
|
+
if (fs.pathExistsSync('package.json')) {
|
|
16
|
+
const packageJson = fs.readJsonSync('package.json', { encoding: 'utf-8' });
|
|
17
|
+
for (const deps of [(_a = packageJson.dependencies) !== null && _a !== void 0 ? _a : {}, (_b = packageJson.devDependencies) !== null && _b !== void 0 ? _b : {}]) {
|
|
18
|
+
for (const [name, version] of Object.entries(deps)) {
|
|
19
|
+
deps[name] = (_c = repoPackageMap[name]) !== null && _c !== void 0 ? _c : version;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
fs.writeJsonSync('package.json', packageJson, { encoding: 'utf-8' });
|
|
23
|
+
}
|
|
24
|
+
// Replace package names on the command line
|
|
25
|
+
argv = argv.map(x => { var _a; return (_a = repoPackageMap[x]) !== null && _a !== void 0 ? _a : x; });
|
|
26
|
+
}
|
|
27
|
+
////////////////////////////////////////////////////////////////////////
|
|
28
|
+
// Shell out to original npm
|
|
29
|
+
const child = child_process.spawn('node', [require.resolve('npm'), ...argv], {
|
|
30
|
+
shell: false,
|
|
31
|
+
stdio: ['ignore', 'inherit', 'inherit'],
|
|
32
|
+
});
|
|
33
|
+
child.once('error', e => {
|
|
34
|
+
// eslint-disable-next-line no-console
|
|
35
|
+
console.error(e);
|
|
36
|
+
process.exitCode = 1;
|
|
37
|
+
});
|
|
38
|
+
child.once('close', code => {
|
|
39
|
+
if (code) {
|
|
40
|
+
process.exitCode = code;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibnBtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtDQUErQztBQUMvQywrQkFBK0I7QUFFL0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFakMsc0NBQXNDO0FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7SUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRTVGLCtEQUErRDtJQUMvRCxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFBLFdBQVcsQ0FBQyxZQUFZLG1DQUFJLEVBQUUsRUFBRSxNQUFBLFdBQVcsQ0FBQyxlQUFlLG1DQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkYsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQUEsY0FBYyxDQUFDLElBQUksQ0FBQyxtQ0FBSSxPQUFPLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7UUFDRCxFQUFFLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQUMsT0FBQSxNQUFBLGNBQWMsQ0FBQyxDQUFDLENBQUMsbUNBQUksQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsNkJBQTZCO0FBRTdCLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFO0lBQzNFLEtBQUssRUFBRSxLQUFLO0lBQ1osS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7Q0FDeEMsQ0FBQyxDQUFDO0FBRUgsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDdEIsc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUM7QUFFSCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtJQUN6QixJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcblxubGV0IGFyZ3YgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG5jb25zb2xlLmxvZygnZmFrZSBucG0nKTtcblxuaWYgKGFyZ3ZbMF0gPT09ICdpbnN0YWxsJykge1xuICBpZiAoIXByb2Nlc3MuZW52LlJFUE9fUEFDS0FHRV9NQVApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1JFUE9fUEFDS0FHRV9NQVAgbm90IHNldCcpO1xuICB9XG4gIGNvbnN0IHJlcG9QYWNrYWdlTWFwID0gZnMucmVhZEpzb25TeW5jKHByb2Nlc3MuZW52LlJFUE9fUEFDS0FHRV9NQVAsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgLy8gUmVwbGFjZSBwYXRocyBpbiB0aGUgJ3BhY2thZ2UuanNvbicgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5XG4gIGlmIChmcy5wYXRoRXhpc3RzU3luYygncGFja2FnZS5qc29uJykpIHtcbiAgICBjb25zdCBwYWNrYWdlSnNvbiA9IGZzLnJlYWRKc29uU3luYygncGFja2FnZS5qc29uJywgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICBmb3IgKGNvbnN0IGRlcHMgb2YgW3BhY2thZ2VKc29uLmRlcGVuZGVuY2llcyA/PyB7fSwgcGFja2FnZUpzb24uZGV2RGVwZW5kZW5jaWVzID8/IHt9XSkge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmVyc2lvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVwcykpIHtcbiAgICAgICAgZGVwc1tuYW1lXSA9IHJlcG9QYWNrYWdlTWFwW25hbWVdID8/IHZlcnNpb247XG4gICAgICB9XG4gICAgfVxuICAgIGZzLndyaXRlSnNvblN5bmMoJ3BhY2thZ2UuanNvbicsIHBhY2thZ2VKc29uLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICB9XG5cbiAgLy8gUmVwbGFjZSBwYWNrYWdlIG5hbWVzIG9uIHRoZSBjb21tYW5kIGxpbmVcbiAgYXJndiA9IGFyZ3YubWFwKHggPT4gcmVwb1BhY2thZ2VNYXBbeF0gPz8geCk7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gIFNoZWxsIG91dCB0byBvcmlnaW5hbCBucG1cblxuY29uc3QgY2hpbGQgPSBjaGlsZF9wcm9jZXNzLnNwYXduKCdub2RlJywgW3JlcXVpcmUucmVzb2x2ZSgnbnBtJyksIC4uLmFyZ3ZdLCB7XG4gIHNoZWxsOiBmYWxzZSxcbiAgc3RkaW86IFsnaWdub3JlJywgJ2luaGVyaXQnLCAnaW5oZXJpdCddLFxufSk7XG5cbmNoaWxkLm9uY2UoJ2Vycm9yJywgZSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gIGNvbnNvbGUuZXJyb3IoZSk7XG4gIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xufSk7XG5cbmNoaWxkLm9uY2UoJ2Nsb3NlJywgY29kZSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IGNvZGU7XG4gIH1cbn0pO1xuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as child_process from 'child_process';
|
|
2
|
+
import * as fs from 'fs-extra';
|
|
3
|
+
|
|
4
|
+
let argv = process.argv.slice(2);
|
|
5
|
+
|
|
6
|
+
// eslint-disable-next-line no-console
|
|
7
|
+
console.log('fake npm');
|
|
8
|
+
|
|
9
|
+
if (argv[0] === 'install') {
|
|
10
|
+
if (!process.env.REPO_PACKAGE_MAP) {
|
|
11
|
+
throw new Error('REPO_PACKAGE_MAP not set');
|
|
12
|
+
}
|
|
13
|
+
const repoPackageMap = fs.readJsonSync(process.env.REPO_PACKAGE_MAP, { encoding: 'utf-8' });
|
|
14
|
+
|
|
15
|
+
// Replace paths in the 'package.json' in the current directory
|
|
16
|
+
if (fs.pathExistsSync('package.json')) {
|
|
17
|
+
const packageJson = fs.readJsonSync('package.json', { encoding: 'utf-8' });
|
|
18
|
+
for (const deps of [packageJson.dependencies ?? {}, packageJson.devDependencies ?? {}]) {
|
|
19
|
+
for (const [name, version] of Object.entries(deps)) {
|
|
20
|
+
deps[name] = repoPackageMap[name] ?? version;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
fs.writeJsonSync('package.json', packageJson, { encoding: 'utf-8' });
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Replace package names on the command line
|
|
27
|
+
argv = argv.map(x => repoPackageMap[x] ?? x);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
////////////////////////////////////////////////////////////////////////
|
|
31
|
+
// Shell out to original npm
|
|
32
|
+
|
|
33
|
+
const child = child_process.spawn('node', [require.resolve('npm'), ...argv], {
|
|
34
|
+
shell: false,
|
|
35
|
+
stdio: ['ignore', 'inherit', 'inherit'],
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
child.once('error', e => {
|
|
39
|
+
// eslint-disable-next-line no-console
|
|
40
|
+
console.error(e);
|
|
41
|
+
process.exitCode = 1;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
child.once('close', code => {
|
|
45
|
+
if (code) {
|
|
46
|
+
process.exitCode = code;
|
|
47
|
+
}
|
|
48
|
+
});
|