projen-pipelines 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +749 -640
- package/API.md +579 -323
- package/lib/awscdk/base.d.ts +33 -8
- package/lib/awscdk/base.js +86 -35
- package/lib/awscdk/bash.js +11 -16
- package/lib/awscdk/codecatalyst.d.ts +0 -17
- package/lib/awscdk/codecatalyst.js +23 -27
- package/lib/awscdk/github.d.ts +0 -21
- package/lib/awscdk/github.js +15 -65
- package/lib/awscdk/gitlab.d.ts +0 -27
- package/lib/awscdk/gitlab.js +19 -64
- package/lib/steps/artifact-steps.js +2 -2
- package/lib/steps/aws-assume-role.step.d.ts +3 -1
- package/lib/steps/aws-assume-role.step.js +17 -2
- package/lib/steps/registries.d.ts +11 -1
- package/lib/steps/registries.js +21 -4
- package/lib/steps/set-env.step.d.ts +14 -0
- package/lib/steps/set-env.step.js +44 -0
- package/lib/steps/step.d.ts +30 -0
- package/lib/steps/step.js +112 -6
- package/package.json +1 -1
|
@@ -8,7 +8,6 @@ const blueprint_component_workflows_1 = require("@amazon-codecatalyst/blueprint-
|
|
|
8
8
|
const projen_1 = require("projen");
|
|
9
9
|
const base_1 = require("./base");
|
|
10
10
|
const engine_1 = require("../engine");
|
|
11
|
-
const steps_1 = require("../steps");
|
|
12
11
|
const blueprint_1 = require("./codecatalyst/blueprint");
|
|
13
12
|
class CodeCatalystCDKPipeline extends base_1.CDKPipeline {
|
|
14
13
|
constructor(app, options) {
|
|
@@ -109,20 +108,11 @@ class CodeCatalystCDKPipeline extends base_1.CDKPipeline {
|
|
|
109
108
|
return engine_1.PipelineEngine.CODE_CATALYST;
|
|
110
109
|
}
|
|
111
110
|
createSynth() {
|
|
112
|
-
const steps = [
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
steps.push(new steps_1.SimpleCommandStep(this.project, this.renderSynthCommands()));
|
|
117
|
-
steps.push(...this.baseOptions.postSynthSteps ?? []);
|
|
118
|
-
steps.push(new steps_1.UploadArtifactStep(this.project, {
|
|
119
|
-
name: 'cloud-assembly',
|
|
120
|
-
path: `${this.app.cdkConfig.cdkout}/`,
|
|
121
|
-
}));
|
|
111
|
+
const steps = [
|
|
112
|
+
this.provideInstallStep(),
|
|
113
|
+
this.provideSynthStep(),
|
|
114
|
+
];
|
|
122
115
|
const codeCatalystSteps = steps.map(s => s.toCodeCatalyst());
|
|
123
|
-
const cmds = [];
|
|
124
|
-
cmds.push(...this.renderInstallCommands());
|
|
125
|
-
cmds.push(...this.renderSynthCommands());
|
|
126
116
|
this.deploymentWorkflowBuilder.addBuildAction({
|
|
127
117
|
actionName: 'SynthCDKApplication',
|
|
128
118
|
input: {
|
|
@@ -153,8 +143,11 @@ class CodeCatalystCDKPipeline extends base_1.CDKPipeline {
|
|
|
153
143
|
*/
|
|
154
144
|
}
|
|
155
145
|
createAssetUpload() {
|
|
156
|
-
const
|
|
157
|
-
|
|
146
|
+
const steps = [
|
|
147
|
+
this.provideInstallStep(),
|
|
148
|
+
this.provideAssetUploadStep(),
|
|
149
|
+
];
|
|
150
|
+
const codeCatalystSteps = steps.map(s => s.toCodeCatalyst());
|
|
158
151
|
this.deploymentWorkflowBuilder.addBuildAction({
|
|
159
152
|
actionName: 'PublishAssetsToAWS',
|
|
160
153
|
dependsOn: ['SynthCDKApplication'],
|
|
@@ -164,7 +157,7 @@ class CodeCatalystCDKPipeline extends base_1.CDKPipeline {
|
|
|
164
157
|
CI: 'true',
|
|
165
158
|
},
|
|
166
159
|
},
|
|
167
|
-
steps:
|
|
160
|
+
steps: [...codeCatalystSteps.flatMap(s => s.commands)],
|
|
168
161
|
// FIXME is there is an environment, connect it to the workflow
|
|
169
162
|
// needs to react on this.options.iamRoleArns?.synth
|
|
170
163
|
//environment: environment && convertToWorkflowEnvironment(environment),
|
|
@@ -187,9 +180,10 @@ class CodeCatalystCDKPipeline extends base_1.CDKPipeline {
|
|
|
187
180
|
dependsOn = `approve_${stage.name}`;
|
|
188
181
|
}
|
|
189
182
|
// Add deployment to existing workflow
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
183
|
+
const deploySteps = [
|
|
184
|
+
this.provideInstallStep(),
|
|
185
|
+
this.provideDeployStep(stage),
|
|
186
|
+
].map(s => s.toCodeCatalyst());
|
|
193
187
|
this.deploymentWorkflowBuilder.addBuildAction({
|
|
194
188
|
actionName: `deploy_${stage.name}`,
|
|
195
189
|
dependsOn: this.deploymentStages.length > 0 ? ['PublishAssetsToAWS', dependsOn] : ['PublishAssetsToAWS'],
|
|
@@ -199,7 +193,7 @@ class CodeCatalystCDKPipeline extends base_1.CDKPipeline {
|
|
|
199
193
|
CI: 'true',
|
|
200
194
|
},
|
|
201
195
|
},
|
|
202
|
-
steps:
|
|
196
|
+
steps: [...deploySteps.flatMap(s => s.commands)],
|
|
203
197
|
// FIXME is there is an environment, connect it to the workflow
|
|
204
198
|
// needs to react on this.options.iamRoleArns?.synth
|
|
205
199
|
//environment: environment && convertToWorkflowEnvironment(environment),
|
|
@@ -224,9 +218,11 @@ class CodeCatalystCDKPipeline extends base_1.CDKPipeline {
|
|
|
224
218
|
dependsOn = `approve_${stage.name}`;
|
|
225
219
|
}
|
|
226
220
|
// Add deployment to existing workflow
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
221
|
+
const steps = [
|
|
222
|
+
this.provideInstallStep(),
|
|
223
|
+
this.provideSynthStep(),
|
|
224
|
+
this.provideDeployStep(stage),
|
|
225
|
+
].map(s => s.toGitlab());
|
|
230
226
|
this.deploymentWorkflowBuilder.addBuildAction({
|
|
231
227
|
actionName: `indeploy_${stage.name}`,
|
|
232
228
|
dependsOn: [dependsOn],
|
|
@@ -236,7 +232,7 @@ class CodeCatalystCDKPipeline extends base_1.CDKPipeline {
|
|
|
236
232
|
CI: 'true',
|
|
237
233
|
},
|
|
238
234
|
},
|
|
239
|
-
steps:
|
|
235
|
+
steps: [...steps.flatMap(s => s.commands)],
|
|
240
236
|
// FIXME is there is an environment, connect it to the workflow
|
|
241
237
|
// needs to react on this.options.iamRoleArns?.synth
|
|
242
238
|
//environment: environment && convertToWorkflowEnvironment(environment),
|
|
@@ -248,5 +244,5 @@ class CodeCatalystCDKPipeline extends base_1.CDKPipeline {
|
|
|
248
244
|
}
|
|
249
245
|
exports.CodeCatalystCDKPipeline = CodeCatalystCDKPipeline;
|
|
250
246
|
_a = JSII_RTTI_SYMBOL_1;
|
|
251
|
-
CodeCatalystCDKPipeline[_a] = { fqn: "projen-pipelines.CodeCatalystCDKPipeline", version: "0.
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWNhdGFseXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F3c2Nkay9jb2RlY2F0YWx5c3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0R0FBb0Y7QUFDcEYsc0dBQW1IO0FBQ25ILG1DQUEwQztBQUMxQyxpQ0FBMEU7QUFFMUUsc0NBQTJDO0FBQzNDLG9DQUErRTtBQUMvRSx3REFBcUQ7QUErQ3JELE1BQWEsdUJBQXdCLFNBQVEsa0JBQVc7SUFVdEQsWUFBWSxHQUErQixFQUFVLE9BQXVDO1FBQzFGLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFEK0IsWUFBTyxHQUFQLE9BQU8sQ0FBZ0M7UUFMcEYsaUJBQVksR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNuRCxxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFNdEMsZ0VBQWdFO1FBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDO1FBRTNDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxxQkFBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixFQUFFLENBQUMsQ0FBQztRQUUvRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLCtDQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTlELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMs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LEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLENBQUM7WUFDNUMsVUFBVSxFQUFFLFlBQVksS0FBSyxDQUFDLElBQUksRUFBRTtZQUNwQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDdEIsS0FBSyxFQUFFO2dCQUNMLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO2dCQUMzQixTQUFTLEVBQUU7b0JBQ1QsRUFBRSxFQUFFLE1BQU07aUJBQ1g7YUFDRjtZQUNELEtBQUssRUFDSCxJQUFJO1lBQ04sK0RBQStEO1lBQy9ELG9EQUFvRDtZQUNwRCx3RUFBd0U7WUFFeEUsb0NBQW9DO1lBQ3BDLCtFQUErRTtZQUUvRSxNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBM1JILDBEQTZSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnQGFtYXpvbi1jb2RlY2F0YWx5c3QvYmx1ZXByaW50LWNvbXBvbmVudC5lbnZpcm9ubWVudHMnO1xuaW1wb3J0IHsgY29udmVydFRvV29ya2Zsb3dFbnZpcm9ubWVudCwgV29ya2Zsb3dCdWlsZGVyIH0gZnJvbSAnQGFtYXpvbi1jb2RlY2F0YWx5c3QvYmx1ZXByaW50LWNvbXBvbmVudC53b3JrZmxvd3MnO1xuaW1wb3J0IHsgWWFtbEZpbGUsIGF3c2NkayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDREtQaXBlbGluZSwgQ0RLUGlwZWxpbmVPcHRpb25zLCBEZXBsb3ltZW50U3RhZ2UgfSBmcm9tICcuL2Jhc2UnO1xuXG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBQaXBlbGluZVN0ZXAsIFNpbXBsZUNvbW1hbmRTdGVwLCBVcGxvYWRBcnRpZmFjdFN0ZXAgfSBmcm9tICcuLi9zdGVwcyc7XG5pbXBvcnQgeyBCbHVlcHJpbnQgfSBmcm9tICcuL2NvZGVjYXRhbHlzdC9ibHVlcHJpbnQnO1xuXG4vKlxuTmVlZHMgdG8gY3JlYXRlOlxuLSBidWlsZC55bWwgKGNyZWF0ZXMgYW5kIG11dGF0ZXMgcGlwZWxpbmUgYnkgZXhlY3V0aW5nIHByb2plbiBidWlsZCkgLSBjb21lcyBmcm9tIHByb2plblxuLSBkZXBsb3kueWFtbCAoYnVpbGQgKyBkZXBsb3kgdG8gZGV2KVxuLSBwdWxsLXJlcXVlc3QtbGludC55bWwgKGV4ZWN1dGVzIGFtYW5ubi9hY3Rpb24tc2VtYW50aWMtcHVsbC1yZXF1ZXN0QHY1LjAuMikgLSBjb21lcyBmcm9tIHByb2plblxuLSByZWxlYXNlLXByb2QueWFtbCAoZGVwbG95IHRvIHByb2QgLSBub3QgcmVxdWlyZWQsIG1vdmUgb3ZlciB0byBcIm1hbnVhbCBhcHByb3ZhbHNcIiBpbiBkZXBsbylcbi0gdXBncmFkZS55YW1sICh1cGdyYWRlIGRlcGVuZGVuY2llcykgIC0gY29tZXMgZnJvbSBwcm9qZW5cblxuKiBzeW50aCAtPiBjcmVhdGUgYXJ0aWZhY3RzXG4qIHVwbG9hZCBjZGsgYXNzZXRzIC0+ICBzYXZlIGFzc2V0cyBpbiBzMyAobGFtYmRhKSwgYnVpbGQgY29udGFpbmVyIGltYWdlcyAocHVzaCB0byBFQ1IpIC0tIGV2ZXJ5dGhpbmcgaW4gQVdTXG4qIGRlcGxveSBmb3IgZWFjaCBzdGFnZSB0aGF0IGlzIG5vbi1wcm9kdWN0aW9uXG4qIGRlcGxveSB0byBwcm9kIChtYW51YWwgYXBwcm92YWwpXG5cblRPRE86XG4tIGFjY291bnQgdGFyZ2V0IC0tIE5PVCBQT1NTSUJMRSBhcyB3ZSBjYW5ub3QgY3JlYXRlIGVudmlyb25tZW50cy9hY2NvdW50cy90YXJnZXRzXG4tIG1hbnVhbCBhcHByb3ZhbCBmb3Igc3RhZ2VzIC0tIERPTkVcbi0gSUFNIHJvbGUgcGVyIHN0YWdlLCBzeW50aCwgYXNzZXQgLSBOT1QgUE9TU0lCTEUgYXMgd2UgY2Fubm90IGNyZWF0ZSBlbnZpcm9ubWVudHNcbi0gaW5kZXBlbmRlbmQgc3RhZ2VzIChhbGwgcGFyYWxsZWwgdG8gZWFjaCBvdGhlcikgYWZ0ZXIgc3ludGgmYXNzZXRzIC0tIERPTkVcbi0gZW52aXJvbm1lbnRzIHN1cHBvcnQgLSBET05FXG4tIHN0ZXBzIHBlciBzdGFnZSAtIHByZUluc3RhbGwsIHByZVN5bnRoLCAuLi4gLSBET05FXG5cbmV4YW1wbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtY29tbXVuaXR5LWRhY2gvZXZlbnQtc3lzdGVtLWJhY2tlbmRcblxudGVzdCBkb2NnZW46IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLWNvbnN0cnVjdHMvYXdzLWNkay1saWJyYXJ5XG5cblxuKi9cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQ2F0YWx5c3RJYW1Sb2xlQ29uZmlnIHtcbiAgLyoqIERlZmF1bHQgSUFNIHJvbGUgQVJOIHVzZWQgaWYgbm8gc3BlY2lmaWMgcm9sZSBpcyBwcm92aWRlZC4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IHN0cmluZztcbiAgLyoqIElBTSByb2xlIEFSTiBmb3IgdGhlIHN5bnRoZXNpcyBzdGVwLiAqL1xuICByZWFkb25seSBzeW50aD86IHN0cmluZztcbiAgLyoqIElBTSByb2xlIEFSTiBmb3IgdGhlIGFzc2V0IHB1Ymxpc2hpbmcgc3RlcC4gKi9cbiAgcmVhZG9ubHkgYXNzZXRQdWJsaXNoaW5nPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgYXNzZXQgcHVibGlzaGluZyBzdGVwIGZvciBhIHNwZWNpZmljIHN0YWdlLiAqL1xuICByZWFkb25seSBhc3NldFB1Ymxpc2hpbmdQZXJTdGFnZT86IHsgW3N0YWdlOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqIElBTSByb2xlIEFSTnMgZm9yIGRpZmZlcmVudCBkZXBsb3ltZW50IHN0YWdlcy4gKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudD86IHsgW3N0YWdlOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQ2F0YWx5c3RDREtQaXBlbGluZU9wdGlvbnMgZXh0ZW5kcyBDREtQaXBlbGluZU9wdGlvbnMge1xuICByZWFkb25seSBpYW1Sb2xlQXJuczogQ29kZUNhdGFseXN0SWFtUm9sZUNvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIENvZGVDYXRhbHlzdENES1BpcGVsaW5lIGV4dGVuZHMgQ0RLUGlwZWxpbmUge1xuXG4gIHB1YmxpYyByZWFkb25seSBuZWVkc1ZlcnNpb25lZEFydGlmYWN0czogYm9vbGVhbjtcblxuICBwcml2YXRlIGRlcGxveW1lbnRXb3JrZmxvd0J1aWxkZXI6IFdvcmtmbG93QnVpbGRlcjtcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudHM6IE1hcDxTdHJpbmcsIEVudmlyb25tZW50PiA9IG5ldyBNYXAoKTtcbiAgcHJpdmF0ZSBkZXBsb3ltZW50U3RhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYnA6IEJsdWVwcmludDtcblxuICBjb25zdHJ1Y3RvcihhcHA6IGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwLCBwcml2YXRlIG9wdGlvbnM6IENvZGVDYXRhbHlzdENES1BpcGVsaW5lT3B0aW9ucykge1xuICAgIHN1cGVyKGFwcCwgb3B0aW9ucyk7XG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvY29kZWNhdGFseXN0LWJsdWVwcmludHMvaXNzdWVzLzQ3N1xuICAgIHByb2Nlc3MuZW52LkNPTlRFWFRfRU5WSVJPTk1FTlRJRCA9ICdwcm9kJztcblxuICAgIHRoaXMuYnAgPSBuZXcgQmx1ZXByaW50KHsgb3V0ZGlyOiAnLmNvZGVjYXRhbHlzdC93b3JrZmxvd3MnIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucykge1xuICAgICAgdGhpcy5jcmVhdGVFbnZpcm9ubWVudHMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvd0J1aWxkZXIgPSBuZXcgV29ya2Zsb3dCdWlsZGVyKHRoaXMuYnApO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3dCdWlsZGVyLnNldE5hbWUoJ2RlcGxveScpO1xuICAgIHRoaXMuZGVwbG95bWVudFdvcmtmbG93QnVpbGRlci5hZGRCcmFuY2hUcmlnZ2VyKFsnbWFpbiddKTtcblxuICAgIHRoaXMubmVlZHNWZXJzaW9uZWRBcnRpZmFjdHMgPSB0aGlzLm9wdGlvbnMuc3RhZ2VzLmZpbmQocyA9PiBzLm1hbnVhbEFwcHJvdmFsID09PSB0cnVlKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5jcmVhdGVTeW50aCgpO1xuICAgIHRoaXMuY3JlYXRlQXNzZXRVcGxvYWQoKTtcblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygb3B0aW9ucy5zdGFnZXMpIHtcbiAgICAgIHRoaXMuY3JlYXRlRGVwbG95bWVudChzdGFnZSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiAob3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXSkpIHtcbiAgICAgIHRoaXMuY3JlYXRlSW5kZXBlbmRlbnREZXBsb3ltZW50KHN0YWdlKTtcbiAgICB9XG5cbiAgICBuZXcgWWFtbEZpbGUodGhpcywgJy5jb2RlY2F0YWx5c3Qvd29ya2Zsb3dzL2RlcGxveS55YW1sJywge1xuICAgICAgb2JqOiAoKSA9PiB0aGlzLmRlcGxveW1lbnRXb3JrZmxvd0J1aWxkZXIuZ2V0RGVmaW5pdGlvbigpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUVudmlyb25tZW50cygpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLmRlZmF1bHQpIHtcbiAgICAgIHRoaXMuZW52aXJvbm1lbnRzLnNldCgnZGVmYXVsdCcsXG4gICAgICAgIG5ldyBFbnZpcm9ubWVudCh0aGlzLmJwLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRUeXBlOiAnREVWRUxPUE1FTlQnLFxuICAgICAgICAgIG5hbWU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2RlZmF1bHQgZGVwbG95bWVudCBlbnZpcm9ubWVudCcsXG4gICAgICAgICAgYXdzQWNjb3VudDoge1xuICAgICAgICAgICAgaWQ6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgIG5hbWU6ICdhd3NBY2NvdW50JyxcbiAgICAgICAgICAgIGF3c0FjY291bnQ6IHsgbmFtZTogJ2RlZmF1bHQtcm9sZScsIGFybjogdGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLmRlZmF1bHQgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucy5zeW50aCkge1xuICAgICAgdGhpcy5lbnZpcm9ubWVudHMuc2V0KCdzeW50aCcsXG4gICAgICAgIG5ldyBFbnZpcm9ubWVudCh0aGlzLmJwLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRUeXBlOiAnREVWRUxPUE1FTlQnLFxuICAgICAgICAgIG5hbWU6ICdzeW50aCcsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdzeW50aCBkZXBsb3ltZW50IGVudmlyb25tZW50JyxcbiAgICAgICAgICBhd3NBY2NvdW50OiB7XG4gICAgICAgICAgICBpZDogJ3N5bnRoJyxcbiAgICAgICAgICAgIG5hbWU6ICdhd3NBY2NvdW50JyxcbiAgICAgICAgICAgIGF3c0FjY291bnQ6IHsgbmFtZTogJ3N5bnRoLXJvbGUnLCBhcm46IHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucy5zeW50aCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZykge1xuICAgICAgdGhpcy5lbnZpcm9ubWVudHMuc2V0KCdhc3NldFB1Ymxpc2hpbmcnLFxuICAgICAgICBuZXcgRW52aXJvbm1lbnQodGhpcy5icCwge1xuICAgICAgICAgIGVudmlyb25tZW50VHlwZTogJ0RFVkVMT1BNRU5UJyxcbiAgICAgICAgICBuYW1lOiAnYXNzZXRQdWJsaXNoaW5nJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2Fzc2V0IHB1Ymxpc2hpbmcgZGVwbG95bWVudCBlbnZpcm9ubWVudCcsXG4gICAgICAgICAgYXdzQWNjb3VudDoge1xuICAgICAgICAgICAgaWQ6ICdhc3NldFB1Ymxpc2hpbmcnLFxuICAgICAgICAgICAgbmFtZTogJ2F3c0FjY291bnQnLFxuICAgICAgICAgICAgYXdzQWNjb3VudDogeyBuYW1lOiAnYXNzZXRQdWJsaXNoaW5nLXJvbGUnLCBhcm46IHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucy5hc3NldFB1Ymxpc2hpbmcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucy5hc3NldFB1Ymxpc2hpbmdQZXJTdGFnZSkge1xuICAgICAgZm9yIChjb25zdCBbc3RhZ2UsIGFybl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlKSkge1xuICAgICAgICB0aGlzLmVudmlyb25tZW50cy5zZXQoYCR7c3RhZ2V9QXNzZXRQdWJsaXNoaW5nYCxcbiAgICAgICAgICBuZXcgRW52aXJvbm1lbnQodGhpcy5icCwge1xuICAgICAgICAgICAgZW52aXJvbm1lbnRUeXBlOiAnREVWRUxPUE1FTlQnLFxuICAgICAgICAgICAgbmFtZTogYCR7c3RhZ2V9QXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2VgLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3N0YWdlfSBhc3NldCBwdWJsaXNoaW5nIGRlcGxveW1lbnQgZW52aXJvbm1lbnRgLFxuICAgICAgICAgICAgYXdzQWNjb3VudDoge1xuICAgICAgICAgICAgICBpZDogYCR7c3RhZ2V9QXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2VgLFxuICAgICAgICAgICAgICBuYW1lOiAnYXdzQWNjb3VudCcsXG4gICAgICAgICAgICAgIGF3c0FjY291bnQ6IHsgbmFtZTogYCR7c3RhZ2V9LXJvbGVgLCBhcm46IGFybiB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucy5kZXBsb3ltZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IFtzdGFnZSwgYXJuXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnMuZGVwbG95bWVudCkpIHtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudHMuc2V0KHN0YWdlLFxuICAgICAgICAgIG5ldyBFbnZpcm9ubWVudCh0aGlzLmJwLCB7XG4gICAgICAgICAgICBlbnZpcm9ubWVudFR5cGU6ICdERVZFTE9QTUVOVCcsXG4gICAgICAgICAgICBuYW1lOiBzdGFnZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHtzdGFnZX0gZGVwbG95bWVudCBlbnZpcm9ubWVudGAsXG4gICAgICAgICAgICBhd3NBY2NvdW50OiB7XG4gICAgICAgICAgICAgIGlkOiBzdGFnZSxcbiAgICAgICAgICAgICAgbmFtZTogJ2F3c0FjY291bnQnLFxuICAgICAgICAgICAgICBhd3NBY2NvdW50OiB7IG5hbWU6IGAke3N0YWdlfS1yb2xlYCwgYXJuOiBhcm4gfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiB0aGUgdHlwZSBvZiBlbmdpbmUgdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBDREtQaXBlbGluZSBpcyBmb3IgKi9cbiAgcHVibGljIGVuZ2luZVR5cGUoKTogUGlwZWxpbmVFbmdpbmUge1xuICAgIHJldHVybiBQaXBlbGluZUVuZ2luZS5DT0RFX0NBVEFMWVNUO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTeW50aCgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwczogUGlwZWxpbmVTdGVwW10gPSBbXTtcblxuICAgIHN0ZXBzLnB1c2goLi4udGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsU3RlcHMgPz8gW10pO1xuICAgIHN0ZXBzLnB1c2gobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5yZW5kZXJJbnN0YWxsQ29tbWFuZHMoKSkpO1xuXG4gICAgc3RlcHMucHVzaCguLi50aGlzLmJhc2VPcHRpb25zLnByZVN5bnRoU3RlcHMgPz8gW10pO1xuICAgIHN0ZXBzLnB1c2gobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5yZW5kZXJTeW50aENvbW1hbmRzKCkpKTtcbiAgICBzdGVwcy5wdXNoKC4uLnRoaXMuYmFzZU9wdGlvbnMucG9zdFN5bnRoU3RlcHMgPz8gW10pO1xuXG4gICAgc3RlcHMucHVzaChuZXcgVXBsb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgbmFtZTogJ2Nsb3VkLWFzc2VtYmx5JyxcbiAgICAgIHBhdGg6IGAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9L2AsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29kZUNhdGFseXN0U3RlcHMgPSBzdGVwcy5tYXAocyA9PiBzLnRvQ29kZUNhdGFseXN0KCkpO1xuXG4gICAgY29uc3QgY21kczogc3RyaW5nW10gPSBbXTtcbiAgICBjbWRzLnB1c2goLi4udGhpcy5yZW5kZXJJbnN0YWxsQ29tbWFuZHMoKSk7XG4gICAgY21kcy5wdXNoKC4uLnRoaXMucmVuZGVyU3ludGhDb21tYW5kcygpKTtcbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvd0J1aWxkZXIuYWRkQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogJ1N5bnRoQ0RLQXBwbGljYXRpb24nLFxuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgU291cmNlczogWydXb3JrZmxvd1NvdXJjZSddLFxuICAgICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHN0ZXBzOlxuICAgICAgICBbLi4uY29kZUNhdGFseXN0U3RlcHMuZmxhdE1hcChzID0+IHMuY29tbWFuZHMpXSxcbiAgICAgIC8vIEZJWE1FIGlzIHRoZXJlIGlzIGFuIGVudmlyb25tZW50LCBjb25uZWN0IGl0IHRvIHRoZSB3b3JrZmxvd1xuICAgICAgLy8gbmVlZHMgdG8gcmVhY3Qgb24gdGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zPy5zeW50aFxuICAgICAgLy9lbnZpcm9ubWVudDogZW52aXJvbm1lbnQgJiYgY29udmVydFRvV29ya2Zsb3dFbnZpcm9ubWVudChlbnZpcm9ubWVudCksXG5cbiAgICAgIC8vIEZJWE1FIHdoYXQgYWJvdXQgdGhlIHBlcm1pc3Npb25zP1xuICAgICAgLy8gcGVybWlzc2lvbnM6IHsgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSwgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCB9LFxuICAgICAgZW52aXJvbm1lbnQ6IGNvbnZlcnRUb1dvcmtmbG93RW52aXJvbm1lbnQodGhpcy5lbnZpcm9ubWVudHMuZ2V0KCdkZWZhdWx0JykpLFxuICAgICAgb3V0cHV0OiB7fSxcbiAgICB9KTtcblxuICAgIC8qXG5ub3QgcmVxdWlyZWQgYmVjYXVzZSBjb2RlY2F0YWx5c3QgYXV0b21hdGljYWxseSB1cGxvYWRzIGFydGlmYWN0c1xuRklYTUUgb3IgZG8gd2UgbmVlZCB0byBjcmVhdGUgXCJhcnRpZmFjdHNcIiBoZXJlIGFuZCB1cGxvYWQ/XG5zdGVwcy5wdXNoKHtcbiAgICAgIHVzZXM6ICdhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2MycsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIG5hbWU6ICdjbG91ZC1hc3NlbWJseScsXG4gICAgICAgIHBhdGg6IGAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9L2AsXG4gICAgICB9LFxuICAgIH0pO1xuICAgICovXG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQXNzZXRVcGxvYWQoKTogdm9pZCB7XG5cbiAgICBjb25zdCBjbWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNtZHMucHVzaCguLi50aGlzLnJlbmRlckFzc2V0VXBsb2FkQ29tbWFuZHMoKSk7XG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3dCdWlsZGVyLmFkZEJ1aWxkQWN0aW9uKHtcbiAgICAgIGFjdGlvbk5hbWU6ICdQdWJsaXNoQXNzZXRzVG9BV1MnLFxuICAgICAgZGVwZW5kc09uOiBbJ1N5bnRoQ0RLQXBwbGljYXRpb24nXSxcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIFNvdXJjZXM6IFsnV29ya2Zsb3dTb3VyY2UnXSxcbiAgICAgICAgVmFyaWFibGVzOiB7XG4gICAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzdGVwczpcbiAgICAgICAgY21kcyxcbiAgICAgIC8vIEZJWE1FIGlzIHRoZXJlIGlzIGFuIGVudmlyb25tZW50LCBjb25uZWN0IGl0IHRvIHRoZSB3b3JrZmxvd1xuICAgICAgLy8gbmVlZHMgdG8gcmVhY3Qgb24gdGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zPy5zeW50aFxuICAgICAgLy9lbnZpcm9ubWVudDogZW52aXJvbm1lbnQgJiYgY29udmVydFRvV29ya2Zsb3dFbnZpcm9ubWVudChlbnZpcm9ubWVudCksXG5cbiAgICAgIC8vIEZJWE1FIHdoYXQgYWJvdXQgdGhlIHBlcm1pc3Npb25zP1xuICAgICAgLy8gcGVybWlzc2lvbnM6IHsgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSwgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCB9LFxuXG4gICAgICBvdXRwdXQ6IHt9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZURlcGxveW1lbnQoc3RhZ2U6IERlcGxveW1lbnRTdGFnZSk6IHZvaWQge1xuICAgIGxldCBkZXBlbmRzT24gPSBgZGVwbG95XyR7dGhpcy5kZXBsb3ltZW50U3RhZ2VzLmF0KC0xKSF9YDtcbiAgICBpZiAoc3RhZ2UubWFudWFsQXBwcm92YWwgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZGVwbG95bWVudFdvcmtmbG93QnVpbGRlci5hZGRHZW5lcmljQWN0aW9uKHtcbiAgICAgICAgSWRlbnRpZmllcjogJ2F3cy9hcHByb3ZhbEB2MScsXG4gICAgICAgIGFjdGlvbk5hbWU6IGBhcHByb3ZlXyR7c3RhZ2UubmFtZX1gLFxuICAgICAgICBEZXBlbmRzT246IFtkZXBlbmRzT25dLFxuICAgICAgICBDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgQXBwcm92YWxzUmVxdWlyZWQ6IDEsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGRlcGVuZHNPbiA9IGBhcHByb3ZlXyR7c3RhZ2UubmFtZX1gO1xuICAgIH1cbiAgICAvLyBBZGQgZGVwbG95bWVudCB0byBleGlzdGluZyB3b3JrZmxvd1xuICAgIGNvbnN0IGNtZHM6IHN0cmluZ1tdID0gW107XG4gICAgY21kcy5wdXNoKC4uLnRoaXMucmVuZGVySW5zdGFsbENvbW1hbmRzKCkpO1xuICAgIGNtZHMucHVzaCguLi50aGlzLnJlbmRlckRlcGxveUNvbW1hbmRzKHN0YWdlLm5hbWUpKTtcbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvd0J1aWxkZXIuYWRkQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogYGRlcGxveV8ke3N0YWdlLm5hbWV9YCxcbiAgICAgIGRlcGVuZHNPbjogdGhpcy5kZXBsb3ltZW50U3RhZ2VzLmxlbmd0aCA+IDAgPyBbJ1B1Ymxpc2hBc3NldHNUb0FXUycsIGRlcGVuZHNPbl0gOiBbJ1B1Ymxpc2hBc3NldHNUb0FXUyddLFxuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgU291cmNlczogWydXb3JrZmxvd1NvdXJjZSddLFxuICAgICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHN0ZXBzOlxuICAgICAgICBjbWRzLFxuICAgICAgLy8gRklYTUUgaXMgdGhlcmUgaXMgYW4gZW52aXJvbm1lbnQsIGNvbm5lY3QgaXQgdG8gdGhlIHdvcmtmbG93XG4gICAgICAvLyBuZWVkcyB0byByZWFjdCBvbiB0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnM/LnN5bnRoXG4gICAgICAvL2Vudmlyb25tZW50OiBlbnZpcm9ubWVudCAmJiBjb252ZXJ0VG9Xb3JrZmxvd0Vudmlyb25tZW50KGVudmlyb25tZW50KSxcblxuICAgICAgLy8gRklYTUUgd2hhdCBhYm91dCB0aGUgcGVybWlzc2lvbnM/XG4gICAgICAvLyBwZXJtaXNzaW9uczogeyBpZFRva2VuOiBKb2JQZXJtaXNzaW9uLldSSVRFLCBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFEIH0sXG5cbiAgICAgIG91dHB1dDoge30sXG4gICAgICBlbnZpcm9ubWVudDogY29udmVydFRvV29ya2Zsb3dFbnZpcm9ubWVudCh0aGlzLmVudmlyb25tZW50cy5nZXQoc3RhZ2UubmFtZSkpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50U3RhZ2VzLnB1c2goc3RhZ2UubmFtZSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlSW5kZXBlbmRlbnREZXBsb3ltZW50KHN0YWdlOiBEZXBsb3ltZW50U3RhZ2UpOiB2b2lkIHtcbiAgICBsZXQgZGVwZW5kc09uID0gJ1B1Ymxpc2hBc3NldHNUb0FXUyc7XG4gICAgaWYgKHN0YWdlLm1hbnVhbEFwcHJvdmFsID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvd0J1aWxkZXIuYWRkR2VuZXJpY0FjdGlvbih7XG4gICAgICAgIElkZW50aWZpZXI6ICdhd3MvYXBwcm92YWxAdjEnLFxuICAgICAgICBhY3Rpb25OYW1lOiBgYXBwcm92ZV8ke3N0YWdlLm5hbWV9YCxcbiAgICAgICAgRGVwZW5kc09uOiBbZGVwZW5kc09uXSxcbiAgICAgICAgQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIEFwcHJvdmFsc1JlcXVpcmVkOiAxLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBkZXBlbmRzT24gPSBgYXBwcm92ZV8ke3N0YWdlLm5hbWV9YDtcbiAgICB9XG4gICAgLy8gQWRkIGRlcGxveW1lbnQgdG8gZXhpc3Rpbmcgd29ya2Zsb3dcbiAgICBjb25zdCBjbWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNtZHMucHVzaCguLi50aGlzLnJlbmRlckluc3RhbGxDb21tYW5kcygpKTtcbiAgICBjbWRzLnB1c2goLi4udGhpcy5yZW5kZXJEZXBsb3lDb21tYW5kcyhzdGFnZS5uYW1lKSk7XG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3dCdWlsZGVyLmFkZEJ1aWxkQWN0aW9uKHtcbiAgICAgIGFjdGlvbk5hbWU6IGBpbmRlcGxveV8ke3N0YWdlLm5hbWV9YCxcbiAgICAgIGRlcGVuZHNPbjogW2RlcGVuZHNPbl0sXG4gICAgICBpbnB1dDoge1xuICAgICAgICBTb3VyY2VzOiBbJ1dvcmtmbG93U291cmNlJ10sXG4gICAgICAgIFZhcmlhYmxlczoge1xuICAgICAgICAgIENJOiAndHJ1ZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc3RlcHM6XG4gICAgICAgIGNtZHMsXG4gICAgICAvLyBGSVhNRSBpcyB0aGVyZSBpcyBhbiBlbnZpcm9ubWVudCwgY29ubmVjdCBpdCB0byB0aGUgd29ya2Zsb3dcbiAgICAgIC8vIG5lZWRzIHRvIHJlYWN0IG9uIHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucz8uc3ludGhcbiAgICAgIC8vZW52aXJvbm1lbnQ6IGVudmlyb25tZW50ICYmIGNvbnZlcnRUb1dvcmtmbG93RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpLFxuXG4gICAgICAvLyBGSVhNRSB3aGF0IGFib3V0IHRoZSBwZXJtaXNzaW9ucz9cbiAgICAgIC8vIHBlcm1pc3Npb25zOiB7IGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfSxcblxuICAgICAgb3V0cHV0OiB7fSxcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=
|
|
247
|
+
CodeCatalystCDKPipeline[_a] = { fqn: "projen-pipelines.CodeCatalystCDKPipeline", version: "0.2.0" };
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZWNhdGFseXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F3c2Nkay9jb2RlY2F0YWx5c3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0R0FBb0Y7QUFDcEYsc0dBQW1IO0FBQ25ILG1DQUEwQztBQUMxQyxpQ0FBMEU7QUFFMUUsc0NBQTJDO0FBRTNDLHdEQUFxRDtBQWtDckQsTUFBYSx1QkFBd0IsU0FBUSxrQkFBVztJQVV0RCxZQUFZLEdBQStCLEVBQVUsT0FBdUM7UUFDMUYsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUQrQixZQUFPLEdBQVAsT0FBTyxDQUFnQztRQUxwRixpQkFBWSxHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25ELHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQU10QyxnRUFBZ0U7UUFDaEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUM7UUFFM0MsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLHFCQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBRS9ELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksK0NBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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ZW50IH0gZnJvbSAnQGFtYXpvbi1jb2RlY2F0YWx5c3QvYmx1ZXByaW50LWNvbXBvbmVudC5lbnZpcm9ubWVudHMnO1xuaW1wb3J0IHsgY29udmVydFRvV29ya2Zsb3dFbnZpcm9ubWVudCwgV29ya2Zsb3dCdWlsZGVyIH0gZnJvbSAnQGFtYXpvbi1jb2RlY2F0YWx5c3QvYmx1ZXByaW50LWNvbXBvbmVudC53b3JrZmxvd3MnO1xuaW1wb3J0IHsgWWFtbEZpbGUsIGF3c2NkayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDREtQaXBlbGluZSwgQ0RLUGlwZWxpbmVPcHRpb25zLCBEZXBsb3ltZW50U3RhZ2UgfSBmcm9tICcuL2Jhc2UnO1xuXG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBQaXBlbGluZVN0ZXAgfSBmcm9tICcuLi9zdGVwcyc7XG5pbXBvcnQgeyBCbHVlcHJpbnQgfSBmcm9tICcuL2NvZGVjYXRhbHlzdC9ibHVlcHJpbnQnO1xuXG4vKlxuTmVlZHMgdG8gY3JlYXRlOlxuLSBidWlsZC55bWwgKGNyZWF0ZXMgYW5kIG11dGF0ZXMgcGlwZWxpbmUgYnkgZXhlY3V0aW5nIHByb2plbiBidWlsZCkgLSBjb21lcyBmcm9tIHByb2plblxuLSBkZXBsb3kueWFtbCAoYnVpbGQgKyBkZXBsb3kgdG8gZGV2KVxuLSBwdWxsLXJlcXVlc3QtbGludC55bWwgKGV4ZWN1dGVzIGFtYW5ubi9hY3Rpb24tc2VtYW50aWMtcHVsbC1yZXF1ZXN0QHY1LjAuMikgLSBjb21lcyBmcm9tIHByb2plblxuLSByZWxlYXNlLXByb2QueWFtbCAoZGVwbG95IHRvIHByb2QgLSBub3QgcmVxdWlyZWQsIG1vdmUgb3ZlciB0byBcIm1hbnVhbCBhcHByb3ZhbHNcIiBpbiBkZXBsbylcbi0gdXBncmFkZS55YW1sICh1cGdyYWRlIGRlcGVuZGVuY2llcykgIC0gY29tZXMgZnJvbSBwcm9qZW5cblxuKiBzeW50aCAtPiBjcmVhdGUgYXJ0aWZhY3RzXG4qIHVwbG9hZCBjZGsgYXNzZXRzIC0+ICBzYXZlIGFzc2V0cyBpbiBzMyAobGFtYmRhKSwgYnVpbGQgY29udGFpbmVyIGltYWdlcyAocHVzaCB0byBFQ1IpIC0tIGV2ZXJ5dGhpbmcgaW4gQVdTXG4qIGRlcGxveSBmb3IgZWFjaCBzdGFnZSB0aGF0IGlzIG5vbi1wcm9kdWN0aW9uXG4qIGRlcGxveSB0byBwcm9kIChtYW51YWwgYXBwcm92YWwpXG5cblRPRE86XG4tIGFjY291bnQgdGFyZ2V0IC0tIE5PVCBQT1NTSUJMRSBhcyB3ZSBjYW5ub3QgY3JlYXRlIGVudmlyb25tZW50cy9hY2NvdW50cy90YXJnZXRzXG4tIG1hbnVhbCBhcHByb3ZhbCBmb3Igc3RhZ2VzIC0tIERPTkVcbi0gSUFNIHJvbGUgcGVyIHN0YWdlLCBzeW50aCwgYXNzZXQgLSBOT1QgUE9TU0lCTEUgYXMgd2UgY2Fubm90IGNyZWF0ZSBlbnZpcm9ubWVudHNcbi0gaW5kZXBlbmRlbmQgc3RhZ2VzIChhbGwgcGFyYWxsZWwgdG8gZWFjaCBvdGhlcikgYWZ0ZXIgc3ludGgmYXNzZXRzIC0tIERPTkVcbi0gZW52aXJvbm1lbnRzIHN1cHBvcnQgLSBET05FXG4tIHN0ZXBzIHBlciBzdGFnZSAtIHByZUluc3RhbGwsIHByZVN5bnRoLCAuLi4gLSBET05FXG5cbmV4YW1wbGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MtY29tbXVuaXR5LWRhY2gvZXZlbnQtc3lzdGVtLWJhY2tlbmRcblxudGVzdCBkb2NnZW46IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuLWNvbnN0cnVjdHMvYXdzLWNkay1saWJyYXJ5XG5cblxuKi9cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQ2F0YWx5c3RDREtQaXBlbGluZU9wdGlvbnMgZXh0ZW5kcyBDREtQaXBlbGluZU9wdGlvbnMge1xuICAvL1xufVxuXG5leHBvcnQgY2xhc3MgQ29kZUNhdGFseXN0Q0RLUGlwZWxpbmUgZXh0ZW5kcyBDREtQaXBlbGluZSB7XG5cbiAgcHVibGljIHJlYWRvbmx5IG5lZWRzVmVyc2lvbmVkQXJ0aWZhY3RzOiBib29sZWFuO1xuXG4gIHByaXZhdGUgZGVwbG95bWVudFdvcmtmbG93QnVpbGRlcjogV29ya2Zsb3dCdWlsZGVyO1xuICBwcml2YXRlIGVudmlyb25tZW50czogTWFwPFN0cmluZywgRW52aXJvbm1lbnQ+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGRlcGxveW1lbnRTdGFnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBicDogQmx1ZXByaW50O1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHAsIHByaXZhdGUgb3B0aW9uczogQ29kZUNhdGFseXN0Q0RLUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgc3VwZXIoYXBwLCBvcHRpb25zKTtcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9jb2RlY2F0YWx5c3QtYmx1ZXByaW50cy9pc3N1ZXMvNDc3XG4gICAgcHJvY2Vzcy5lbnYuQ09OVEVYVF9FTlZJUk9OTUVOVElEID0gJ3Byb2QnO1xuXG4gICAgdGhpcy5icCA9IG5ldyBCbHVlcHJpbnQoeyBvdXRkaXI6ICcuY29kZWNhdGFseXN0L3dvcmtmbG93cycgfSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zKSB7XG4gICAgICB0aGlzLmNyZWF0ZUVudmlyb25tZW50cygpO1xuICAgIH1cblxuICAgIHRoaXMuZGVwbG95bWVudFdvcmtmbG93QnVpbGRlciA9IG5ldyBXb3JrZmxvd0J1aWxkZXIodGhpcy5icCk7XG5cbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvd0J1aWxkZXIuc2V0TmFtZSgnZGVwbG95Jyk7XG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3dCdWlsZGVyLmFkZEJyYW5jaFRyaWdnZXIoWydtYWluJ10pO1xuXG4gICAgdGhpcy5uZWVkc1ZlcnNpb25lZEFydGlmYWN0cyA9IHRoaXMub3B0aW9ucy5zdGFnZXMuZmluZChzID0+IHMubWFudWFsQXBwcm92YWwgPT09IHRydWUpICE9PSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmNyZWF0ZVN5bnRoKCk7XG4gICAgdGhpcy5jcmVhdGVBc3NldFVwbG9hZCgpO1xuXG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBvcHRpb25zLnN0YWdlcykge1xuICAgICAgdGhpcy5jcmVhdGVEZXBsb3ltZW50KHN0YWdlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIChvcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdKSkge1xuICAgICAgdGhpcy5jcmVhdGVJbmRlcGVuZGVudERlcGxveW1lbnQoc3RhZ2UpO1xuICAgIH1cblxuICAgIG5ldyBZYW1sRmlsZSh0aGlzLCAnLmNvZGVjYXRhbHlzdC93b3JrZmxvd3MvZGVwbG95LnlhbWwnLCB7XG4gICAgICBvYmo6ICgpID0+IHRoaXMuZGVwbG95bWVudFdvcmtmbG93QnVpbGRlci5nZXREZWZpbml0aW9uKCksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRW52aXJvbm1lbnRzKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnMuZGVmYXVsdCkge1xuICAgICAgdGhpcy5lbnZpcm9ubWVudHMuc2V0KCdkZWZhdWx0JyxcbiAgICAgICAgbmV3IEVudmlyb25tZW50KHRoaXMuYnAsIHtcbiAgICAgICAgICBlbnZpcm9ubWVudFR5cGU6ICdERVZFTE9QTUVOVCcsXG4gICAgICAgICAgbmFtZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZGVmYXVsdCBkZXBsb3ltZW50IGVudmlyb25tZW50JyxcbiAgICAgICAgICBhd3NBY2NvdW50OiB7XG4gICAgICAgICAgICBpZDogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgbmFtZTogJ2F3c0FjY291bnQnLFxuICAgICAgICAgICAgYXdzQWNjb3VudDogeyBuYW1lOiAnZGVmYXVsdC1yb2xlJywgYXJuOiB0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnMuZGVmYXVsdCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLnN5bnRoKSB7XG4gICAgICB0aGlzLmVudmlyb25tZW50cy5zZXQoJ3N5bnRoJyxcbiAgICAgICAgbmV3IEVudmlyb25tZW50KHRoaXMuYnAsIHtcbiAgICAgICAgICBlbnZpcm9ubWVudFR5cGU6ICdERVZFTE9QTUVOVCcsXG4gICAgICAgICAgbmFtZTogJ3N5bnRoJyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3N5bnRoIGRlcGxveW1lbnQgZW52aXJvbm1lbnQnLFxuICAgICAgICAgIGF3c0FjY291bnQ6IHtcbiAgICAgICAgICAgIGlkOiAnc3ludGgnLFxuICAgICAgICAgICAgbmFtZTogJ2F3c0FjY291bnQnLFxuICAgICAgICAgICAgYXdzQWNjb3VudDogeyBuYW1lOiAnc3ludGgtcm9sZScsIGFybjogdGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLnN5bnRoIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nKSB7XG4gICAgICB0aGlzLmVudmlyb25tZW50cy5zZXQoJ2Fzc2V0UHVibGlzaGluZycsXG4gICAgICAgIG5ldyBFbnZpcm9ubWVudCh0aGlzLmJwLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRUeXBlOiAnREVWRUxPUE1FTlQnLFxuICAgICAgICAgIG5hbWU6ICdhc3NldFB1Ymxpc2hpbmcnLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnYXNzZXQgcHVibGlzaGluZyBkZXBsb3ltZW50IGVudmlyb25tZW50JyxcbiAgICAgICAgICBhd3NBY2NvdW50OiB7XG4gICAgICAgICAgICBpZDogJ2Fzc2V0UHVibGlzaGluZycsXG4gICAgICAgICAgICBuYW1lOiAnYXdzQWNjb3VudCcsXG4gICAgICAgICAgICBhd3NBY2NvdW50OiB7IG5hbWU6ICdhc3NldFB1Ymxpc2hpbmctcm9sZScsIGFybjogdGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlKSB7XG4gICAgICBmb3IgKGNvbnN0IFtzdGFnZSwgYXJuXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2UpKSB7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnRzLnNldChgJHtzdGFnZX1Bc3NldFB1Ymxpc2hpbmdgLFxuICAgICAgICAgIG5ldyBFbnZpcm9ubWVudCh0aGlzLmJwLCB7XG4gICAgICAgICAgICBlbnZpcm9ubWVudFR5cGU6ICdERVZFTE9QTUVOVCcsXG4gICAgICAgICAgICBuYW1lOiBgJHtzdGFnZX1Bc3NldFB1Ymxpc2hpbmdQZXJTdGFnZWAsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7c3RhZ2V9IGFzc2V0IHB1Ymxpc2hpbmcgZGVwbG95bWVudCBlbnZpcm9ubWVudGAsXG4gICAgICAgICAgICBhd3NBY2NvdW50OiB7XG4gICAgICAgICAgICAgIGlkOiBgJHtzdGFnZX1Bc3NldFB1Ymxpc2hpbmdQZXJTdGFnZWAsXG4gICAgICAgICAgICAgIG5hbWU6ICdhd3NBY2NvdW50JyxcbiAgICAgICAgICAgICAgYXdzQWNjb3VudDogeyBuYW1lOiBgJHtzdGFnZX0tcm9sZWAsIGFybjogYXJuIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLmRlcGxveW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgW3N0YWdlLCBhcm5dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucy5kZXBsb3ltZW50KSkge1xuICAgICAgICB0aGlzLmVudmlyb25tZW50cy5zZXQoc3RhZ2UsXG4gICAgICAgICAgbmV3IEVudmlyb25tZW50KHRoaXMuYnAsIHtcbiAgICAgICAgICAgIGVudmlyb25tZW50VHlwZTogJ0RFVkVMT1BNRU5UJyxcbiAgICAgICAgICAgIG5hbWU6IHN0YWdlLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3N0YWdlfSBkZXBsb3ltZW50IGVudmlyb25tZW50YCxcbiAgICAgICAgICAgIGF3c0FjY291bnQ6IHtcbiAgICAgICAgICAgICAgaWQ6IHN0YWdlLFxuICAgICAgICAgICAgICBuYW1lOiAnYXdzQWNjb3VudCcsXG4gICAgICAgICAgICAgIGF3c0FjY291bnQ6IHsgbmFtZTogYCR7c3RhZ2V9LXJvbGVgLCBhcm46IGFybiB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIHRoZSB0eXBlIG9mIGVuZ2luZSB0aGlzIGltcGxlbWVudGF0aW9uIG9mIENES1BpcGVsaW5lIGlzIGZvciAqL1xuICBwdWJsaWMgZW5naW5lVHlwZSgpOiBQaXBlbGluZUVuZ2luZSB7XG4gICAgcmV0dXJuIFBpcGVsaW5lRW5naW5lLkNPREVfQ0FUQUxZU1Q7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN5bnRoKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzOiBQaXBlbGluZVN0ZXBbXSA9IFtcbiAgICAgIHRoaXMucHJvdmlkZUluc3RhbGxTdGVwKCksXG4gICAgICB0aGlzLnByb3ZpZGVTeW50aFN0ZXAoKSxcbiAgICBdO1xuXG4gICAgY29uc3QgY29kZUNhdGFseXN0U3RlcHMgPSBzdGVwcy5tYXAocyA9PiBzLnRvQ29kZUNhdGFseXN0KCkpO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3dCdWlsZGVyLmFkZEJ1aWxkQWN0aW9uKHtcbiAgICAgIGFjdGlvbk5hbWU6ICdTeW50aENES0FwcGxpY2F0aW9uJyxcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIFNvdXJjZXM6IFsnV29ya2Zsb3dTb3VyY2UnXSxcbiAgICAgICAgVmFyaWFibGVzOiB7XG4gICAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzdGVwczogWy4uLmNvZGVDYXRhbHlzdFN0ZXBzLmZsYXRNYXAocyA9PiBzLmNvbW1hbmRzKV0sXG4gICAgICAvLyBGSVhNRSBpcyB0aGVyZSBpcyBhbiBlbnZpcm9ubWVudCwgY29ubmVjdCBpdCB0byB0aGUgd29ya2Zsb3dcbiAgICAgIC8vIG5lZWRzIHRvIHJlYWN0IG9uIHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucz8uc3ludGhcbiAgICAgIC8vZW52aXJvbm1lbnQ6IGVudmlyb25tZW50ICYmIGNvbnZlcnRUb1dvcmtmbG93RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpLFxuXG4gICAgICAvLyBGSVhNRSB3aGF0IGFib3V0IHRoZSBwZXJtaXNzaW9ucz9cbiAgICAgIC8vIHBlcm1pc3Npb25zOiB7IGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfSxcbiAgICAgIGVudmlyb25tZW50OiBjb252ZXJ0VG9Xb3JrZmxvd0Vudmlyb25tZW50KHRoaXMuZW52aXJvbm1lbnRzLmdldCgnZGVmYXVsdCcpKSxcbiAgICAgIG91dHB1dDoge30sXG4gICAgfSk7XG5cbiAgICAvKlxubm90IHJlcXVpcmVkIGJlY2F1c2UgY29kZWNhdGFseXN0IGF1dG9tYXRpY2FsbHkgdXBsb2FkcyBhcnRpZmFjdHNcbkZJWE1FIG9yIGRvIHdlIG5lZWQgdG8gY3JlYXRlIFwiYXJ0aWZhY3RzXCIgaGVyZSBhbmQgdXBsb2FkP1xuc3RlcHMucHVzaCh7XG4gICAgICB1c2VzOiAnYWN0aW9ucy91cGxvYWQtYXJ0aWZhY3RAdjMnLFxuICAgICAgd2l0aDoge1xuICAgICAgICBuYW1lOiAnY2xvdWQtYXNzZW1ibHknLFxuICAgICAgICBwYXRoOiBgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS9gLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICAqL1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUFzc2V0VXBsb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0ZXBzID0gW1xuICAgICAgdGhpcy5wcm92aWRlSW5zdGFsbFN0ZXAoKSxcbiAgICAgIHRoaXMucHJvdmlkZUFzc2V0VXBsb2FkU3RlcCgpLFxuICAgIF07XG4gICAgY29uc3QgY29kZUNhdGFseXN0U3RlcHMgPSBzdGVwcy5tYXAocyA9PiBzLnRvQ29kZUNhdGFseXN0KCkpO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3dCdWlsZGVyLmFkZEJ1aWxkQWN0aW9uKHtcbiAgICAgIGFjdGlvbk5hbWU6ICdQdWJsaXNoQXNzZXRzVG9BV1MnLFxuICAgICAgZGVwZW5kc09uOiBbJ1N5bnRoQ0RLQXBwbGljYXRpb24nXSxcbiAgICAgIGlucHV0OiB7XG4gICAgICAgIFNvdXJjZXM6IFsnV29ya2Zsb3dTb3VyY2UnXSxcbiAgICAgICAgVmFyaWFibGVzOiB7XG4gICAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBzdGVwczogWy4uLmNvZGVDYXRhbHlzdFN0ZXBzLmZsYXRNYXAocyA9PiBzLmNvbW1hbmRzKV0sXG4gICAgICAvLyBGSVhNRSBpcyB0aGVyZSBpcyBhbiBlbnZpcm9ubWVudCwgY29ubmVjdCBpdCB0byB0aGUgd29ya2Zsb3dcbiAgICAgIC8vIG5lZWRzIHRvIHJlYWN0IG9uIHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucz8uc3ludGhcbiAgICAgIC8vZW52aXJvbm1lbnQ6IGVudmlyb25tZW50ICYmIGNvbnZlcnRUb1dvcmtmbG93RW52aXJvbm1lbnQoZW52aXJvbm1lbnQpLFxuXG4gICAgICAvLyBGSVhNRSB3aGF0IGFib3V0IHRoZSBwZXJtaXNzaW9ucz9cbiAgICAgIC8vIHBlcm1pc3Npb25zOiB7IGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfSxcblxuICAgICAgb3V0cHV0OiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVEZXBsb3ltZW50KHN0YWdlOiBEZXBsb3ltZW50U3RhZ2UpOiB2b2lkIHtcbiAgICBsZXQgZGVwZW5kc09uID0gYGRlcGxveV8ke3RoaXMuZGVwbG95bWVudFN0YWdlcy5hdCgtMSkhfWA7XG4gICAgaWYgKHN0YWdlLm1hbnVhbEFwcHJvdmFsID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvd0J1aWxkZXIuYWRkR2VuZXJpY0FjdGlvbih7XG4gICAgICAgIElkZW50aWZpZXI6ICdhd3MvYXBwcm92YWxAdjEnLFxuICAgICAgICBhY3Rpb25OYW1lOiBgYXBwcm92ZV8ke3N0YWdlLm5hbWV9YCxcbiAgICAgICAgRGVwZW5kc09uOiBbZGVwZW5kc09uXSxcbiAgICAgICAgQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIEFwcHJvdmFsc1JlcXVpcmVkOiAxLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBkZXBlbmRzT24gPSBgYXBwcm92ZV8ke3N0YWdlLm5hbWV9YDtcbiAgICB9XG4gICAgLy8gQWRkIGRlcGxveW1lbnQgdG8gZXhpc3Rpbmcgd29ya2Zsb3dcbiAgICBjb25zdCBkZXBsb3lTdGVwcyA9IFtcbiAgICAgIHRoaXMucHJvdmlkZUluc3RhbGxTdGVwKCksXG4gICAgICB0aGlzLnByb3ZpZGVEZXBsb3lTdGVwKHN0YWdlKSxcbiAgICBdLm1hcChzID0+IHMudG9Db2RlQ2F0YWx5c3QoKSk7XG5cbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvd0J1aWxkZXIuYWRkQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogYGRlcGxveV8ke3N0YWdlLm5hbWV9YCxcbiAgICAgIGRlcGVuZHNPbjogdGhpcy5kZXBsb3ltZW50U3RhZ2VzLmxlbmd0aCA+IDAgPyBbJ1B1Ymxpc2hBc3NldHNUb0FXUycsIGRlcGVuZHNPbl0gOiBbJ1B1Ymxpc2hBc3NldHNUb0FXUyddLFxuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgU291cmNlczogWydXb3JrZmxvd1NvdXJjZSddLFxuICAgICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHN0ZXBzOiBbLi4uZGVwbG95U3RlcHMuZmxhdE1hcChzID0+IHMuY29tbWFuZHMpXSxcbiAgICAgIC8vIEZJWE1FIGlzIHRoZXJlIGlzIGFuIGVudmlyb25tZW50LCBjb25uZWN0IGl0IHRvIHRoZSB3b3JrZmxvd1xuICAgICAgLy8gbmVlZHMgdG8gcmVhY3Qgb24gdGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zPy5zeW50aFxuICAgICAgLy9lbnZpcm9ubWVudDogZW52aXJvbm1lbnQgJiYgY29udmVydFRvV29ya2Zsb3dFbnZpcm9ubWVudChlbnZpcm9ubWVudCksXG5cbiAgICAgIC8vIEZJWE1FIHdoYXQgYWJvdXQgdGhlIHBlcm1pc3Npb25zP1xuICAgICAgLy8gcGVybWlzc2lvbnM6IHsgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSwgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCB9LFxuXG4gICAgICBvdXRwdXQ6IHt9LFxuICAgICAgZW52aXJvbm1lbnQ6IGNvbnZlcnRUb1dvcmtmbG93RW52aXJvbm1lbnQodGhpcy5lbnZpcm9ubWVudHMuZ2V0KHN0YWdlLm5hbWUpKSxcbiAgICB9KTtcblxuICAgIHRoaXMuZGVwbG95bWVudFN0YWdlcy5wdXNoKHN0YWdlLm5hbWUpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUluZGVwZW5kZW50RGVwbG95bWVudChzdGFnZTogRGVwbG95bWVudFN0YWdlKTogdm9pZCB7XG4gICAgbGV0IGRlcGVuZHNPbiA9ICdQdWJsaXNoQXNzZXRzVG9BV1MnO1xuICAgIGlmIChzdGFnZS5tYW51YWxBcHByb3ZhbCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3dCdWlsZGVyLmFkZEdlbmVyaWNBY3Rpb24oe1xuICAgICAgICBJZGVudGlmaWVyOiAnYXdzL2FwcHJvdmFsQHYxJyxcbiAgICAgICAgYWN0aW9uTmFtZTogYGFwcHJvdmVfJHtzdGFnZS5uYW1lfWAsXG4gICAgICAgIERlcGVuZHNPbjogW2RlcGVuZHNPbl0sXG4gICAgICAgIENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBBcHByb3ZhbHNSZXF1aXJlZDogMSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgZGVwZW5kc09uID0gYGFwcHJvdmVfJHtzdGFnZS5uYW1lfWA7XG4gICAgfVxuICAgIC8vIEFkZCBkZXBsb3ltZW50IHRvIGV4aXN0aW5nIHdvcmtmbG93XG5cbiAgICBjb25zdCBzdGVwcyA9IFtcbiAgICAgIHRoaXMucHJvdmlkZUluc3RhbGxTdGVwKCksXG4gICAgICB0aGlzLnByb3ZpZGVTeW50aFN0ZXAoKSxcbiAgICAgIHRoaXMucHJvdmlkZURlcGxveVN0ZXAoc3RhZ2UpLFxuICAgIF0ubWFwKHMgPT4gcy50b0dpdGxhYigpKTtcblxuICAgIHRoaXMuZGVwbG95bWVudFdvcmtmbG93QnVpbGRlci5hZGRCdWlsZEFjdGlvbih7XG4gICAgICBhY3Rpb25OYW1lOiBgaW5kZXBsb3lfJHtzdGFnZS5uYW1lfWAsXG4gICAgICBkZXBlbmRzT246IFtkZXBlbmRzT25dLFxuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgU291cmNlczogWydXb3JrZmxvd1NvdXJjZSddLFxuICAgICAgICBWYXJpYWJsZXM6IHtcbiAgICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHN0ZXBzOiBbLi4uc3RlcHMuZmxhdE1hcChzID0+IHMuY29tbWFuZHMpXSxcbiAgICAgIC8vIEZJWE1FIGlzIHRoZXJlIGlzIGFuIGVudmlyb25tZW50LCBjb25uZWN0IGl0IHRvIHRoZSB3b3JrZmxvd1xuICAgICAgLy8gbmVlZHMgdG8gcmVhY3Qgb24gdGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zPy5zeW50aFxuICAgICAgLy9lbnZpcm9ubWVudDogZW52aXJvbm1lbnQgJiYgY29udmVydFRvV29ya2Zsb3dFbnZpcm9ubWVudChlbnZpcm9ubWVudCksXG5cbiAgICAgIC8vIEZJWE1FIHdoYXQgYWJvdXQgdGhlIHBlcm1pc3Npb25zP1xuICAgICAgLy8gcGVybWlzc2lvbnM6IHsgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSwgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCB9LFxuXG4gICAgICBvdXRwdXQ6IHt9LFxuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
|
package/lib/awscdk/github.d.ts
CHANGED
|
@@ -1,31 +1,10 @@
|
|
|
1
1
|
import { awscdk } from 'projen';
|
|
2
2
|
import { CDKPipeline, CDKPipelineOptions, DeploymentStage, IndependentStage } from './base';
|
|
3
3
|
import { PipelineEngine } from '../engine';
|
|
4
|
-
/**
|
|
5
|
-
* Configuration interface for GitHub-specific IAM roles used in the CDK pipeline.
|
|
6
|
-
*/
|
|
7
|
-
export interface GithubIamRoleConfig {
|
|
8
|
-
/** Default IAM role ARN used if no specific role is provided. */
|
|
9
|
-
readonly default?: string;
|
|
10
|
-
/** IAM role ARN for the synthesis step. */
|
|
11
|
-
readonly synth?: string;
|
|
12
|
-
/** IAM role ARN for the asset publishing step. */
|
|
13
|
-
readonly assetPublishing?: string;
|
|
14
|
-
/** IAM role ARN for the asset publishing step for a specific stage. */
|
|
15
|
-
readonly assetPublishingPerStage?: {
|
|
16
|
-
[stage: string]: string;
|
|
17
|
-
};
|
|
18
|
-
/** IAM role ARNs for different deployment stages. */
|
|
19
|
-
readonly deployment?: {
|
|
20
|
-
[stage: string]: string;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
4
|
/**
|
|
24
5
|
* Extension of the base CDKPipeline options including specific configurations for GitHub.
|
|
25
6
|
*/
|
|
26
7
|
export interface GithubCDKPipelineOptions extends CDKPipelineOptions {
|
|
27
|
-
/** IAM config for GitHub Actions */
|
|
28
|
-
readonly iamRoleArns: GithubIamRoleConfig;
|
|
29
8
|
/**
|
|
30
9
|
* runner tags to use to select runners
|
|
31
10
|
*
|
package/lib/awscdk/github.js
CHANGED
|
@@ -9,7 +9,6 @@ const engine_1 = require("../engine");
|
|
|
9
9
|
const engines_1 = require("../engines");
|
|
10
10
|
const steps_1 = require("../steps");
|
|
11
11
|
const artifact_steps_1 = require("../steps/artifact-steps");
|
|
12
|
-
const aws_assume_role_step_1 = require("../steps/aws-assume-role.step");
|
|
13
12
|
const registries_1 = require("../steps/registries");
|
|
14
13
|
const DEFAULT_RUNNER_TAGS = ['ubuntu-latest'];
|
|
15
14
|
/**
|
|
@@ -70,17 +69,8 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
70
69
|
*/
|
|
71
70
|
createSynth() {
|
|
72
71
|
const steps = [];
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
roleArn: this.options.iamRoleArns.synth,
|
|
76
|
-
sessionName: 'GitHubAction',
|
|
77
|
-
}));
|
|
78
|
-
}
|
|
79
|
-
steps.push(...this.baseOptions.preInstallSteps ?? []);
|
|
80
|
-
steps.push(new steps_1.SimpleCommandStep(this.project, this.renderInstallCommands()));
|
|
81
|
-
steps.push(...this.baseOptions.preSynthSteps ?? []);
|
|
82
|
-
steps.push(new steps_1.SimpleCommandStep(this.project, this.renderSynthCommands()));
|
|
83
|
-
steps.push(...this.baseOptions.postSynthSteps ?? []);
|
|
72
|
+
steps.push(this.provideInstallStep());
|
|
73
|
+
steps.push(this.provideSynthStep());
|
|
84
74
|
steps.push(new artifact_steps_1.UploadArtifactStep(this.project, {
|
|
85
75
|
name: 'cloud-assembly',
|
|
86
76
|
path: `${this.app.cdkConfig.cdkout}/`,
|
|
@@ -95,7 +85,6 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
95
85
|
},
|
|
96
86
|
needs: [...githubSteps.flatMap(s => s.needs)],
|
|
97
87
|
permissions: (0, engines_1.mergeJobPermissions)({
|
|
98
|
-
idToken: workflows_model_1.JobPermission.WRITE,
|
|
99
88
|
contents: workflows_model_1.JobPermission.READ,
|
|
100
89
|
}, ...githubSteps.flatMap(s => s.permissions).filter(p => p != undefined)),
|
|
101
90
|
steps: [
|
|
@@ -111,34 +100,17 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
111
100
|
* Creates a job to upload assets to AWS as part of the pipeline.
|
|
112
101
|
*/
|
|
113
102
|
createAssetUpload() {
|
|
114
|
-
const globalPublishRole = this.options.iamRoleArns.assetPublishing ?? this.options.iamRoleArns.default;
|
|
115
103
|
const steps = [
|
|
116
104
|
new steps_1.SimpleCommandStep(this.project, ['git config --global user.name "github-actions" && git config --global user.email "github-actions@github.com"']),
|
|
117
|
-
new aws_assume_role_step_1.AwsAssumeRoleStep(this.project, {
|
|
118
|
-
roleArn: globalPublishRole,
|
|
119
|
-
region: 'us-east-1',
|
|
120
|
-
}),
|
|
121
105
|
new artifact_steps_1.DownloadArtifactStep(this.project, {
|
|
122
106
|
name: 'cloud-assembly',
|
|
123
107
|
path: `${this.app.cdkConfig.cdkout}/`,
|
|
124
108
|
}),
|
|
125
|
-
|
|
126
|
-
|
|
109
|
+
this.provideInstallStep(),
|
|
110
|
+
this.provideAssetUploadStep(),
|
|
127
111
|
];
|
|
128
|
-
if (this.options.iamRoleArns.assetPublishingPerStage) {
|
|
129
|
-
const stages = [...this.options.stages, ...this.options.independentStages ?? []];
|
|
130
|
-
for (const stage of stages) {
|
|
131
|
-
steps.push(new aws_assume_role_step_1.AwsAssumeRoleStep(this.project, {
|
|
132
|
-
roleArn: this.options.iamRoleArns.assetPublishingPerStage[stage.name] ?? globalPublishRole,
|
|
133
|
-
}));
|
|
134
|
-
steps.push(new steps_1.SimpleCommandStep(this.project, this.renderAssetUploadCommands(stage.name)));
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
steps.push(new steps_1.SimpleCommandStep(this.project, this.renderAssetUploadCommands()));
|
|
139
|
-
}
|
|
140
112
|
if (this.needsVersionedArtifacts) {
|
|
141
|
-
steps.push(
|
|
113
|
+
steps.push(this.provideAssemblyUploadStep());
|
|
142
114
|
}
|
|
143
115
|
const ghSteps = steps.map(s => s.toGithub());
|
|
144
116
|
this.deploymentWorkflow.addJob('assetUpload', {
|
|
@@ -175,15 +147,10 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
175
147
|
createDeployment(stage) {
|
|
176
148
|
if (stage.manualApproval === true) {
|
|
177
149
|
const steps = [
|
|
178
|
-
|
|
179
|
-
roleArn: this.options.iamRoleArns?.deployment?.[stage.name] ?? this.options.iamRoleArns?.default,
|
|
180
|
-
region: stage.env.region,
|
|
181
|
-
}),
|
|
182
|
-
...this.baseOptions.preInstallSteps ?? [],
|
|
183
|
-
new steps_1.SimpleCommandStep(this.project, this.renderInstallCommands()),
|
|
150
|
+
this.provideInstallStep(),
|
|
184
151
|
new steps_1.SimpleCommandStep(this.project, this.renderInstallPackageCommands(`${this.baseOptions.pkgNamespace}/${this.app.name}@\${{github.event.inputs.version}}`)),
|
|
185
152
|
new steps_1.SimpleCommandStep(this.project, [`mv ./node_modules/${this.baseOptions.pkgNamespace}/${this.app.name} ${this.app.cdkConfig.cdkout}`]),
|
|
186
|
-
|
|
153
|
+
this.provideDeployStep(stage),
|
|
187
154
|
new artifact_steps_1.UploadArtifactStep(this.project, {
|
|
188
155
|
name: `cdk-outputs-${stage.name}`,
|
|
189
156
|
path: `cdk-outputs-${stage.name}.json`,
|
|
@@ -213,7 +180,6 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
213
180
|
...steps.reduce((acc, step) => ({ ...acc, ...step.env }), {}),
|
|
214
181
|
},
|
|
215
182
|
permissions: (0, engines_1.mergeJobPermissions)({
|
|
216
|
-
idToken: workflows_model_1.JobPermission.WRITE,
|
|
217
183
|
contents: workflows_model_1.JobPermission.READ,
|
|
218
184
|
}, ...steps.flatMap(s => s.permissions).filter(p => p != undefined)),
|
|
219
185
|
steps: [
|
|
@@ -232,17 +198,12 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
232
198
|
}
|
|
233
199
|
createDeployJob(workflow, jobDependencies, stage) {
|
|
234
200
|
const steps = [
|
|
235
|
-
new aws_assume_role_step_1.AwsAssumeRoleStep(this.project, {
|
|
236
|
-
roleArn: this.options.iamRoleArns?.deployment?.[stage.name] ?? this.options.iamRoleArns?.default,
|
|
237
|
-
region: stage.env.region,
|
|
238
|
-
}),
|
|
239
201
|
new artifact_steps_1.DownloadArtifactStep(this.project, {
|
|
240
202
|
name: 'cloud-assembly',
|
|
241
203
|
path: `${this.app.cdkConfig.cdkout}/`,
|
|
242
204
|
}),
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
new steps_1.SimpleCommandStep(this.project, this.renderDeployCommands(stage.name)),
|
|
205
|
+
this.provideInstallStep(),
|
|
206
|
+
this.provideDeployStep(stage),
|
|
246
207
|
new artifact_steps_1.UploadArtifactStep(this.project, {
|
|
247
208
|
name: `cdk-outputs-${stage.name}`,
|
|
248
209
|
path: `cdk-outputs-${stage.name}.json`,
|
|
@@ -261,7 +222,6 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
261
222
|
...steps.reduce((acc, step) => ({ ...acc, ...step.env }), {}),
|
|
262
223
|
},
|
|
263
224
|
permissions: (0, engines_1.mergeJobPermissions)({
|
|
264
|
-
idToken: workflows_model_1.JobPermission.WRITE,
|
|
265
225
|
contents: workflows_model_1.JobPermission.READ,
|
|
266
226
|
}, ...steps.flatMap(s => s.permissions).filter(p => p != undefined)),
|
|
267
227
|
steps: [
|
|
@@ -283,19 +243,10 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
283
243
|
}
|
|
284
244
|
else {
|
|
285
245
|
const steps = [
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
...this.baseOptions.preInstallSteps ?? [],
|
|
291
|
-
new steps_1.SimpleCommandStep(this.project, this.renderInstallCommands()),
|
|
292
|
-
...this.baseOptions.preSynthSteps ?? [],
|
|
293
|
-
new steps_1.SimpleCommandStep(this.project, this.renderSynthCommands()),
|
|
294
|
-
...this.baseOptions.postSynthSteps ?? [],
|
|
295
|
-
new steps_1.SimpleCommandStep(this.project, this.renderDiffCommands(stage.name)),
|
|
296
|
-
...stage.postDiffSteps ?? [],
|
|
297
|
-
new steps_1.SimpleCommandStep(this.project, this.renderDeployCommands(stage.name)),
|
|
298
|
-
...stage.postDeploySteps ?? [],
|
|
246
|
+
this.provideInstallStep(),
|
|
247
|
+
this.provideSynthStep(),
|
|
248
|
+
this.provideDiffStep(stage),
|
|
249
|
+
this.provideDeployStep(stage),
|
|
299
250
|
new artifact_steps_1.UploadArtifactStep(this.project, {
|
|
300
251
|
name: `cdk-outputs-${stage.name}`,
|
|
301
252
|
path: `cdk-outputs-${stage.name}.json`,
|
|
@@ -315,7 +266,6 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
315
266
|
...steps.reduce((acc, step) => ({ ...acc, ...step.env }), {}),
|
|
316
267
|
},
|
|
317
268
|
permissions: (0, engines_1.mergeJobPermissions)({
|
|
318
|
-
idToken: workflows_model_1.JobPermission.WRITE,
|
|
319
269
|
contents: workflows_model_1.JobPermission.READ,
|
|
320
270
|
}, ...steps.flatMap(s => s.permissions).filter(p => p != undefined)),
|
|
321
271
|
steps: [
|
|
@@ -331,5 +281,5 @@ class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
|
331
281
|
}
|
|
332
282
|
exports.GithubCDKPipeline = GithubCDKPipeline;
|
|
333
283
|
_a = JSII_RTTI_SYMBOL_1;
|
|
334
|
-
GithubCDKPipeline[_a] = { fqn: "projen-pipelines.GithubCDKPipeline", version: "0.
|
|
335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F3c2Nkay9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSx1RUFBa0Y7QUFDbEYsaUNBQStHO0FBQy9HLHNDQUEyQztBQUMzQyx3Q0FBaUQ7QUFDakQsb0NBQTJEO0FBQzNELDREQUFtRjtBQUNuRix3RUFBa0U7QUFDbEUsb0RBQThEO0FBRTlELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQWdEOUM7O0dBRUc7QUFDSCxNQUFhLGlCQUFrQixTQUFRLGtCQUFXO0lBWWhEOzs7O09BSUc7SUFDSCxZQUFZLEdBQStCLEVBQVUsT0FBaUM7UUFDcEYsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNULEdBQUcsT0FBTztZQUNWLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixJQUFJO2dCQUN6QyxlQUFlLEVBQUU7b0JBQ2YsSUFBSSxvQ0FBdUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7b0JBQ2xELEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxFQUFFO2lCQUNqQzthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBVGdELFlBQU8sR0FBUCxPQUFPLENBQTBCO1FBVnRGLGtEQUFrRDtRQUMxQyxxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFvQnRDLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDNUI7WUFDRCxnQkFBZ0IsRUFBRSxFQUFFO1NBQ3JCLENBQUMsQ0FBQztRQUVILGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsdUJBQXVC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LENBQUMsSUFBSSxTQUFTO2dCQUMxQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxtQkFBbUI7Z0JBQ3RELEdBQUcsRUFBRTtvQkFDSCxFQUFFLEVBQUUsTUFBTTtvQkFDVixHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7aUJBQzlEO2dCQUNELFdBQVcsRUFBRSxJQUFBLDZCQUFtQixFQUFDO29CQUMvQixPQUFPLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO29CQUM1QixRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2lCQUM3QixFQUFFLEdBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFzQixDQUFDO2dCQUMxRixLQUFLLEVBQUU7b0JBQ0w7d0JBQ0UsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLElBQUksRUFBRSxxQkFBcUI7cUJBQzVCO29CQUNELEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7aUJBQy9CO2FBQ0YsQ0FBQyxDQUFDO1FBRUwsQ0FBQztJQUNILENBQUM7O0FBNVZILDhDQTZWQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c2NkayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBHaXRodWJXb3JrZmxvdyB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViJztcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlBlcm1pc3Npb25zIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IENES1BpcGVsaW5lLCBDREtQaXBlbGluZU9wdGlvbnMsIERlcGxveW1lbnRTdGFnZSwgSW5kZXBlbmRlbnRTdGFnZSwgTmFtZWRTdGFnZU9wdGlvbnMgfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgUGlwZWxpbmVFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmUnO1xuaW1wb3J0IHsgbWVyZ2VKb2JQZXJtaXNzaW9ucyB9IGZyb20gJy4uL2VuZ2luZXMnO1xuaW1wb3J0IHsgUGlwZWxpbmVTdGVwLCBTaW1wbGVDb21tYW5kU3RlcCB9IGZyb20gJy4uL3N0ZXBzJztcbmltcG9ydCB7IERvd25sb2FkQXJ0aWZhY3RTdGVwLCBVcGxvYWRBcnRpZmFjdFN0ZXAgfSBmcm9tICcuLi9zdGVwcy9hcnRpZmFjdC1zdGVwcyc7XG5pbXBvcnQgeyBBd3NBc3N1bWVSb2xlU3RlcCB9IGZyb20gJy4uL3N0ZXBzL2F3cy1hc3N1bWUtcm9sZS5zdGVwJztcbmltcG9ydCB7IEdpdGh1YlBhY2thZ2VzTG9naW5TdGVwIH0gZnJvbSAnLi4vc3RlcHMvcmVnaXN0cmllcyc7XG5cbmNvbnN0IERFRkFVTFRfUlVOTkVSX1RBR1MgPSBbJ3VidW50dS1sYXRlc3QnXTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGludGVyZmFjZSBmb3IgR2l0SHViLXNwZWNpZmljIElBTSByb2xlcyB1c2VkIGluIHRoZSBDREsgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0aHViSWFtUm9sZUNvbmZpZyB7XG5cbiAgLyoqIERlZmF1bHQgSUFNIHJvbGUgQVJOIHVzZWQgaWYgbm8gc3BlY2lmaWMgcm9sZSBpcyBwcm92aWRlZC4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdD86IHN0cmluZztcbiAgLyoqIElBTSByb2xlIEFSTiBmb3IgdGhlIHN5bnRoZXNpcyBzdGVwLiAqL1xuICByZWFkb25seSBzeW50aD86IHN0cmluZztcbiAgLyoqIElBTSByb2xlIEFSTiBmb3IgdGhlIGFzc2V0IHB1Ymxpc2hpbmcgc3RlcC4gKi9cbiAgcmVhZG9ubHkgYXNzZXRQdWJsaXNoaW5nPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgYXNzZXQgcHVibGlzaGluZyBzdGVwIGZvciBhIHNwZWNpZmljIHN0YWdlLiAqL1xuICByZWFkb25seSBhc3NldFB1Ymxpc2hpbmdQZXJTdGFnZT86IHsgW3N0YWdlOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqIElBTSByb2xlIEFSTnMgZm9yIGRpZmZlcmVudCBkZXBsb3ltZW50IHN0YWdlcy4gKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudD86IHsgW3N0YWdlOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBFeHRlbnNpb24gb2YgdGhlIGJhc2UgQ0RLUGlwZWxpbmUgb3B0aW9ucyBpbmNsdWRpbmcgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIEdpdEh1Yi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRodWJDREtQaXBlbGluZU9wdGlvbnMgZXh0ZW5kcyBDREtQaXBlbGluZU9wdGlvbnMge1xuXG4gIC8qKiBJQU0gY29uZmlnIGZvciBHaXRIdWIgQWN0aW9ucyAqL1xuICByZWFkb25seSBpYW1Sb2xlQXJuczogR2l0aHViSWFtUm9sZUNvbmZpZztcblxuICAvKipcbiAgICogcnVubmVyIHRhZ3MgdG8gdXNlIHRvIHNlbGVjdCBydW5uZXJzXG4gICAqXG4gICAqIEBkZWZhdWx0IFsndWJ1bnR1LWxhdGVzdCddXG4gICAqL1xuICByZWFkb25seSBydW5uZXJUYWdzPzogc3RyaW5nW107XG5cbiAgLyoqIHVzZSBHaXRIdWIgUGFja2FnZXMgdG8gc3RvcmUgdmVzaW9uZWQgYXJ0aWZhY3RzIG9mIGNsb3VkIGFzc2VtYmx5OyBhbHNvIG5lZWRlZCBmb3IgbWFudWFsIGFwcHJvdmFscyAqL1xuICByZWFkb25seSB1c2VHaXRodWJQYWNrYWdlc0ZvckFzc2VtYmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogd2hldGhlciB0byB1c2UgR2l0SHViIGVudmlyb25tZW50cyBmb3IgZGVwbG95bWVudCBzdGFnZXNcbiAgICpcbiAgICogSU5GTzogV2hlbiB1c2luZyBlbnZpcm9ubWVudHMgY29uc2lkZXIgcHJvdGVjdGlvbiBydWxlcyBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBtYW51YWwgb3B0aW9uIG9mIHByb2plbi1waXBlbGluZXMgZm9yIHN0YWdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlR2l0aHViRW52aXJvbm1lbnRzPzogYm9vbGVhbjtcbn1cblxuXG4vKipcbiAqIEltcGxlbWVudHMgYSBDREsgUGlwZWxpbmUgY29uZmlndXJlZCBzcGVjaWZpY2FsbHkgZm9yIEdpdEh1YiB3b3JrZmxvd3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRodWJDREtQaXBlbGluZSBleHRlbmRzIENES1BpcGVsaW5lIHtcblxuICAvKiogSW5kaWNhdGVzIGlmIHZlcnNpb25lZCBhcnRpZmFjdHMgYXJlIG5lZWRlZCBiYXNlZCBvbiBtYW51YWwgYXBwcm92YWwgcmVxdWlyZW1lbnRzLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmVlZHNWZXJzaW9uZWRBcnRpZmFjdHM6IGJvb2xlYW47XG5cbiAgLyoqIFRoZSBHaXRIdWIgd29ya2Zsb3cgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXBlbGluZS4gKi9cbiAgcHJpdmF0ZSBkZXBsb3ltZW50V29ya2Zsb3c6IEdpdGh1YldvcmtmbG93O1xuICAvKiogTGlzdCBvZiBkZXBsb3ltZW50IHN0YWdlcyBmb3IgdGhlIHBpcGVsaW5lLiAqL1xuICBwcml2YXRlIGRlcGxveW1lbnRTdGFnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJvdGVjdGVkIHVzZUdpdGh1YlBhY2thZ2VzOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEdpdGh1YkNES1BpcGVsaW5lIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gYXBwIC0gVGhlIENESyBhcHAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGlwZWxpbmUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihhcHA6IGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwLCBwcml2YXRlIG9wdGlvbnM6IEdpdGh1YkNES1BpcGVsaW5lT3B0aW9ucykge1xuICAgIHN1cGVyKGFwcCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIC4uLm9wdGlvbnMudXNlR2l0aHViUGFja2FnZXNGb3JBc3NlbWJseSAmJiB7XG4gICAgICAgIHByZUluc3RhbGxTdGVwczogW1xuICAgICAgICAgIG5ldyBHaXRodWJQYWNrYWdlc0xvZ2luU3RlcChhcHAsIHsgd3JpdGU6IGZhbHNlIH0pLFxuICAgICAgICAgIC4uLm9wdGlvbnMucHJlSW5zdGFsbFN0ZXBzID8/IFtdLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGRlcGxveW1lbnQgd29ya2Zsb3cgb24gR2l0SHViLlxuICAgIHRoaXMuZGVwbG95bWVudFdvcmtmbG93ID0gdGhpcy5hcHAuZ2l0aHViIS5hZGRXb3JrZmxvdygnZGVwbG95Jyk7XG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3cub24oe1xuICAgICAgcHVzaDoge1xuICAgICAgICBicmFuY2hlczogW3RoaXMuYnJhbmNoTmFtZV0sXG4gICAgICB9LFxuICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge30sXG4gICAgfSk7XG5cbiAgICAvLyBEZXRlcm1pbmUgaWYgdmVyc2lvbmVkIGFydGlmYWN0cyBhcmUgbmVjZXNzYXJ5LlxuICAgIHRoaXMubmVlZHNWZXJzaW9uZWRBcnRpZmFjdHMgPSBvcHRpb25zLnN0YWdlcy5maW5kKHMgPT4gcy5tYW51YWxBcHByb3ZhbCA9PT0gdHJ1ZSkgIT09IHVuZGVmaW5lZDs7XG4gICAgdGhpcy51c2VHaXRodWJQYWNrYWdlcyA9IHRoaXMubmVlZHNWZXJzaW9uZWRBcnRpZmFjdHMgJiYgKG9wdGlvbnMudXNlR2l0aHViUGFja2FnZXNGb3JBc3NlbWJseSA/PyBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy51c2VHaXRodWJQYWNrYWdlcykge1xuICAgICAgYXBwLm5wbXJjLmFkZFJlZ2lzdHJ5KCdodHRwczovL25wbS5wa2cuZ2l0aHViLmNvbScsIHRoaXMuYmFzZU9wdGlvbnMucGtnTmFtZXNwYWNlKTtcbiAgICAgIGFwcC5ucG1yYy5hZGRDb25maWcoJy8vbnBtLnBrZy5naXRodWIuY29tLzpfYXV0aFRva2VuJywgJyR7R0lUSFVCX1RPS0VOfScpO1xuICAgICAgYXBwLm5wbXJjLmFkZENvbmZpZygnLy9ucG0ucGtnLmdpdGh1Yi5jb20vOmFsd2F5cy1hdXRoJywgJ3RydWUnKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgam9icyBmb3Igc3ludGhlc2l6aW5nLCBhc3NldCB1cGxvYWRpbmcsIGFuZCBkZXBsb3ltZW50LlxuICAgIHRoaXMuY3JlYXRlU3ludGgoKTtcblxuICAgIHRoaXMuY3JlYXRlQXNzZXRVcGxvYWQoKTtcblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygb3B0aW9ucy5zdGFnZXMpIHtcbiAgICAgIHRoaXMuY3JlYXRlRGVwbG95bWVudChzdGFnZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgKG9wdGlvbnMuaW5kZXBlbmRlbnRTdGFnZXMgPz8gW10pKSB7XG4gICAgICB0aGlzLmNyZWF0ZUluZGVwZW5kZW50RGVwbG95bWVudChzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIHRoZSB0eXBlIG9mIGVuZ2luZSB0aGlzIGltcGxlbWVudGF0aW9uIG9mIENES1BpcGVsaW5lIGlzIGZvciAqL1xuICBwdWJsaWMgZW5naW5lVHlwZSgpOiBQaXBlbGluZUVuZ2luZSB7XG4gICAgcmV0dXJuIFBpcGVsaW5lRW5naW5lLkdJVEhVQjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc3ludGhlc2lzIGpvYiBmb3IgdGhlIHBpcGVsaW5lIHVzaW5nIEdpdEh1YiBBY3Rpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVTeW50aCgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGVwczogUGlwZWxpbmVTdGVwW10gPSBbXTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnM/LnN5bnRoKSB7XG4gICAgICBzdGVwcy5wdXNoKG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgcm9sZUFybjogdGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLnN5bnRoLFxuICAgICAgICBzZXNzaW9uTmFtZTogJ0dpdEh1YkFjdGlvbicsXG4gICAgICB9KSk7XG4gICAgfVxuICAgIHN0ZXBzLnB1c2goLi4udGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsU3RlcHMgPz8gW10pO1xuICAgIHN0ZXBzLnB1c2gobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5yZW5kZXJJbnN0YWxsQ29tbWFuZHMoKSkpO1xuXG4gICAgc3RlcHMucHVzaCguLi50aGlzLmJhc2VPcHRpb25zLnByZVN5bnRoU3RlcHMgPz8gW10pO1xuICAgIHN0ZXBzLnB1c2gobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5yZW5kZXJTeW50aENvbW1hbmRzKCkpKTtcbiAgICBzdGVwcy5wdXNoKC4uLnRoaXMuYmFzZU9wdGlvbnMucG9zdFN5bnRoU3RlcHMgPz8gW10pO1xuXG4gICAgc3RlcHMucHVzaChuZXcgVXBsb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgbmFtZTogJ2Nsb3VkLWFzc2VtYmx5JyxcbiAgICAgIHBhdGg6IGAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9L2AsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZ2l0aHViU3RlcHMgPSBzdGVwcy5tYXAocyA9PiBzLnRvR2l0aHViKCkpO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3cuYWRkSm9iKCdzeW50aCcsIHtcbiAgICAgIG5hbWU6ICdTeW50aCBDREsgYXBwbGljYXRpb24nLFxuICAgICAgcnVuc09uOiB0aGlzLm9wdGlvbnMucnVubmVyVGFncyA/PyBERUZBVUxUX1JVTk5FUl9UQUdTLFxuICAgICAgZW52OiB7XG4gICAgICAgIENJOiAndHJ1ZScsXG4gICAgICAgIC4uLmdpdGh1YlN0ZXBzLnJlZHVjZSgoYWNjLCBzdGVwKSA9PiAoeyAuLi5hY2MsIC4uLnN0ZXAuZW52IH0pLCB7fSksXG4gICAgICB9LFxuICAgICAgbmVlZHM6IFsuLi5naXRodWJTdGVwcy5mbGF0TWFwKHMgPT4gcy5uZWVkcyldLFxuICAgICAgcGVybWlzc2lvbnM6IG1lcmdlSm9iUGVybWlzc2lvbnMoe1xuICAgICAgICBpZFRva2VuOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgfSwgLi4uKGdpdGh1YlN0ZXBzLmZsYXRNYXAocyA9PiBzLnBlcm1pc3Npb25zKS5maWx0ZXIocCA9PiBwICE9IHVuZGVmaW5lZCkgYXMgSm9iUGVybWlzc2lvbnNbXSkpLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgdXNlczogJ2FjdGlvbnMvY2hlY2tvdXRAdjQnLFxuICAgICAgICB9LFxuICAgICAgICAuLi5naXRodWJTdGVwcy5mbGF0TWFwKHMgPT4gcy5zdGVwcyksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBqb2IgdG8gdXBsb2FkIGFzc2V0cyB0byBBV1MgYXMgcGFydCBvZiB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlQXNzZXRVcGxvYWQoKTogdm9pZCB7XG4gICAgY29uc3QgZ2xvYmFsUHVibGlzaFJvbGUgPSB0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nID8/IHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucy5kZWZhdWx0ITtcblxuICAgIGNvbnN0IHN0ZXBzID0gW1xuICAgICAgbmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgWydnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcImdpdGh1Yi1hY3Rpb25zXCIgJiYgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwiZ2l0aHViLWFjdGlvbnNAZ2l0aHViLmNvbVwiJ10pLFxuICAgICAgbmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICByb2xlQXJuOiBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgIH0pLFxuICAgICAgbmV3IERvd25sb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICBuYW1lOiAnY2xvdWQtYXNzZW1ibHknLFxuICAgICAgICBwYXRoOiBgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS9gLFxuICAgICAgfSksXG4gICAgICAuLi50aGlzLmJhc2VPcHRpb25zLnByZUluc3RhbGxTdGVwcyA/PyBbXSxcbiAgICAgIG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMucmVuZGVySW5zdGFsbENvbW1hbmRzKCkpLFxuICAgIF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlKSB7XG4gICAgICBjb25zdCBzdGFnZXMgPSBbLi4udGhpcy5vcHRpb25zLnN0YWdlcywgLi4udGhpcy5vcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdXTtcbiAgICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICAgIHN0ZXBzLnB1c2gobmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICAgIHJvbGVBcm46IHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucy5hc3NldFB1Ymxpc2hpbmdQZXJTdGFnZVtzdGFnZS5uYW1lXSA/PyBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAgfSkpO1xuICAgICAgICBzdGVwcy5wdXNoKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMucmVuZGVyQXNzZXRVcGxvYWRDb21tYW5kcyhzdGFnZS5uYW1lKSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdGVwcy5wdXNoKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMucmVuZGVyQXNzZXRVcGxvYWRDb21tYW5kcygpKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmVlZHNWZXJzaW9uZWRBcnRpZmFjdHMpIHtcbiAgICAgIHN0ZXBzLnB1c2gobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5yZW5kZXJBc3NlbWJseVVwbG9hZENvbW1hbmRzKCkpKTtcbiAgICB9XG5cbiAgICBjb25zdCBnaFN0ZXBzID0gc3RlcHMubWFwKHMgPT4gcy50b0dpdGh1YigpKTtcblxuICAgIHRoaXMuZGVwbG95bWVudFdvcmtmbG93LmFkZEpvYignYXNzZXRVcGxvYWQnLCB7XG4gICAgICBuYW1lOiAnUHVibGlzaCBhc3NldHMgdG8gQVdTJyxcbiAgICAgIG5lZWRzOiBbJ3N5bnRoJywgLi4uZ2hTdGVwcy5mbGF0TWFwKHMgPT4gcy5uZWVkcyldLFxuICAgICAgcnVuc09uOiB0aGlzLm9wdGlvbnMucnVubmVyVGFncyA/PyBERUZBVUxUX1JVTk5FUl9UQUdTLFxuICAgICAgZW52OiB7XG4gICAgICAgIENJOiAndHJ1ZScsXG4gICAgICAgIC4uLmdoU3RlcHMucmVkdWNlKChhY2MsIHN0ZXApID0+ICh7IC4uLmFjYywgLi4uc3RlcC5lbnYgfSksIHt9KSxcbiAgICAgIH0sXG4gICAgICBwZXJtaXNzaW9uczogbWVyZ2VKb2JQZXJtaXNzaW9ucyh7XG4gICAgICAgIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGNvbnRlbnRzOiB0aGlzLm5lZWRzVmVyc2lvbmVkQXJ0aWZhY3RzID8gSm9iUGVybWlzc2lvbi5XUklURSA6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgLi4udGhpcy51c2VHaXRodWJQYWNrYWdlcyAmJiB7XG4gICAgICAgICAgcGFja2FnZXM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIH0sXG4gICAgICB9LCAuLi4oZ2hTdGVwcy5mbGF0TWFwKHMgPT4gcy5wZXJtaXNzaW9ucykuZmlsdGVyKHAgPT4gcCAhPSB1bmRlZmluZWQpIGFzIEpvYlBlcm1pc3Npb25zW10pKSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQ2hlY2tvdXQnLFxuICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAnZmV0Y2gtZGVwdGgnOiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmdoU3RlcHMuZmxhdE1hcChzID0+IHMuc3RlcHMpLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgam9iIHRvIGRlcGxveSB0aGUgQ0RLIGFwcGxpY2F0aW9uIHRvIEFXUy5cbiAgICogQHBhcmFtIHN0YWdlIC0gVGhlIGRlcGxveW1lbnQgc3RhZ2UgdG8gY3JlYXRlLlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZURlcGxveW1lbnQoc3RhZ2U6IERlcGxveW1lbnRTdGFnZSk6IHZvaWQge1xuXG4gICAgaWYgKHN0YWdlLm1hbnVhbEFwcHJvdmFsID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBzdGVwcyA9IFtcbiAgICAgICAgbmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICAgIHJvbGVBcm46IHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucz8uZGVwbG95bWVudD8uW3N0YWdlLm5hbWVdID8/IHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucz8uZGVmYXVsdCEsXG4gICAgICAgICAgcmVnaW9uOiBzdGFnZS5lbnYucmVnaW9uLFxuICAgICAgICB9KSxcbiAgICAgICAgLi4udGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsU3RlcHMgPz8gW10sXG4gICAgICAgIG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMucmVuZGVySW5zdGFsbENvbW1hbmRzKCkpLFxuICAgICAgICBuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCB0aGlzLnJlbmRlckluc3RhbGxQYWNrYWdlQ29tbWFuZHMoYCR7dGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2V9LyR7dGhpcy5hcHAubmFtZX1AXFwke3tnaXRodWIuZXZlbnQuaW5wdXRzLnZlcnNpb259fWApKSxcbiAgICAgICAgbmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgW2BtdiAuL25vZGVfbW9kdWxlcy8ke3RoaXMuYmFzZU9wdGlvbnMucGtnTmFtZXNwYWNlfS8ke3RoaXMuYXBwLm5hbWV9ICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH1gXSksXG4gICAgICAgIG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMucmVuZGVyRGVwbG95Q29tbWFuZHMoc3RhZ2UubmFtZSkpLFxuICAgICAgICBuZXcgVXBsb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICAgIG5hbWU6IGBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9YCxcbiAgICAgICAgICBwYXRoOiBgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uYCxcbiAgICAgICAgfSksXG4gICAgICBdLm1hcChzID0+IHMudG9HaXRodWIoKSk7XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgd29ya2Zsb3cgZm9yIGRlcGxveW1lbnRcbiAgICAgIGNvbnN0IHN0YWdlV29ya2Zsb3cgPSB0aGlzLmFwcC5naXRodWIhLmFkZFdvcmtmbG93KGByZWxlYXNlLSR7c3RhZ2UubmFtZX1gKTtcbiAgICAgIHN0YWdlV29ya2Zsb3cub24oe1xuICAgICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7XG4gICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUGFja2FnZSB2ZXJzaW9uJyxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHN0YWdlV29ya2Zsb3cuYWRkSm9iKCdkZXBsb3knLCB7XG4gICAgICAgIG5hbWU6IGBSZWxlYXNlIHN0YWdlICR7c3RhZ2UubmFtZX0gdG8gQVdTYCxcbiAgICAgICAgbmVlZHM6IHN0ZXBzLmZsYXRNYXAocyA9PiBzLm5lZWRzKSxcbiAgICAgICAgcnVuc09uOiB0aGlzLm9wdGlvbnMucnVubmVyVGFncyA/PyBERUZBVUxUX1JVTk5FUl9UQUdTLFxuICAgICAgICAuLi50aGlzLm9wdGlvbnMudXNlR2l0aHViRW52aXJvbm1lbnRzICYmIHtcbiAgICAgICAgICBlbnZpcm9ubWVudDogc3RhZ2UubmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgICAuLi5zdGVwcy5yZWR1Y2UoKGFjYywgc3RlcCkgPT4gKHsgLi4uYWNjLCAuLi5zdGVwLmVudiB9KSwge30pLFxuICAgICAgICB9LFxuICAgICAgICBwZXJtaXNzaW9uczogbWVyZ2VKb2JQZXJtaXNzaW9ucyh7XG4gICAgICAgICAgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICB9LCAuLi4oc3RlcHMuZmxhdE1hcChzID0+IHMucGVybWlzc2lvbnMpLmZpbHRlcihwID0+IHAgIT0gdW5kZWZpbmVkKSBhcyBKb2JQZXJtaXNzaW9uc1tdKSksXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLnN0ZXBzLmZsYXRNYXAocyA9PiBzLnN0ZXBzKSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlRGVwbG95Sm9iKHRoaXMuZGVwbG95bWVudFdvcmtmbG93LCBbLi4uKHRoaXMuZGVwbG95bWVudFN0YWdlcy5sZW5ndGggPiAwID8gW2BkZXBsb3ktJHt0aGlzLmRlcGxveW1lbnRTdGFnZXMuYXQoLTEpIX1gXSA6IFtdKV0sIHN0YWdlKTtcbiAgICAgIHRoaXMuZGVwbG95bWVudFN0YWdlcy5wdXNoKHN0YWdlLm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVwbG95Sm9iKHdvcmtmbG93OiBHaXRodWJXb3JrZmxvdywgam9iRGVwZW5kZW5jaWVzOiBzdHJpbmdbXSwgc3RhZ2U6IE5hbWVkU3RhZ2VPcHRpb25zKSB7XG4gICAgY29uc3Qgc3RlcHMgPSBbXG4gICAgICBuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucz8uZGVwbG95bWVudD8uW3N0YWdlLm5hbWVdID8/IHRoaXMub3B0aW9ucy5pYW1Sb2xlQXJucz8uZGVmYXVsdCEsXG4gICAgICAgIHJlZ2lvbjogc3RhZ2UuZW52LnJlZ2lvbixcbiAgICAgIH0pLFxuICAgICAgbmV3IERvd25sb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICBuYW1lOiAnY2xvdWQtYXNzZW1ibHknLFxuICAgICAgICBwYXRoOiBgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS9gLFxuICAgICAgfSksXG4gICAgICAuLi50aGlzLmJhc2VPcHRpb25zLnByZUluc3RhbGxTdGVwcyA/PyBbXSxcbiAgICAgIG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMucmVuZGVySW5zdGFsbENvbW1hbmRzKCkpLFxuICAgICAgbmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5yZW5kZXJEZXBsb3lDb21tYW5kcyhzdGFnZS5uYW1lKSksXG4gICAgICBuZXcgVXBsb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICBuYW1lOiBgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfWAsXG4gICAgICAgIHBhdGg6IGBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9Lmpzb25gLFxuICAgICAgfSksXG4gICAgXS5tYXAocyA9PiBzLnRvR2l0aHViKCkpO1xuXG4gICAgLy8gQWRkIGRlcGxveW1lbnQgdG8gQ0kvQ0Qgd29ya2Zsb3dcbiAgICB3b3JrZmxvdy5hZGRKb2IoYGRlcGxveS0ke3N0YWdlLm5hbWV9YCwge1xuICAgICAgbmFtZTogYERlcGxveSBzdGFnZSAke3N0YWdlLm5hbWV9IHRvIEFXU2AsXG4gICAgICAuLi50aGlzLm9wdGlvbnMudXNlR2l0aHViRW52aXJvbm1lbnRzICYmIHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IHN0YWdlLm5hbWUsXG4gICAgICB9LFxuICAgICAgbmVlZHM6IFsnYXNzZXRVcGxvYWQnLCAuLi5zdGVwcy5mbGF0TWFwKHMgPT4gcy5uZWVkcyksIC4uLmpvYkRlcGVuZGVuY2llc10sXG4gICAgICBydW5zT246IHRoaXMub3B0aW9ucy5ydW5uZXJUYWdzID8/IERFRkFVTFRfUlVOTkVSX1RBR1MsXG4gICAgICBlbnY6IHtcbiAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgLi4uc3RlcHMucmVkdWNlKChhY2MsIHN0ZXApID0+ICh7IC4uLmFjYywgLi4uc3RlcC5lbnYgfSksIHt9KSxcbiAgICAgIH0sXG4gICAgICBwZXJtaXNzaW9uczogbWVyZ2VKb2JQZXJtaXNzaW9ucyh7XG4gICAgICAgIGlkVG9rZW46IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICB9LCAuLi4oc3RlcHMuZmxhdE1hcChzID0+IHMucGVybWlzc2lvbnMpLmZpbHRlcihwID0+IHAgIT0gdW5kZWZpbmVkKSBhcyBKb2JQZXJtaXNzaW9uc1tdKSksXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9jaGVja291dEB2NCcsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnN0ZXBzLmZsYXRNYXAocyA9PiBzLnN0ZXBzKSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGpvYiB0byBkZXBsb3kgdGhlIENESyBhcHBsaWNhdGlvbiB0byBBV1MuXG4gICAqIEBwYXJhbSBzdGFnZSAtIFRoZSBpbmRlcGVuZGVudCBzdGFnZSB0byBjcmVhdGUuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlSW5kZXBlbmRlbnREZXBsb3ltZW50KHN0YWdlOiBJbmRlcGVuZGVudFN0YWdlKTogdm9pZCB7XG4gICAgaWYgKHN0YWdlLmRlcGxveU9uUHVzaCB8fCB0aGlzLm9wdGlvbnMudXNlR2l0aHViRW52aXJvbm1lbnRzKSB7XG4gICAgICB0aGlzLmNyZWF0ZURlcGxveUpvYih0aGlzLmRlcGxveW1lbnRXb3JrZmxvdywgW10sIHN0YWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RlcHMgPSBbXG4gICAgICAgIG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgICByb2xlQXJuOiB0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnM/LmRlcGxveW1lbnQ/LltzdGFnZS5uYW1lXSA/PyB0aGlzLm9wdGlvbnMuaWFtUm9sZUFybnM/LmRlZmF1bHQhLFxuICAgICAgICAgIHJlZ2lvbjogc3RhZ2UuZW52LnJlZ2lvbixcbiAgICAgICAgfSksXG4gICAgICAgIC4uLnRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbFN0ZXBzID8/IFtdLFxuICAgICAgICBuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCB0aGlzLnJlbmRlckluc3RhbGxDb21tYW5kcygpKSxcblxuICAgICAgICAuLi50aGlzLmJhc2VPcHRpb25zLnByZVN5bnRoU3RlcHMgPz8gW10sXG4gICAgICAgIG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMucmVuZGVyU3ludGhDb21tYW5kcygpKSxcbiAgICAgICAgLi4udGhpcy5iYXNlT3B0aW9ucy5wb3N0U3ludGhTdGVwcyA/PyBbXSxcblxuICAgICAgICBuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCB0aGlzLnJlbmRlckRpZmZDb21tYW5kcyhzdGFnZS5uYW1lKSksXG4gICAgICAgIC4uLnN0YWdlLnBvc3REaWZmU3RlcHMgPz8gW10sXG5cbiAgICAgICAgbmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5yZW5kZXJEZXBsb3lDb21tYW5kcyhzdGFnZS5uYW1lKSksXG4gICAgICAgIC4uLnN0YWdlLnBvc3REZXBsb3lTdGVwcyA/PyBbXSxcblxuICAgICAgICBuZXcgVXBsb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICAgIG5hbWU6IGBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9YCxcbiAgICAgICAgICBwYXRoOiBgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uYCxcbiAgICAgICAgfSksXG4gICAgICBdLm1hcChzID0+IHMudG9HaXRodWIoKSk7XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgd29ya2Zsb3cgZm9yIGRlcGxveW1lbnRcbiAgICAgIGNvbnN0IHN0YWdlV29ya2Zsb3cgPSB0aGlzLmFwcC5naXRodWIhLmFkZFdvcmtmbG93KGBkZXBsb3ktJHtzdGFnZS5uYW1lfWApO1xuICAgICAgc3RhZ2VXb3JrZmxvdy5vbih7XG4gICAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgICAgfSk7XG4gICAgICBzdGFnZVdvcmtmbG93LmFkZEpvYignZGVwbG95Jywge1xuICAgICAgICBuYW1lOiBgUmVsZWFzZSBzdGFnZSAke3N0YWdlLm5hbWV9IHRvIEFXU2AsXG4gICAgICAgIG5lZWRzOiBzdGVwcy5mbGF0TWFwKHMgPT4gcy5uZWVkcyksXG4gICAgICAgIHJ1bnNPbjogdGhpcy5vcHRpb25zLnJ1bm5lclRhZ3MgPz8gREVGQVVMVF9SVU5ORVJfVEFHUyxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgICAuLi5zdGVwcy5yZWR1Y2UoKGFjYywgc3RlcCkgPT4gKHsgLi4uYWNjLCAuLi5zdGVwLmVudiB9KSwge30pLFxuICAgICAgICB9LFxuICAgICAgICBwZXJtaXNzaW9uczogbWVyZ2VKb2JQZXJtaXNzaW9ucyh7XG4gICAgICAgICAgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICB9LCAuLi4oc3RlcHMuZmxhdE1hcChzID0+IHMucGVybWlzc2lvbnMpLmZpbHRlcihwID0+IHAgIT0gdW5kZWZpbmVkKSBhcyBKb2JQZXJtaXNzaW9uc1tdKSksXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLnN0ZXBzLmZsYXRNYXAocyA9PiBzLnN0ZXBzKSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
284
|
+
GithubCDKPipeline[_a] = { fqn: "projen-pipelines.GithubCDKPipeline", version: "0.2.0" };
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F3c2Nkay9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSx1RUFBa0Y7QUFDbEYsaUNBQStHO0FBQy9HLHNDQUEyQztBQUMzQyx3Q0FBaUQ7QUFDakQsb0NBQTJEO0FBQzNELDREQUFtRjtBQUNuRixvREFBOEQ7QUFFOUQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBNkI5Qzs7R0FFRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsa0JBQVc7SUFZaEQ7Ozs7T0FJRztJQUNILFlBQVksR0FBK0IsRUFBVSxPQUFpQztRQUNwRixLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1QsR0FBRyxPQUFPO1lBQ1YsR0FBRyxPQUFPLENBQUMsNEJBQTRCLElBQUk7Z0JBQ3pDLGVBQWUsRUFBRTtvQkFDZixJQUFJLG9DQUF1QixDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztvQkFDbEQsR0FBRyxPQUFPLENBQUMsZUFBZSxJQUFJLEVBQUU7aUJBQ2pDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFUZ0QsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7UUFWdEYsa0RBQWtEO1FBQzFDLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQW9CdEMsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUM1QjtZQUNELGdCQUFnQixFQUFFLEVBQUU7U0FDckIsQ0FBQyxDQUFDO1FBRUgsa0RBQWtEO1FBQ2xELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENB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RUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztpQkFDOUQ7Z0JBQ0QsV0FBVyxFQUFFLElBQUEsNkJBQW1CLEVBQUM7b0JBQy9CLFFBQVEsRUFBRSwrQkFBYSxDQUFDLElBQUk7aUJBQzdCLEVBQUUsR0FBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQXNCLENBQUM7Z0JBQzFGLEtBQUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsSUFBSSxFQUFFLHFCQUFxQjtxQkFDNUI7b0JBQ0QsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDL0I7YUFDRixDQUFDLENBQUM7UUFFTCxDQUFDO0lBQ0gsQ0FBQzs7QUF0U0gsOENBdVNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXdzY2RrIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEdpdGh1YldvcmtmbG93IH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iUGVybWlzc2lvbnMgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnO1xuaW1wb3J0IHsgQ0RLUGlwZWxpbmUsIENES1BpcGVsaW5lT3B0aW9ucywgRGVwbG95bWVudFN0YWdlLCBJbmRlcGVuZGVudFN0YWdlLCBOYW1lZFN0YWdlT3B0aW9ucyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBtZXJnZUpvYlBlcm1pc3Npb25zIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBQaXBlbGluZVN0ZXAsIFNpbXBsZUNvbW1hbmRTdGVwIH0gZnJvbSAnLi4vc3RlcHMnO1xuaW1wb3J0IHsgRG93bmxvYWRBcnRpZmFjdFN0ZXAsIFVwbG9hZEFydGlmYWN0U3RlcCB9IGZyb20gJy4uL3N0ZXBzL2FydGlmYWN0LXN0ZXBzJztcbmltcG9ydCB7IEdpdGh1YlBhY2thZ2VzTG9naW5TdGVwIH0gZnJvbSAnLi4vc3RlcHMvcmVnaXN0cmllcyc7XG5cbmNvbnN0IERFRkFVTFRfUlVOTkVSX1RBR1MgPSBbJ3VidW50dS1sYXRlc3QnXTtcblxuXG4vKipcbiAqIEV4dGVuc2lvbiBvZiB0aGUgYmFzZSBDREtQaXBlbGluZSBvcHRpb25zIGluY2x1ZGluZyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgR2l0SHViLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdGh1YkNES1BpcGVsaW5lT3B0aW9ucyBleHRlbmRzIENES1BpcGVsaW5lT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIHJ1bm5lciB0YWdzIHRvIHVzZSB0byBzZWxlY3QgcnVubmVyc1xuICAgKlxuICAgKiBAZGVmYXVsdCBbJ3VidW50dS1sYXRlc3QnXVxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyVGFncz86IHN0cmluZ1tdO1xuXG4gIC8qKiB1c2UgR2l0SHViIFBhY2thZ2VzIHRvIHN0b3JlIHZlc2lvbmVkIGFydGlmYWN0cyBvZiBjbG91ZCBhc3NlbWJseTsgYWxzbyBuZWVkZWQgZm9yIG1hbnVhbCBhcHByb3ZhbHMgKi9cbiAgcmVhZG9ubHkgdXNlR2l0aHViUGFja2FnZXNGb3JBc3NlbWJseT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIHdoZXRoZXIgdG8gdXNlIEdpdEh1YiBlbnZpcm9ubWVudHMgZm9yIGRlcGxveW1lbnQgc3RhZ2VzXG4gICAqXG4gICAqIElORk86IFdoZW4gdXNpbmcgZW52aXJvbm1lbnRzIGNvbnNpZGVyIHByb3RlY3Rpb24gcnVsZXMgaW5zdGVhZCBvZiB1c2luZyB0aGUgbWFudWFsIG9wdGlvbiBvZiBwcm9qZW4tcGlwZWxpbmVzIGZvciBzdGFnZXNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHVzZUdpdGh1YkVudmlyb25tZW50cz86IGJvb2xlYW47XG59XG5cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgQ0RLIFBpcGVsaW5lIGNvbmZpZ3VyZWQgc3BlY2lmaWNhbGx5IGZvciBHaXRIdWIgd29ya2Zsb3dzLlxuICovXG5leHBvcnQgY2xhc3MgR2l0aHViQ0RLUGlwZWxpbmUgZXh0ZW5kcyBDREtQaXBlbGluZSB7XG5cbiAgLyoqIEluZGljYXRlcyBpZiB2ZXJzaW9uZWQgYXJ0aWZhY3RzIGFyZSBuZWVkZWQgYmFzZWQgb24gbWFudWFsIGFwcHJvdmFsIHJlcXVpcmVtZW50cy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IG5lZWRzVmVyc2lvbmVkQXJ0aWZhY3RzOiBib29sZWFuO1xuXG4gIC8qKiBUaGUgR2l0SHViIHdvcmtmbG93IGFzc29jaWF0ZWQgd2l0aCB0aGUgcGlwZWxpbmUuICovXG4gIHByaXZhdGUgZGVwbG95bWVudFdvcmtmbG93OiBHaXRodWJXb3JrZmxvdztcbiAgLyoqIExpc3Qgb2YgZGVwbG95bWVudCBzdGFnZXMgZm9yIHRoZSBwaXBlbGluZS4gKi9cbiAgcHJpdmF0ZSBkZXBsb3ltZW50U3RhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCB1c2VHaXRodWJQYWNrYWdlczogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBHaXRodWJDREtQaXBlbGluZSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIGFwcCAtIFRoZSBDREsgYXBwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBpcGVsaW5lLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgY29uc3RydWN0b3IoYXBwOiBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCwgcHJpdmF0ZSBvcHRpb25zOiBHaXRodWJDREtQaXBlbGluZU9wdGlvbnMpIHtcbiAgICBzdXBlcihhcHAsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAuLi5vcHRpb25zLnVzZUdpdGh1YlBhY2thZ2VzRm9yQXNzZW1ibHkgJiYge1xuICAgICAgICBwcmVJbnN0YWxsU3RlcHM6IFtcbiAgICAgICAgICBuZXcgR2l0aHViUGFja2FnZXNMb2dpblN0ZXAoYXBwLCB7IHdyaXRlOiBmYWxzZSB9KSxcbiAgICAgICAgICAuLi5vcHRpb25zLnByZUluc3RhbGxTdGVwcyA/PyBbXSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBkZXBsb3ltZW50IHdvcmtmbG93IG9uIEdpdEh1Yi5cbiAgICB0aGlzLmRlcGxveW1lbnRXb3JrZmxvdyA9IHRoaXMuYXBwLmdpdGh1YiEuYWRkV29ya2Zsb3coJ2RlcGxveScpO1xuICAgIHRoaXMuZGVwbG95bWVudFdvcmtmbG93Lm9uKHtcbiAgICAgIHB1c2g6IHtcbiAgICAgICAgYnJhbmNoZXM6IFt0aGlzLmJyYW5jaE5hbWVdLFxuICAgICAgfSxcbiAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgIH0pO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGlmIHZlcnNpb25lZCBhcnRpZmFjdHMgYXJlIG5lY2Vzc2FyeS5cbiAgICB0aGlzLm5lZWRzVmVyc2lvbmVkQXJ0aWZhY3RzID0gb3B0aW9ucy5zdGFnZXMuZmluZChzID0+IHMubWFudWFsQXBwcm92YWwgPT09IHRydWUpICE9PSB1bmRlZmluZWQ7O1xuICAgIHRoaXMudXNlR2l0aHViUGFja2FnZXMgPSB0aGlzLm5lZWRzVmVyc2lvbmVkQXJ0aWZhY3RzICYmIChvcHRpb25zLnVzZUdpdGh1YlBhY2thZ2VzRm9yQXNzZW1ibHkgPz8gZmFsc2UpO1xuXG4gICAgaWYgKHRoaXMudXNlR2l0aHViUGFja2FnZXMpIHtcbiAgICAgIGFwcC5ucG1yYy5hZGRSZWdpc3RyeSgnaHR0cHM6Ly9ucG0ucGtnLmdpdGh1Yi5jb20nLCB0aGlzLmJhc2VPcHRpb25zLnBrZ05hbWVzcGFjZSk7XG4gICAgICBhcHAubnBtcmMuYWRkQ29uZmlnKCcvL25wbS5wa2cuZ2l0aHViLmNvbS86X2F1dGhUb2tlbicsICcke0dJVEhVQl9UT0tFTn0nKTtcbiAgICAgIGFwcC5ucG1yYy5hZGRDb25maWcoJy8vbnBtLnBrZy5naXRodWIuY29tLzphbHdheXMtYXV0aCcsICd0cnVlJyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGpvYnMgZm9yIHN5bnRoZXNpemluZywgYXNzZXQgdXBsb2FkaW5nLCBhbmQgZGVwbG95bWVudC5cbiAgICB0aGlzLmNyZWF0ZVN5bnRoKCk7XG5cbiAgICB0aGlzLmNyZWF0ZUFzc2V0VXBsb2FkKCk7XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIG9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICB0aGlzLmNyZWF0ZURlcGxveW1lbnQoc3RhZ2UpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIChvcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdKSkge1xuICAgICAgdGhpcy5jcmVhdGVJbmRlcGVuZGVudERlcGxveW1lbnQoc3RhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiB0aGUgdHlwZSBvZiBlbmdpbmUgdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBDREtQaXBlbGluZSBpcyBmb3IgKi9cbiAgcHVibGljIGVuZ2luZVR5cGUoKTogUGlwZWxpbmVFbmdpbmUge1xuICAgIHJldHVybiBQaXBlbGluZUVuZ2luZS5HSVRIVUI7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHN5bnRoZXNpcyBqb2IgZm9yIHRoZSBwaXBlbGluZSB1c2luZyBHaXRIdWIgQWN0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU3ludGgoKTogdm9pZCB7XG4gICAgY29uc3Qgc3RlcHM6IFBpcGVsaW5lU3RlcFtdID0gW107XG4gICAgc3RlcHMucHVzaCh0aGlzLnByb3ZpZGVJbnN0YWxsU3RlcCgpKTtcbiAgICBzdGVwcy5wdXNoKHRoaXMucHJvdmlkZVN5bnRoU3RlcCgpKTtcblxuICAgIHN0ZXBzLnB1c2gobmV3IFVwbG9hZEFydGlmYWN0U3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgIG5hbWU6ICdjbG91ZC1hc3NlbWJseScsXG4gICAgICBwYXRoOiBgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS9gLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGdpdGh1YlN0ZXBzID0gc3RlcHMubWFwKHMgPT4gcy50b0dpdGh1YigpKTtcblxuICAgIHRoaXMuZGVwbG95bWVudFdvcmtmbG93LmFkZEpvYignc3ludGgnLCB7XG4gICAgICBuYW1lOiAnU3ludGggQ0RLIGFwcGxpY2F0aW9uJyxcbiAgICAgIHJ1bnNPbjogdGhpcy5vcHRpb25zLnJ1bm5lclRhZ3MgPz8gREVGQVVMVF9SVU5ORVJfVEFHUyxcbiAgICAgIGVudjoge1xuICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgICAuLi5naXRodWJTdGVwcy5yZWR1Y2UoKGFjYywgc3RlcCkgPT4gKHsgLi4uYWNjLCAuLi5zdGVwLmVudiB9KSwge30pLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiBbLi4uZ2l0aHViU3RlcHMuZmxhdE1hcChzID0+IHMubmVlZHMpXSxcbiAgICAgIHBlcm1pc3Npb25zOiBtZXJnZUpvYlBlcm1pc3Npb25zKHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgIH0sIC4uLihnaXRodWJTdGVwcy5mbGF0TWFwKHMgPT4gcy5wZXJtaXNzaW9ucykuZmlsdGVyKHAgPT4gcCAhPSB1bmRlZmluZWQpIGFzIEpvYlBlcm1pc3Npb25zW10pKSxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQ2hlY2tvdXQnLFxuICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uZ2l0aHViU3RlcHMuZmxhdE1hcChzID0+IHMuc3RlcHMpLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgam9iIHRvIHVwbG9hZCBhc3NldHMgdG8gQVdTIGFzIHBhcnQgb2YgdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUFzc2V0VXBsb2FkKCk6IHZvaWQge1xuXG4gICAgY29uc3Qgc3RlcHMgPSBbXG4gICAgICBuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCBbJ2dpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiZ2l0aHViLWFjdGlvbnNcIiAmJiBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgXCJnaXRodWItYWN0aW9uc0BnaXRodWIuY29tXCInXSksXG4gICAgICBuZXcgRG93bmxvYWRBcnRpZmFjdFN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIG5hbWU6ICdjbG91ZC1hc3NlbWJseScsXG4gICAgICAgIHBhdGg6IGAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9L2AsXG4gICAgICB9KSxcbiAgICAgIHRoaXMucHJvdmlkZUluc3RhbGxTdGVwKCksXG4gICAgICB0aGlzLnByb3ZpZGVBc3NldFVwbG9hZFN0ZXAoKSxcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMubmVlZHNWZXJzaW9uZWRBcnRpZmFjdHMpIHtcbiAgICAgIHN0ZXBzLnB1c2godGhpcy5wcm92aWRlQXNzZW1ibHlVcGxvYWRTdGVwKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGdoU3RlcHMgPSBzdGVwcy5tYXAocyA9PiBzLnRvR2l0aHViKCkpO1xuXG4gICAgdGhpcy5kZXBsb3ltZW50V29ya2Zsb3cuYWRkSm9iKCdhc3NldFVwbG9hZCcsIHtcbiAgICAgIG5hbWU6ICdQdWJsaXNoIGFzc2V0cyB0byBBV1MnLFxuICAgICAgbmVlZHM6IFsnc3ludGgnLCAuLi5naFN0ZXBzLmZsYXRNYXAocyA9PiBzLm5lZWRzKV0sXG4gICAgICBydW5zT246IHRoaXMub3B0aW9ucy5ydW5uZXJUYWdzID8/IERFRkFVTFRfUlVOTkVSX1RBR1MsXG4gICAgICBlbnY6IHtcbiAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgLi4uZ2hTdGVwcy5yZWR1Y2UoKGFjYywgc3RlcCkgPT4gKHsgLi4uYWNjLCAuLi5zdGVwLmVudiB9KSwge30pLFxuICAgICAgfSxcbiAgICAgIHBlcm1pc3Npb25zOiBtZXJnZUpvYlBlcm1pc3Npb25zKHtcbiAgICAgICAgaWRUb2tlbjogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgY29udGVudHM6IHRoaXMubmVlZHNWZXJzaW9uZWRBcnRpZmFjdHMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAuLi50aGlzLnVzZUdpdGh1YlBhY2thZ2VzICYmIHtcbiAgICAgICAgICBwYWNrYWdlczogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgfSxcbiAgICAgIH0sIC4uLihnaFN0ZXBzLmZsYXRNYXAocyA9PiBzLnBlcm1pc3Npb25zKS5maWx0ZXIocCA9PiBwICE9IHVuZGVmaW5lZCkgYXMgSm9iUGVybWlzc2lvbnNbXSkpLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgdXNlczogJ2FjdGlvbnMvY2hlY2tvdXRAdjQnLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICdmZXRjaC1kZXB0aCc6IDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uZ2hTdGVwcy5mbGF0TWFwKHMgPT4gcy5zdGVwcyksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBqb2IgdG8gZGVwbG95IHRoZSBDREsgYXBwbGljYXRpb24gdG8gQVdTLlxuICAgKiBAcGFyYW0gc3RhZ2UgLSBUaGUgZGVwbG95bWVudCBzdGFnZSB0byBjcmVhdGUuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlRGVwbG95bWVudChzdGFnZTogRGVwbG95bWVudFN0YWdlKTogdm9pZCB7XG5cbiAgICBpZiAoc3RhZ2UubWFudWFsQXBwcm92YWwgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHN0ZXBzID0gW1xuICAgICAgICB0aGlzLnByb3ZpZGVJbnN0YWxsU3RlcCgpLFxuICAgICAgICBuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCB0aGlzLnJlbmRlckluc3RhbGxQYWNrYWdlQ29tbWFuZHMoYCR7dGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2V9LyR7dGhpcy5hcHAubmFtZX1AXFwke3tnaXRodWIuZXZlbnQuaW5wdXRzLnZlcnNpb259fWApKSxcbiAgICAgICAgbmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgW2BtdiAuL25vZGVfbW9kdWxlcy8ke3RoaXMuYmFzZU9wdGlvbnMucGtnTmFtZXNwYWNlfS8ke3RoaXMuYXBwLm5hbWV9ICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH1gXSksXG4gICAgICAgIHRoaXMucHJvdmlkZURlcGxveVN0ZXAoc3RhZ2UpLFxuICAgICAgICBuZXcgVXBsb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICAgIG5hbWU6IGBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9YCxcbiAgICAgICAgICBwYXRoOiBgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uYCxcbiAgICAgICAgfSksXG4gICAgICBdLm1hcChzID0+IHMudG9HaXRodWIoKSk7XG5cbiAgICAgIC8vIENyZWF0ZSBuZXcgd29ya2Zsb3cgZm9yIGRlcGxveW1lbnRcbiAgICAgIGNvbnN0IHN0YWdlV29ya2Zsb3cgPSB0aGlzLmFwcC5naXRodWIhLmFkZFdvcmtmbG93KGByZWxlYXNlLSR7c3RhZ2UubmFtZX1gKTtcbiAgICAgIHN0YWdlV29ya2Zsb3cub24oe1xuICAgICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7XG4gICAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnUGFja2FnZSB2ZXJzaW9uJyxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHN0YWdlV29ya2Zsb3cuYWRkSm9iKCdkZXBsb3knLCB7XG4gICAgICAgIG5hbWU6IGBSZWxlYXNlIHN0YWdlICR7c3RhZ2UubmFtZX0gdG8gQVdTYCxcbiAgICAgICAgbmVlZHM6IHN0ZXBzLmZsYXRNYXAocyA9PiBzLm5lZWRzKSxcbiAgICAgICAgcnVuc09uOiB0aGlzLm9wdGlvbnMucnVubmVyVGFncyA/PyBERUZBVUxUX1JVTk5FUl9UQUdTLFxuICAgICAgICAuLi50aGlzLm9wdGlvbnMudXNlR2l0aHViRW52aXJvbm1lbnRzICYmIHtcbiAgICAgICAgICBlbnZpcm9ubWVudDogc3RhZ2UubmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgICAuLi5zdGVwcy5yZWR1Y2UoKGFjYywgc3RlcCkgPT4gKHsgLi4uYWNjLCAuLi5zdGVwLmVudiB9KSwge30pLFxuICAgICAgICB9LFxuICAgICAgICBwZXJtaXNzaW9uczogbWVyZ2VKb2JQZXJtaXNzaW9ucyh7XG4gICAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgfSwgLi4uKHN0ZXBzLmZsYXRNYXAocyA9PiBzLnBlcm1pc3Npb25zKS5maWx0ZXIocCA9PiBwICE9IHVuZGVmaW5lZCkgYXMgSm9iUGVybWlzc2lvbnNbXSkpLFxuICAgICAgICBzdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9jaGVja291dEB2NCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5zdGVwcy5mbGF0TWFwKHMgPT4gcy5zdGVwcyksXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0ZURlcGxveUpvYih0aGlzLmRlcGxveW1lbnRXb3JrZmxvdywgWy4uLih0aGlzLmRlcGxveW1lbnRTdGFnZXMubGVuZ3RoID4gMCA/IFtgZGVwbG95LSR7dGhpcy5kZXBsb3ltZW50U3RhZ2VzLmF0KC0xKSF9YF0gOiBbXSldLCBzdGFnZSk7XG4gICAgICB0aGlzLmRlcGxveW1lbnRTdGFnZXMucHVzaChzdGFnZS5uYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGxveUpvYih3b3JrZmxvdzogR2l0aHViV29ya2Zsb3csIGpvYkRlcGVuZGVuY2llczogc3RyaW5nW10sIHN0YWdlOiBOYW1lZFN0YWdlT3B0aW9ucykge1xuICAgIGNvbnN0IHN0ZXBzID0gW1xuICAgICAgbmV3IERvd25sb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICBuYW1lOiAnY2xvdWQtYXNzZW1ibHknLFxuICAgICAgICBwYXRoOiBgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS9gLFxuICAgICAgfSksXG4gICAgICB0aGlzLnByb3ZpZGVJbnN0YWxsU3RlcCgpLFxuICAgICAgdGhpcy5wcm92aWRlRGVwbG95U3RlcChzdGFnZSksXG4gICAgICBuZXcgVXBsb2FkQXJ0aWZhY3RTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICBuYW1lOiBgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfWAsXG4gICAgICAgIHBhdGg6IGBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9Lmpzb25gLFxuICAgICAgfSksXG4gICAgXS5tYXAocyA9PiBzLnRvR2l0aHViKCkpO1xuXG4gICAgLy8gQWRkIGRlcGxveW1lbnQgdG8gQ0kvQ0Qgd29ya2Zsb3dcbiAgICB3b3JrZmxvdy5hZGRKb2IoYGRlcGxveS0ke3N0YWdlLm5hbWV9YCwge1xuICAgICAgbmFtZTogYERlcGxveSBzdGFnZSAke3N0YWdlLm5hbWV9IHRvIEFXU2AsXG4gICAgICAuLi50aGlzLm9wdGlvbnMudXNlR2l0aHViRW52aXJvbm1lbnRzICYmIHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IHN0YWdlLm5hbWUsXG4gICAgICB9LFxuICAgICAgbmVlZHM6IFsnYXNzZXRVcGxvYWQnLCAuLi5zdGVwcy5mbGF0TWFwKHMgPT4gcy5uZWVkcyksIC4uLmpvYkRlcGVuZGVuY2llc10sXG4gICAgICBydW5zT246IHRoaXMub3B0aW9ucy5ydW5uZXJUYWdzID8/IERFRkFVTFRfUlVOTkVSX1RBR1MsXG4gICAgICBlbnY6IHtcbiAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgLi4uc3RlcHMucmVkdWNlKChhY2MsIHN0ZXApID0+ICh7IC4uLmFjYywgLi4uc3RlcC5lbnYgfSksIHt9KSxcbiAgICAgIH0sXG4gICAgICBwZXJtaXNzaW9uczogbWVyZ2VKb2JQZXJtaXNzaW9ucyh7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICB9LCAuLi4oc3RlcHMuZmxhdE1hcChzID0+IHMucGVybWlzc2lvbnMpLmZpbHRlcihwID0+IHAgIT0gdW5kZWZpbmVkKSBhcyBKb2JQZXJtaXNzaW9uc1tdKSksXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9jaGVja291dEB2NCcsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnN0ZXBzLmZsYXRNYXAocyA9PiBzLnN0ZXBzKSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGpvYiB0byBkZXBsb3kgdGhlIENESyBhcHBsaWNhdGlvbiB0byBBV1MuXG4gICAqIEBwYXJhbSBzdGFnZSAtIFRoZSBpbmRlcGVuZGVudCBzdGFnZSB0byBjcmVhdGUuXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlSW5kZXBlbmRlbnREZXBsb3ltZW50KHN0YWdlOiBJbmRlcGVuZGVudFN0YWdlKTogdm9pZCB7XG4gICAgaWYgKHN0YWdlLmRlcGxveU9uUHVzaCB8fCB0aGlzLm9wdGlvbnMudXNlR2l0aHViRW52aXJvbm1lbnRzKSB7XG4gICAgICB0aGlzLmNyZWF0ZURlcGxveUpvYih0aGlzLmRlcGxveW1lbnRXb3JrZmxvdywgW10sIHN0YWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RlcHMgPSBbXG4gICAgICAgIHRoaXMucHJvdmlkZUluc3RhbGxTdGVwKCksXG4gICAgICAgIHRoaXMucHJvdmlkZVN5bnRoU3RlcCgpLFxuICAgICAgICB0aGlzLnByb3ZpZGVEaWZmU3RlcChzdGFnZSksXG4gICAgICAgIHRoaXMucHJvdmlkZURlcGxveVN0ZXAoc3RhZ2UpLFxuXG4gICAgICAgIG5ldyBVcGxvYWRBcnRpZmFjdFN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgICAgbmFtZTogYGNkay1vdXRwdXRzLSR7c3RhZ2UubmFtZX1gLFxuICAgICAgICAgIHBhdGg6IGBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9Lmpzb25gLFxuICAgICAgICB9KSxcbiAgICAgIF0ubWFwKHMgPT4gcy50b0dpdGh1YigpKTtcblxuICAgICAgLy8gQ3JlYXRlIG5ldyB3b3JrZmxvdyBmb3IgZGVwbG95bWVudFxuICAgICAgY29uc3Qgc3RhZ2VXb3JrZmxvdyA9IHRoaXMuYXBwLmdpdGh1YiEuYWRkV29ya2Zsb3coYGRlcGxveS0ke3N0YWdlLm5hbWV9YCk7XG4gICAgICBzdGFnZVdvcmtmbG93Lm9uKHtcbiAgICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge30sXG4gICAgICB9KTtcbiAgICAgIHN0YWdlV29ya2Zsb3cuYWRkSm9iKCdkZXBsb3knLCB7XG4gICAgICAgIG5hbWU6IGBSZWxlYXNlIHN0YWdlICR7c3RhZ2UubmFtZX0gdG8gQVdTYCxcbiAgICAgICAgbmVlZHM6IHN0ZXBzLmZsYXRNYXAocyA9PiBzLm5lZWRzKSxcbiAgICAgICAgcnVuc09uOiB0aGlzLm9wdGlvbnMucnVubmVyVGFncyA/PyBERUZBVUxUX1JVTk5FUl9UQUdTLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgICAgIC4uLnN0ZXBzLnJlZHVjZSgoYWNjLCBzdGVwKSA9PiAoeyAuLi5hY2MsIC4uLnN0ZXAuZW52IH0pLCB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHBlcm1pc3Npb25zOiBtZXJnZUpvYlBlcm1pc3Npb25zKHtcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICB9LCAuLi4oc3RlcHMuZmxhdE1hcChzID0+IHMucGVybWlzc2lvbnMpLmZpbHRlcihwID0+IHAgIT0gdW5kZWZpbmVkKSBhcyBKb2JQZXJtaXNzaW9uc1tdKSksXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0NoZWNrb3V0JyxcbiAgICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLnN0ZXBzLmZsYXRNYXAocyA9PiBzLnN0ZXBzKSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuXG4gICAgfVxuICB9XG59XG4iXX0=
|
package/lib/awscdk/gitlab.d.ts
CHANGED
|
@@ -1,31 +1,6 @@
|
|
|
1
1
|
import { awscdk, gitlab } from 'projen';
|
|
2
2
|
import { CDKPipeline, CDKPipelineOptions, DeploymentStage, IndependentStage } from './base';
|
|
3
3
|
import { PipelineEngine } from '../engine';
|
|
4
|
-
/**
|
|
5
|
-
* Configuration for IAM roles used within the GitLab CI/CD pipeline for various stages.
|
|
6
|
-
* Allows specifying different IAM roles for synthesis, asset publishing, and deployment stages,
|
|
7
|
-
* providing granular control over permissions.
|
|
8
|
-
*/
|
|
9
|
-
export interface GitlabIamRoleConfig {
|
|
10
|
-
/** Default IAM role ARN used if specific stage role is not provided. */
|
|
11
|
-
readonly default?: string;
|
|
12
|
-
/** IAM role ARN for the synthesis stage. */
|
|
13
|
-
readonly synth?: string;
|
|
14
|
-
/** IAM role ARN for the asset publishing step. */
|
|
15
|
-
readonly assetPublishing?: string;
|
|
16
|
-
/** IAM role ARN for the asset publishing step for a specific stage. */
|
|
17
|
-
readonly assetPublishingPerStage?: {
|
|
18
|
-
[stage: string]: string;
|
|
19
|
-
};
|
|
20
|
-
/** A map of stage names to IAM role ARNs for the diff operation. */
|
|
21
|
-
readonly diff?: {
|
|
22
|
-
[stage: string]: string;
|
|
23
|
-
};
|
|
24
|
-
/** A map of stage names to IAM role ARNs for the deployment operation. */
|
|
25
|
-
readonly deployment?: {
|
|
26
|
-
[stage: string]: string;
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
4
|
/**
|
|
30
5
|
* Configuration for GitLab runner tags used within the CI/CD pipeline for various stages.
|
|
31
6
|
* This allows for specifying different runners based on the tags for different stages of the pipeline.
|
|
@@ -50,8 +25,6 @@ export interface GitlabRunnerTags {
|
|
|
50
25
|
* Options for configuring the GitLab CDK pipeline, extending the base CDK pipeline options.
|
|
51
26
|
*/
|
|
52
27
|
export interface GitlabCDKPipelineOptions extends CDKPipelineOptions {
|
|
53
|
-
/** IAM role ARNs configuration for the pipeline. */
|
|
54
|
-
readonly iamRoleArns: GitlabIamRoleConfig;
|
|
55
28
|
/** Runner tags configuration for the pipeline. */
|
|
56
29
|
readonly runnerTags?: GitlabRunnerTags;
|
|
57
30
|
/** The Docker image to use for running the pipeline jobs. */
|