@aws-cdk-testing/cli-integ 3.2.1 → 3.2.3

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/package.json CHANGED
@@ -108,7 +108,7 @@
108
108
  "publishConfig": {
109
109
  "access": "public"
110
110
  },
111
- "version": "3.2.1",
111
+ "version": "3.2.3",
112
112
  "types": "lib/index.d.ts",
113
113
  "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
114
114
  }
@@ -7,71 +7,68 @@ const fs_1 = require("fs");
7
7
  const path = require("path");
8
8
  const lib_1 = require("../../../lib");
9
9
  jest.setTimeout(2 * 60 * 60000); // Includes the time to acquire locks, worst-case single-threaded runtime
10
- const MAJOR_VERSIONS = ['2', 'v3-latest'];
11
- MAJOR_VERSIONS.forEach(MV => {
12
- (0, lib_1.integTest)(`cdk-assets@${MV} smoke test`, (0, lib_1.withDefaultFixture)(async (fixture) => {
13
- await fixture.shell(['npm', 'init', '-y']);
14
- await fixture.shell(['npm', 'install', `cdk-assets@${MV}`]);
15
- const account = await fixture.aws.account();
16
- const region = fixture.aws.region;
17
- const bucketName = `cdk-hnb659fds-assets-${account}-${region}`;
18
- const repositoryName = `cdk-hnb659fds-container-assets-${account}-${region}`;
19
- const imageDir = 'imagedir';
20
- await fs_1.promises.mkdir(path.join(fixture.integTestDir, imageDir), { recursive: true });
21
- // Write an asset file and a data file for the Docker image
22
- const assetFile = 'testfile.txt';
23
- for (const toCreate of [assetFile, `${imageDir}/datafile.txt`]) {
24
- await fs_1.promises.writeFile(path.join(fixture.integTestDir, toCreate), 'some asset file');
25
- }
26
- // Write a Dockerfile for the image build with a data file in it
27
- await fs_1.promises.writeFile(path.join(fixture.integTestDir, imageDir, 'Dockerfile'), [
28
- 'FROM scratch',
29
- 'ADD datafile.txt datafile.txt',
30
- ].join('\n'));
31
- // Write an asset JSON file to publish to the bootstrapped environment
32
- const assetsJson = {
33
- version: "38.0.1",
34
- files: {
35
- testfile: {
36
- source: {
37
- path: assetFile,
38
- packaging: 'file',
39
- },
40
- destinations: {
41
- current: {
42
- region,
43
- assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-file-publishing-role-${account}-${region}`,
44
- bucketName,
45
- objectKey: `test-file-${Date.now()}.json`,
46
- }
10
+ (0, lib_1.integTest)(`cdk-assets smoke test`, (0, lib_1.withDefaultFixture)(async (fixture) => {
11
+ await fixture.shell(['npm', 'init', '-y']);
12
+ await fixture.shell(['npm', 'install', `cdk-assets@latest`]);
13
+ const account = await fixture.aws.account();
14
+ const region = fixture.aws.region;
15
+ const bucketName = `cdk-hnb659fds-assets-${account}-${region}`;
16
+ const repositoryName = `cdk-hnb659fds-container-assets-${account}-${region}`;
17
+ const imageDir = 'imagedir';
18
+ await fs_1.promises.mkdir(path.join(fixture.integTestDir, imageDir), { recursive: true });
19
+ // Write an asset file and a data file for the Docker image
20
+ const assetFile = 'testfile.txt';
21
+ for (const toCreate of [assetFile, `${imageDir}/datafile.txt`]) {
22
+ await fs_1.promises.writeFile(path.join(fixture.integTestDir, toCreate), 'some asset file');
23
+ }
24
+ // Write a Dockerfile for the image build with a data file in it
25
+ await fs_1.promises.writeFile(path.join(fixture.integTestDir, imageDir, 'Dockerfile'), [
26
+ 'FROM scratch',
27
+ 'ADD datafile.txt datafile.txt',
28
+ ].join('\n'));
29
+ // Write an asset JSON file to publish to the bootstrapped environment
30
+ const assetsJson = {
31
+ version: "38.0.1",
32
+ files: {
33
+ testfile: {
34
+ source: {
35
+ path: assetFile,
36
+ packaging: 'file',
37
+ },
38
+ destinations: {
39
+ current: {
40
+ region,
41
+ assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-file-publishing-role-${account}-${region}`,
42
+ bucketName,
43
+ objectKey: `test-file-${Date.now()}.json`,
47
44
  }
48
45
  }
49
- },
50
- dockerImages: {
51
- testimage: {
52
- source: {
53
- directory: imageDir,
54
- },
55
- destinations: {
56
- current: {
57
- region,
58
- assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-image-publishing-role-${account}-${region}`,
59
- repositoryName,
60
- imageTag: `test-image`, // Not fresh on every run because we'll run out of tags too easily
61
- },
46
+ }
47
+ },
48
+ dockerImages: {
49
+ testimage: {
50
+ source: {
51
+ directory: imageDir,
52
+ },
53
+ destinations: {
54
+ current: {
55
+ region,
56
+ assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-image-publishing-role-${account}-${region}`,
57
+ repositoryName,
58
+ imageTag: `test-image`, // Not fresh on every run because we'll run out of tags too easily
62
59
  },
63
60
  },
64
- }
65
- };
66
- await fs_1.promises.writeFile(path.join(fixture.integTestDir, 'assets.json'), JSON.stringify(assetsJson, undefined, 2));
67
- await fixture.shell(['npx', 'cdk-assets', '--path', 'assets.json', '--verbose', 'publish'], {
68
- modEnv: {
69
- ...fixture.cdkShellEnv(),
70
- // This is necessary for cdk-assets v2, if the credentials are supplied via
71
- // config file (which they are on the CodeBuild canaries).
72
- AWS_SDK_LOAD_CONFIG: '1',
73
61
  },
74
- });
75
- }));
76
- });
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21va2V0ZXN0LmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNtb2tldGVzdC5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7R0FFRztBQUNILDJCQUFvQztBQUNwQyw2QkFBNkI7QUFDN0Isc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUUxQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0lBQzFCLElBQUEsZUFBUyxFQUNQLGNBQWMsRUFBRSxhQUFhLEVBQzdCLElBQUEsd0JBQWtCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1FBQ25DLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTVELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQy9ELE1BQU0sY0FBYyxHQUFHLGtDQUFrQyxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7UUFFN0UsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzVCLE1BQU0sYUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUvRSwyREFBMkQ7UUFDM0QsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ2pDLEtBQUssTUFBTSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxRQUFRLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFFRCxnRUFBZ0U7UUFDaEUsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUU7WUFDMUUsY0FBYztZQUNkLCtCQUErQjtTQUNoQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWQsc0VBQXNFO1FBQ3RFLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLEtBQUssRUFBRTtnQkFDTCxRQUFRLEVBQUU7b0JBQ1IsTUFBTSxFQUFFO3dCQUNOLElBQUksRUFBRSxTQUFTO3dCQUNmLFNBQVMsRUFBRSxNQUFNO3FCQUNsQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osT0FBTyxFQUFFOzRCQUNQLE1BQU07NEJBQ04sYUFBYSxFQUFFLCtCQUErQixPQUFPLDRDQUE0QyxPQUFPLElBQUksTUFBTSxFQUFFOzRCQUNwSCxVQUFVOzRCQUNWLFNBQVMsRUFBRSxhQUFhLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTzt5QkFDMUM7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELFlBQVksRUFBRTtnQkFDWixTQUFTLEVBQUU7b0JBQ1QsTUFBTSxFQUFFO3dCQUNOLFNBQVMsRUFBRSxRQUFRO3FCQUNwQjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osT0FBTyxFQUFFOzRCQUNQLE1BQU07NEJBQ04sYUFBYSxFQUFFLCtCQUErQixPQUFPLDZDQUE2QyxPQUFPLElBQUksTUFBTSxFQUFFOzRCQUNySCxjQUFjOzRCQUNkLFFBQVEsRUFBRSxZQUFZLEVBQUUsa0VBQWtFO3lCQUMzRjtxQkFDRjtpQkFDRjthQUNGO1NBQ0YsQ0FBQztRQUVGLE1BQU0sYUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0csTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUMxRixNQUFNLEVBQUU7Z0JBQ04sR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUN4QiwyRUFBMkU7Z0JBQzNFLDBEQUEwRDtnQkFDMUQsbUJBQW1CLEVBQUUsR0FBRzthQUN6QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVzdHMgZm9yIHRoZSBzdGFuZGFsb25lIGNkay1hc3NldHMgZXhlY3V0YWJsZSwgYXMgdXNlZCBieSBDREsgUGlwZWxpbmVzXG4gKi9cbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGludGVnVGVzdCwgd2l0aERlZmF1bHRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vLi4vbGliJztcblxuamVzdC5zZXRUaW1lb3V0KDIgKiA2MCAqIDYwXzAwMCk7IC8vIEluY2x1ZGVzIHRoZSB0aW1lIHRvIGFjcXVpcmUgbG9ja3MsIHdvcnN0LWNhc2Ugc2luZ2xlLXRocmVhZGVkIHJ1bnRpbWVcblxuY29uc3QgTUFKT1JfVkVSU0lPTlMgPSBbJzInLCAndjMtbGF0ZXN0J107XG5cbk1BSk9SX1ZFUlNJT05TLmZvckVhY2goTVYgPT4ge1xuICBpbnRlZ1Rlc3QoXG4gICAgYGNkay1hc3NldHNAJHtNVn0gc21va2UgdGVzdGAsXG4gICAgd2l0aERlZmF1bHRGaXh0dXJlKGFzeW5jIChmaXh0dXJlKSA9PiB7XG4gICAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnbnBtJywgJ2luaXQnLCAnLXknXSk7XG4gICAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnbnBtJywgJ2luc3RhbGwnLCBgY2RrLWFzc2V0c0Ake01WfWBdKTtcblxuICAgICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IGZpeHR1cmUuYXdzLmFjY291bnQoKTtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IGZpeHR1cmUuYXdzLnJlZ2lvbjtcbiAgICAgIGNvbnN0IGJ1Y2tldE5hbWUgPSBgY2RrLWhuYjY1OWZkcy1hc3NldHMtJHthY2NvdW50fS0ke3JlZ2lvbn1gO1xuICAgICAgY29uc3QgcmVwb3NpdG9yeU5hbWUgPSBgY2RrLWhuYjY1OWZkcy1jb250YWluZXItYXNzZXRzLSR7YWNjb3VudH0tJHtyZWdpb259YDtcblxuICAgICAgY29uc3QgaW1hZ2VEaXIgPSAnaW1hZ2VkaXInO1xuICAgICAgYXdhaXQgZnMubWtkaXIocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCBpbWFnZURpciksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAvLyBXcml0ZSBhbiBhc3NldCBmaWxlIGFuZCBhIGRhdGEgZmlsZSBmb3IgdGhlIERvY2tlciBpbWFnZVxuICAgICAgY29uc3QgYXNzZXRGaWxlID0gJ3Rlc3RmaWxlLnR4dCc7XG4gICAgICBmb3IgKGNvbnN0IHRvQ3JlYXRlIG9mIFthc3NldEZpbGUsIGAke2ltYWdlRGlyfS9kYXRhZmlsZS50eHRgXSkge1xuICAgICAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCB0b0NyZWF0ZSksICdzb21lIGFzc2V0IGZpbGUnKTtcbiAgICAgIH1cblxuICAgICAgLy8gV3JpdGUgYSBEb2NrZXJmaWxlIGZvciB0aGUgaW1hZ2UgYnVpbGQgd2l0aCBhIGRhdGEgZmlsZSBpbiBpdFxuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgaW1hZ2VEaXIsICdEb2NrZXJmaWxlJyksIFtcbiAgICAgICAgJ0ZST00gc2NyYXRjaCcsXG4gICAgICAgICdBREQgZGF0YWZpbGUudHh0IGRhdGFmaWxlLnR4dCcsXG4gICAgICBdLmpvaW4oJ1xcbicpKTtcblxuICAgICAgLy8gV3JpdGUgYW4gYXNzZXQgSlNPTiBmaWxlIHRvIHB1Ymxpc2ggdG8gdGhlIGJvb3RzdHJhcHBlZCBlbnZpcm9ubWVudFxuICAgICAgY29uc3QgYXNzZXRzSnNvbiA9IHtcbiAgICAgICAgdmVyc2lvbjogXCIzOC4wLjFcIixcbiAgICAgICAgZmlsZXM6IHtcbiAgICAgICAgICB0ZXN0ZmlsZToge1xuICAgICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgICAgIHBhdGg6IGFzc2V0RmlsZSxcbiAgICAgICAgICAgICAgcGFja2FnaW5nOiAnZmlsZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdGluYXRpb25zOiB7XG4gICAgICAgICAgICAgIGN1cnJlbnQ6IHtcbiAgICAgICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICAgICAgYXNzdW1lUm9sZUFybjogYGFybjpcXCR7QVdTOjpQYXJ0aXRpb259OmlhbTo6JHthY2NvdW50fTpyb2xlL2Nkay1obmI2NTlmZHMtZmlsZS1wdWJsaXNoaW5nLXJvbGUtJHthY2NvdW50fS0ke3JlZ2lvbn1gLFxuICAgICAgICAgICAgICAgIGJ1Y2tldE5hbWUsXG4gICAgICAgICAgICAgICAgb2JqZWN0S2V5OiBgdGVzdC1maWxlLSR7RGF0ZS5ub3coKX0uanNvbmAsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRvY2tlckltYWdlczoge1xuICAgICAgICAgIHRlc3RpbWFnZToge1xuICAgICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgICAgIGRpcmVjdG9yeTogaW1hZ2VEaXIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzdGluYXRpb25zOiB7XG4gICAgICAgICAgICAgIGN1cnJlbnQ6IHtcbiAgICAgICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICAgICAgYXNzdW1lUm9sZUFybjogYGFybjpcXCR7QVdTOjpQYXJ0aXRpb259OmlhbTo6JHthY2NvdW50fTpyb2xlL2Nkay1obmI2NTlmZHMtaW1hZ2UtcHVibGlzaGluZy1yb2xlLSR7YWNjb3VudH0tJHtyZWdpb259YCxcbiAgICAgICAgICAgICAgICByZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgICAgICAgICBpbWFnZVRhZzogYHRlc3QtaW1hZ2VgLCAvLyBOb3QgZnJlc2ggb24gZXZlcnkgcnVuIGJlY2F1c2Ugd2UnbGwgcnVuIG91dCBvZiB0YWdzIHRvbyBlYXNpbHlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Fzc2V0cy5qc29uJyksIEpTT04uc3RyaW5naWZ5KGFzc2V0c0pzb24sIHVuZGVmaW5lZCwgMikpO1xuICAgICAgYXdhaXQgZml4dHVyZS5zaGVsbChbJ25weCcsICdjZGstYXNzZXRzJywgJy0tcGF0aCcsICdhc3NldHMuanNvbicsICctLXZlcmJvc2UnLCAncHVibGlzaCddLCB7XG4gICAgICAgIG1vZEVudjoge1xuICAgICAgICAgIC4uLmZpeHR1cmUuY2RrU2hlbGxFbnYoKSxcbiAgICAgICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgY2RrLWFzc2V0cyB2MiwgaWYgdGhlIGNyZWRlbnRpYWxzIGFyZSBzdXBwbGllZCB2aWFcbiAgICAgICAgICAvLyBjb25maWcgZmlsZSAod2hpY2ggdGhleSBhcmUgb24gdGhlIENvZGVCdWlsZCBjYW5hcmllcykuXG4gICAgICAgICAgQVdTX1NES19MT0FEX0NPTkZJRzogJzEnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSksXG4gICk7XG59KTsiXX0=
62
+ }
63
+ };
64
+ await fs_1.promises.writeFile(path.join(fixture.integTestDir, 'assets.json'), JSON.stringify(assetsJson, undefined, 2));
65
+ await fixture.shell(['npx', 'cdk-assets', '--path', 'assets.json', '--verbose', 'publish'], {
66
+ modEnv: {
67
+ ...fixture.cdkShellEnv(),
68
+ // This is necessary for cdk-assets v2, if the credentials are supplied via
69
+ // config file (which they are on the CodeBuild canaries).
70
+ AWS_SDK_LOAD_CONFIG: '1',
71
+ },
72
+ });
73
+ }));
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21va2V0ZXN0LmludGVndGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNtb2tldGVzdC5pbnRlZ3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7R0FFRztBQUNILDJCQUFvQztBQUNwQyw2QkFBNkI7QUFDN0Isc0NBQTZEO0FBRTdELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFNLENBQUMsQ0FBQyxDQUFDLHlFQUF5RTtBQUUzRyxJQUFBLGVBQVMsRUFDUCx1QkFBdUIsRUFDdkIsSUFBQSx3QkFBa0IsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBRTdELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQy9ELE1BQU0sY0FBYyxHQUFHLGtDQUFrQyxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7SUFFN0UsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzVCLE1BQU0sYUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUvRSwyREFBMkQ7SUFDM0QsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDO0lBQ2pDLEtBQUssTUFBTSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxRQUFRLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDL0QsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUU7UUFDMUUsY0FBYztRQUNkLCtCQUErQjtLQUNoQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRWQsc0VBQXNFO0lBQ3RFLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLEtBQUssRUFBRTtZQUNMLFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLFNBQVM7b0JBQ2YsU0FBUyxFQUFFLE1BQU07aUJBQ2xCO2dCQUNELFlBQVksRUFBRTtvQkFDWixPQUFPLEVBQUU7d0JBQ1AsTUFBTTt3QkFDTixhQUFhLEVBQUUsK0JBQStCLE9BQU8sNENBQTRDLE9BQU8sSUFBSSxNQUFNLEVBQUU7d0JBQ3BILFVBQVU7d0JBQ1YsU0FBUyxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPO3FCQUMxQztpQkFDRjthQUNGO1NBQ0Y7UUFDRCxZQUFZLEVBQUU7WUFDWixTQUFTLEVBQUU7Z0JBQ1QsTUFBTSxFQUFFO29CQUNOLFNBQVMsRUFBRSxRQUFRO2lCQUNwQjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osT0FBTyxFQUFFO3dCQUNQLE1BQU07d0JBQ04sYUFBYSxFQUFFLCtCQUErQixPQUFPLDZDQUE2QyxPQUFPLElBQUksTUFBTSxFQUFFO3dCQUNySCxjQUFjO3dCQUNkLFFBQVEsRUFBRSxZQUFZLEVBQUUsa0VBQWtFO3FCQUMzRjtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1FBQzFGLE1BQU0sRUFBRTtZQUNOLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUN4QiwyRUFBMkU7WUFDM0UsMERBQTBEO1lBQzFELG1CQUFtQixFQUFFLEdBQUc7U0FDekI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUZXN0cyBmb3IgdGhlIHN0YW5kYWxvbmUgY2RrLWFzc2V0cyBleGVjdXRhYmxlLCBhcyB1c2VkIGJ5IENESyBQaXBlbGluZXNcbiAqL1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgaW50ZWdUZXN0LCB3aXRoRGVmYXVsdEZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTsgLy8gSW5jbHVkZXMgdGhlIHRpbWUgdG8gYWNxdWlyZSBsb2Nrcywgd29yc3QtY2FzZSBzaW5nbGUtdGhyZWFkZWQgcnVudGltZVxuXG5pbnRlZ1Rlc3QoXG4gIGBjZGstYXNzZXRzIHNtb2tlIHRlc3RgLFxuICB3aXRoRGVmYXVsdEZpeHR1cmUoYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICBhd2FpdCBmaXh0dXJlLnNoZWxsKFsnbnBtJywgJ2luaXQnLCAnLXknXSk7XG4gICAgYXdhaXQgZml4dHVyZS5zaGVsbChbJ25wbScsICdpbnN0YWxsJywgYGNkay1hc3NldHNAbGF0ZXN0YF0pO1xuXG4gICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IGZpeHR1cmUuYXdzLmFjY291bnQoKTtcbiAgICBjb25zdCByZWdpb24gPSBmaXh0dXJlLmF3cy5yZWdpb247XG4gICAgY29uc3QgYnVja2V0TmFtZSA9IGBjZGstaG5iNjU5ZmRzLWFzc2V0cy0ke2FjY291bnR9LSR7cmVnaW9ufWA7XG4gICAgY29uc3QgcmVwb3NpdG9yeU5hbWUgPSBgY2RrLWhuYjY1OWZkcy1jb250YWluZXItYXNzZXRzLSR7YWNjb3VudH0tJHtyZWdpb259YDtcblxuICAgIGNvbnN0IGltYWdlRGlyID0gJ2ltYWdlZGlyJztcbiAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmpvaW4oZml4dHVyZS5pbnRlZ1Rlc3REaXIsIGltYWdlRGlyKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICAvLyBXcml0ZSBhbiBhc3NldCBmaWxlIGFuZCBhIGRhdGEgZmlsZSBmb3IgdGhlIERvY2tlciBpbWFnZVxuICAgIGNvbnN0IGFzc2V0RmlsZSA9ICd0ZXN0ZmlsZS50eHQnO1xuICAgIGZvciAoY29uc3QgdG9DcmVhdGUgb2YgW2Fzc2V0RmlsZSwgYCR7aW1hZ2VEaXJ9L2RhdGFmaWxlLnR4dGBdKSB7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCB0b0NyZWF0ZSksICdzb21lIGFzc2V0IGZpbGUnKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSBhIERvY2tlcmZpbGUgZm9yIHRoZSBpbWFnZSBidWlsZCB3aXRoIGEgZGF0YSBmaWxlIGluIGl0XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgaW1hZ2VEaXIsICdEb2NrZXJmaWxlJyksIFtcbiAgICAgICdGUk9NIHNjcmF0Y2gnLFxuICAgICAgJ0FERCBkYXRhZmlsZS50eHQgZGF0YWZpbGUudHh0JyxcbiAgICBdLmpvaW4oJ1xcbicpKTtcblxuICAgIC8vIFdyaXRlIGFuIGFzc2V0IEpTT04gZmlsZSB0byBwdWJsaXNoIHRvIHRoZSBib290c3RyYXBwZWQgZW52aXJvbm1lbnRcbiAgICBjb25zdCBhc3NldHNKc29uID0ge1xuICAgICAgdmVyc2lvbjogXCIzOC4wLjFcIixcbiAgICAgIGZpbGVzOiB7XG4gICAgICAgIHRlc3RmaWxlOiB7XG4gICAgICAgICAgc291cmNlOiB7XG4gICAgICAgICAgICBwYXRoOiBhc3NldEZpbGUsXG4gICAgICAgICAgICBwYWNrYWdpbmc6ICdmaWxlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlc3RpbmF0aW9uczoge1xuICAgICAgICAgICAgY3VycmVudDoge1xuICAgICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICAgIGFzc3VtZVJvbGVBcm46IGBhcm46XFwke0FXUzo6UGFydGl0aW9ufTppYW06OiR7YWNjb3VudH06cm9sZS9jZGstaG5iNjU5ZmRzLWZpbGUtcHVibGlzaGluZy1yb2xlLSR7YWNjb3VudH0tJHtyZWdpb259YCxcbiAgICAgICAgICAgICAgYnVja2V0TmFtZSxcbiAgICAgICAgICAgICAgb2JqZWN0S2V5OiBgdGVzdC1maWxlLSR7RGF0ZS5ub3coKX0uanNvbmAsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZG9ja2VySW1hZ2VzOiB7XG4gICAgICAgIHRlc3RpbWFnZToge1xuICAgICAgICAgIHNvdXJjZToge1xuICAgICAgICAgICAgZGlyZWN0b3J5OiBpbWFnZURpcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRlc3RpbmF0aW9uczoge1xuICAgICAgICAgICAgY3VycmVudDoge1xuICAgICAgICAgICAgICByZWdpb24sXG4gICAgICAgICAgICAgIGFzc3VtZVJvbGVBcm46IGBhcm46XFwke0FXUzo6UGFydGl0aW9ufTppYW06OiR7YWNjb3VudH06cm9sZS9jZGstaG5iNjU5ZmRzLWltYWdlLXB1Ymxpc2hpbmctcm9sZS0ke2FjY291bnR9LSR7cmVnaW9ufWAsXG4gICAgICAgICAgICAgIHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICAgICAgICBpbWFnZVRhZzogYHRlc3QtaW1hZ2VgLCAvLyBOb3QgZnJlc2ggb24gZXZlcnkgcnVuIGJlY2F1c2Ugd2UnbGwgcnVuIG91dCBvZiB0YWdzIHRvbyBlYXNpbHlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ2Fzc2V0cy5qc29uJyksIEpTT04uc3RyaW5naWZ5KGFzc2V0c0pzb24sIHVuZGVmaW5lZCwgMikpO1xuICAgIGF3YWl0IGZpeHR1cmUuc2hlbGwoWyducHgnLCAnY2RrLWFzc2V0cycsICctLXBhdGgnLCAnYXNzZXRzLmpzb24nLCAnLS12ZXJib3NlJywgJ3B1Ymxpc2gnXSwge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIC4uLmZpeHR1cmUuY2RrU2hlbGxFbnYoKSxcbiAgICAgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgZm9yIGNkay1hc3NldHMgdjIsIGlmIHRoZSBjcmVkZW50aWFscyBhcmUgc3VwcGxpZWQgdmlhXG4gICAgICAgIC8vIGNvbmZpZyBmaWxlICh3aGljaCB0aGV5IGFyZSBvbiB0aGUgQ29kZUJ1aWxkIGNhbmFyaWVzKS5cbiAgICAgICAgQVdTX1NES19MT0FEX0NPTkZJRzogJzEnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSksXG4pOyJdfQ==
@@ -7,80 +7,76 @@ import { integTest, withDefaultFixture } from '../../../lib';
7
7
 
8
8
  jest.setTimeout(2 * 60 * 60_000); // Includes the time to acquire locks, worst-case single-threaded runtime
9
9
 
10
- const MAJOR_VERSIONS = ['2', 'v3-latest'];
10
+ integTest(
11
+ `cdk-assets smoke test`,
12
+ withDefaultFixture(async (fixture) => {
13
+ await fixture.shell(['npm', 'init', '-y']);
14
+ await fixture.shell(['npm', 'install', `cdk-assets@latest`]);
11
15
 
12
- MAJOR_VERSIONS.forEach(MV => {
13
- integTest(
14
- `cdk-assets@${MV} smoke test`,
15
- withDefaultFixture(async (fixture) => {
16
- await fixture.shell(['npm', 'init', '-y']);
17
- await fixture.shell(['npm', 'install', `cdk-assets@${MV}`]);
16
+ const account = await fixture.aws.account();
17
+ const region = fixture.aws.region;
18
+ const bucketName = `cdk-hnb659fds-assets-${account}-${region}`;
19
+ const repositoryName = `cdk-hnb659fds-container-assets-${account}-${region}`;
18
20
 
19
- const account = await fixture.aws.account();
20
- const region = fixture.aws.region;
21
- const bucketName = `cdk-hnb659fds-assets-${account}-${region}`;
22
- const repositoryName = `cdk-hnb659fds-container-assets-${account}-${region}`;
21
+ const imageDir = 'imagedir';
22
+ await fs.mkdir(path.join(fixture.integTestDir, imageDir), { recursive: true });
23
23
 
24
- const imageDir = 'imagedir';
25
- await fs.mkdir(path.join(fixture.integTestDir, imageDir), { recursive: true });
24
+ // Write an asset file and a data file for the Docker image
25
+ const assetFile = 'testfile.txt';
26
+ for (const toCreate of [assetFile, `${imageDir}/datafile.txt`]) {
27
+ await fs.writeFile(path.join(fixture.integTestDir, toCreate), 'some asset file');
28
+ }
26
29
 
27
- // Write an asset file and a data file for the Docker image
28
- const assetFile = 'testfile.txt';
29
- for (const toCreate of [assetFile, `${imageDir}/datafile.txt`]) {
30
- await fs.writeFile(path.join(fixture.integTestDir, toCreate), 'some asset file');
31
- }
32
-
33
- // Write a Dockerfile for the image build with a data file in it
34
- await fs.writeFile(path.join(fixture.integTestDir, imageDir, 'Dockerfile'), [
35
- 'FROM scratch',
36
- 'ADD datafile.txt datafile.txt',
37
- ].join('\n'));
30
+ // Write a Dockerfile for the image build with a data file in it
31
+ await fs.writeFile(path.join(fixture.integTestDir, imageDir, 'Dockerfile'), [
32
+ 'FROM scratch',
33
+ 'ADD datafile.txt datafile.txt',
34
+ ].join('\n'));
38
35
 
39
- // Write an asset JSON file to publish to the bootstrapped environment
40
- const assetsJson = {
41
- version: "38.0.1",
42
- files: {
43
- testfile: {
44
- source: {
45
- path: assetFile,
46
- packaging: 'file',
47
- },
48
- destinations: {
49
- current: {
50
- region,
51
- assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-file-publishing-role-${account}-${region}`,
52
- bucketName,
53
- objectKey: `test-file-${Date.now()}.json`,
54
- }
36
+ // Write an asset JSON file to publish to the bootstrapped environment
37
+ const assetsJson = {
38
+ version: "38.0.1",
39
+ files: {
40
+ testfile: {
41
+ source: {
42
+ path: assetFile,
43
+ packaging: 'file',
44
+ },
45
+ destinations: {
46
+ current: {
47
+ region,
48
+ assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-file-publishing-role-${account}-${region}`,
49
+ bucketName,
50
+ objectKey: `test-file-${Date.now()}.json`,
55
51
  }
56
52
  }
57
- },
58
- dockerImages: {
59
- testimage: {
60
- source: {
61
- directory: imageDir,
62
- },
63
- destinations: {
64
- current: {
65
- region,
66
- assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-image-publishing-role-${account}-${region}`,
67
- repositoryName,
68
- imageTag: `test-image`, // Not fresh on every run because we'll run out of tags too easily
69
- },
53
+ }
54
+ },
55
+ dockerImages: {
56
+ testimage: {
57
+ source: {
58
+ directory: imageDir,
59
+ },
60
+ destinations: {
61
+ current: {
62
+ region,
63
+ assumeRoleArn: `arn:\${AWS::Partition}:iam::${account}:role/cdk-hnb659fds-image-publishing-role-${account}-${region}`,
64
+ repositoryName,
65
+ imageTag: `test-image`, // Not fresh on every run because we'll run out of tags too easily
70
66
  },
71
67
  },
72
- }
73
- };
74
-
75
- await fs.writeFile(path.join(fixture.integTestDir, 'assets.json'), JSON.stringify(assetsJson, undefined, 2));
76
- await fixture.shell(['npx', 'cdk-assets', '--path', 'assets.json', '--verbose', 'publish'], {
77
- modEnv: {
78
- ...fixture.cdkShellEnv(),
79
- // This is necessary for cdk-assets v2, if the credentials are supplied via
80
- // config file (which they are on the CodeBuild canaries).
81
- AWS_SDK_LOAD_CONFIG: '1',
82
68
  },
83
- });
84
- }),
85
- );
86
- });
69
+ }
70
+ };
71
+
72
+ await fs.writeFile(path.join(fixture.integTestDir, 'assets.json'), JSON.stringify(assetsJson, undefined, 2));
73
+ await fixture.shell(['npx', 'cdk-assets', '--path', 'assets.json', '--verbose', 'publish'], {
74
+ modEnv: {
75
+ ...fixture.cdkShellEnv(),
76
+ // This is necessary for cdk-assets v2, if the credentials are supplied via
77
+ // config file (which they are on the CodeBuild canaries).
78
+ AWS_SDK_LOAD_CONFIG: '1',
79
+ },
80
+ });
81
+ }),
82
+ );
@@ -7,11 +7,21 @@ const lib_1 = require("../../lib");
7
7
  const TIMEOUT = 1800000;
8
8
  (0, lib_1.integTest)('amplify integration', (0, with_tool_context_1.withToolContext)(async (context) => {
9
9
  const shell = lib_1.ShellHelper.fromContext(context);
10
- await shell.shell(['npm', 'create', '-y', 'amplify@latest']);
11
- await shell.shell(['npx', 'ampx', 'configure', 'telemetry', 'disable']);
10
+ ////////////////////////////////////////////////////////////////////////
11
+ // Make sure that create-amplify installs the right versions of the CLI and framework
12
+ //
13
+ // Install `create-amplify` without running it, then hack the json file with the
14
+ // package versions in it before we execute.
15
+ await shell.shell(['npm', 'init', '-y']);
16
+ await shell.shell(['npm', 'install', '--save-dev', 'create-amplify@latest']);
12
17
  // This will create 'package.json' implicating a certain version of the CDK
13
18
  await updateCdkDependency(context, context.packages.requestedCliVersion(), context.packages.requestedFrameworkVersion());
14
- await shell.shell(['npm', 'install']);
19
+ ////////////////////////////////////////////////////////////////////////
20
+ // Run the `npm create` workflow
21
+ //
22
+ // I tested to confirm that this will use the locally installed `create-amplify`
23
+ await shell.shell(['npm', 'create', '-y', 'amplify']);
24
+ await shell.shell(['npx', 'ampx', 'configure', 'telemetry', 'disable']);
15
25
  await shell.shell(['npx', 'ampx', 'sandbox', '--once'], {
16
26
  modEnv: {
17
27
  AWS_REGION: context.aws.region,
@@ -30,10 +40,46 @@ const TIMEOUT = 1800000;
30
40
  }
31
41
  }), TIMEOUT);
32
42
  async function updateCdkDependency(context, cliVersion, libVersion) {
33
- const filename = path.join(context.integTestDir, 'package.json');
43
+ const filename = path.join(context.integTestDir, 'node_modules', 'create-amplify', 'lib', 'default_packages.json');
34
44
  const pj = JSON.parse(await fs_1.promises.readFile(filename, { encoding: 'utf-8' }));
35
- pj.devDependencies['aws-cdk'] = cliVersion;
36
- pj.devDependencies['aws-cdk-lib'] = libVersion;
45
+ // Be extra paranoid about the types here, since we don't fully control them
46
+ assertIsObject(pj);
47
+ assertIsStringArray(pj.defaultDevPackages);
48
+ replacePackageVersionIn('aws-cdk', cliVersion, pj.defaultDevPackages);
49
+ replacePackageVersionIn('aws-cdk-lib', libVersion, pj.defaultDevPackages);
37
50
  await fs_1.promises.writeFile(filename, JSON.stringify(pj, undefined, 2), { encoding: 'utf-8' });
38
51
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGlmeS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhbXBsaWZ5LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJCQUFvQztBQUNwQyw2QkFBNkI7QUFDN0IsMkRBQXNEO0FBQ3RELG1DQUE4RTtBQUU5RSxNQUFNLE9BQU8sR0FBRyxPQUFRLENBQUM7QUFFekIsSUFBQSxlQUFTLEVBQUMscUJBQXFCLEVBQUUsSUFBQSxtQ0FBZSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNqRSxNQUFNLEtBQUssR0FBRyxpQkFBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDN0QsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFeEUsMkVBQTJFO0lBQzNFLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQztJQUN6SCxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUV0QyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTtRQUN0RCxNQUFNLEVBQUU7WUFDTixVQUFVLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQy9CO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxDQUFDO1FBRUgsNEVBQTRFO1FBQzVFLGlCQUFpQjtJQUVuQixDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUMvRCxNQUFNLEVBQUU7Z0JBQ04sVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTTthQUMvQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUViLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxPQUFrQyxFQUFFLFVBQWtCLEVBQUUsVUFBa0I7SUFDM0csTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxhQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDM0MsRUFBRSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRyxVQUFVLENBQUM7SUFDL0MsTUFBTSxhQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN4RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgd2l0aFRvb2xDb250ZXh0IH0gZnJvbSAnLi93aXRoLXRvb2wtY29udGV4dCc7XG5pbXBvcnQgeyBpbnRlZ1Rlc3QsIFNoZWxsSGVscGVyLCBUZW1wb3JhcnlEaXJlY3RvcnlDb250ZXh0IH0gZnJvbSAnLi4vLi4vbGliJztcblxuY29uc3QgVElNRU9VVCA9IDE4MDBfMDAwO1xuXG5pbnRlZ1Rlc3QoJ2FtcGxpZnkgaW50ZWdyYXRpb24nLCB3aXRoVG9vbENvbnRleHQoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgY29uc3Qgc2hlbGwgPSBTaGVsbEhlbHBlci5mcm9tQ29udGV4dChjb250ZXh0KTtcblxuICBhd2FpdCBzaGVsbC5zaGVsbChbJ25wbScsICdjcmVhdGUnLCAnLXknLCAnYW1wbGlmeUBsYXRlc3QnXSk7XG4gIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnB4JywgJ2FtcHgnLCAnY29uZmlndXJlJywgJ3RlbGVtZXRyeScsICdkaXNhYmxlJ10pO1xuXG4gIC8vIFRoaXMgd2lsbCBjcmVhdGUgJ3BhY2thZ2UuanNvbicgaW1wbGljYXRpbmcgYSBjZXJ0YWluIHZlcnNpb24gb2YgdGhlIENES1xuICBhd2FpdCB1cGRhdGVDZGtEZXBlbmRlbmN5KGNvbnRleHQsIGNvbnRleHQucGFja2FnZXMucmVxdWVzdGVkQ2xpVmVyc2lvbigpLCBjb250ZXh0LnBhY2thZ2VzLnJlcXVlc3RlZEZyYW1ld29ya1ZlcnNpb24oKSk7XG4gIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJ2luc3RhbGwnXSk7XG5cbiAgYXdhaXQgc2hlbGwuc2hlbGwoWyducHgnLCAnYW1weCcsICdzYW5kYm94JywgJy0tb25jZSddLCB7XG4gICAgbW9kRW52OiB7XG4gICAgICBBV1NfUkVHSU9OOiBjb250ZXh0LmF3cy5yZWdpb24sXG4gICAgfSxcbiAgfSk7XG4gIHRyeSB7XG5cbiAgICAvLyBGdXR1cmUgY29kZSBnb2VzIGhlcmUsIHB1dHRpbmcgdGhlIHRyeS9maW5hbGx5IGhlcmUgYWxyZWFkeSBzbyBpdCBkb2Vzbid0XG4gICAgLy8gZ2V0IGZvcmdvdHRlbi5cblxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnB4JywgJ2FtcHgnLCAnc2FuZGJveCcsICdkZWxldGUnLCAnLS15ZXMnXSwge1xuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEFXU19SRUdJT046IGNvbnRleHQuYXdzLnJlZ2lvbixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn0pLCBUSU1FT1VUKTtcblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQ2RrRGVwZW5kZW5jeShjb250ZXh0OiBUZW1wb3JhcnlEaXJlY3RvcnlDb250ZXh0LCBjbGlWZXJzaW9uOiBzdHJpbmcsIGxpYlZlcnNpb246IHN0cmluZykge1xuICBjb25zdCBmaWxlbmFtZSA9IHBhdGguam9pbihjb250ZXh0LmludGVnVGVzdERpciwgJ3BhY2thZ2UuanNvbicpO1xuICBjb25zdCBwaiA9IEpTT04ucGFyc2UoYXdhaXQgZnMucmVhZEZpbGUoZmlsZW5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpO1xuICBwai5kZXZEZXBlbmRlbmNpZXNbJ2F3cy1jZGsnXSA9IGNsaVZlcnNpb247XG4gIHBqLmRldkRlcGVuZGVuY2llc1snYXdzLWNkay1saWInXSA9IGxpYlZlcnNpb247XG4gIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlbmFtZSwgSlNPTi5zdHJpbmdpZnkocGosIHVuZGVmaW5lZCwgMiksIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG59XG4iXX0=
52
+ /**
53
+ * Mutably update the given string array, replacing the version of packages with the given name
54
+ *
55
+ * We assume the list of packages is a string array of the form
56
+ *
57
+ * ```
58
+ * ["package@version", "package@version", ...]
59
+ * ```
60
+ *
61
+ * It's a failure if we don't find an entry to update.
62
+ */
63
+ function replacePackageVersionIn(packName, version, xs) {
64
+ let didUpdate = false;
65
+ for (let i = 0; i < xs.length; i++) {
66
+ if (xs[i].startsWith(`${packName}@`)) {
67
+ xs[i] = `${packName}@${version}`;
68
+ didUpdate = true;
69
+ }
70
+ }
71
+ if (!didUpdate) {
72
+ throw new Error(`Did not find a package version to update for ${packName} in ${JSON.stringify(xs)}`);
73
+ }
74
+ }
75
+ function assertIsObject(xs) {
76
+ if (typeof xs !== 'object' || xs === null) {
77
+ throw new Error(`Expected object, got ${JSON.stringify(xs)}`);
78
+ }
79
+ }
80
+ function assertIsStringArray(xs) {
81
+ if (!Array.isArray(xs) || xs.length === 0 || typeof xs[0] !== 'string') {
82
+ throw new Error(`Expected list of strings, got ${JSON.stringify(xs)}`);
83
+ }
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGlmeS5pbnRlZ3Rlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhbXBsaWZ5LmludGVndGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJCQUFvQztBQUNwQyw2QkFBNkI7QUFDN0IsMkRBQXNEO0FBQ3RELG1DQUE4RTtBQUU5RSxNQUFNLE9BQU8sR0FBRyxPQUFRLENBQUM7QUFFekIsSUFBQSxlQUFTLEVBQUMscUJBQXFCLEVBQUUsSUFBQSxtQ0FBZSxFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtJQUNqRSxNQUFNLEtBQUssR0FBRyxpQkFBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUUvQyx3RUFBd0U7SUFDeEUsc0ZBQXNGO0lBQ3RGLEVBQUU7SUFFRixnRkFBZ0Y7SUFDaEYsNENBQTRDO0lBQzVDLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6QyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFDN0UsMkVBQTJFO0lBQzNFLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQztJQUV6SCx3RUFBd0U7SUFDeEUsaUNBQWlDO0lBQ2pDLEVBQUU7SUFFRixnRkFBZ0Y7SUFDaEYsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN0RCxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxD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LEVBQVc7SUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyB3aXRoVG9vbENvbnRleHQgfSBmcm9tICcuL3dpdGgtdG9vbC1jb250ZXh0JztcbmltcG9ydCB7IGludGVnVGVzdCwgU2hlbGxIZWxwZXIsIFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQgfSBmcm9tICcuLi8uLi9saWInO1xuXG5jb25zdCBUSU1FT1VUID0gMTgwMF8wMDA7XG5cbmludGVnVGVzdCgnYW1wbGlmeSBpbnRlZ3JhdGlvbicsIHdpdGhUb29sQ29udGV4dChhc3luYyAoY29udGV4dCkgPT4ge1xuICBjb25zdCBzaGVsbCA9IFNoZWxsSGVscGVyLmZyb21Db250ZXh0KGNvbnRleHQpO1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyAgTWFrZSBzdXJlIHRoYXQgY3JlYXRlLWFtcGxpZnkgaW5zdGFsbHMgdGhlIHJpZ2h0IHZlcnNpb25zIG9mIHRoZSBDTEkgYW5kIGZyYW1ld29ya1xuICAvL1xuXG4gIC8vIEluc3RhbGwgYGNyZWF0ZS1hbXBsaWZ5YCB3aXRob3V0IHJ1bm5pbmcgaXQsIHRoZW4gaGFjayB0aGUganNvbiBmaWxlIHdpdGggdGhlXG4gIC8vIHBhY2thZ2UgdmVyc2lvbnMgaW4gaXQgYmVmb3JlIHdlIGV4ZWN1dGUuXG4gIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJ2luaXQnLCAnLXknXSk7XG4gIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJ2luc3RhbGwnLCAnLS1zYXZlLWRldicsICdjcmVhdGUtYW1wbGlmeUBsYXRlc3QnXSk7XG4gIC8vIFRoaXMgd2lsbCBjcmVhdGUgJ3BhY2thZ2UuanNvbicgaW1wbGljYXRpbmcgYSBjZXJ0YWluIHZlcnNpb24gb2YgdGhlIENES1xuICBhd2FpdCB1cGRhdGVDZGtEZXBlbmRlbmN5KGNvbnRleHQsIGNvbnRleHQucGFja2FnZXMucmVxdWVzdGVkQ2xpVmVyc2lvbigpLCBjb250ZXh0LnBhY2thZ2VzLnJlcXVlc3RlZEZyYW1ld29ya1ZlcnNpb24oKSk7XG5cbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vICBSdW4gdGhlIGBucG0gY3JlYXRlYCB3b3JrZmxvd1xuICAvL1xuXG4gIC8vIEkgdGVzdGVkIHRvIGNvbmZpcm0gdGhhdCB0aGlzIHdpbGwgdXNlIHRoZSBsb2NhbGx5IGluc3RhbGxlZCBgY3JlYXRlLWFtcGxpZnlgXG4gIGF3YWl0IHNoZWxsLnNoZWxsKFsnbnBtJywgJ2NyZWF0ZScsICcteScsICdhbXBsaWZ5J10pO1xuICBhd2FpdCBzaGVsbC5zaGVsbChbJ25weCcsICdhbXB4JywgJ2NvbmZpZ3VyZScsICd0ZWxlbWV0cnknLCAnZGlzYWJsZSddKTtcblxuICBhd2FpdCBzaGVsbC5zaGVsbChbJ25weCcsICdhbXB4JywgJ3NhbmRib3gnLCAnLS1vbmNlJ10sIHtcbiAgICBtb2RFbnY6IHtcbiAgICAgIEFXU19SRUdJT046IGNvbnRleHQuYXdzLnJlZ2lvbixcbiAgICB9LFxuICB9KTtcbiAgdHJ5IHtcblxuICAgIC8vIEZ1dHVyZSBjb2RlIGdvZXMgaGVyZSwgcHV0dGluZyB0aGUgdHJ5L2ZpbmFsbHkgaGVyZSBhbHJlYWR5IHNvIGl0IGRvZXNuJ3RcbiAgICAvLyBnZXQgZm9yZ290dGVuLlxuXG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgc2hlbGwuc2hlbGwoWyducHgnLCAnYW1weCcsICdzYW5kYm94JywgJ2RlbGV0ZScsICctLXllcyddLCB7XG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQVdTX1JFR0lPTjogY29udGV4dC5hd3MucmVnaW9uLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufSksIFRJTUVPVVQpO1xuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVDZGtEZXBlbmRlbmN5KGNvbnRleHQ6IFRlbXBvcmFyeURpcmVjdG9yeUNvbnRleHQsIGNsaVZlcnNpb246IHN0cmluZywgbGliVmVyc2lvbjogc3RyaW5nKSB7XG4gIGNvbnN0IGZpbGVuYW1lID0gcGF0aC5qb2luKGNvbnRleHQuaW50ZWdUZXN0RGlyLCAnbm9kZV9tb2R1bGVzJywgJ2NyZWF0ZS1hbXBsaWZ5JywgJ2xpYicsICdkZWZhdWx0X3BhY2thZ2VzLmpzb24nKTtcbiAgY29uc3QgcGo6IHVua25vd24gPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVuYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcblxuICAvLyBCZSBleHRyYSBwYXJhbm9pZCBhYm91dCB0aGUgdHlwZXMgaGVyZSwgc2luY2Ugd2UgZG9uJ3QgZnVsbHkgY29udHJvbCB0aGVtXG4gIGFzc2VydElzT2JqZWN0KHBqKTtcbiAgYXNzZXJ0SXNTdHJpbmdBcnJheShwai5kZWZhdWx0RGV2UGFja2FnZXMpO1xuXG4gIHJlcGxhY2VQYWNrYWdlVmVyc2lvbkluKCdhd3MtY2RrJywgY2xpVmVyc2lvbiwgcGouZGVmYXVsdERldlBhY2thZ2VzKTtcbiAgcmVwbGFjZVBhY2thZ2VWZXJzaW9uSW4oJ2F3cy1jZGstbGliJywgbGliVmVyc2lvbiwgcGouZGVmYXVsdERldlBhY2thZ2VzKTtcblxuICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZW5hbWUsIEpTT04uc3RyaW5naWZ5KHBqLCB1bmRlZmluZWQsIDIpLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xufVxuXG4vKipcbiAqIE11dGFibHkgdXBkYXRlIHRoZSBnaXZlbiBzdHJpbmcgYXJyYXksIHJlcGxhY2luZyB0aGUgdmVyc2lvbiBvZiBwYWNrYWdlcyB3aXRoIHRoZSBnaXZlbiBuYW1lXG4gKlxuICogV2UgYXNzdW1lIHRoZSBsaXN0IG9mIHBhY2thZ2VzIGlzIGEgc3RyaW5nIGFycmF5IG9mIHRoZSBmb3JtXG4gKlxuICogYGBgXG4gKiBbXCJwYWNrYWdlQHZlcnNpb25cIiwgXCJwYWNrYWdlQHZlcnNpb25cIiwgLi4uXVxuICogYGBgXG4gKlxuICogSXQncyBhIGZhaWx1cmUgaWYgd2UgZG9uJ3QgZmluZCBhbiBlbnRyeSB0byB1cGRhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VQYWNrYWdlVmVyc2lvbkluKHBhY2tOYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZywgeHM6IHN0cmluZ1tdKSB7XG4gIGxldCBkaWRVcGRhdGUgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB4cy5sZW5ndGg7IGkrKykge1xuICAgIGlmICh4c1tpXS5zdGFydHNXaXRoKGAke3BhY2tOYW1lfUBgKSkge1xuICAgICAgeHNbaV0gPSBgJHtwYWNrTmFtZX1AJHt2ZXJzaW9ufWA7XG4gICAgICBkaWRVcGRhdGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICghZGlkVXBkYXRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGZpbmQgYSBwYWNrYWdlIHZlcnNpb24gdG8gdXBkYXRlIGZvciAke3BhY2tOYW1lfSBpbiAke0pTT04uc3RyaW5naWZ5KHhzKX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRJc09iamVjdCh4czogdW5rbm93bik6IGFzc2VydHMgeHMgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAodHlwZW9mIHhzICE9PSAnb2JqZWN0JyB8fCB4cyA9PT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgb2JqZWN0LCBnb3QgJHtKU09OLnN0cmluZ2lmeSh4cyl9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNTdHJpbmdBcnJheSh4czogdW5rbm93bik6IGFzc2VydHMgeHMgaXMgc3RyaW5nW10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoeHMpIHx8IHhzLmxlbmd0aCA9PT0gMCB8fCB0eXBlb2YgeHNbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBsaXN0IG9mIHN0cmluZ3MsIGdvdCAke0pTT04uc3RyaW5naWZ5KHhzKX1gKTtcbiAgfVxufVxuIl19
@@ -8,12 +8,24 @@ const TIMEOUT = 1800_000;
8
8
  integTest('amplify integration', withToolContext(async (context) => {
9
9
  const shell = ShellHelper.fromContext(context);
10
10
 
11
- await shell.shell(['npm', 'create', '-y', 'amplify@latest']);
12
- await shell.shell(['npx', 'ampx', 'configure', 'telemetry', 'disable']);
11
+ ////////////////////////////////////////////////////////////////////////
12
+ // Make sure that create-amplify installs the right versions of the CLI and framework
13
+ //
13
14
 
15
+ // Install `create-amplify` without running it, then hack the json file with the
16
+ // package versions in it before we execute.
17
+ await shell.shell(['npm', 'init', '-y']);
18
+ await shell.shell(['npm', 'install', '--save-dev', 'create-amplify@latest']);
14
19
  // This will create 'package.json' implicating a certain version of the CDK
15
20
  await updateCdkDependency(context, context.packages.requestedCliVersion(), context.packages.requestedFrameworkVersion());
16
- await shell.shell(['npm', 'install']);
21
+
22
+ ////////////////////////////////////////////////////////////////////////
23
+ // Run the `npm create` workflow
24
+ //
25
+
26
+ // I tested to confirm that this will use the locally installed `create-amplify`
27
+ await shell.shell(['npm', 'create', '-y', 'amplify']);
28
+ await shell.shell(['npx', 'ampx', 'configure', 'telemetry', 'disable']);
17
29
 
18
30
  await shell.shell(['npx', 'ampx', 'sandbox', '--once'], {
19
31
  modEnv: {
@@ -35,9 +47,52 @@ integTest('amplify integration', withToolContext(async (context) => {
35
47
  }), TIMEOUT);
36
48
 
37
49
  async function updateCdkDependency(context: TemporaryDirectoryContext, cliVersion: string, libVersion: string) {
38
- const filename = path.join(context.integTestDir, 'package.json');
39
- const pj = JSON.parse(await fs.readFile(filename, { encoding: 'utf-8' }));
40
- pj.devDependencies['aws-cdk'] = cliVersion;
41
- pj.devDependencies['aws-cdk-lib'] = libVersion;
50
+ const filename = path.join(context.integTestDir, 'node_modules', 'create-amplify', 'lib', 'default_packages.json');
51
+ const pj: unknown = JSON.parse(await fs.readFile(filename, { encoding: 'utf-8' }));
52
+
53
+ // Be extra paranoid about the types here, since we don't fully control them
54
+ assertIsObject(pj);
55
+ assertIsStringArray(pj.defaultDevPackages);
56
+
57
+ replacePackageVersionIn('aws-cdk', cliVersion, pj.defaultDevPackages);
58
+ replacePackageVersionIn('aws-cdk-lib', libVersion, pj.defaultDevPackages);
59
+
42
60
  await fs.writeFile(filename, JSON.stringify(pj, undefined, 2), { encoding: 'utf-8' });
43
61
  }
62
+
63
+ /**
64
+ * Mutably update the given string array, replacing the version of packages with the given name
65
+ *
66
+ * We assume the list of packages is a string array of the form
67
+ *
68
+ * ```
69
+ * ["package@version", "package@version", ...]
70
+ * ```
71
+ *
72
+ * It's a failure if we don't find an entry to update.
73
+ */
74
+ function replacePackageVersionIn(packName: string, version: string, xs: string[]) {
75
+ let didUpdate = false;
76
+ for (let i = 0; i < xs.length; i++) {
77
+ if (xs[i].startsWith(`${packName}@`)) {
78
+ xs[i] = `${packName}@${version}`;
79
+ didUpdate = true;
80
+ }
81
+ }
82
+
83
+ if (!didUpdate) {
84
+ throw new Error(`Did not find a package version to update for ${packName} in ${JSON.stringify(xs)}`);
85
+ }
86
+ }
87
+
88
+ function assertIsObject(xs: unknown): asserts xs is Record<string, unknown> {
89
+ if (typeof xs !== 'object' || xs === null) {
90
+ throw new Error(`Expected object, got ${JSON.stringify(xs)}`);
91
+ }
92
+ }
93
+
94
+ function assertIsStringArray(xs: unknown): asserts xs is string[] {
95
+ if (!Array.isArray(xs) || xs.length === 0 || typeof xs[0] !== 'string') {
96
+ throw new Error(`Expected list of strings, got ${JSON.stringify(xs)}`);
97
+ }
98
+ }