aws-delivlib 13.4.2 → 13.4.6
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/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/create-release.js +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package-lock.json +100 -95
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/package.json +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/publish.sh +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/sign-files.sh +0 -0
- package/cdk.out/{asset.e12c7af9b638ac5f6e69012fdab4a414bd0c107b6a233304e64b443a621ecd20 → asset.1c4d00e8f9125a52b4db3e74494c950959ffa433738adcf5c9f7251e4d255451}/with-signing-key.sh +0 -0
- package/cdk.out/{asset.dc2e98009b027861f34e56eebb81faa5a3951ed9da80ce4a903a45de04268238 → asset.3044256b9586ecb8a7709713aaca30ceb34f699e3f93c8858f633aaf2f0c7140}/index.js +17 -11
- package/cdk.out/delivlib-test.assets.json +8 -8
- package/cdk.out/delivlib-test.template.json +32 -27
- package/cdk.out/manifest.json +272 -272
- package/cdk.out/tree.json +442 -437
- package/lib/custom-resource-handlers/src/certificate-signing-request.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/pgp-secret.tsbuildinfo +1 -1
- package/lib/custom-resource-handlers/src/private-key.tsbuildinfo +1 -1
- package/lib/publishing/github/package-lock.json +100 -95
- package/package.json +17 -18
- package/lib/__tests__/auto-build.test.d.ts +0 -1
- package/lib/__tests__/auto-build.test.js +0 -119
- package/lib/__tests__/build-spec.test.d.ts +0 -1
- package/lib/__tests__/build-spec.test.js +0 -82
- package/lib/__tests__/bump.test.d.ts +0 -1
- package/lib/__tests__/bump.test.js +0 -284
- package/lib/__tests__/canary.test.d.ts +0 -1
- package/lib/__tests__/canary.test.js +0 -144
- package/lib/__tests__/change-control-lambda/disable-transition.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/disable-transition.test.js +0 -64
- package/lib/__tests__/change-control-lambda/handler.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/handler.test.js +0 -143
- package/lib/__tests__/change-control-lambda/time-window.test.d.ts +0 -1
- package/lib/__tests__/change-control-lambda/time-window.test.js +0 -131
- package/lib/__tests__/chime-notifier.test.d.ts +0 -6
- package/lib/__tests__/chime-notifier.test.js +0 -138
- package/lib/__tests__/code-signing-cert.test.d.ts +0 -1
- package/lib/__tests__/code-signing-cert.test.js +0 -72
- package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_cloud-formation.test.js +0 -100
- package/lib/__tests__/custom-resource-handlers/_exec.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_exec.test.js +0 -9
- package/lib/__tests__/custom-resource-handlers/_rmrf.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/_rmrf.test.js +0 -13
- package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/certificate-signing-request.test.js +0 -171
- package/lib/__tests__/custom-resource-handlers/pgp-secret.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/pgp-secret.test.js +0 -169
- package/lib/__tests__/custom-resource-handlers/private-key.test.d.ts +0 -1
- package/lib/__tests__/custom-resource-handlers/private-key.test.js +0 -164
- package/lib/__tests__/integ.delivlib.d.ts +0 -1
- package/lib/__tests__/integ.delivlib.js +0 -33
- package/lib/__tests__/open-pgp-key-pair.test.d.ts +0 -1
- package/lib/__tests__/open-pgp-key-pair.test.js +0 -130
- package/lib/__tests__/pipeline-notifications/chime.test.d.ts +0 -1
- package/lib/__tests__/pipeline-notifications/chime.test.js +0 -69
- package/lib/__tests__/pipeline-notifications/slack.test.d.ts +0 -1
- package/lib/__tests__/pipeline-notifications/slack.test.js +0 -82
- package/lib/__tests__/pipeline.test.d.ts +0 -1
- package/lib/__tests__/pipeline.test.js +0 -362
- package/lib/__tests__/pr.test.d.ts +0 -3
- package/lib/__tests__/pr.test.js +0 -88
- package/lib/__tests__/publishing.test.d.ts +0 -1
- package/lib/__tests__/publishing.test.js +0 -89
- package/lib/__tests__/registry-sync/ecr-mirror.test.d.ts +0 -1
- package/lib/__tests__/registry-sync/ecr-mirror.test.js +0 -313
- package/lib/__tests__/registry-sync/mirror-source.test.d.ts +0 -1
- package/lib/__tests__/registry-sync/mirror-source.test.js +0 -225
- package/lib/__tests__/shellable.test.d.ts +0 -1
- package/lib/__tests__/shellable.test.js +0 -479
- package/lib/__tests__/test-stack.d.ts +0 -4
- package/lib/__tests__/test-stack.js +0 -184
- package/lib/__tests__/watcher-handler.test.d.ts +0 -1
- package/lib/__tests__/watcher-handler.test.js +0 -190
- package/lib/__tests__/watcher.test.d.ts +0 -1
- package/lib/__tests__/watcher.test.js +0 -78
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
const delivlib = __importStar(require("../../lib"));
|
|
23
|
-
test('buildspec single artifact goes to "artifacts"', () => {
|
|
24
|
-
const bs = delivlib.BuildSpec.simple({
|
|
25
|
-
build: ['echo hello > foo/file.txt'],
|
|
26
|
-
artifactDirectory: 'foo',
|
|
27
|
-
});
|
|
28
|
-
const rendered = bs.render();
|
|
29
|
-
expect(rendered).toEqual({
|
|
30
|
-
artifacts: {
|
|
31
|
-
'base-directory': 'foo',
|
|
32
|
-
'files': [
|
|
33
|
-
'**/*',
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
phases: {
|
|
37
|
-
build: {
|
|
38
|
-
commands: [
|
|
39
|
-
'echo hello > foo/file.txt',
|
|
40
|
-
],
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
version: '0.2',
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
test('buildspec multiple artifacts all go into "secondary-artifacts"', () => {
|
|
47
|
-
const bs = delivlib.BuildSpec.simple({
|
|
48
|
-
build: ['echo hello > foo/file.txt'],
|
|
49
|
-
artifactDirectory: 'foo',
|
|
50
|
-
additionalArtifactDirectories: {
|
|
51
|
-
artifact2: 'boo',
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
const rendered = bs.render({ primaryArtifactName: 'primrose' });
|
|
55
|
-
expect(rendered).toEqual({
|
|
56
|
-
artifacts: {
|
|
57
|
-
'secondary-artifacts': {
|
|
58
|
-
primrose: {
|
|
59
|
-
'base-directory': 'foo',
|
|
60
|
-
'files': [
|
|
61
|
-
'**/*',
|
|
62
|
-
],
|
|
63
|
-
},
|
|
64
|
-
artifact2: {
|
|
65
|
-
'base-directory': 'boo',
|
|
66
|
-
'files': [
|
|
67
|
-
'**/*',
|
|
68
|
-
],
|
|
69
|
-
},
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
phases: {
|
|
73
|
-
build: {
|
|
74
|
-
commands: [
|
|
75
|
-
'echo hello > foo/file.txt',
|
|
76
|
-
],
|
|
77
|
-
},
|
|
78
|
-
},
|
|
79
|
-
version: '0.2',
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtc3BlYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYnVpbGQtc3BlYy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUFzQztBQUd0QyxJQUFJLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO0lBQ3pELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ25DLEtBQUssRUFBRSxDQUFDLDJCQUEyQixDQUFDO1FBQ3BDLGlCQUFpQixFQUFFLEtBQUs7S0FDekIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRTdCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkIsU0FBUyxFQUFFO1lBQ1QsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixPQUFPLEVBQUU7Z0JBQ1AsTUFBTTthQUNQO1NBQ0Y7UUFDRCxNQUFNLEVBQUU7WUFDTixLQUFLLEVBQUU7Z0JBQ0wsUUFBUSxFQUFFO29CQUNSLDJCQUEyQjtpQkFDNUI7YUFDRjtTQUNGO1FBQ0QsT0FBTyxFQUFFLEtBQUs7S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxnRUFBZ0UsRUFBRSxHQUFHLEVBQUU7SUFDMUUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDbkMsS0FBSyxFQUFFLENBQUMsMkJBQTJCLENBQUM7UUFDcEMsaUJBQWlCLEVBQUUsS0FBSztRQUN4Qiw2QkFBNkIsRUFBRTtZQUM3QixTQUFTLEVBQUUsS0FBSztTQUNqQjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBRWhFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkIsU0FBUyxFQUFFO1lBQ1QscUJBQXFCLEVBQUU7Z0JBQ3JCLFFBQVEsRUFBRTtvQkFDUixnQkFBZ0IsRUFBRSxLQUFLO29CQUN2QixPQUFPLEVBQUU7d0JBQ1AsTUFBTTtxQkFDUDtpQkFDRjtnQkFDRCxTQUFTLEVBQUU7b0JBQ1QsZ0JBQWdCLEVBQUUsS0FBSztvQkFDdkIsT0FBTyxFQUFFO3dCQUNQLE1BQU07cUJBQ1A7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsTUFBTSxFQUFFO1lBQ04sS0FBSyxFQUFFO2dCQUNMLFFBQVEsRUFBRTtvQkFDUiwyQkFBMkI7aUJBQzVCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sRUFBRSxLQUFLO0tBQ2YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBkZWxpdmxpYiBmcm9tICcuLi8uLi9saWInO1xuXG5cbnRlc3QoJ2J1aWxkc3BlYyBzaW5nbGUgYXJ0aWZhY3QgZ29lcyB0byBcImFydGlmYWN0c1wiJywgKCkgPT4ge1xuICBjb25zdCBicyA9IGRlbGl2bGliLkJ1aWxkU3BlYy5zaW1wbGUoe1xuICAgIGJ1aWxkOiBbJ2VjaG8gaGVsbG8gPiBmb28vZmlsZS50eHQnXSxcbiAgICBhcnRpZmFjdERpcmVjdG9yeTogJ2ZvbycsXG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlcmVkID0gYnMucmVuZGVyKCk7XG5cbiAgZXhwZWN0KHJlbmRlcmVkKS50b0VxdWFsKHtcbiAgICBhcnRpZmFjdHM6IHtcbiAgICAgICdiYXNlLWRpcmVjdG9yeSc6ICdmb28nLFxuICAgICAgJ2ZpbGVzJzogW1xuICAgICAgICAnKiovKicsXG4gICAgICBdLFxuICAgIH0sXG4gICAgcGhhc2VzOiB7XG4gICAgICBidWlsZDoge1xuICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICdlY2hvIGhlbGxvID4gZm9vL2ZpbGUudHh0JyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB2ZXJzaW9uOiAnMC4yJyxcbiAgfSk7XG59KTtcblxudGVzdCgnYnVpbGRzcGVjIG11bHRpcGxlIGFydGlmYWN0cyBhbGwgZ28gaW50byBcInNlY29uZGFyeS1hcnRpZmFjdHNcIicsICgpID0+IHtcbiAgY29uc3QgYnMgPSBkZWxpdmxpYi5CdWlsZFNwZWMuc2ltcGxlKHtcbiAgICBidWlsZDogWydlY2hvIGhlbGxvID4gZm9vL2ZpbGUudHh0J10sXG4gICAgYXJ0aWZhY3REaXJlY3Rvcnk6ICdmb28nLFxuICAgIGFkZGl0aW9uYWxBcnRpZmFjdERpcmVjdG9yaWVzOiB7XG4gICAgICBhcnRpZmFjdDI6ICdib28nLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlcmVkID0gYnMucmVuZGVyKHsgcHJpbWFyeUFydGlmYWN0TmFtZTogJ3ByaW1yb3NlJyB9KTtcblxuICBleHBlY3QocmVuZGVyZWQpLnRvRXF1YWwoe1xuICAgIGFydGlmYWN0czoge1xuICAgICAgJ3NlY29uZGFyeS1hcnRpZmFjdHMnOiB7XG4gICAgICAgIHByaW1yb3NlOiB7XG4gICAgICAgICAgJ2Jhc2UtZGlyZWN0b3J5JzogJ2ZvbycsXG4gICAgICAgICAgJ2ZpbGVzJzogW1xuICAgICAgICAgICAgJyoqLyonLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIGFydGlmYWN0Mjoge1xuICAgICAgICAgICdiYXNlLWRpcmVjdG9yeSc6ICdib28nLFxuICAgICAgICAgICdmaWxlcyc6IFtcbiAgICAgICAgICAgICcqKi8qJyxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHBoYXNlczoge1xuICAgICAgYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAnZWNobyBoZWxsbyA+IGZvby9maWxlLnR4dCcsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgdmVyc2lvbjogJzAuMicsXG4gIH0pO1xufSk7Il19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '@monocdk-experiment/assert/jest';
|
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
// tslint:disable: max-line-length
|
|
23
|
-
const cdk = __importStar(require("monocdk"));
|
|
24
|
-
const lib_1 = require("../../lib");
|
|
25
|
-
require("@monocdk-experiment/assert/jest");
|
|
26
|
-
const Stack = cdk.Stack;
|
|
27
|
-
const MOCK_REPO = new lib_1.WritableGitHubRepo({
|
|
28
|
-
sshKeySecret: { secretArn: 'ssh-key-secret-arn' },
|
|
29
|
-
commitUsername: 'user',
|
|
30
|
-
commitEmail: 'email@email',
|
|
31
|
-
repository: 'owner/repo',
|
|
32
|
-
tokenSecretArn: 'token-secret-arn',
|
|
33
|
-
});
|
|
34
|
-
test('autoBump', () => {
|
|
35
|
-
// GIVEN
|
|
36
|
-
const stack = new Stack(new cdk.App(), 'TestStack');
|
|
37
|
-
// WHEN
|
|
38
|
-
new lib_1.AutoBump(stack, 'MyAutoBump', {
|
|
39
|
-
repo: MOCK_REPO,
|
|
40
|
-
});
|
|
41
|
-
// THEN
|
|
42
|
-
// build project
|
|
43
|
-
expect(stack).toHaveResource('AWS::CodeBuild::Project', {
|
|
44
|
-
Triggers: {
|
|
45
|
-
Webhook: false,
|
|
46
|
-
},
|
|
47
|
-
Source: {
|
|
48
|
-
Type: 'GITHUB',
|
|
49
|
-
GitCloneDepth: 0,
|
|
50
|
-
Location: 'https://github.com/owner/repo.git',
|
|
51
|
-
ReportBuildStatus: false,
|
|
52
|
-
BuildSpec: JSON.stringify({
|
|
53
|
-
version: '0.2',
|
|
54
|
-
phases: {
|
|
55
|
-
pre_build: {
|
|
56
|
-
commands: [
|
|
57
|
-
'git config --global user.email "email@email"',
|
|
58
|
-
'git config --global user.name "user"',
|
|
59
|
-
],
|
|
60
|
-
},
|
|
61
|
-
build: {
|
|
62
|
-
commands: [
|
|
63
|
-
'export SKIP=false',
|
|
64
|
-
'$SKIP || { aws secretsmanager get-secret-value --secret-id "ssh-key-secret-arn" --output=text --query=SecretString > ~/.ssh/id_rsa ; }',
|
|
65
|
-
'$SKIP || { mkdir -p ~/.ssh ; }',
|
|
66
|
-
'$SKIP || { chmod 0600 ~/.ssh/id_rsa ~/.ssh/config ; }',
|
|
67
|
-
'$SKIP || { ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts ; }',
|
|
68
|
-
'$SKIP || { ls .git && { echo ".git directory exists"; } || { echo ".git directory doesnot exist - cloning..." && git init . && git remote add origin git@github.com:owner/repo.git && git fetch && git reset --hard origin/master && git branch -M master && git clean -fqdx; } ; }',
|
|
69
|
-
"$SKIP || { git describe --exact-match master && { echo 'Skip condition is met, skipping...' && export SKIP=true; } || { echo 'Skip condition is not met, continuing...' && export SKIP=false; } ; }",
|
|
70
|
-
'$SKIP || { export GITHUB_TOKEN=$(aws secretsmanager get-secret-value --secret-id "token-secret-arn" --output=text --query=SecretString) ; }',
|
|
71
|
-
'$SKIP || { git rev-parse --verify origin/bump/$VERSION && { git checkout bump/$VERSION && git merge master && /bin/sh ./bump.sh && export VERSION=$(git describe) && echo Finished running user commands; } || { git checkout master && git checkout -b temp && /bin/sh ./bump.sh && export VERSION=$(git describe) && echo Finished running user commands && git branch -M bump/$VERSION; } ; }',
|
|
72
|
-
'$SKIP || { git merge-base --is-ancestor bump/$VERSION origin/master && { echo "Skipping: bump/$VERSION is an ancestor of origin/master"; export SKIP=true; } || { echo "Pushing: bump/$VERSION is ahead of origin/master"; export SKIP=false; } ; }',
|
|
73
|
-
'$SKIP || { git remote add origin_ssh git@github.com:owner/repo.git ; }',
|
|
74
|
-
'$SKIP || { git push --atomic --follow-tags origin_ssh bump/$VERSION:bump/$VERSION ; }',
|
|
75
|
-
"$SKIP || { curl --fail -X POST -o pr.json --header \"Authorization: token $GITHUB_TOKEN\" --header \"Content-Type: application/json\" -d \"{\\\"title\\\":\\\"chore(release): $VERSION\\\",\\\"base\\\":\\\"master\\\",\\\"head\\\":\\\"bump/$VERSION\\\"}\" https://api.github.com/repos/owner/repo/pulls && export PR_NUMBER=$(node -p 'require(\"./pr.json\").number') ; }",
|
|
76
|
-
'$SKIP || { curl --fail -X PATCH --header "Authorization: token $GITHUB_TOKEN" --header "Content-Type: application/json" -d "{\\"body\\":\\"See [CHANGELOG](https://github.com/owner/repo/blob/bump/$VERSION/CHANGELOG.md)\\"}" https://api.github.com/repos/owner/repo/pulls/$PR_NUMBER ; }',
|
|
77
|
-
],
|
|
78
|
-
},
|
|
79
|
-
},
|
|
80
|
-
}, undefined, 2),
|
|
81
|
-
},
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
test('autoBump with schedule', () => {
|
|
85
|
-
const stack = new Stack(new cdk.App(), 'TestStack');
|
|
86
|
-
// WHEN
|
|
87
|
-
new lib_1.AutoBump(stack, 'MyAutoBump', {
|
|
88
|
-
repo: MOCK_REPO,
|
|
89
|
-
scheduleExpression: 'cron(0 12 * * ? *)',
|
|
90
|
-
});
|
|
91
|
-
// default schedule
|
|
92
|
-
expect(stack).toHaveResource('AWS::Events::Rule', {
|
|
93
|
-
ScheduleExpression: 'cron(0 12 * * ? *)',
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
test('autoBump with custom cloneDepth', () => {
|
|
97
|
-
// GIVEN
|
|
98
|
-
const stack = new Stack(new cdk.App(), 'TestStack');
|
|
99
|
-
// WHEN
|
|
100
|
-
new lib_1.AutoBump(stack, 'MyAutoBump', {
|
|
101
|
-
repo: MOCK_REPO,
|
|
102
|
-
cloneDepth: 10,
|
|
103
|
-
});
|
|
104
|
-
// THEN
|
|
105
|
-
// build project
|
|
106
|
-
expect(stack).toHaveResource('AWS::CodeBuild::Project', {
|
|
107
|
-
Triggers: {
|
|
108
|
-
Webhook: false,
|
|
109
|
-
},
|
|
110
|
-
Source: {
|
|
111
|
-
Type: 'GITHUB',
|
|
112
|
-
GitCloneDepth: 10,
|
|
113
|
-
Location: 'https://github.com/owner/repo.git',
|
|
114
|
-
ReportBuildStatus: false,
|
|
115
|
-
BuildSpec: JSON.stringify({
|
|
116
|
-
version: '0.2',
|
|
117
|
-
phases: {
|
|
118
|
-
pre_build: {
|
|
119
|
-
commands: [
|
|
120
|
-
'git config --global user.email "email@email"',
|
|
121
|
-
'git config --global user.name "user"',
|
|
122
|
-
],
|
|
123
|
-
},
|
|
124
|
-
build: {
|
|
125
|
-
commands: [
|
|
126
|
-
'export SKIP=false',
|
|
127
|
-
'$SKIP || { aws secretsmanager get-secret-value --secret-id "ssh-key-secret-arn" --output=text --query=SecretString > ~/.ssh/id_rsa ; }',
|
|
128
|
-
'$SKIP || { mkdir -p ~/.ssh ; }',
|
|
129
|
-
'$SKIP || { chmod 0600 ~/.ssh/id_rsa ~/.ssh/config ; }',
|
|
130
|
-
'$SKIP || { ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts ; }',
|
|
131
|
-
'$SKIP || { ls .git && { echo ".git directory exists"; } || { echo ".git directory doesnot exist - cloning..." && git init . && git remote add origin git@github.com:owner/repo.git && git fetch && git reset --hard origin/master && git branch -M master && git clean -fqdx; } ; }',
|
|
132
|
-
"$SKIP || { git describe --exact-match master && { echo 'Skip condition is met, skipping...' && export SKIP=true; } || { echo 'Skip condition is not met, continuing...' && export SKIP=false; } ; }",
|
|
133
|
-
'$SKIP || { export GITHUB_TOKEN=$(aws secretsmanager get-secret-value --secret-id "token-secret-arn" --output=text --query=SecretString) ; }',
|
|
134
|
-
'$SKIP || { git rev-parse --verify origin/bump/$VERSION && { git checkout bump/$VERSION && git merge master && /bin/sh ./bump.sh && export VERSION=$(git describe) && echo Finished running user commands; } || { git checkout master && git checkout -b temp && /bin/sh ./bump.sh && export VERSION=$(git describe) && echo Finished running user commands && git branch -M bump/$VERSION; } ; }',
|
|
135
|
-
'$SKIP || { git merge-base --is-ancestor bump/$VERSION origin/master && { echo "Skipping: bump/$VERSION is an ancestor of origin/master"; export SKIP=true; } || { echo "Pushing: bump/$VERSION is ahead of origin/master"; export SKIP=false; } ; }',
|
|
136
|
-
'$SKIP || { git remote add origin_ssh git@github.com:owner/repo.git ; }',
|
|
137
|
-
'$SKIP || { git push --atomic --follow-tags origin_ssh bump/$VERSION:bump/$VERSION ; }',
|
|
138
|
-
"$SKIP || { curl --fail -X POST -o pr.json --header \"Authorization: token $GITHUB_TOKEN\" --header \"Content-Type: application/json\" -d \"{\\\"title\\\":\\\"chore(release): $VERSION\\\",\\\"base\\\":\\\"master\\\",\\\"head\\\":\\\"bump/$VERSION\\\"}\" https://api.github.com/repos/owner/repo/pulls && export PR_NUMBER=$(node -p 'require(\"./pr.json\").number') ; }",
|
|
139
|
-
'$SKIP || { curl --fail -X PATCH --header "Authorization: token $GITHUB_TOKEN" --header "Content-Type: application/json" -d "{\\"body\\":\\"See [CHANGELOG](https://github.com/owner/repo/blob/bump/$VERSION/CHANGELOG.md)\\"}" https://api.github.com/repos/owner/repo/pulls/$PR_NUMBER ; }',
|
|
140
|
-
],
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
}, undefined, 2),
|
|
144
|
-
},
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
test('autoBump with schedule disabled', () => {
|
|
148
|
-
// GIVEN
|
|
149
|
-
const stack = new Stack(new cdk.App(), 'TestStack');
|
|
150
|
-
// WHEN
|
|
151
|
-
new lib_1.AutoBump(stack, 'MyAutoBump', {
|
|
152
|
-
repo: MOCK_REPO,
|
|
153
|
-
scheduleExpression: 'disable',
|
|
154
|
-
});
|
|
155
|
-
// THEN
|
|
156
|
-
expect(stack).not.toHaveResource('AWS::Events::Rule', {
|
|
157
|
-
ScheduleExpression: 'cron(0 12 * * ? *)',
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
test('autoBump with push only', () => {
|
|
161
|
-
// GIVEN
|
|
162
|
-
const stack = new Stack(new cdk.App(), 'TestStack');
|
|
163
|
-
const repo = new lib_1.WritableGitHubRepo({
|
|
164
|
-
sshKeySecret: { secretArn: 'ssh-key-secret-arn' },
|
|
165
|
-
commitUsername: 'user',
|
|
166
|
-
commitEmail: 'email@email',
|
|
167
|
-
repository: 'owner/repo',
|
|
168
|
-
tokenSecretArn: 'token-secret-arn',
|
|
169
|
-
});
|
|
170
|
-
// WHEN
|
|
171
|
-
new lib_1.AutoBump(stack, 'MyAutoBump', {
|
|
172
|
-
repo,
|
|
173
|
-
pushOnly: true,
|
|
174
|
-
});
|
|
175
|
-
// THEN
|
|
176
|
-
// build project
|
|
177
|
-
expect(stack).toHaveResource('AWS::CodeBuild::Project', {
|
|
178
|
-
Triggers: {
|
|
179
|
-
Webhook: false,
|
|
180
|
-
},
|
|
181
|
-
Source: {
|
|
182
|
-
Type: 'GITHUB',
|
|
183
|
-
GitCloneDepth: 0,
|
|
184
|
-
Location: 'https://github.com/owner/repo.git',
|
|
185
|
-
ReportBuildStatus: false,
|
|
186
|
-
BuildSpec: JSON.stringify({
|
|
187
|
-
version: '0.2',
|
|
188
|
-
phases: {
|
|
189
|
-
pre_build: {
|
|
190
|
-
commands: [
|
|
191
|
-
'git config --global user.email "email@email"',
|
|
192
|
-
'git config --global user.name "user"',
|
|
193
|
-
],
|
|
194
|
-
},
|
|
195
|
-
build: {
|
|
196
|
-
commands: [
|
|
197
|
-
'export SKIP=false',
|
|
198
|
-
'$SKIP || { aws secretsmanager get-secret-value --secret-id "ssh-key-secret-arn" --output=text --query=SecretString > ~/.ssh/id_rsa ; }',
|
|
199
|
-
'$SKIP || { mkdir -p ~/.ssh ; }',
|
|
200
|
-
'$SKIP || { chmod 0600 ~/.ssh/id_rsa ~/.ssh/config ; }',
|
|
201
|
-
'$SKIP || { ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts ; }',
|
|
202
|
-
'$SKIP || { ls .git && { echo ".git directory exists"; } || { echo ".git directory doesnot exist - cloning..." && git init . && git remote add origin git@github.com:owner/repo.git && git fetch && git reset --hard origin/master && git branch -M master && git clean -fqdx; } ; }',
|
|
203
|
-
"$SKIP || { git describe --exact-match master && { echo 'Skip condition is met, skipping...' && export SKIP=true; } || { echo 'Skip condition is not met, continuing...' && export SKIP=false; } ; }",
|
|
204
|
-
'$SKIP || { git rev-parse --verify origin/bump/$VERSION && { git checkout bump/$VERSION && git merge master && /bin/sh ./bump.sh && export VERSION=$(git describe) && echo Finished running user commands; } || { git checkout master && git checkout -b temp && /bin/sh ./bump.sh && export VERSION=$(git describe) && echo Finished running user commands && git branch -M bump/$VERSION; } ; }',
|
|
205
|
-
'$SKIP || { git merge-base --is-ancestor bump/$VERSION origin/master && { echo "Skipping: bump/$VERSION is an ancestor of origin/master"; export SKIP=true; } || { echo "Pushing: bump/$VERSION is ahead of origin/master"; export SKIP=false; } ; }',
|
|
206
|
-
'$SKIP || { git remote add origin_ssh git@github.com:owner/repo.git ; }',
|
|
207
|
-
'$SKIP || { git push --atomic --follow-tags origin_ssh bump/$VERSION:bump/$VERSION ; }',
|
|
208
|
-
],
|
|
209
|
-
},
|
|
210
|
-
},
|
|
211
|
-
}, undefined, 2),
|
|
212
|
-
},
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
test('autoBump with pull request with custom options', () => {
|
|
216
|
-
// GIVEN
|
|
217
|
-
const stack = new Stack(new cdk.App(), 'TestStack');
|
|
218
|
-
// WHEN
|
|
219
|
-
new lib_1.AutoBump(stack, 'MyAutoBump', {
|
|
220
|
-
repo: MOCK_REPO,
|
|
221
|
-
title: 'custom title',
|
|
222
|
-
body: 'custom body',
|
|
223
|
-
base: {
|
|
224
|
-
name: 'release',
|
|
225
|
-
},
|
|
226
|
-
});
|
|
227
|
-
// THEN
|
|
228
|
-
// build project
|
|
229
|
-
expect(stack).toHaveResource('AWS::CodeBuild::Project', {
|
|
230
|
-
Triggers: {
|
|
231
|
-
Webhook: false,
|
|
232
|
-
},
|
|
233
|
-
Source: {
|
|
234
|
-
Type: 'GITHUB',
|
|
235
|
-
GitCloneDepth: 0,
|
|
236
|
-
Location: 'https://github.com/owner/repo.git',
|
|
237
|
-
ReportBuildStatus: false,
|
|
238
|
-
BuildSpec: JSON.stringify({
|
|
239
|
-
version: '0.2',
|
|
240
|
-
phases: {
|
|
241
|
-
pre_build: {
|
|
242
|
-
commands: [
|
|
243
|
-
'git config --global user.email "email@email"',
|
|
244
|
-
'git config --global user.name "user"',
|
|
245
|
-
],
|
|
246
|
-
},
|
|
247
|
-
build: {
|
|
248
|
-
commands: [
|
|
249
|
-
'export SKIP=false',
|
|
250
|
-
'$SKIP || { aws secretsmanager get-secret-value --secret-id "ssh-key-secret-arn" --output=text --query=SecretString > ~/.ssh/id_rsa ; }',
|
|
251
|
-
'$SKIP || { mkdir -p ~/.ssh ; }',
|
|
252
|
-
'$SKIP || { chmod 0600 ~/.ssh/id_rsa ~/.ssh/config ; }',
|
|
253
|
-
'$SKIP || { ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts ; }',
|
|
254
|
-
'$SKIP || { ls .git && { echo ".git directory exists"; } || { echo ".git directory doesnot exist - cloning..." && git init . && git remote add origin git@github.com:owner/repo.git && git fetch && git reset --hard origin/release && git branch -M release && git clean -fqdx; } ; }',
|
|
255
|
-
"$SKIP || { git describe --exact-match release && { echo 'Skip condition is met, skipping...' && export SKIP=true; } || { echo 'Skip condition is not met, continuing...' && export SKIP=false; } ; }",
|
|
256
|
-
'$SKIP || { export GITHUB_TOKEN=$(aws secretsmanager get-secret-value --secret-id "token-secret-arn" --output=text --query=SecretString) ; }',
|
|
257
|
-
'$SKIP || { git rev-parse --verify origin/bump/$VERSION && { git checkout bump/$VERSION && git merge release && /bin/sh ./bump.sh && export VERSION=$(git describe) && echo Finished running user commands; } || { git checkout release && git checkout -b temp && /bin/sh ./bump.sh && export VERSION=$(git describe) && echo Finished running user commands && git branch -M bump/$VERSION; } ; }',
|
|
258
|
-
'$SKIP || { git merge-base --is-ancestor bump/$VERSION origin/release && { echo "Skipping: bump/$VERSION is an ancestor of origin/release"; export SKIP=true; } || { echo "Pushing: bump/$VERSION is ahead of origin/release"; export SKIP=false; } ; }',
|
|
259
|
-
'$SKIP || { git remote add origin_ssh git@github.com:owner/repo.git ; }',
|
|
260
|
-
'$SKIP || { git push --atomic --follow-tags origin_ssh bump/$VERSION:bump/$VERSION ; }',
|
|
261
|
-
"$SKIP || { curl --fail -X POST -o pr.json --header \"Authorization: token $GITHUB_TOKEN\" --header \"Content-Type: application/json\" -d \"{\\\"title\\\":\\\"custom title\\\",\\\"base\\\":\\\"release\\\",\\\"head\\\":\\\"bump/$VERSION\\\"}\" https://api.github.com/repos/owner/repo/pulls && export PR_NUMBER=$(node -p 'require(\"./pr.json\").number') ; }",
|
|
262
|
-
'$SKIP || { curl --fail -X PATCH --header "Authorization: token $GITHUB_TOKEN" --header "Content-Type: application/json" -d "{\\"body\\":\\"custom body\\"}" https://api.github.com/repos/owner/repo/pulls/$PR_NUMBER ; }',
|
|
263
|
-
],
|
|
264
|
-
},
|
|
265
|
-
},
|
|
266
|
-
}, undefined, 2),
|
|
267
|
-
},
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
test('autoBump with pull request fails when head=base', () => {
|
|
271
|
-
// GIVEN
|
|
272
|
-
const stack = new Stack(new cdk.App(), 'TestStack');
|
|
273
|
-
// WHEN
|
|
274
|
-
expect(() => new lib_1.AutoBump(stack, 'MyAutoBump', {
|
|
275
|
-
repo: MOCK_REPO,
|
|
276
|
-
base: {
|
|
277
|
-
name: 'master',
|
|
278
|
-
},
|
|
279
|
-
head: {
|
|
280
|
-
name: 'master',
|
|
281
|
-
},
|
|
282
|
-
})).toThrow();
|
|
283
|
-
});
|
|
284
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVtcC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYnVtcC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtDQUFrQztBQUNsQyw2Q0FBK0I7QUFDL0IsbUNBQXlEO0FBQ3pELDJDQUF5QztBQUV6QyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBRXhCLE1BQU0sU0FBUyxHQUFHLElBQUksd0JBQWtCLENBQUM7SUFDdkMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFO0lBQ2pELGNBQWMsRUFBRSxNQUFNO0lBQ3RCLFdBQVcsRUFBRSxhQUFhO0lBQzFCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLGNBQWMsRUFBRSxrQkFBa0I7Q0FDbkMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7SUFDcEIsUUFBUTtJQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXBELE9BQU87SUFDUCxJQUFJLGNBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFO1FBQ2hDLElBQUksRUFBRSxTQUFTO0tBQ2hCLENBQUMsQ0FBQztJQUVILE9BQU87SUFFUCxnQkFBZ0I7SUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRTtRQUN0RCxRQUFRLEVBQUU7WUFDUixPQUFPLEVBQUUsS0FBSztTQUNmO1FBQ0QsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFLFFBQVE7WUFDZCxhQUFhLEVBQUUsQ0FBQztZQUNoQixRQUFRLEVBQUUsbUNBQW1DO1lBQzdDLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ3hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLE1BQU0sRUFB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QUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDeEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsTUFBTSxFQUFFO29CQUNOLFNBQVMsRUFBRTt3QkFDVCxRQUFRLEVBQUU7NEJBQ1IsOENBQThDOzRCQUM5QyxzQ0FBc0M7eUJBQ3ZDO3FCQUNGO29CQUNELEtBQUssRUFBRTt3QkFDTCxRQUFRLEVBQUU7NEJBQ1IsbUJBQW1COzRCQUNuQix3SUFBd0k7NEJBQ3hJLGdDQUFnQzs0QkFDaEMsdURBQXVEOzRCQUN2RCxvRUFBb0U7NEJBQ3BFLHdSQUF3Ujs0QkFDeFIsc01BQXNNOzRCQUN0TSw2SUFBNkk7NEJBQzdJLHFZQUFxWTs0QkFDclksd1BBQXdQOzRCQUN4UCx3RUFBd0U7NEJBQ3hFLHVGQUF1Rjs0QkFDdkYsb1dBQW9XOzRCQUNwVywwTkFBME47eUJBQzNOO3FCQUNGO2lCQUNGO2FBQ0YsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQ2pCO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO0lBQzNELFFBQVE7SUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUVwRCxPQUFPO0lBQ1AsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksY0FBUSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUU7UUFDN0MsSUFBSSxFQUFFLFNBQVM7UUFDZixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsUUFBUTtTQUNmO1FBQ0QsSUFBSSxFQUFFO1lBQ0osSUFBSSxFQUFFLFFBQVE7U0FDZjtLQUNGLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxuaW1wb3J0ICogYXMgY2RrIGZyb20gJ21vbm9jZGsnO1xuaW1wb3J0IHsgQXV0b0J1bXAsIFdyaXRhYmxlR2l0SHViUmVwbyB9IGZyb20gJy4uLy4uL2xpYic7XG5pbXBvcnQgJ0Btb25vY2RrLWV4cGVyaW1lbnQvYXNzZXJ0L2plc3QnO1xuXG5jb25zdCBTdGFjayA9IGNkay5TdGFjaztcblxuY29uc3QgTU9DS19SRVBPID0gbmV3IFdyaXRhYmxlR2l0SHViUmVwbyh7XG4gIHNzaEtleVNlY3JldDogeyBzZWNyZXRBcm46ICdzc2gta2V5LXNlY3JldC1hcm4nIH0sXG4gIGNvbW1pdFVzZXJuYW1lOiAndXNlcicsXG4gIGNvbW1pdEVtYWlsOiAnZW1haWxAZW1haWwnLFxuICByZXBvc2l0b3J5OiAnb3duZXIvcmVwbycsXG4gIHRva2VuU2VjcmV0QXJuOiAndG9rZW4tc2VjcmV0LWFybicsXG59KTtcblxudGVzdCgnYXV0b0J1bXAnLCAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG5ldyBjZGsuQXBwKCksICdUZXN0U3RhY2snKTtcblxuICAvLyBXSEVOXG4gIG5ldyBBdXRvQnVtcChzdGFjaywgJ015QXV0b0J1bXAnLCB7XG4gICAgcmVwbzogTU9DS19SRVBPLFxuICB9KTtcblxuICAvLyBUSEVOXG5cbiAgLy8gYnVpbGQgcHJvamVjdFxuICBleHBlY3Qoc3RhY2spLnRvSGF2ZVJlc291cmNlKCdBV1M6OkNvZGVCdWlsZDo6UHJvamVjdCcsIHtcbiAgICBUcmlnZ2Vyczoge1xuICAgICAgV2ViaG9vazogZmFsc2UsXG4gICAgfSxcbiAgICBTb3VyY2U6IHtcbiAgICAgIFR5cGU6ICdHSVRIVUInLFxuICAgICAgR2l0Q2xvbmVEZXB0aDogMCxcbiAgICAgIExvY2F0aW9uOiAnaHR0cHM6Ly9naXRodWIuY29tL293bmVyL3JlcG8uZ2l0JyxcbiAgICAgIFJlcG9ydEJ1aWxkU3RhdHVzOiBmYWxzZSxcbiAgICAgIEJ1aWxkU3BlYzogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiAnMC4yJyxcbiAgICAgICAgcGhhc2VzOiB7XG4gICAgICAgICAgcHJlX2J1aWxkOiB7XG4gICAgICAgICAgICBjb21tYW5kczogW1xuICAgICAgICAgICAgICAnZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwiZW1haWxAZW1haWxcIicsXG4gICAgICAgICAgICAgICdnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcInVzZXJcIicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYnVpbGQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgICAgICdleHBvcnQgU0tJUD1mYWxzZScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGF3cyBzZWNyZXRzbWFuYWdlciBnZXQtc2VjcmV0LXZhbHVlIC0tc2VjcmV0LWlkIFwic3NoLWtleS1zZWNyZXQtYXJuXCIgLS1vdXRwdXQ9dGV4dCAtLXF1ZXJ5PVNlY3JldFN0cmluZyA+IH4vLnNzaC9pZF9yc2EgOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgbWtkaXIgLXAgfi8uc3NoIDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGNobW9kIDA2MDAgfi8uc3NoL2lkX3JzYSB+Ly5zc2gvY29uZmlnIDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IHNzaC1rZXlzY2FuIC10IHJzYSBnaXRodWIuY29tID4+IH4vLnNzaC9rbm93bl9ob3N0cyA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBscyAuZ2l0ICYmIHsgZWNobyBcIi5naXQgZGlyZWN0b3J5IGV4aXN0c1wiOyAgfSB8fCB7IGVjaG8gXCIuZ2l0IGRpcmVjdG9yeSBkb2Vzbm90IGV4aXN0IC0gY2xvbmluZy4uLlwiICYmIGdpdCBpbml0IC4gJiYgZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIGdpdEBnaXRodWIuY29tOm93bmVyL3JlcG8uZ2l0ICYmIGdpdCBmZXRjaCAmJiBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXIgJiYgZ2l0IGJyYW5jaCAtTSBtYXN0ZXIgJiYgZ2l0IGNsZWFuIC1mcWR4OyB9IDsgfScsXG4gICAgICAgICAgICAgIFwiJFNLSVAgfHwgeyBnaXQgZGVzY3JpYmUgLS1leGFjdC1tYXRjaCBtYXN0ZXIgJiYgeyBlY2hvICdTa2lwIGNvbmRpdGlvbiBpcyBtZXQsIHNraXBwaW5nLi4uJyAmJiBleHBvcnQgU0tJUD10cnVlOyB9IHx8IHsgZWNobyAnU2tpcCBjb25kaXRpb24gaXMgbm90IG1ldCwgY29udGludWluZy4uLicgJiYgZXhwb3J0IFNLSVA9ZmFsc2U7IH0gOyB9XCIsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGV4cG9ydCBHSVRIVUJfVE9LRU49JChhd3Mgc2VjcmV0c21hbmFnZXIgZ2V0LXNlY3JldC12YWx1ZSAtLXNlY3JldC1pZCBcInRva2VuLXNlY3JldC1hcm5cIiAtLW91dHB1dD10ZXh0IC0tcXVlcnk9U2VjcmV0U3RyaW5nKSA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG9yaWdpbi9idW1wLyRWRVJTSU9OICYmIHsgZ2l0IGNoZWNrb3V0IGJ1bXAvJFZFUlNJT04gJiYgZ2l0IG1lcmdlIG1hc3RlciAmJiAvYmluL3NoIC4vYnVtcC5zaCAmJiBleHBvcnQgVkVSU0lPTj0kKGdpdCBkZXNjcmliZSkgJiYgZWNobyBGaW5pc2hlZCBydW5uaW5nIHVzZXIgY29tbWFuZHM7ICB9IHx8IHsgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiBnaXQgY2hlY2tvdXQgLWIgdGVtcCAmJiAvYmluL3NoIC4vYnVtcC5zaCAmJiBleHBvcnQgVkVSU0lPTj0kKGdpdCBkZXNjcmliZSkgJiYgZWNobyBGaW5pc2hlZCBydW5uaW5nIHVzZXIgY29tbWFuZHMgJiYgZ2l0IGJyYW5jaCAtTSBidW1wLyRWRVJTSU9OOyB9IDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgYnVtcC8kVkVSU0lPTiBvcmlnaW4vbWFzdGVyICYmIHsgZWNobyBcIlNraXBwaW5nOiBidW1wLyRWRVJTSU9OIGlzIGFuIGFuY2VzdG9yIG9mIG9yaWdpbi9tYXN0ZXJcIjsgZXhwb3J0IFNLSVA9dHJ1ZTsgfSB8fCB7IGVjaG8gXCJQdXNoaW5nOiBidW1wLyRWRVJTSU9OIGlzIGFoZWFkIG9mIG9yaWdpbi9tYXN0ZXJcIjsgZXhwb3J0IFNLSVA9ZmFsc2U7IH0gOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgZ2l0IHJlbW90ZSBhZGQgb3JpZ2luX3NzaCBnaXRAZ2l0aHViLmNvbTpvd25lci9yZXBvLmdpdCA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBnaXQgcHVzaCAtLWF0b21pYyAtLWZvbGxvdy10YWdzIG9yaWdpbl9zc2ggYnVtcC8kVkVSU0lPTjpidW1wLyRWRVJTSU9OIDsgfScsXG4gICAgICAgICAgICAgIFwiJFNLSVAgfHwgeyBjdXJsIC0tZmFpbCAtWCBQT1NUIC1vIHByLmpzb24gLS1oZWFkZXIgXFxcIkF1dGhvcml6YXRpb246IHRva2VuICRHSVRIVUJfVE9LRU5cXFwiIC0taGVhZGVyIFxcXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cXFwiIC1kIFxcXCJ7XFxcXFxcXCJ0aXRsZVxcXFxcXFwiOlxcXFxcXFwiY2hvcmUocmVsZWFzZSk6ICRWRVJTSU9OXFxcXFxcXCIsXFxcXFxcXCJiYXNlXFxcXFxcXCI6XFxcXFxcXCJtYXN0ZXJcXFxcXFxcIixcXFxcXFxcImhlYWRcXFxcXFxcIjpcXFxcXFxcImJ1bXAvJFZFUlNJT05cXFxcXFxcIn1cXFwiIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvb3duZXIvcmVwby9wdWxscyAmJiBleHBvcnQgUFJfTlVNQkVSPSQobm9kZSAtcCAncmVxdWlyZShcXFwiLi9wci5qc29uXFxcIikubnVtYmVyJykgOyB9XCIsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGN1cmwgLS1mYWlsIC1YIFBBVENIIC0taGVhZGVyIFwiQXV0aG9yaXphdGlvbjogdG9rZW4gJEdJVEhVQl9UT0tFTlwiIC0taGVhZGVyIFwiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXCIgLWQgXCJ7XFxcXFwiYm9keVxcXFxcIjpcXFxcXCJTZWUgW0NIQU5HRUxPR10oaHR0cHM6Ly9naXRodWIuY29tL293bmVyL3JlcG8vYmxvYi9idW1wLyRWRVJTSU9OL0NIQU5HRUxPRy5tZClcXFxcXCJ9XCIgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9vd25lci9yZXBvL3B1bGxzLyRQUl9OVU1CRVIgOyB9JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sIHVuZGVmaW5lZCwgMiksXG4gICAgfSxcbiAgfSk7XG5cbn0pO1xuXG50ZXN0KCdhdXRvQnVtcCB3aXRoIHNjaGVkdWxlJywgKCkgPT4ge1xuXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG5ldyBjZGsuQXBwKCksICdUZXN0U3RhY2snKTtcblxuICAvLyBXSEVOXG4gIG5ldyBBdXRvQnVtcChzdGFjaywgJ015QXV0b0J1bXAnLCB7XG4gICAgcmVwbzogTU9DS19SRVBPLFxuICAgIHNjaGVkdWxlRXhwcmVzc2lvbjogJ2Nyb24oMCAxMiAqICogPyAqKScsXG4gIH0pO1xuXG4gIC8vIGRlZmF1bHQgc2NoZWR1bGVcbiAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQVdTOjpFdmVudHM6OlJ1bGUnLCB7XG4gICAgU2NoZWR1bGVFeHByZXNzaW9uOiAnY3JvbigwIDEyICogKiA/ICopJyxcbiAgfSk7XG5cbn0pO1xuXG50ZXN0KCdhdXRvQnVtcCB3aXRoIGN1c3RvbSBjbG9uZURlcHRoJywgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhuZXcgY2RrLkFwcCgpLCAnVGVzdFN0YWNrJyk7XG5cbiAgLy8gV0hFTlxuICBuZXcgQXV0b0J1bXAoc3RhY2ssICdNeUF1dG9CdW1wJywge1xuICAgIHJlcG86IE1PQ0tfUkVQTyxcbiAgICBjbG9uZURlcHRoOiAxMCxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuXG4gIC8vIGJ1aWxkIHByb2plY3RcbiAgZXhwZWN0KHN0YWNrKS50b0hhdmVSZXNvdXJjZSgnQVdTOjpDb2RlQnVpbGQ6OlByb2plY3QnLCB7XG4gICAgVHJpZ2dlcnM6IHtcbiAgICAgIFdlYmhvb2s6IGZhbHNlLFxuICAgIH0sXG4gICAgU291cmNlOiB7XG4gICAgICBUeXBlOiAnR0lUSFVCJyxcbiAgICAgIEdpdENsb25lRGVwdGg6IDEwLFxuICAgICAgTG9jYXRpb246ICdodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwby5naXQnLFxuICAgICAgUmVwb3J0QnVpbGRTdGF0dXM6IGZhbHNlLFxuICAgICAgQnVpbGRTcGVjOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHZlcnNpb246ICcwLjInLFxuICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICBwcmVfYnVpbGQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgICAgICdnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJlbWFpbEBlbWFpbFwiJyxcbiAgICAgICAgICAgICAgJ2dpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwidXNlclwiJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBidWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgJ2V4cG9ydCBTS0lQPWZhbHNlJyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgXCJzc2gta2V5LXNlY3JldC1hcm5cIiAtLW91dHB1dD10ZXh0IC0tcXVlcnk9U2VjcmV0U3RyaW5nID4gfi8uc3NoL2lkX3JzYSA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBta2RpciAtcCB+Ly5zc2ggOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgY2htb2QgMDYwMCB+Ly5zc2gvaWRfcnNhIH4vLnNzaC9jb25maWcgOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgc3NoLWtleXNjYW4gLXQgcnNhIGdpdGh1Yi5jb20gPj4gfi8uc3NoL2tub3duX2hvc3RzIDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGxzIC5naXQgJiYgeyBlY2hvIFwiLmdpdCBkaXJlY3RvcnkgZXhpc3RzXCI7ICB9IHx8IHsgZWNobyBcIi5naXQgZGlyZWN0b3J5IGRvZXNub3QgZXhpc3QgLSBjbG9uaW5nLi4uXCIgJiYgZ2l0IGluaXQgLiAmJiBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gZ2l0QGdpdGh1Yi5jb206b3duZXIvcmVwby5naXQgJiYgZ2l0IGZldGNoICYmIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3RlciAmJiBnaXQgYnJhbmNoIC1NIG1hc3RlciAmJiBnaXQgY2xlYW4gLWZxZHg7IH0gOyB9JyxcbiAgICAgICAgICAgICAgXCIkU0tJUCB8fCB7IGdpdCBkZXNjcmliZSAtLWV4YWN0LW1hdGNoIG1hc3RlciAmJiB7IGVjaG8gJ1NraXAgY29uZGl0aW9uIGlzIG1ldCwgc2tpcHBpbmcuLi4nICYmIGV4cG9ydCBTS0lQPXRydWU7IH0gfHwgeyBlY2hvICdTa2lwIGNvbmRpdGlvbiBpcyBub3QgbWV0LCBjb250aW51aW5nLi4uJyAmJiBleHBvcnQgU0tJUD1mYWxzZTsgfSA7IH1cIixcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgZXhwb3J0IEdJVEhVQl9UT0tFTj0kKGF3cyBzZWNyZXRzbWFuYWdlciBnZXQtc2VjcmV0LXZhbHVlIC0tc2VjcmV0LWlkIFwidG9rZW4tc2VjcmV0LWFyblwiIC0tb3V0cHV0PXRleHQgLS1xdWVyeT1TZWNyZXRTdHJpbmcpIDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgb3JpZ2luL2J1bXAvJFZFUlNJT04gJiYgeyBnaXQgY2hlY2tvdXQgYnVtcC8kVkVSU0lPTiAmJiBnaXQgbWVyZ2UgbWFzdGVyICYmIC9iaW4vc2ggLi9idW1wLnNoICYmIGV4cG9ydCBWRVJTSU9OPSQoZ2l0IGRlc2NyaWJlKSAmJiBlY2hvIEZpbmlzaGVkIHJ1bm5pbmcgdXNlciBjb21tYW5kczsgIH0gfHwgeyBnaXQgY2hlY2tvdXQgbWFzdGVyICYmIGdpdCBjaGVja291dCAtYiB0ZW1wICYmIC9iaW4vc2ggLi9idW1wLnNoICYmIGV4cG9ydCBWRVJTSU9OPSQoZ2l0IGRlc2NyaWJlKSAmJiBlY2hvIEZpbmlzaGVkIHJ1bm5pbmcgdXNlciBjb21tYW5kcyAmJiBnaXQgYnJhbmNoIC1NIGJ1bXAvJFZFUlNJT047IH0gOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciBidW1wLyRWRVJTSU9OIG9yaWdpbi9tYXN0ZXIgJiYgeyBlY2hvIFwiU2tpcHBpbmc6IGJ1bXAvJFZFUlNJT04gaXMgYW4gYW5jZXN0b3Igb2Ygb3JpZ2luL21hc3RlclwiOyBleHBvcnQgU0tJUD10cnVlOyB9IHx8IHsgZWNobyBcIlB1c2hpbmc6IGJ1bXAvJFZFUlNJT04gaXMgYWhlYWQgb2Ygb3JpZ2luL21hc3RlclwiOyBleHBvcnQgU0tJUD1mYWxzZTsgfSA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBnaXQgcmVtb3RlIGFkZCBvcmlnaW5fc3NoIGdpdEBnaXRodWIuY29tOm93bmVyL3JlcG8uZ2l0IDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGdpdCBwdXNoIC0tYXRvbWljIC0tZm9sbG93LXRhZ3Mgb3JpZ2luX3NzaCBidW1wLyRWRVJTSU9OOmJ1bXAvJFZFUlNJT04gOyB9JyxcbiAgICAgICAgICAgICAgXCIkU0tJUCB8fCB7IGN1cmwgLS1mYWlsIC1YIFBPU1QgLW8gcHIuanNvbiAtLWhlYWRlciBcXFwiQXV0aG9yaXphdGlvbjogdG9rZW4gJEdJVEhVQl9UT0tFTlxcXCIgLS1oZWFkZXIgXFxcIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxcXCIgLWQgXFxcIntcXFxcXFxcInRpdGxlXFxcXFxcXCI6XFxcXFxcXCJjaG9yZShyZWxlYXNlKTogJFZFUlNJT05cXFxcXFxcIixcXFxcXFxcImJhc2VcXFxcXFxcIjpcXFxcXFxcIm1hc3RlclxcXFxcXFwiLFxcXFxcXFwiaGVhZFxcXFxcXFwiOlxcXFxcXFwiYnVtcC8kVkVSU0lPTlxcXFxcXFwifVxcXCIgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9vd25lci9yZXBvL3B1bGxzICYmIGV4cG9ydCBQUl9OVU1CRVI9JChub2RlIC1wICdyZXF1aXJlKFxcXCIuL3ByLmpzb25cXFwiKS5udW1iZXInKSA7IH1cIixcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgY3VybCAtLWZhaWwgLVggUEFUQ0ggLS1oZWFkZXIgXCJBdXRob3JpemF0aW9uOiB0b2tlbiAkR0lUSFVCX1RPS0VOXCIgLS1oZWFkZXIgXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cIiAtZCBcIntcXFxcXCJib2R5XFxcXFwiOlxcXFxcIlNlZSBbQ0hBTkdFTE9HXShodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwby9ibG9iL2J1bXAvJFZFUlNJT04vQ0hBTkdFTE9HLm1kKVxcXFxcIn1cIiBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL293bmVyL3JlcG8vcHVsbHMvJFBSX05VTUJFUiA7IH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSwgdW5kZWZpbmVkLCAyKSxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG50ZXN0KCdhdXRvQnVtcCB3aXRoIHNjaGVkdWxlIGRpc2FibGVkJywgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhuZXcgY2RrLkFwcCgpLCAnVGVzdFN0YWNrJyk7XG5cbiAgLy8gV0hFTlxuICBuZXcgQXV0b0J1bXAoc3RhY2ssICdNeUF1dG9CdW1wJywge1xuICAgIHJlcG86IE1PQ0tfUkVQTyxcbiAgICBzY2hlZHVsZUV4cHJlc3Npb246ICdkaXNhYmxlJyxcbiAgfSk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3Qoc3RhY2spLm5vdC50b0hhdmVSZXNvdXJjZSgnQVdTOjpFdmVudHM6OlJ1bGUnLCB7XG4gICAgU2NoZWR1bGVFeHByZXNzaW9uOiAnY3JvbigwIDEyICogKiA/ICopJyxcbiAgfSk7XG59KTtcblxudGVzdCgnYXV0b0J1bXAgd2l0aCBwdXNoIG9ubHknLCAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKG5ldyBjZGsuQXBwKCksICdUZXN0U3RhY2snKTtcbiAgY29uc3QgcmVwbyA9IG5ldyBXcml0YWJsZUdpdEh1YlJlcG8oe1xuICAgIHNzaEtleVNlY3JldDogeyBzZWNyZXRBcm46ICdzc2gta2V5LXNlY3JldC1hcm4nIH0sXG4gICAgY29tbWl0VXNlcm5hbWU6ICd1c2VyJyxcbiAgICBjb21taXRFbWFpbDogJ2VtYWlsQGVtYWlsJyxcbiAgICByZXBvc2l0b3J5OiAnb3duZXIvcmVwbycsXG4gICAgdG9rZW5TZWNyZXRBcm46ICd0b2tlbi1zZWNyZXQtYXJuJyxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBuZXcgQXV0b0J1bXAoc3RhY2ssICdNeUF1dG9CdW1wJywge1xuICAgIHJlcG8sXG4gICAgcHVzaE9ubHk6IHRydWUsXG4gIH0pO1xuXG4gIC8vIFRIRU5cblxuICAvLyBidWlsZCBwcm9qZWN0XG4gIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2UoJ0FXUzo6Q29kZUJ1aWxkOjpQcm9qZWN0Jywge1xuICAgIFRyaWdnZXJzOiB7XG4gICAgICBXZWJob29rOiBmYWxzZSxcbiAgICB9LFxuICAgIFNvdXJjZToge1xuICAgICAgVHlwZTogJ0dJVEhVQicsXG4gICAgICBHaXRDbG9uZURlcHRoOiAwLFxuICAgICAgTG9jYXRpb246ICdodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwby5naXQnLFxuICAgICAgUmVwb3J0QnVpbGRTdGF0dXM6IGZhbHNlLFxuICAgICAgQnVpbGRTcGVjOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHZlcnNpb246ICcwLjInLFxuICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICBwcmVfYnVpbGQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgICAgICdnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJlbWFpbEBlbWFpbFwiJyxcbiAgICAgICAgICAgICAgJ2dpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwidXNlclwiJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBidWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgJ2V4cG9ydCBTS0lQPWZhbHNlJyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgXCJzc2gta2V5LXNlY3JldC1hcm5cIiAtLW91dHB1dD10ZXh0IC0tcXVlcnk9U2VjcmV0U3RyaW5nID4gfi8uc3NoL2lkX3JzYSA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBta2RpciAtcCB+Ly5zc2ggOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgY2htb2QgMDYwMCB+Ly5zc2gvaWRfcnNhIH4vLnNzaC9jb25maWcgOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgc3NoLWtleXNjYW4gLXQgcnNhIGdpdGh1Yi5jb20gPj4gfi8uc3NoL2tub3duX2hvc3RzIDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGxzIC5naXQgJiYgeyBlY2hvIFwiLmdpdCBkaXJlY3RvcnkgZXhpc3RzXCI7ICB9IHx8IHsgZWNobyBcIi5naXQgZGlyZWN0b3J5IGRvZXNub3QgZXhpc3QgLSBjbG9uaW5nLi4uXCIgJiYgZ2l0IGluaXQgLiAmJiBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gZ2l0QGdpdGh1Yi5jb206b3duZXIvcmVwby5naXQgJiYgZ2l0IGZldGNoICYmIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3RlciAmJiBnaXQgYnJhbmNoIC1NIG1hc3RlciAmJiBnaXQgY2xlYW4gLWZxZHg7IH0gOyB9JyxcbiAgICAgICAgICAgICAgXCIkU0tJUCB8fCB7IGdpdCBkZXNjcmliZSAtLWV4YWN0LW1hdGNoIG1hc3RlciAmJiB7IGVjaG8gJ1NraXAgY29uZGl0aW9uIGlzIG1ldCwgc2tpcHBpbmcuLi4nICYmIGV4cG9ydCBTS0lQPXRydWU7IH0gfHwgeyBlY2hvICdTa2lwIGNvbmRpdGlvbiBpcyBub3QgbWV0LCBjb250aW51aW5nLi4uJyAmJiBleHBvcnQgU0tJUD1mYWxzZTsgfSA7IH1cIixcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBvcmlnaW4vYnVtcC8kVkVSU0lPTiAmJiB7IGdpdCBjaGVja291dCBidW1wLyRWRVJTSU9OICYmIGdpdCBtZXJnZSBtYXN0ZXIgJiYgL2Jpbi9zaCAuL2J1bXAuc2ggJiYgZXhwb3J0IFZFUlNJT049JChnaXQgZGVzY3JpYmUpICYmIGVjaG8gRmluaXNoZWQgcnVubmluZyB1c2VyIGNvbW1hbmRzOyAgfSB8fCB7IGdpdCBjaGVja291dCBtYXN0ZXIgJiYgZ2l0IGNoZWNrb3V0IC1iIHRlbXAgJiYgL2Jpbi9zaCAuL2J1bXAuc2ggJiYgZXhwb3J0IFZFUlNJT049JChnaXQgZGVzY3JpYmUpICYmIGVjaG8gRmluaXNoZWQgcnVubmluZyB1c2VyIGNvbW1hbmRzICYmIGdpdCBicmFuY2ggLU0gYnVtcC8kVkVSU0lPTjsgfSA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIGJ1bXAvJFZFUlNJT04gb3JpZ2luL21hc3RlciAmJiB7IGVjaG8gXCJTa2lwcGluZzogYnVtcC8kVkVSU0lPTiBpcyBhbiBhbmNlc3RvciBvZiBvcmlnaW4vbWFzdGVyXCI7IGV4cG9ydCBTS0lQPXRydWU7IH0gfHwgeyBlY2hvIFwiUHVzaGluZzogYnVtcC8kVkVSU0lPTiBpcyBhaGVhZCBvZiBvcmlnaW4vbWFzdGVyXCI7IGV4cG9ydCBTS0lQPWZhbHNlOyB9IDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGdpdCByZW1vdGUgYWRkIG9yaWdpbl9zc2ggZ2l0QGdpdGh1Yi5jb206b3duZXIvcmVwby5naXQgOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgZ2l0IHB1c2ggLS1hdG9taWMgLS1mb2xsb3ctdGFncyBvcmlnaW5fc3NoIGJ1bXAvJFZFUlNJT046YnVtcC8kVkVSU0lPTiA7IH0nLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSwgdW5kZWZpbmVkLCAyKSxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG50ZXN0KCdhdXRvQnVtcCB3aXRoIHB1bGwgcmVxdWVzdCB3aXRoIGN1c3RvbSBvcHRpb25zJywgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhuZXcgY2RrLkFwcCgpLCAnVGVzdFN0YWNrJyk7XG5cbiAgLy8gV0hFTlxuICBuZXcgQXV0b0J1bXAoc3RhY2ssICdNeUF1dG9CdW1wJywge1xuICAgIHJlcG86IE1PQ0tfUkVQTyxcblxuICAgIHRpdGxlOiAnY3VzdG9tIHRpdGxlJyxcbiAgICBib2R5OiAnY3VzdG9tIGJvZHknLFxuICAgIGJhc2U6IHtcbiAgICAgIG5hbWU6ICdyZWxlYXNlJyxcbiAgICB9LFxuXG4gIH0pO1xuXG4gIC8vIFRIRU5cblxuICAvLyBidWlsZCBwcm9qZWN0XG4gIGV4cGVjdChzdGFjaykudG9IYXZlUmVzb3VyY2UoJ0FXUzo6Q29kZUJ1aWxkOjpQcm9qZWN0Jywge1xuICAgIFRyaWdnZXJzOiB7XG4gICAgICBXZWJob29rOiBmYWxzZSxcbiAgICB9LFxuICAgIFNvdXJjZToge1xuICAgICAgVHlwZTogJ0dJVEhVQicsXG4gICAgICBHaXRDbG9uZURlcHRoOiAwLFxuICAgICAgTG9jYXRpb246ICdodHRwczovL2dpdGh1Yi5jb20vb3duZXIvcmVwby5naXQnLFxuICAgICAgUmVwb3J0QnVpbGRTdGF0dXM6IGZhbHNlLFxuICAgICAgQnVpbGRTcGVjOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHZlcnNpb246ICcwLjInLFxuICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICBwcmVfYnVpbGQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICAgICAgICdnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJlbWFpbEBlbWFpbFwiJyxcbiAgICAgICAgICAgICAgJ2dpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwidXNlclwiJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBidWlsZDoge1xuICAgICAgICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgICAgICAgJ2V4cG9ydCBTS0lQPWZhbHNlJyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgXCJzc2gta2V5LXNlY3JldC1hcm5cIiAtLW91dHB1dD10ZXh0IC0tcXVlcnk9U2VjcmV0U3RyaW5nID4gfi8uc3NoL2lkX3JzYSA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBta2RpciAtcCB+Ly5zc2ggOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgY2htb2QgMDYwMCB+Ly5zc2gvaWRfcnNhIH4vLnNzaC9jb25maWcgOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgc3NoLWtleXNjYW4gLXQgcnNhIGdpdGh1Yi5jb20gPj4gfi8uc3NoL2tub3duX2hvc3RzIDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGxzIC5naXQgJiYgeyBlY2hvIFwiLmdpdCBkaXJlY3RvcnkgZXhpc3RzXCI7ICB9IHx8IHsgZWNobyBcIi5naXQgZGlyZWN0b3J5IGRvZXNub3QgZXhpc3QgLSBjbG9uaW5nLi4uXCIgJiYgZ2l0IGluaXQgLiAmJiBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gZ2l0QGdpdGh1Yi5jb206b3duZXIvcmVwby5naXQgJiYgZ2l0IGZldGNoICYmIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3JlbGVhc2UgJiYgZ2l0IGJyYW5jaCAtTSByZWxlYXNlICYmIGdpdCBjbGVhbiAtZnFkeDsgfSA7IH0nLFxuICAgICAgICAgICAgICBcIiRTS0lQIHx8IHsgZ2l0IGRlc2NyaWJlIC0tZXhhY3QtbWF0Y2ggcmVsZWFzZSAmJiB7IGVjaG8gJ1NraXAgY29uZGl0aW9uIGlzIG1ldCwgc2tpcHBpbmcuLi4nICYmIGV4cG9ydCBTS0lQPXRydWU7IH0gfHwgeyBlY2hvICdTa2lwIGNvbmRpdGlvbiBpcyBub3QgbWV0LCBjb250aW51aW5nLi4uJyAmJiBleHBvcnQgU0tJUD1mYWxzZTsgfSA7IH1cIixcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgZXhwb3J0IEdJVEhVQl9UT0tFTj0kKGF3cyBzZWNyZXRzbWFuYWdlciBnZXQtc2VjcmV0LXZhbHVlIC0tc2VjcmV0LWlkIFwidG9rZW4tc2VjcmV0LWFyblwiIC0tb3V0cHV0PXRleHQgLS1xdWVyeT1TZWNyZXRTdHJpbmcpIDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgb3JpZ2luL2J1bXAvJFZFUlNJT04gJiYgeyBnaXQgY2hlY2tvdXQgYnVtcC8kVkVSU0lPTiAmJiBnaXQgbWVyZ2UgcmVsZWFzZSAmJiAvYmluL3NoIC4vYnVtcC5zaCAmJiBleHBvcnQgVkVSU0lPTj0kKGdpdCBkZXNjcmliZSkgJiYgZWNobyBGaW5pc2hlZCBydW5uaW5nIHVzZXIgY29tbWFuZHM7ICB9IHx8IHsgZ2l0IGNoZWNrb3V0IHJlbGVhc2UgJiYgZ2l0IGNoZWNrb3V0IC1iIHRlbXAgJiYgL2Jpbi9zaCAuL2J1bXAuc2ggJiYgZXhwb3J0IFZFUlNJT049JChnaXQgZGVzY3JpYmUpICYmIGVjaG8gRmluaXNoZWQgcnVubmluZyB1c2VyIGNvbW1hbmRzICYmIGdpdCBicmFuY2ggLU0gYnVtcC8kVkVSU0lPTjsgfSA7IH0nLFxuICAgICAgICAgICAgICAnJFNLSVAgfHwgeyBnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIGJ1bXAvJFZFUlNJT04gb3JpZ2luL3JlbGVhc2UgJiYgeyBlY2hvIFwiU2tpcHBpbmc6IGJ1bXAvJFZFUlNJT04gaXMgYW4gYW5jZXN0b3Igb2Ygb3JpZ2luL3JlbGVhc2VcIjsgZXhwb3J0IFNLSVA9dHJ1ZTsgfSB8fCB7IGVjaG8gXCJQdXNoaW5nOiBidW1wLyRWRVJTSU9OIGlzIGFoZWFkIG9mIG9yaWdpbi9yZWxlYXNlXCI7IGV4cG9ydCBTS0lQPWZhbHNlOyB9IDsgfScsXG4gICAgICAgICAgICAgICckU0tJUCB8fCB7IGdpdCByZW1vdGUgYWRkIG9yaWdpbl9zc2ggZ2l0QGdpdGh1Yi5jb206b3duZXIvcmVwby5naXQgOyB9JyxcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgZ2l0IHB1c2ggLS1hdG9taWMgLS1mb2xsb3ctdGFncyBvcmlnaW5fc3NoIGJ1bXAvJFZFUlNJT046YnVtcC8kVkVSU0lPTiA7IH0nLFxuICAgICAgICAgICAgICBcIiRTS0lQIHx8IHsgY3VybCAtLWZhaWwgLVggUE9TVCAtbyBwci5qc29uIC0taGVhZGVyIFxcXCJBdXRob3JpemF0aW9uOiB0b2tlbiAkR0lUSFVCX1RPS0VOXFxcIiAtLWhlYWRlciBcXFwiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXFxcIiAtZCBcXFwie1xcXFxcXFwidGl0bGVcXFxcXFxcIjpcXFxcXFxcImN1c3RvbSB0aXRsZVxcXFxcXFwiLFxcXFxcXFwiYmFzZVxcXFxcXFwiOlxcXFxcXFwicmVsZWFzZVxcXFxcXFwiLFxcXFxcXFwiaGVhZFxcXFxcXFwiOlxcXFxcXFwiYnVtcC8kVkVSU0lPTlxcXFxcXFwifVxcXCIgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9vd25lci9yZXBvL3B1bGxzICYmIGV4cG9ydCBQUl9OVU1CRVI9JChub2RlIC1wICdyZXF1aXJlKFxcXCIuL3ByLmpzb25cXFwiKS5udW1iZXInKSA7IH1cIixcbiAgICAgICAgICAgICAgJyRTS0lQIHx8IHsgY3VybCAtLWZhaWwgLVggUEFUQ0ggLS1oZWFkZXIgXCJBdXRob3JpemF0aW9uOiB0b2tlbiAkR0lUSFVCX1RPS0VOXCIgLS1oZWFkZXIgXCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cIiAtZCBcIntcXFxcXCJib2R5XFxcXFwiOlxcXFxcImN1c3RvbSBib2R5XFxcXFwifVwiIGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvb3duZXIvcmVwby9wdWxscy8kUFJfTlVNQkVSIDsgfScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LCB1bmRlZmluZWQsIDIpLFxuICAgIH0sXG4gIH0pO1xufSk7XG5cbnRlc3QoJ2F1dG9CdW1wIHdpdGggcHVsbCByZXF1ZXN0IGZhaWxzIHdoZW4gaGVhZD1iYXNlJywgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayhuZXcgY2RrLkFwcCgpLCAnVGVzdFN0YWNrJyk7XG5cbiAgLy8gV0hFTlxuICBleHBlY3QoKCkgPT4gbmV3IEF1dG9CdW1wKHN0YWNrLCAnTXlBdXRvQnVtcCcsIHtcbiAgICByZXBvOiBNT0NLX1JFUE8sXG4gICAgYmFzZToge1xuICAgICAgbmFtZTogJ21hc3RlcicsXG4gICAgfSxcbiAgICBoZWFkOiB7XG4gICAgICBuYW1lOiAnbWFzdGVyJyxcbiAgICB9LFxuICB9KSkudG9UaHJvdygpO1xufSk7XG4iXX0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
const path = __importStar(require("path"));
|
|
23
|
-
const assert = __importStar(require("@monocdk-experiment/assert"));
|
|
24
|
-
const monocdk_1 = require("monocdk");
|
|
25
|
-
const lib_1 = require("../../lib");
|
|
26
|
-
const testDir = path.join(__dirname, 'delivlib-tests', 'linux');
|
|
27
|
-
test('correctly creates canary', () => {
|
|
28
|
-
// GIVEN
|
|
29
|
-
const stack = new monocdk_1.Stack(new monocdk_1.App(), 'TestStack');
|
|
30
|
-
// WHEN
|
|
31
|
-
new lib_1.Canary(stack, 'Canary', {
|
|
32
|
-
schedule: monocdk_1.aws_events.Schedule.expression('rate(1 minute)'),
|
|
33
|
-
scriptDirectory: testDir,
|
|
34
|
-
entrypoint: 'test.sh',
|
|
35
|
-
});
|
|
36
|
-
// THEN
|
|
37
|
-
assert.expect(stack).to(assert.haveResourceLike('AWS::CloudWatch::Alarm', {
|
|
38
|
-
ComparisonOperator: 'GreaterThanOrEqualToThreshold',
|
|
39
|
-
EvaluationPeriods: 1,
|
|
40
|
-
Threshold: 1,
|
|
41
|
-
Dimensions: [{
|
|
42
|
-
Name: 'ProjectName',
|
|
43
|
-
Value: {
|
|
44
|
-
Ref: 'CanaryShellableA135E79C',
|
|
45
|
-
},
|
|
46
|
-
}],
|
|
47
|
-
MetricName: 'FailedBuilds',
|
|
48
|
-
Namespace: 'AWS/CodeBuild',
|
|
49
|
-
Statistic: 'Sum',
|
|
50
|
-
TreatMissingData: 'ignore',
|
|
51
|
-
Period: 300,
|
|
52
|
-
}));
|
|
53
|
-
assert.expect(stack).to(assert.haveResourceLike('AWS::Events::Rule', {
|
|
54
|
-
ScheduleExpression: 'rate(1 minute)',
|
|
55
|
-
State: 'ENABLED',
|
|
56
|
-
Targets: [{
|
|
57
|
-
Arn: {
|
|
58
|
-
'Fn::GetAtt': [
|
|
59
|
-
'CanaryShellableA135E79C',
|
|
60
|
-
'Arn',
|
|
61
|
-
],
|
|
62
|
-
},
|
|
63
|
-
RoleArn: {
|
|
64
|
-
'Fn::GetAtt': [
|
|
65
|
-
'CanaryShellableEventsRoleC4030D0D',
|
|
66
|
-
'Arn',
|
|
67
|
-
],
|
|
68
|
-
},
|
|
69
|
-
}],
|
|
70
|
-
}));
|
|
71
|
-
assert.expect(stack).to(assert.haveResourceLike('AWS::CodeBuild::Project', {
|
|
72
|
-
Artifacts: {
|
|
73
|
-
Type: 'NO_ARTIFACTS',
|
|
74
|
-
},
|
|
75
|
-
Environment: {
|
|
76
|
-
ComputeType: 'BUILD_GENERAL1_MEDIUM',
|
|
77
|
-
Image: 'aws/codebuild/standard:4.0',
|
|
78
|
-
PrivilegedMode: false,
|
|
79
|
-
Type: 'LINUX_CONTAINER',
|
|
80
|
-
EnvironmentVariables: [
|
|
81
|
-
{
|
|
82
|
-
Name: 'SCRIPT_S3_BUCKET',
|
|
83
|
-
Type: 'PLAINTEXT',
|
|
84
|
-
Value: {
|
|
85
|
-
Ref: 'AssetParameters3d34b07ba871989d030649c646b3096ba7c78ca531897bcdb0670774d2f9d3e4S3BucketDA91EFBC',
|
|
86
|
-
},
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
Name: 'SCRIPT_S3_KEY',
|
|
90
|
-
Type: 'PLAINTEXT',
|
|
91
|
-
Value: {
|
|
92
|
-
'Fn::Join': [
|
|
93
|
-
'',
|
|
94
|
-
[
|
|
95
|
-
{
|
|
96
|
-
'Fn::Select': [
|
|
97
|
-
0,
|
|
98
|
-
{
|
|
99
|
-
'Fn::Split': [
|
|
100
|
-
'||',
|
|
101
|
-
{
|
|
102
|
-
Ref: 'AssetParameters3d34b07ba871989d030649c646b3096ba7c78ca531897bcdb0670774d2f9d3e4S3VersionKeyF3F83F76',
|
|
103
|
-
},
|
|
104
|
-
],
|
|
105
|
-
},
|
|
106
|
-
],
|
|
107
|
-
},
|
|
108
|
-
{
|
|
109
|
-
'Fn::Select': [
|
|
110
|
-
1,
|
|
111
|
-
{
|
|
112
|
-
'Fn::Split': [
|
|
113
|
-
'||',
|
|
114
|
-
{
|
|
115
|
-
Ref: 'AssetParameters3d34b07ba871989d030649c646b3096ba7c78ca531897bcdb0670774d2f9d3e4S3VersionKeyF3F83F76',
|
|
116
|
-
},
|
|
117
|
-
],
|
|
118
|
-
},
|
|
119
|
-
],
|
|
120
|
-
},
|
|
121
|
-
],
|
|
122
|
-
],
|
|
123
|
-
},
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
Name: 'IS_CANARY',
|
|
127
|
-
Type: 'PLAINTEXT',
|
|
128
|
-
Value: 'true',
|
|
129
|
-
},
|
|
130
|
-
],
|
|
131
|
-
},
|
|
132
|
-
ServiceRole: {
|
|
133
|
-
'Fn::GetAtt': [
|
|
134
|
-
'CanaryShellableRole063BC07D',
|
|
135
|
-
'Arn',
|
|
136
|
-
],
|
|
137
|
-
},
|
|
138
|
-
Source: {
|
|
139
|
-
// tslint:disable-next-line:max-line-length
|
|
140
|
-
BuildSpec: '{\n "version": "0.2",\n "phases": {\n "pre_build": {\n "commands": [\n "echo \\"Downloading scripts from s3://${SCRIPT_S3_BUCKET}/${SCRIPT_S3_KEY}\\"",\n "aws s3 cp s3://${SCRIPT_S3_BUCKET}/${SCRIPT_S3_KEY} /tmp",\n "mkdir -p /tmp/scriptdir",\n "unzip /tmp/$(basename $SCRIPT_S3_KEY) -d /tmp/scriptdir"\n ]\n },\n "build": {\n "commands": [\n "export SCRIPT_DIR=/tmp/scriptdir",\n "echo \\"Running test.sh\\"",\n "/bin/bash /tmp/scriptdir/test.sh"\n ]\n }\n }\n}',
|
|
141
|
-
},
|
|
142
|
-
}));
|
|
143
|
-
});
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYXJ5LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjYW5hcnkudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsbUVBQXFEO0FBQ3JELHFDQUEyRDtBQUMzRCxtQ0FBbUM7QUFHbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFaEUsSUFBSSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtJQUNwQyxRQUFRO0lBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFLLENBQUMsSUFBSSxhQUFHLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNoRCxPQUFPO0lBQ1AsSUFBSSxZQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtRQUMxQixRQUFRLEVBQUUsb0JBQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1FBQ3RELGVBQWUsRUFBRSxPQUFPO1FBQ3hCLFVBQVUsRUFBRSxTQUFTO0tBQ3RCLENBQUMsQ0FBQztJQUNILE9BQU87SUFDUCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsd0JBQXdCLEVBQUU7UUFDeEUsa0JBQWtCLEVBQUUsK0JBQStCO1FBQ25ELGlCQUFpQixFQUFFLENBQUM7UUFDcEIsU0FBUyxFQUFFLENBQUM7UUFDWixVQUFVLEVBQUUsQ0FBQztnQkFDWCxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsS0FBSyxFQUFFO29CQUNMLEdBQUcsRUFBRSx5QkFBeUI7aUJBQy9CO2FBQ0YsQ0FBQztRQUNGLFVBQVUsRUFBRSxjQUFjO1FBQzFCLFNBQVMsRUFBRSxlQUFlO1FBQzFCLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLGdCQUFnQixFQUFFLFFBQVE7UUFDMUIsTUFBTSxFQUFFLEdBQUc7S0FDWixDQUFDLENBQUMsQ0FBQztJQUVKLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRTtRQUNuRSxrQkFBa0IsRUFBRSxnQkFBZ0I7UUFDcEMsS0FBSyxFQUFFLFNBQVM7UUFDaEIsT0FBTyxFQUFFLENBQUM7Z0JBQ1IsR0FBRyxFQUFFO29CQUNILFlBQVksRUFBRTt3QkFDWix5QkFBeUI7d0JBQ3pCLEtBQUs7cUJBQ047aUJBQ0Y7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLFlBQVksRUFBRTt3QkFDWixtQ0FBbUM7d0JBQ25DLEtBQUs7cUJBQ047aUJBQ0Y7YUFDRixDQUFDO0tBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSixNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLEVBQUU7UUFDekUsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLGNBQWM7U0FDckI7UUFDRCxXQUFXLEVBQUU7WUFDWCxXQUFXLEVBQUUsdUJBQXVCO1lBQ3BDLEtBQUssRUFBRSw0QkFBNEI7WUFDbkMsY0FBYyxFQUFFLEtBQUs7WUFDckIsSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixvQkFBb0IsRUFBRTtnQkFDcEI7b0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjtvQkFDeEIsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLEtBQUssRUFBRTt3QkFDTCxHQUFHLEVBQUUsaUdBQWlHO3FCQUN2RztpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsZUFBZTtvQkFDckIsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLEtBQUssRUFBRTt3QkFDTCxVQUFVLEVBQUU7NEJBQ1YsRUFBRTs0QkFDRjtnQ0FDRTtvQ0FDRSxZQUFZLEVBQUU7d0NBQ1osQ0FBQzt3Q0FDRDs0Q0FDRSxXQUFXLEVBQUU7Z0RBQ1gsSUFBSTtnREFDSjtvREFDRSxHQUFHLEVBQUUscUdBQXFHO2lEQUMzRzs2Q0FDRjt5Q0FDRjtxQ0FDRjtpQ0FDRjtnQ0FDRDtvQ0FDRSxZQUFZLEVBQUU7d0NBQ1osQ0FBQzt3Q0FDRDs0Q0FDRSxXQUFXLEVBQUU7Z0RBQ1gsSUFBSTtnREFDSjtvREFDRSxHQUFHLEVBQUUscUdBQXFHO2lEQUMzRzs2Q0FDRjt5Q0FDRjtxQ0FDRjtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRjtpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsV0FBVztvQkFDakIsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLEtBQUssRUFBRSxNQUFNO2lCQUNkO2FBQ0Y7U0FDRjtRQUNELFdBQVcsRUFBRTtZQUNYLFlBQVksRUFBRTtnQkFDWiw2QkFBNkI7Z0JBQzdCLEtBQUs7YUFDTjtTQUNGO1FBQ0QsTUFBTSxFQUFFO1lBQ04sMkNBQTJDO1lBQzNDLFNBQVMsRUFBRSxvaUJBQW9pQjtTQUNoakI7S0FDRixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdAbW9ub2Nkay1leHBlcmltZW50L2Fzc2VydCc7XG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBhd3NfZXZlbnRzIGFzIGV2ZW50cyB9IGZyb20gJ21vbm9jZGsnO1xuaW1wb3J0IHsgQ2FuYXJ5IH0gZnJvbSAnLi4vLi4vbGliJztcblxuXG5jb25zdCB0ZXN0RGlyID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2RlbGl2bGliLXRlc3RzJywgJ2xpbnV4Jyk7XG5cbnRlc3QoJ2NvcnJlY3RseSBjcmVhdGVzIGNhbmFyeScsICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2sobmV3IEFwcCgpLCAnVGVzdFN0YWNrJyk7XG4gIC8vIFdIRU5cbiAgbmV3IENhbmFyeShzdGFjaywgJ0NhbmFyeScsIHtcbiAgICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmV4cHJlc3Npb24oJ3JhdGUoMSBtaW51dGUpJyksXG4gICAgc2NyaXB0RGlyZWN0b3J5OiB0ZXN0RGlyLFxuICAgIGVudHJ5cG9pbnQ6ICd0ZXN0LnNoJyxcbiAgfSk7XG4gIC8vIFRIRU5cbiAgYXNzZXJ0LmV4cGVjdChzdGFjaykudG8oYXNzZXJ0LmhhdmVSZXNvdXJjZUxpa2UoJ0FXUzo6Q2xvdWRXYXRjaDo6QWxhcm0nLCB7XG4gICAgQ29tcGFyaXNvbk9wZXJhdG9yOiAnR3JlYXRlclRoYW5PckVxdWFsVG9UaHJlc2hvbGQnLFxuICAgIEV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgIFRocmVzaG9sZDogMSxcbiAgICBEaW1lbnNpb25zOiBbe1xuICAgICAgTmFtZTogJ1Byb2plY3ROYW1lJyxcbiAgICAgIFZhbHVlOiB7XG4gICAgICAgIFJlZjogJ0NhbmFyeVNoZWxsYWJsZUExMzVFNzlDJyxcbiAgICAgIH0sXG4gICAgfV0sXG4gICAgTWV0cmljTmFtZTogJ0ZhaWxlZEJ1aWxkcycsXG4gICAgTmFtZXNwYWNlOiAnQVdTL0NvZGVCdWlsZCcsXG4gICAgU3RhdGlzdGljOiAnU3VtJyxcbiAgICBUcmVhdE1pc3NpbmdEYXRhOiAnaWdub3JlJyxcbiAgICBQZXJpb2Q6IDMwMCxcbiAgfSkpO1xuXG4gIGFzc2VydC5leHBlY3Qoc3RhY2spLnRvKGFzc2VydC5oYXZlUmVzb3VyY2VMaWtlKCdBV1M6OkV2ZW50czo6UnVsZScsIHtcbiAgICBTY2hlZHVsZUV4cHJlc3Npb246ICdyYXRlKDEgbWludXRlKScsXG4gICAgU3RhdGU6ICdFTkFCTEVEJyxcbiAgICBUYXJnZXRzOiBbe1xuICAgICAgQXJuOiB7XG4gICAgICAgICdGbjo6R2V0QXR0JzogW1xuICAgICAgICAgICdDYW5hcnlTaGVsbGFibGVBMTM1RTc5QycsXG4gICAgICAgICAgJ0FybicsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgUm9sZUFybjoge1xuICAgICAgICAnRm46OkdldEF0dCc6IFtcbiAgICAgICAgICAnQ2FuYXJ5U2hlbGxhYmxlRXZlbnRzUm9sZUM0MDMwRDBEJyxcbiAgICAgICAgICAnQXJuJyxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfV0sXG4gIH0pKTtcblxuICBhc3NlcnQuZXhwZWN0KHN0YWNrKS50byhhc3NlcnQuaGF2ZVJlc291cmNlTGlrZSgnQVdTOjpDb2RlQnVpbGQ6OlByb2plY3QnLCB7XG4gICAgQXJ0aWZhY3RzOiB7XG4gICAgICBUeXBlOiAnTk9fQVJUSUZBQ1RTJyxcbiAgICB9LFxuICAgIEVudmlyb25tZW50OiB7XG4gICAgICBDb21wdXRlVHlwZTogJ0JVSUxEX0dFTkVSQUwxX01FRElVTScsXG4gICAgICBJbWFnZTogJ2F3cy9jb2RlYnVpbGQvc3RhbmRhcmQ6NC4wJyxcbiAgICAgIFByaXZpbGVnZWRNb2RlOiBmYWxzZSxcbiAgICAgIFR5cGU6ICdMSU5VWF9DT05UQUlORVInLFxuICAgICAgRW52aXJvbm1lbnRWYXJpYWJsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE5hbWU6ICdTQ1JJUFRfUzNfQlVDS0VUJyxcbiAgICAgICAgICBUeXBlOiAnUExBSU5URVhUJyxcbiAgICAgICAgICBWYWx1ZToge1xuICAgICAgICAgICAgUmVmOiAnQXNzZXRQYXJhbWV0ZXJzM2QzNGIwN2JhODcxOTg5ZDAzMDY0OWM2NDZiMzA5NmJhN2M3OGNhNTMxODk3YmNkYjA2NzA3NzRkMmY5ZDNlNFMzQnVja2V0REE5MUVGQkMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBOYW1lOiAnU0NSSVBUX1MzX0tFWScsXG4gICAgICAgICAgVHlwZTogJ1BMQUlOVEVYVCcsXG4gICAgICAgICAgVmFsdWU6IHtcbiAgICAgICAgICAgICdGbjo6Sm9pbic6IFtcbiAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAnRm46OlNlbGVjdCc6IFtcbiAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICdGbjo6U3BsaXQnOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAnfHwnLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBSZWY6ICdBc3NldFBhcmFtZXRlcnMzZDM0YjA3YmE4NzE5ODlkMDMwNjQ5YzY0NmIzMDk2YmE3Yzc4Y2E1MzE4OTdiY2RiMDY3MDc3NGQyZjlkM2U0UzNWZXJzaW9uS2V5RjNGODNGNzYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICdGbjo6U2VsZWN0JzogW1xuICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgJ0ZuOjpTcGxpdCc6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICd8fCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFJlZjogJ0Fzc2V0UGFyYW1ldGVyczNkMzRiMDdiYTg3MTk4OWQwMzA2NDljNjQ2YjMwOTZiYTdjNzhjYTUzMTg5N2JjZGIwNjcwNzc0ZDJmOWQzZTRTM1ZlcnNpb25LZXlGM0Y4M0Y3NicsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBOYW1lOiAnSVNfQ0FOQVJZJyxcbiAgICAgICAgICBUeXBlOiAnUExBSU5URVhUJyxcbiAgICAgICAgICBWYWx1ZTogJ3RydWUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIFNlcnZpY2VSb2xlOiB7XG4gICAgICAnRm46OkdldEF0dCc6IFtcbiAgICAgICAgJ0NhbmFyeVNoZWxsYWJsZVJvbGUwNjNCQzA3RCcsXG4gICAgICAgICdBcm4nLFxuICAgICAgXSxcbiAgICB9LFxuICAgIFNvdXJjZToge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgQnVpbGRTcGVjOiAne1xcbiAgXCJ2ZXJzaW9uXCI6IFwiMC4yXCIsXFxuICBcInBoYXNlc1wiOiB7XFxuICAgIFwicHJlX2J1aWxkXCI6IHtcXG4gICAgICBcImNvbW1hbmRzXCI6IFtcXG4gICAgICAgIFwiZWNobyBcXFxcXCJEb3dubG9hZGluZyBzY3JpcHRzIGZyb20gczM6Ly8ke1NDUklQVF9TM19CVUNLRVR9LyR7U0NSSVBUX1MzX0tFWX1cXFxcXCJcIixcXG4gICAgICAgIFwiYXdzIHMzIGNwIHMzOi8vJHtTQ1JJUFRfUzNfQlVDS0VUfS8ke1NDUklQVF9TM19LRVl9IC90bXBcIixcXG4gICAgICAgIFwibWtkaXIgLXAgL3RtcC9zY3JpcHRkaXJcIixcXG4gICAgICAgIFwidW56aXAgL3RtcC8kKGJhc2VuYW1lICRTQ1JJUFRfUzNfS0VZKSAtZCAvdG1wL3NjcmlwdGRpclwiXFxuICAgICAgXVxcbiAgICB9LFxcbiAgICBcImJ1aWxkXCI6IHtcXG4gICAgICBcImNvbW1hbmRzXCI6IFtcXG4gICAgICAgIFwiZXhwb3J0IFNDUklQVF9ESVI9L3RtcC9zY3JpcHRkaXJcIixcXG4gICAgICAgIFwiZWNobyBcXFxcXCJSdW5uaW5nIHRlc3Quc2hcXFxcXCJcIixcXG4gICAgICAgIFwiL2Jpbi9iYXNoIC90bXAvc2NyaXB0ZGlyL3Rlc3Quc2hcIlxcbiAgICAgIF1cXG4gICAgfVxcbiAgfVxcbn0nLFxuICAgIH0sXG4gIH0pKTtcbn0pO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|