@jjrawlins/cdk-diff-pr-github-action 0.0.71 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +982 -56
- package/API.md +1132 -186
- package/README.md +194 -14
- package/lib/CdkDiffIamTemplate.d.ts +36 -3
- package/lib/CdkDiffIamTemplate.js +116 -87
- package/lib/CdkDiffIamTemplateStackSet.d.ts +149 -0
- package/lib/CdkDiffIamTemplateStackSet.js +373 -0
- package/lib/CdkDiffStackWorkflow.js +1 -1
- package/lib/CdkDriftDetectionWorkflow.js +1 -1
- package/lib/CdkDriftIamTemplate.d.ts +36 -3
- package/lib/CdkDriftIamTemplate.js +92 -63
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/node_modules/@aws-sdk/client-sso/package.json +9 -9
- package/node_modules/@aws-sdk/core/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-env/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-http/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +12 -12
- package/node_modules/@aws-sdk/credential-provider-login/package.json +6 -6
- package/node_modules/@aws-sdk/credential-provider-node/package.json +10 -10
- package/node_modules/@aws-sdk/credential-provider-process/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +7 -7
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +6 -6
- package/node_modules/@aws-sdk/middleware-host-header/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-logger/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-recursion-detection/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-user-agent/package.json +5 -5
- package/node_modules/@aws-sdk/nested-clients/package.json +9 -9
- package/node_modules/@aws-sdk/region-config-resolver/package.json +4 -4
- package/node_modules/@aws-sdk/token-providers/package.json +3 -3
- package/node_modules/@aws-sdk/types/package.json +3 -3
- package/node_modules/@aws-sdk/util-locate-window/package.json +3 -3
- package/node_modules/@aws-sdk/util-user-agent-browser/package.json +4 -4
- package/node_modules/@aws-sdk/util-user-agent-node/package.json +5 -5
- package/node_modules/@aws-sdk/xml-builder/package.json +3 -3
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
# cdk-diff-pr-github-action
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A library that provides GitHub workflows and IAM templates for:
|
|
4
4
|
- Creating CloudFormation Change Sets for your CDK stacks on pull requests and commenting a formatted diff back on the PR.
|
|
5
5
|
- Detecting CloudFormation drift on a schedule or manual trigger and producing a consolidated summary (optionally creating an issue).
|
|
6
|
+
- Deploying IAM roles across AWS Organizations using StackSets.
|
|
6
7
|
|
|
7
8
|
It also provides ready‑to‑deploy IAM templates with the minimal permissions required for each workflow.
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
**Works with or without Projen** — The StackSet generator can be used standalone in any Node.js project.
|
|
11
|
+
|
|
12
|
+
This package exposes five constructs:
|
|
10
13
|
|
|
11
14
|
- `CdkDiffStackWorkflow` — Generates one GitHub Actions workflow per stack to create a change set and render the diff back to the PR and Step Summary.
|
|
12
15
|
- `CdkDiffIamTemplate` — Emits a CloudFormation template file with minimal permissions for the Change Set workflow.
|
|
13
16
|
- `CdkDriftDetectionWorkflow` — Generates a GitHub Actions workflow to detect CloudFormation drift per stack, upload machine‑readable results, and aggregate a summary.
|
|
14
17
|
- `CdkDriftIamTemplate` — Emits a CloudFormation template file with minimal permissions for the Drift Detection workflow.
|
|
18
|
+
- `CdkDiffIamTemplateStackSet` — Creates a CloudFormation StackSet template for org-wide deployment of GitHub OIDC and IAM roles (Projen integration).
|
|
19
|
+
- `CdkDiffIamTemplateStackSetGenerator` — Pure generator class for StackSet templates (no Projen dependency).
|
|
15
20
|
|
|
16
21
|
## Quick start
|
|
17
22
|
|
|
@@ -102,7 +107,9 @@ If neither top‑level OIDC defaults nor all per‑stack values are supplied, th
|
|
|
102
107
|
|
|
103
108
|
## Usage: CdkDiffIamTemplate
|
|
104
109
|
|
|
105
|
-
Emit an example IAM template you can deploy in your account for the Change Set workflow
|
|
110
|
+
Emit an example IAM template you can deploy in your account for the Change Set workflow.
|
|
111
|
+
|
|
112
|
+
### With Projen
|
|
106
113
|
|
|
107
114
|
```ts
|
|
108
115
|
import { awscdk } from 'projen';
|
|
@@ -124,7 +131,33 @@ new CdkDiffIamTemplate({
|
|
|
124
131
|
project.synth();
|
|
125
132
|
```
|
|
126
133
|
|
|
127
|
-
|
|
134
|
+
A Projen task is also added:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
npx projen deploy-cdkdiff-iam-template -- --parameter-overrides GitHubOIDCRoleArn=... # plus any extra AWS CLI args
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Without Projen (Standalone Generator)
|
|
141
|
+
|
|
142
|
+
```ts
|
|
143
|
+
import { CdkDiffIamTemplateGenerator } from '@jjrawlins/cdk-diff-pr-github-action';
|
|
144
|
+
import * as fs from 'fs';
|
|
145
|
+
|
|
146
|
+
const template = CdkDiffIamTemplateGenerator.generateTemplate({
|
|
147
|
+
roleName: 'cdk-diff-role',
|
|
148
|
+
oidcRoleArn: 'arn:aws:iam::123456789012:role/github-oidc-role',
|
|
149
|
+
oidcRegion: 'us-east-1',
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
fs.writeFileSync('cdk-diff-iam-template.yaml', template);
|
|
153
|
+
|
|
154
|
+
// Get the deploy command
|
|
155
|
+
const deployCmd = CdkDiffIamTemplateGenerator.generateDeployCommand('cdk-diff-iam-template.yaml');
|
|
156
|
+
console.log('Deploy with:', deployCmd);
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### What the template defines
|
|
160
|
+
|
|
128
161
|
- Parameter `GitHubOIDCRoleArn` with a default from `oidcRoleArn` — the ARN of your existing GitHub OIDC role allowed to assume the change set role.
|
|
129
162
|
- IAM role `CdkChangesetRole` with minimal permissions for:
|
|
130
163
|
- CloudFormation Change Set operations
|
|
@@ -132,12 +165,6 @@ This writes `cdk-diff-workflow-iam-template.yaml` at the project root (or your c
|
|
|
132
165
|
- `iam:PassRole` to `cloudformation.amazonaws.com`
|
|
133
166
|
- Outputs exporting the role name and ARN.
|
|
134
167
|
|
|
135
|
-
A Projen task is also added:
|
|
136
|
-
|
|
137
|
-
```bash
|
|
138
|
-
npx projen deploy-cdkdiff-iam-template -- --parameter-overrides GitHubOIDCRoleArn=... # plus any extra AWS CLI args
|
|
139
|
-
```
|
|
140
|
-
|
|
141
168
|
Use the created role ARN as `changesetRoleToAssumeArn` in `CdkDiffStackWorkflow`.
|
|
142
169
|
|
|
143
170
|
---
|
|
@@ -276,7 +303,9 @@ Details:
|
|
|
276
303
|
|
|
277
304
|
## Usage: CdkDriftIamTemplate
|
|
278
305
|
|
|
279
|
-
Emit an example IAM template you can deploy in your account for the Drift Detection workflow
|
|
306
|
+
Emit an example IAM template you can deploy in your account for the Drift Detection workflow.
|
|
307
|
+
|
|
308
|
+
### With Projen
|
|
280
309
|
|
|
281
310
|
```ts
|
|
282
311
|
import { awscdk } from 'projen';
|
|
@@ -298,17 +327,168 @@ new CdkDriftIamTemplate({
|
|
|
298
327
|
project.synth();
|
|
299
328
|
```
|
|
300
329
|
|
|
301
|
-
|
|
330
|
+
A Projen task is also added:
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
npx projen deploy-cdkdrift-iam-template -- --parameter-overrides GitHubOIDCRoleArn=... # plus any extra AWS CLI args
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
### Without Projen (Standalone Generator)
|
|
337
|
+
|
|
338
|
+
```ts
|
|
339
|
+
import { CdkDriftIamTemplateGenerator } from '@jjrawlins/cdk-diff-pr-github-action';
|
|
340
|
+
import * as fs from 'fs';
|
|
341
|
+
|
|
342
|
+
const template = CdkDriftIamTemplateGenerator.generateTemplate({
|
|
343
|
+
roleName: 'cdk-drift-role',
|
|
344
|
+
oidcRoleArn: 'arn:aws:iam::123456789012:role/github-oidc-role',
|
|
345
|
+
oidcRegion: 'us-east-1',
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
fs.writeFileSync('cdk-drift-iam-template.yaml', template);
|
|
349
|
+
|
|
350
|
+
// Get the deploy command
|
|
351
|
+
const deployCmd = CdkDriftIamTemplateGenerator.generateDeployCommand('cdk-drift-iam-template.yaml');
|
|
352
|
+
console.log('Deploy with:', deployCmd);
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### What the template defines
|
|
356
|
+
|
|
302
357
|
- Parameter `GitHubOIDCRoleArn` with a default from `oidcRoleArn` — the ARN of your existing GitHub OIDC role allowed to assume this drift role.
|
|
303
358
|
- IAM role `CdkDriftRole` with minimal permissions for CloudFormation drift detection operations.
|
|
304
359
|
- Outputs exporting the role name and ARN.
|
|
305
360
|
|
|
306
|
-
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## Usage: CdkDiffIamTemplateStackSet (Org-Wide Deployment)
|
|
364
|
+
|
|
365
|
+
`CdkDiffIamTemplateStackSet` creates a CloudFormation StackSet template for deploying GitHub OIDC provider, OIDC role, and CDK diff/drift IAM roles across an entire AWS Organization. This is the recommended approach for organizations that want to enable CDK diff/drift workflows across multiple accounts.
|
|
366
|
+
|
|
367
|
+
### Architecture
|
|
368
|
+
|
|
369
|
+
Each account in your organization gets:
|
|
370
|
+
- **GitHub OIDC Provider** — Authenticates GitHub Actions workflows
|
|
371
|
+
- **GitHubOIDCRole** — Trusts the OIDC provider with repo/branch restrictions
|
|
372
|
+
- **CdkChangesetRole** — For PR change set previews (trusts GitHubOIDCRole)
|
|
373
|
+
- **CdkDriftRole** — For drift detection (trusts GitHubOIDCRole)
|
|
374
|
+
|
|
375
|
+
This is a self-contained deployment with **no role chaining required**.
|
|
376
|
+
|
|
377
|
+
### With Projen
|
|
307
378
|
|
|
379
|
+
```ts
|
|
380
|
+
import { awscdk } from 'projen';
|
|
381
|
+
import { CdkDiffIamTemplateStackSet } from '@jjrawlins/cdk-diff-pr-github-action';
|
|
382
|
+
|
|
383
|
+
const project = new awscdk.AwsCdkConstructLibrary({ /* ... */ });
|
|
384
|
+
|
|
385
|
+
new CdkDiffIamTemplateStackSet({
|
|
386
|
+
project,
|
|
387
|
+
githubOidc: {
|
|
388
|
+
owner: 'my-org', // GitHub org or username
|
|
389
|
+
repositories: ['infra-repo', 'app-repo'], // Repos allowed to assume roles
|
|
390
|
+
branches: ['main', 'release/*'], // Branch patterns (default: ['*'])
|
|
391
|
+
},
|
|
392
|
+
targetOrganizationalUnitIds: ['ou-xxxx-xxxxxxxx'], // Target OUs
|
|
393
|
+
regions: ['us-east-1', 'eu-west-1'], // Target regions
|
|
394
|
+
// Optional settings:
|
|
395
|
+
// oidcRoleName: 'GitHubOIDCRole', // default
|
|
396
|
+
// changesetRoleName: 'CdkChangesetRole', // default
|
|
397
|
+
// driftRoleName: 'CdkDriftRole', // default
|
|
398
|
+
// roleSelection: StackSetRoleSelection.BOTH, // BOTH, CHANGESET_ONLY, or DRIFT_ONLY
|
|
399
|
+
// delegatedAdmin: true, // Use --call-as DELEGATED_ADMIN (default: true)
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
project.synth();
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
This creates:
|
|
406
|
+
- `cdk-diff-workflow-stackset-template.yaml` — CloudFormation template
|
|
407
|
+
- Projen tasks for StackSet management
|
|
408
|
+
|
|
409
|
+
**Projen tasks:**
|
|
308
410
|
```bash
|
|
309
|
-
npx projen
|
|
411
|
+
npx projen stackset-create # Create the StackSet
|
|
412
|
+
npx projen stackset-update # Update the StackSet template
|
|
413
|
+
npx projen stackset-deploy-instances # Deploy to target OUs/regions
|
|
414
|
+
npx projen stackset-delete-instances # Remove stack instances
|
|
415
|
+
npx projen stackset-delete # Delete the StackSet
|
|
416
|
+
npx projen stackset-describe # Show StackSet status
|
|
417
|
+
npx projen stackset-list-instances # List all instances
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Without Projen (Standalone Generator)
|
|
421
|
+
|
|
422
|
+
For non-Projen projects, use `CdkDiffIamTemplateStackSetGenerator` directly:
|
|
423
|
+
|
|
424
|
+
```ts
|
|
425
|
+
import {
|
|
426
|
+
CdkDiffIamTemplateStackSetGenerator
|
|
427
|
+
} from '@jjrawlins/cdk-diff-pr-github-action';
|
|
428
|
+
import * as fs from 'fs';
|
|
429
|
+
|
|
430
|
+
// Generate the CloudFormation template
|
|
431
|
+
const template = CdkDiffIamTemplateStackSetGenerator.generateTemplate({
|
|
432
|
+
githubOidc: {
|
|
433
|
+
owner: 'my-org',
|
|
434
|
+
repositories: ['infra-repo'],
|
|
435
|
+
branches: ['main'],
|
|
436
|
+
},
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
// Write to file
|
|
440
|
+
fs.writeFileSync('stackset-template.yaml', template);
|
|
441
|
+
|
|
442
|
+
// Get AWS CLI commands for StackSet operations
|
|
443
|
+
const commands = CdkDiffIamTemplateStackSetGenerator.generateCommands({
|
|
444
|
+
stackSetName: 'cdk-diff-workflow-iam-stackset',
|
|
445
|
+
templatePath: 'stackset-template.yaml',
|
|
446
|
+
targetOrganizationalUnitIds: ['ou-xxxx-xxxxxxxx'],
|
|
447
|
+
regions: ['us-east-1'],
|
|
448
|
+
});
|
|
449
|
+
|
|
450
|
+
console.log('Create StackSet:', commands['stackset-create']);
|
|
451
|
+
console.log('Deploy instances:', commands['stackset-deploy-instances']);
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### GitHub Actions Workflow (Simplified)
|
|
455
|
+
|
|
456
|
+
With per-account OIDC, your workflow is simplified — no role chaining needed:
|
|
457
|
+
|
|
458
|
+
```yaml
|
|
459
|
+
jobs:
|
|
460
|
+
diff:
|
|
461
|
+
runs-on: ubuntu-latest
|
|
462
|
+
permissions:
|
|
463
|
+
id-token: write
|
|
464
|
+
contents: read
|
|
465
|
+
steps:
|
|
466
|
+
- uses: actions/checkout@v4
|
|
467
|
+
|
|
468
|
+
- uses: aws-actions/configure-aws-credentials@v4
|
|
469
|
+
with:
|
|
470
|
+
role-to-assume: arn:aws:iam::${{ env.ACCOUNT_ID }}:role/GitHubOIDCRole
|
|
471
|
+
aws-region: us-east-1
|
|
472
|
+
|
|
473
|
+
- name: Assume Changeset Role
|
|
474
|
+
run: |
|
|
475
|
+
CREDS=$(aws sts assume-role \
|
|
476
|
+
--role-arn arn:aws:iam::${{ env.ACCOUNT_ID }}:role/CdkChangesetRole \
|
|
477
|
+
--role-session-name changeset-session)
|
|
478
|
+
# Export credentials...
|
|
310
479
|
```
|
|
311
480
|
|
|
481
|
+
### GitHubOidcConfig options
|
|
482
|
+
|
|
483
|
+
| Property | Description |
|
|
484
|
+
|----------|-------------|
|
|
485
|
+
| `owner` | GitHub organization or username (required) |
|
|
486
|
+
| `repositories` | Array of repo names, or `['*']` for all repos (required) |
|
|
487
|
+
| `branches` | Array of branch patterns (default: `['*']`) |
|
|
488
|
+
| `additionalClaims` | Extra OIDC claims like `['pull_request', 'environment:production']` |
|
|
489
|
+
|
|
490
|
+
---
|
|
491
|
+
|
|
312
492
|
## Testing
|
|
313
493
|
|
|
314
494
|
This repository includes Jest tests that snapshot the synthesized outputs from Projen and assert that:
|
|
@@ -1,10 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Props for generating CDK Diff IAM templates (no Projen dependency)
|
|
3
|
+
*/
|
|
4
|
+
export interface CdkDiffIamTemplateGeneratorProps {
|
|
5
|
+
/** Name for the IAM role */
|
|
3
6
|
readonly roleName: string;
|
|
4
|
-
|
|
7
|
+
/** ARN of the existing GitHub OIDC role that can assume this changeset role */
|
|
5
8
|
readonly oidcRoleArn: string;
|
|
9
|
+
/** Region for the OIDC trust condition */
|
|
6
10
|
readonly oidcRegion: string;
|
|
7
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Pure generator class for CDK Diff IAM templates.
|
|
14
|
+
* No Projen dependency - can be used in any project.
|
|
15
|
+
*/
|
|
16
|
+
export declare class CdkDiffIamTemplateGenerator {
|
|
17
|
+
/**
|
|
18
|
+
* Generate the CloudFormation IAM template as a YAML string.
|
|
19
|
+
*/
|
|
20
|
+
static generateTemplate(props: CdkDiffIamTemplateGeneratorProps): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate the AWS CLI deploy command for the IAM template.
|
|
23
|
+
*/
|
|
24
|
+
static generateDeployCommand(templatePath?: string): string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Props for the Projen-integrated CDK Diff IAM template construct
|
|
28
|
+
*/
|
|
29
|
+
export interface CdkDiffIamTemplateProps extends CdkDiffIamTemplateGeneratorProps {
|
|
30
|
+
/** Projen project instance */
|
|
31
|
+
readonly project: any;
|
|
32
|
+
/** Output path for the template file (default: 'cdk-diff-workflow-iam-template.yaml') */
|
|
33
|
+
readonly outputPath?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Projen construct that emits a CloudFormation template with minimal IAM permissions
|
|
37
|
+
* for the CDK Diff Stack Workflow.
|
|
38
|
+
*
|
|
39
|
+
* For non-Projen projects, use `CdkDiffIamTemplateGenerator` directly.
|
|
40
|
+
*/
|
|
8
41
|
export declare class CdkDiffIamTemplate {
|
|
9
42
|
constructor(props: CdkDiffIamTemplateProps);
|
|
10
43
|
}
|
|
@@ -1,101 +1,130 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
2
|
+
var _a, _b;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.CdkDiffIamTemplate = void 0;
|
|
4
|
+
exports.CdkDiffIamTemplate = exports.CdkDiffIamTemplateGenerator = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const projen_1 = require("projen");
|
|
7
|
+
/**
|
|
8
|
+
* Pure generator class for CDK Diff IAM templates.
|
|
9
|
+
* No Projen dependency - can be used in any project.
|
|
10
|
+
*/
|
|
11
|
+
class CdkDiffIamTemplateGenerator {
|
|
12
|
+
/**
|
|
13
|
+
* Generate the CloudFormation IAM template as a YAML string.
|
|
14
|
+
*/
|
|
15
|
+
static generateTemplate(props) {
|
|
16
|
+
const lines = [
|
|
17
|
+
"AWSTemplateFormatVersion: '2010-09-09'",
|
|
18
|
+
"Description: 'IAM role for CDK Diff Stack Workflow construct'",
|
|
19
|
+
'',
|
|
20
|
+
'Parameters:',
|
|
21
|
+
' GitHubOIDCRoleArn:',
|
|
22
|
+
' Type: String',
|
|
23
|
+
" Description: 'ARN of the existing GitHub OIDC role that can assume this changeset role'",
|
|
24
|
+
` Default: '${props.oidcRoleArn}'`,
|
|
25
|
+
'',
|
|
26
|
+
'Resources:',
|
|
27
|
+
' # CloudFormation ChangeSet Role - minimal permissions for changeset operations',
|
|
28
|
+
' CdkChangesetRole:',
|
|
29
|
+
' Type: AWS::IAM::Role',
|
|
30
|
+
' Properties:',
|
|
31
|
+
" RoleName: '" + props.roleName + "'",
|
|
32
|
+
' AssumeRolePolicyDocument:',
|
|
33
|
+
" Version: '2012-10-17'",
|
|
34
|
+
' Statement:',
|
|
35
|
+
' - Effect: Allow',
|
|
36
|
+
' Principal:',
|
|
37
|
+
' AWS: !Ref GitHubOIDCRoleArn',
|
|
38
|
+
' Action: sts:AssumeRole',
|
|
39
|
+
' Condition:',
|
|
40
|
+
' StringEquals:',
|
|
41
|
+
" aws:RequestedRegion: '" + props.oidcRegion + "'",
|
|
42
|
+
' Policies:',
|
|
43
|
+
' - PolicyName: CloudFormationChangeSetAccess',
|
|
44
|
+
' PolicyDocument:',
|
|
45
|
+
" Version: '2012-10-17'",
|
|
46
|
+
' Statement:',
|
|
47
|
+
' # CloudFormation changeset operations',
|
|
48
|
+
' - Effect: Allow',
|
|
49
|
+
' Action:',
|
|
50
|
+
' - cloudformation:CreateChangeSet',
|
|
51
|
+
' - cloudformation:DescribeChangeSet',
|
|
52
|
+
' - cloudformation:DeleteChangeSet',
|
|
53
|
+
' - cloudformation:ListChangeSets',
|
|
54
|
+
' - cloudformation:DescribeStacks',
|
|
55
|
+
" Resource: '*'",
|
|
56
|
+
' # CDK bootstrap bucket access (for changeset creation)',
|
|
57
|
+
' - Effect: Allow',
|
|
58
|
+
' Action:',
|
|
59
|
+
' - s3:GetObject',
|
|
60
|
+
' - s3:PutObject',
|
|
61
|
+
' - s3:DeleteObject',
|
|
62
|
+
' - s3:ListBucket',
|
|
63
|
+
' Resource:',
|
|
64
|
+
" - !Sub 'arn:aws:s3:::cdk-${AWS::AccountId}-${AWS::Region}-*'",
|
|
65
|
+
" - !Sub 'arn:aws:s3:::cdk-${AWS::AccountId}-${AWS::Region}-*/*'",
|
|
66
|
+
' # CDK bootstrap parameter access',
|
|
67
|
+
' - Effect: Allow',
|
|
68
|
+
' Action:',
|
|
69
|
+
' - ssm:GetParameter',
|
|
70
|
+
' - ssm:GetParameters',
|
|
71
|
+
' - ssm:GetParametersByPath',
|
|
72
|
+
" Resource: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/cdk-bootstrap/*'",
|
|
73
|
+
' # IAM PassRole for CDK operations',
|
|
74
|
+
' - Effect: Allow',
|
|
75
|
+
' Action:',
|
|
76
|
+
' - iam:PassRole',
|
|
77
|
+
" Resource: '*'",
|
|
78
|
+
' Condition:',
|
|
79
|
+
' StringEquals:',
|
|
80
|
+
" 'iam:PassedToService': 'cloudformation.amazonaws.com'",
|
|
81
|
+
'',
|
|
82
|
+
'Outputs:',
|
|
83
|
+
' CdkChangesetRoleArn:',
|
|
84
|
+
" Description: 'ARN of the CDK changeset role'",
|
|
85
|
+
' Value: !GetAtt CdkChangesetRole.Arn',
|
|
86
|
+
' Export:',
|
|
87
|
+
" Name: !Sub '${AWS::StackName}-CdkChangesetRoleArn'",
|
|
88
|
+
'',
|
|
89
|
+
' CdkChangesetRoleName:',
|
|
90
|
+
" Description: 'Name of the CDK changeset role'",
|
|
91
|
+
' Value: !Ref CdkChangesetRole',
|
|
92
|
+
' Export:',
|
|
93
|
+
" Name: !Sub '${AWS::StackName}-CdkChangesetRoleName'",
|
|
94
|
+
];
|
|
95
|
+
return lines.join('\n');
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Generate the AWS CLI deploy command for the IAM template.
|
|
99
|
+
*/
|
|
100
|
+
static generateDeployCommand(templatePath = 'cdk-diff-workflow-iam-template.yaml') {
|
|
101
|
+
return `aws cloudformation deploy --template-file ${templatePath} --stack-name cdk-diff-workflow-iam-role --capabilities CAPABILITY_NAMED_IAM`;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.CdkDiffIamTemplateGenerator = CdkDiffIamTemplateGenerator;
|
|
105
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
106
|
+
CdkDiffIamTemplateGenerator[_a] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplateGenerator", version: "1.0.0" };
|
|
107
|
+
/**
|
|
108
|
+
* Projen construct that emits a CloudFormation template with minimal IAM permissions
|
|
109
|
+
* for the CDK Diff Stack Workflow.
|
|
110
|
+
*
|
|
111
|
+
* For non-Projen projects, use `CdkDiffIamTemplateGenerator` directly.
|
|
112
|
+
*/
|
|
7
113
|
class CdkDiffIamTemplate {
|
|
8
114
|
constructor(props) {
|
|
9
115
|
const outputPath = props.outputPath ?? 'cdk-diff-workflow-iam-template.yaml';
|
|
116
|
+
// Generate template using the generator
|
|
117
|
+
const template = CdkDiffIamTemplateGenerator.generateTemplate(props);
|
|
118
|
+
new projen_1.TextFile(props.project, outputPath, { lines: template.split('\n') });
|
|
119
|
+
// Add deploy task
|
|
10
120
|
props.project.addTask('deploy-cdkdiff-iam-template', {
|
|
11
121
|
description: 'Deploy the CDK Diff IAM template via CloudFormation (accepts extra AWS CLI args, e.g., --parameter-overrides Key=Value...)',
|
|
12
122
|
receiveArgs: true,
|
|
13
|
-
exec:
|
|
14
|
-
});
|
|
15
|
-
new projen_1.TextFile(props.project, outputPath, {
|
|
16
|
-
lines: [
|
|
17
|
-
"AWSTemplateFormatVersion: '2010-09-09'",
|
|
18
|
-
"Description: 'IAM role for CDK Diff Stack Workflow construct'",
|
|
19
|
-
'',
|
|
20
|
-
'Parameters:',
|
|
21
|
-
' GitHubOIDCRoleArn:',
|
|
22
|
-
' Type: String',
|
|
23
|
-
" Description: 'ARN of the existing GitHub OIDC role that can assume this changeset role'",
|
|
24
|
-
` Default: '${props.oidcRoleArn}'`,
|
|
25
|
-
'',
|
|
26
|
-
'Resources:',
|
|
27
|
-
' # CloudFormation ChangeSet Role - minimal permissions for changeset operations',
|
|
28
|
-
' CdkChangesetRole:',
|
|
29
|
-
' Type: AWS::IAM::Role',
|
|
30
|
-
' Properties:',
|
|
31
|
-
" RoleName: '" + props.roleName + "'",
|
|
32
|
-
' AssumeRolePolicyDocument:',
|
|
33
|
-
" Version: '2012-10-17'",
|
|
34
|
-
' Statement:',
|
|
35
|
-
' - Effect: Allow',
|
|
36
|
-
' Principal:',
|
|
37
|
-
' AWS: !Ref GitHubOIDCRoleArn',
|
|
38
|
-
' Action: sts:AssumeRole',
|
|
39
|
-
' Condition:',
|
|
40
|
-
' StringEquals:',
|
|
41
|
-
" aws:RequestedRegion: '" + props.oidcRegion + "'",
|
|
42
|
-
' Policies:',
|
|
43
|
-
' - PolicyName: CloudFormationChangeSetAccess',
|
|
44
|
-
' PolicyDocument:',
|
|
45
|
-
" Version: '2012-10-17'",
|
|
46
|
-
' Statement:',
|
|
47
|
-
' # CloudFormation changeset operations',
|
|
48
|
-
' - Effect: Allow',
|
|
49
|
-
' Action:',
|
|
50
|
-
' - cloudformation:CreateChangeSet',
|
|
51
|
-
' - cloudformation:DescribeChangeSet',
|
|
52
|
-
' - cloudformation:DeleteChangeSet',
|
|
53
|
-
' - cloudformation:ListChangeSets',
|
|
54
|
-
' - cloudformation:DescribeStacks',
|
|
55
|
-
" Resource: '*'",
|
|
56
|
-
' # CDK bootstrap bucket access (for changeset creation)',
|
|
57
|
-
' - Effect: Allow',
|
|
58
|
-
' Action:',
|
|
59
|
-
' - s3:GetObject',
|
|
60
|
-
' - s3:PutObject',
|
|
61
|
-
' - s3:DeleteObject',
|
|
62
|
-
' - s3:ListBucket',
|
|
63
|
-
' Resource:',
|
|
64
|
-
" - !Sub 'arn:aws:s3:::cdk-${AWS::AccountId}-${AWS::Region}-*'",
|
|
65
|
-
" - !Sub 'arn:aws:s3:::cdk-${AWS::AccountId}-${AWS::Region}-*/*'",
|
|
66
|
-
' # CDK bootstrap parameter access',
|
|
67
|
-
' - Effect: Allow',
|
|
68
|
-
' Action:',
|
|
69
|
-
' - ssm:GetParameter',
|
|
70
|
-
' - ssm:GetParameters',
|
|
71
|
-
' - ssm:GetParametersByPath',
|
|
72
|
-
" Resource: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/cdk-bootstrap/*'",
|
|
73
|
-
' # IAM PassRole for CDK operations',
|
|
74
|
-
' - Effect: Allow',
|
|
75
|
-
' Action:',
|
|
76
|
-
' - iam:PassRole',
|
|
77
|
-
" Resource: '*'",
|
|
78
|
-
' Condition:',
|
|
79
|
-
' StringEquals:',
|
|
80
|
-
" 'iam:PassedToService': 'cloudformation.amazonaws.com'",
|
|
81
|
-
'',
|
|
82
|
-
'Outputs:',
|
|
83
|
-
' CdkChangesetRoleArn:',
|
|
84
|
-
" Description: 'ARN of the CDK changeset role'",
|
|
85
|
-
' Value: !GetAtt CdkChangesetRole.Arn',
|
|
86
|
-
' Export:',
|
|
87
|
-
" Name: !Sub '${AWS::StackName}-CdkChangesetRoleArn'",
|
|
88
|
-
'',
|
|
89
|
-
' CdkChangesetRoleName:',
|
|
90
|
-
" Description: 'Name of the CDK changeset role'",
|
|
91
|
-
' Value: !Ref CdkChangesetRole',
|
|
92
|
-
' Export:',
|
|
93
|
-
" Name: !Sub '${AWS::StackName}-CdkChangesetRoleName'",
|
|
94
|
-
],
|
|
123
|
+
exec: CdkDiffIamTemplateGenerator.generateDeployCommand(outputPath),
|
|
95
124
|
});
|
|
96
125
|
}
|
|
97
126
|
}
|
|
98
127
|
exports.CdkDiffIamTemplate = CdkDiffIamTemplate;
|
|
99
|
-
|
|
100
|
-
CdkDiffIamTemplate[
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRGlmZklhbVRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Nka0RpZmZJYW1UZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFrQztBQVVsQyxNQUFhLGtCQUFrQjtJQUM3QixZQUFZLEtBQThCO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUkscUNBQXFDLENBQUM7UUFDN0UsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLEVBQUU7WUFDbkQsV0FBVyxFQUFFLDRIQUE0SDtZQUN6SSxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsNkNBQTZDLFVBQVUsOEVBQThFO1NBQzVJLENBQUMsQ0FBQztRQUVILElBQUksaUJBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRTtZQUN0QyxLQUFLLEVBQUU7Z0JBQ0wsd0NBQXdDO2dCQUN4QywrREFBK0Q7Z0JBQy9ELEVBQUU7Z0JBQ0YsYUFBYTtnQkFDYixzQkFBc0I7Z0JBQ3RCLGtCQUFrQjtnQkFDbEIsNkZBQTZGO2dCQUM3RixpQkFBaUIsS0FBSyxDQUFDLFdBQVcsR0FBRztnQkFDckMsRUFBRTtnQkFDRixZQUFZO2dCQUNaLGtGQUFrRjtnQkFDbEYscUJBQXFCO2dCQUNyQiwwQkFBMEI7Z0JBQzFCLGlCQUFpQjtnQkFDakIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHO2dCQUMxQyxpQ0FBaUM7Z0JBQ2pDLCtCQUErQjtnQkFDL0Isb0JBQW9CO2dCQUNwQiwyQkFBMkI7Z0JBQzNCLHdCQUF3QjtnQkFDeEIsMkNBQTJDO2dCQUMzQyxvQ0FBb0M7Z0JBQ3BDLHdCQUF3QjtnQkFDeEIsNkJBQTZCO2dCQUM3Qix3Q0FBd0MsR0FBRyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUc7Z0JBQ2pFLGlCQUFpQjtnQkFDakIscURBQXFEO2dCQUNyRCwyQkFBMkI7Z0JBQzNCLG1DQUFtQztnQkFDbkMsd0JBQXdCO2dCQUN4QixxREFBcUQ7Z0JBQ3JELCtCQUErQjtnQkFDL0IseUJBQXlCO2dCQUN6QixvREFBb0Q7Z0JBQ3BELHNEQUFzRDtnQkFDdEQsb0RBQW9EO2dCQUNwRCxtREFBbUQ7Z0JBQ25ELG1EQUFtRDtnQkFDbkQsK0JBQStCO2dCQUMvQixzRUFBc0U7Z0JBQ3RFLCtCQUErQjtnQkFDL0IseUJBQXlCO2dCQUN6QixrQ0FBa0M7Z0JBQ2xDLGtDQUFrQztnQkFDbEMscUNBQXFDO2dCQUNyQyxtQ0FBbUM7Z0JBQ25DLDJCQUEyQjtnQkFDM0IsZ0ZBQWdGO2dCQUNoRixrRkFBa0Y7Z0JBQ2xGLGdEQUFnRDtnQkFDaEQsK0JBQStCO2dCQUMvQix5QkFBeUI7Z0JBQ3pCLHNDQUFzQztnQkFDdEMsdUNBQXVDO2dCQUN2Qyw2Q0FBNkM7Z0JBQzdDLHlHQUF5RztnQkFDekcsaURBQWlEO2dCQUNqRCwrQkFBK0I7Z0JBQy9CLHlCQUF5QjtnQkFDekIsa0NBQWtDO2dCQUNsQywrQkFBK0I7Z0JBQy9CLDRCQUE0QjtnQkFDNUIsaUNBQWlDO2dCQUNqQywyRUFBMkU7Z0JBQzNFLEVBQUU7Z0JBQ0YsVUFBVTtnQkFDVix3QkFBd0I7Z0JBQ3hCLGtEQUFrRDtnQkFDbEQseUNBQXlDO2dCQUN6QyxhQUFhO2dCQUNiLDBEQUEwRDtnQkFDMUQsRUFBRTtnQkFDRix5QkFBeUI7Z0JBQ3pCLG1EQUFtRDtnQkFDbkQsa0NBQWtDO2dCQUNsQyxhQUFhO2dCQUNiLDJEQUEyRDthQUM1RDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBMUZILGdEQTJGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHRGaWxlIH0gZnJvbSAncHJvamVuJztcblxuZXhwb3J0IGludGVyZmFjZSBDZGtEaWZmSWFtVGVtcGxhdGVQcm9wcyB7XG4gIHJlYWRvbmx5IHByb2plY3Q6IGFueTtcbiAgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgb2lkY1JvbGVBcm46IHN0cmluZztcbiAgcmVhZG9ubHkgb2lkY1JlZ2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ2RrRGlmZklhbVRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IENka0RpZmZJYW1UZW1wbGF0ZVByb3BzKSB7XG4gICAgY29uc3Qgb3V0cHV0UGF0aCA9IHByb3BzLm91dHB1dFBhdGggPz8gJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJztcbiAgICBwcm9wcy5wcm9qZWN0LmFkZFRhc2soJ2RlcGxveS1jZGtkaWZmLWlhbS10ZW1wbGF0ZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGVwbG95IHRoZSBDREsgRGlmZiBJQU0gdGVtcGxhdGUgdmlhIENsb3VkRm9ybWF0aW9uIChhY2NlcHRzIGV4dHJhIEFXUyBDTEkgYXJncywgZS5nLiwgLS1wYXJhbWV0ZXItb3ZlcnJpZGVzIEtleT1WYWx1ZS4uLiknLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICBleGVjOiBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlcGxveSAtLXRlbXBsYXRlLWZpbGUgJHtvdXRwdXRQYXRofSAtLXN0YWNrLW5hbWUgY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXJvbGUgLS1jYXBhYmlsaXRpZXMgQ0FQQUJJTElUWV9OQU1FRF9JQU1gLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHByb3BzLnByb2plY3QsIG91dHB1dFBhdGgsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgIFwiQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uOiAnMjAxMC0wOS0wOSdcIixcbiAgICAgICAgXCJEZXNjcmlwdGlvbjogJ0lBTSByb2xlIGZvciBDREsgRGlmZiBTdGFjayBXb3JrZmxvdyBjb25zdHJ1Y3QnXCIsXG4gICAgICAgICcnLFxuICAgICAgICAnUGFyYW1ldGVyczonLFxuICAgICAgICAnICBHaXRIdWJPSURDUm9sZUFybjonLFxuICAgICAgICAnICAgIFR5cGU6IFN0cmluZycsXG4gICAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBleGlzdGluZyBHaXRIdWIgT0lEQyByb2xlIHRoYXQgY2FuIGFzc3VtZSB0aGlzIGNoYW5nZXNldCByb2xlJ1wiLFxuICAgICAgICBgICAgIERlZmF1bHQ6ICcke3Byb3BzLm9pZGNSb2xlQXJufSdgLFxuICAgICAgICAnJyxcbiAgICAgICAgJ1Jlc291cmNlczonLFxuICAgICAgICAnICAjIENsb3VkRm9ybWF0aW9uIENoYW5nZVNldCBSb2xlIC0gbWluaW1hbCBwZXJtaXNzaW9ucyBmb3IgY2hhbmdlc2V0IG9wZXJhdGlvbnMnLFxuICAgICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlOicsXG4gICAgICAgICcgICAgVHlwZTogQVdTOjpJQU06OlJvbGUnLFxuICAgICAgICAnICAgIFByb3BlcnRpZXM6JyxcbiAgICAgICAgXCIgICAgICBSb2xlTmFtZTogJ1wiICsgcHJvcHMucm9sZU5hbWUgKyBcIidcIixcbiAgICAgICAgJyAgICAgIEFzc3VtZVJvbGVQb2xpY3lEb2N1bWVudDonLFxuICAgICAgICBcIiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAgICcgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgICAnICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAgICcgICAgICAgICAgICBQcmluY2lwYWw6JyxcbiAgICAgICAgJyAgICAgICAgICAgICAgQVdTOiAhUmVmIEdpdEh1Yk9JRENSb2xlQXJuJyxcbiAgICAgICAgJyAgICAgICAgICAgIEFjdGlvbjogc3RzOkFzc3VtZVJvbGUnLFxuICAgICAgICAnICAgICAgICAgICAgQ29uZGl0aW9uOicsXG4gICAgICAgICcgICAgICAgICAgICAgIFN0cmluZ0VxdWFsczonLFxuICAgICAgICBcIiAgICAgICAgICAgICAgICBhd3M6UmVxdWVzdGVkUmVnaW9uOiAnXCIgKyBwcm9wcy5vaWRjUmVnaW9uICsgXCInXCIsXG4gICAgICAgICcgICAgICBQb2xpY2llczonLFxuICAgICAgICAnICAgICAgICAtIFBvbGljeU5hbWU6IENsb3VkRm9ybWF0aW9uQ2hhbmdlU2V0QWNjZXNzJyxcbiAgICAgICAgJyAgICAgICAgICBQb2xpY3lEb2N1bWVudDonLFxuICAgICAgICBcIiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgICAnICAgICAgICAgICAgU3RhdGVtZW50OicsXG4gICAgICAgICcgICAgICAgICAgICAgICMgQ2xvdWRGb3JtYXRpb24gY2hhbmdlc2V0IG9wZXJhdGlvbnMnLFxuICAgICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpDcmVhdGVDaGFuZ2VTZXQnLFxuICAgICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZUNoYW5nZVNldCcsXG4gICAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkRlbGV0ZUNoYW5nZVNldCcsXG4gICAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkxpc3RDaGFuZ2VTZXRzJyxcbiAgICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja3MnLFxuICAgICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAgICcgICAgICAgICAgICAgICMgQ0RLIGJvb3RzdHJhcCBidWNrZXQgYWNjZXNzIChmb3IgY2hhbmdlc2V0IGNyZWF0aW9uKScsXG4gICAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkdldE9iamVjdCcsXG4gICAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOlB1dE9iamVjdCcsXG4gICAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkRlbGV0ZU9iamVjdCcsXG4gICAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOkxpc3RCdWNrZXQnLFxuICAgICAgICAnICAgICAgICAgICAgICAgIFJlc291cmNlOicsXG4gICAgICAgIFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259LSonXCIsXG4gICAgICAgIFwiICAgICAgICAgICAgICAgICAgLSAhU3ViICdhcm46YXdzOnMzOjo6Y2RrLSR7QVdTOjpBY2NvdW50SWR9LSR7QVdTOjpSZWdpb259LSovKidcIixcbiAgICAgICAgJyAgICAgICAgICAgICAgIyBDREsgYm9vdHN0cmFwIHBhcmFtZXRlciBhY2Nlc3MnLFxuICAgICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICAgJyAgICAgICAgICAgICAgICAgIC0gc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsXG4gICAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAhU3ViICdhcm46YXdzOnNzbToke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfTpwYXJhbWV0ZXIvY2RrLWJvb3RzdHJhcC8qJ1wiLFxuICAgICAgICAnICAgICAgICAgICAgICAjIElBTSBQYXNzUm9sZSBmb3IgQ0RLIG9wZXJhdGlvbnMnLFxuICAgICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgICAnICAgICAgICAgICAgICAgICAgLSBpYW06UGFzc1JvbGUnLFxuICAgICAgICBcIiAgICAgICAgICAgICAgICBSZXNvdXJjZTogJyonXCIsXG4gICAgICAgICcgICAgICAgICAgICAgICAgQ29uZGl0aW9uOicsXG4gICAgICAgICcgICAgICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6JyxcbiAgICAgICAgXCIgICAgICAgICAgICAgICAgICAgICdpYW06UGFzc2VkVG9TZXJ2aWNlJzogJ2Nsb3VkZm9ybWF0aW9uLmFtYXpvbmF3cy5jb20nXCIsXG4gICAgICAgICcnLFxuICAgICAgICAnT3V0cHV0czonLFxuICAgICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlQXJuOicsXG4gICAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBDREsgY2hhbmdlc2V0IHJvbGUnXCIsXG4gICAgICAgICcgICAgVmFsdWU6ICFHZXRBdHQgQ2RrQ2hhbmdlc2V0Um9sZS5Bcm4nLFxuICAgICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0NoYW5nZXNldFJvbGVBcm4nXCIsXG4gICAgICAgICcnLFxuICAgICAgICAnICBDZGtDaGFuZ2VzZXRSb2xlTmFtZTonLFxuICAgICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIENESyBjaGFuZ2VzZXQgcm9sZSdcIixcbiAgICAgICAgJyAgICBWYWx1ZTogIVJlZiBDZGtDaGFuZ2VzZXRSb2xlJyxcbiAgICAgICAgJyAgICBFeHBvcnQ6JyxcbiAgICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtDaGFuZ2VzZXRSb2xlTmFtZSdcIixcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
128
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
129
|
+
CdkDiffIamTemplate[_b] = { fqn: "@jjrawlins/cdk-diff-pr-github-action.CdkDiffIamTemplate", version: "1.0.0" };
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2RrRGlmZklhbVRlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Nka0RpZmZJYW1UZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFrQztBQWNsQzs7O0dBR0c7QUFDSCxNQUFhLDJCQUEyQjtJQUN0Qzs7T0FFRztJQUNILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUF1QztRQUM3RCxNQUFNLEtBQUssR0FBRztZQUNaLHdDQUF3QztZQUN4QywrREFBK0Q7WUFDL0QsRUFBRTtZQUNGLGFBQWE7WUFDYixzQkFBc0I7WUFDdEIsa0JBQWtCO1lBQ2xCLDZGQUE2RjtZQUM3RixpQkFBaUIsS0FBSyxDQUFDLFdBQVcsR0FBRztZQUNyQyxFQUFFO1lBQ0YsWUFBWTtZQUNaLGtGQUFrRjtZQUNsRixxQkFBcUI7WUFDckIsMEJBQTBCO1lBQzFCLGlCQUFpQjtZQUNqQixtQkFBbUIsR0FBRyxLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUc7WUFDMUMsaUNBQWlDO1lBQ2pDLCtCQUErQjtZQUMvQixvQkFBb0I7WUFDcEIsMkJBQTJCO1lBQzNCLHdCQUF3QjtZQUN4QiwyQ0FBMkM7WUFDM0Msb0NBQW9DO1lBQ3BDLHdCQUF3QjtZQUN4Qiw2QkFBNkI7WUFDN0Isd0NBQXdDLEdBQUcsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHO1lBQ2pFLGlCQUFpQjtZQUNqQixxREFBcUQ7WUFDckQsMkJBQTJCO1lBQzNCLG1DQUFtQztZQUNuQyx3QkFBd0I7WUFDeEIscURBQXFEO1lBQ3JELCtCQUErQjtZQUMvQix5QkFBeUI7WUFDekIsb0RBQW9EO1lBQ3BELHNEQUFzRDtZQUN0RCxvREFBb0Q7WUFDcEQsbURBQW1EO1lBQ25ELG1EQUFtRDtZQUNuRCwrQkFBK0I7WUFDL0Isc0VBQXNFO1lBQ3RFLCtCQUErQjtZQUMvQix5QkFBeUI7WUFDekIsa0NBQWtDO1lBQ2xDLGtDQUFrQztZQUNsQyxxQ0FBcUM7WUFDckMsbUNBQW1DO1lBQ25DLDJCQUEyQjtZQUMzQixnRkFBZ0Y7WUFDaEYsa0ZBQWtGO1lBQ2xGLGdEQUFnRDtZQUNoRCwrQkFBK0I7WUFDL0IseUJBQXlCO1lBQ3pCLHNDQUFzQztZQUN0Qyx1Q0FBdUM7WUFDdkMsNkNBQTZDO1lBQzdDLHlHQUF5RztZQUN6RyxpREFBaUQ7WUFDakQsK0JBQStCO1lBQy9CLHlCQUF5QjtZQUN6QixrQ0FBa0M7WUFDbEMsK0JBQStCO1lBQy9CLDRCQUE0QjtZQUM1QixpQ0FBaUM7WUFDakMsMkVBQTJFO1lBQzNFLEVBQUU7WUFDRixVQUFVO1lBQ1Ysd0JBQXdCO1lBQ3hCLGtEQUFrRDtZQUNsRCx5Q0FBeUM7WUFDekMsYUFBYTtZQUNiLDBEQUEwRDtZQUMxRCxFQUFFO1lBQ0YseUJBQXlCO1lBQ3pCLG1EQUFtRDtZQUNuRCxrQ0FBa0M7WUFDbEMsYUFBYTtZQUNiLDJEQUEyRDtTQUM1RCxDQUFDO1FBRUYsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxlQUF1QixxQ0FBcUM7UUFDdkYsT0FBTyw2Q0FBNkMsWUFBWSw4RUFBOEUsQ0FBQztJQUNqSixDQUFDOztBQTdGSCxrRUE4RkM7OztBQVlEOzs7OztHQUtHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0IsWUFBWSxLQUE4QjtRQUN4QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLHFDQUFxQyxDQUFDO1FBRTdFLHdDQUF3QztRQUN4QyxNQUFNLFFBQVEsR0FBRywyQkFBMkIsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRSxJQUFJLGlCQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekUsa0JBQWtCO1FBQ2xCLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFO1lBQ25ELFdBQVcsRUFDVCw0SEFBNEg7WUFDOUgsV0FBVyxFQUFFLElBQUk7WUFDakIsSUFBSSxFQUFFLDJCQUEyQixDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQztTQUNwRSxDQUFDLENBQUM7SUFDTCxDQUFDOztBQWZILGdEQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRleHRGaWxlIH0gZnJvbSAncHJvamVuJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgZ2VuZXJhdGluZyBDREsgRGlmZiBJQU0gdGVtcGxhdGVzIChubyBQcm9qZW4gZGVwZW5kZW5jeSlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3JQcm9wcyB7XG4gIC8qKiBOYW1lIGZvciB0aGUgSUFNIHJvbGUgKi9cbiAgcmVhZG9ubHkgcm9sZU5hbWU6IHN0cmluZztcbiAgLyoqIEFSTiBvZiB0aGUgZXhpc3RpbmcgR2l0SHViIE9JREMgcm9sZSB0aGF0IGNhbiBhc3N1bWUgdGhpcyBjaGFuZ2VzZXQgcm9sZSAqL1xuICByZWFkb25seSBvaWRjUm9sZUFybjogc3RyaW5nO1xuICAvKiogUmVnaW9uIGZvciB0aGUgT0lEQyB0cnVzdCBjb25kaXRpb24gKi9cbiAgcmVhZG9ubHkgb2lkY1JlZ2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFB1cmUgZ2VuZXJhdG9yIGNsYXNzIGZvciBDREsgRGlmZiBJQU0gdGVtcGxhdGVzLlxuICogTm8gUHJvamVuIGRlcGVuZGVuY3kgLSBjYW4gYmUgdXNlZCBpbiBhbnkgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvciB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgQ2xvdWRGb3JtYXRpb24gSUFNIHRlbXBsYXRlIGFzIGEgWUFNTCBzdHJpbmcuXG4gICAqL1xuICBzdGF0aWMgZ2VuZXJhdGVUZW1wbGF0ZShwcm9wczogQ2RrRGlmZklhbVRlbXBsYXRlR2VuZXJhdG9yUHJvcHMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgXCJBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb246ICcyMDEwLTA5LTA5J1wiLFxuICAgICAgXCJEZXNjcmlwdGlvbjogJ0lBTSByb2xlIGZvciBDREsgRGlmZiBTdGFjayBXb3JrZmxvdyBjb25zdHJ1Y3QnXCIsXG4gICAgICAnJyxcbiAgICAgICdQYXJhbWV0ZXJzOicsXG4gICAgICAnICBHaXRIdWJPSURDUm9sZUFybjonLFxuICAgICAgJyAgICBUeXBlOiBTdHJpbmcnLFxuICAgICAgXCIgICAgRGVzY3JpcHRpb246ICdBUk4gb2YgdGhlIGV4aXN0aW5nIEdpdEh1YiBPSURDIHJvbGUgdGhhdCBjYW4gYXNzdW1lIHRoaXMgY2hhbmdlc2V0IHJvbGUnXCIsXG4gICAgICBgICAgIERlZmF1bHQ6ICcke3Byb3BzLm9pZGNSb2xlQXJufSdgLFxuICAgICAgJycsXG4gICAgICAnUmVzb3VyY2VzOicsXG4gICAgICAnICAjIENsb3VkRm9ybWF0aW9uIENoYW5nZVNldCBSb2xlIC0gbWluaW1hbCBwZXJtaXNzaW9ucyBmb3IgY2hhbmdlc2V0IG9wZXJhdGlvbnMnLFxuICAgICAgJyAgQ2RrQ2hhbmdlc2V0Um9sZTonLFxuICAgICAgJyAgICBUeXBlOiBBV1M6OklBTTo6Um9sZScsXG4gICAgICAnICAgIFByb3BlcnRpZXM6JyxcbiAgICAgIFwiICAgICAgUm9sZU5hbWU6ICdcIiArIHByb3BzLnJvbGVOYW1lICsgXCInXCIsXG4gICAgICAnICAgICAgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnXCIsXG4gICAgICAnICAgICAgICBTdGF0ZW1lbnQ6JyxcbiAgICAgICcgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICBQcmluY2lwYWw6JyxcbiAgICAgICcgICAgICAgICAgICAgIEFXUzogIVJlZiBHaXRIdWJPSURDUm9sZUFybicsXG4gICAgICAnICAgICAgICAgICAgQWN0aW9uOiBzdHM6QXNzdW1lUm9sZScsXG4gICAgICAnICAgICAgICAgICAgQ29uZGl0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICBTdHJpbmdFcXVhbHM6JyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIGF3czpSZXF1ZXN0ZWRSZWdpb246ICdcIiArIHByb3BzLm9pZGNSZWdpb24gKyBcIidcIixcbiAgICAgICcgICAgICBQb2xpY2llczonLFxuICAgICAgJyAgICAgICAgLSBQb2xpY3lOYW1lOiBDbG91ZEZvcm1hdGlvbkNoYW5nZVNldEFjY2VzcycsXG4gICAgICAnICAgICAgICAgIFBvbGljeURvY3VtZW50OicsXG4gICAgICBcIiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3J1wiLFxuICAgICAgJyAgICAgICAgICAgIFN0YXRlbWVudDonLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDbG91ZEZvcm1hdGlvbiBjaGFuZ2VzZXQgb3BlcmF0aW9ucycsXG4gICAgICAnICAgICAgICAgICAgICAtIEVmZmVjdDogQWxsb3cnLFxuICAgICAgJyAgICAgICAgICAgICAgICBBY3Rpb246JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIGNsb3VkZm9ybWF0aW9uOkNyZWF0ZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZXNjcmliZUNoYW5nZVNldCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246TGlzdENoYW5nZVNldHMnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja3MnLFxuICAgICAgXCIgICAgICAgICAgICAgICAgUmVzb3VyY2U6ICcqJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDREsgYm9vdHN0cmFwIGJ1Y2tldCBhY2Nlc3MgKGZvciBjaGFuZ2VzZXQgY3JlYXRpb24pJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6R2V0T2JqZWN0JyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHMzOlB1dE9iamVjdCcsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzMzpEZWxldGVPYmplY3QnLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gczM6TGlzdEJ1Y2tldCcsXG4gICAgICAnICAgICAgICAgICAgICAgIFJlc291cmNlOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAgIC0gIVN1YiAnYXJuOmF3czpzMzo6OmNkay0ke0FXUzo6QWNjb3VudElkfS0ke0FXUzo6UmVnaW9ufS0qJ1wiLFxuICAgICAgXCIgICAgICAgICAgICAgICAgICAtICFTdWIgJ2Fybjphd3M6czM6OjpjZGstJHtBV1M6OkFjY291bnRJZH0tJHtBV1M6OlJlZ2lvbn0tKi8qJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgIyBDREsgYm9vdHN0cmFwIHBhcmFtZXRlciBhY2Nlc3MnLFxuICAgICAgJyAgICAgICAgICAgICAgLSBFZmZlY3Q6IEFsbG93JyxcbiAgICAgICcgICAgICAgICAgICAgICAgQWN0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgLSBzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXJzJyxcbiAgICAgICcgICAgICAgICAgICAgICAgICAtIHNzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAhU3ViICdhcm46YXdzOnNzbToke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfTpwYXJhbWV0ZXIvY2RrLWJvb3RzdHJhcC8qJ1wiLFxuICAgICAgJyAgICAgICAgICAgICAgIyBJQU0gUGFzc1JvbGUgZm9yIENESyBvcGVyYXRpb25zJyxcbiAgICAgICcgICAgICAgICAgICAgIC0gRWZmZWN0OiBBbGxvdycsXG4gICAgICAnICAgICAgICAgICAgICAgIEFjdGlvbjonLFxuICAgICAgJyAgICAgICAgICAgICAgICAgIC0gaWFtOlBhc3NSb2xlJyxcbiAgICAgIFwiICAgICAgICAgICAgICAgIFJlc291cmNlOiAnKidcIixcbiAgICAgICcgICAgICAgICAgICAgICAgQ29uZGl0aW9uOicsXG4gICAgICAnICAgICAgICAgICAgICAgICAgU3RyaW5nRXF1YWxzOicsXG4gICAgICBcIiAgICAgICAgICAgICAgICAgICAgJ2lhbTpQYXNzZWRUb1NlcnZpY2UnOiAnY2xvdWRmb3JtYXRpb24uYW1hem9uYXdzLmNvbSdcIixcbiAgICAgICcnLFxuICAgICAgJ091dHB1dHM6JyxcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGVBcm46JyxcbiAgICAgIFwiICAgIERlc2NyaXB0aW9uOiAnQVJOIG9mIHRoZSBDREsgY2hhbmdlc2V0IHJvbGUnXCIsXG4gICAgICAnICAgIFZhbHVlOiAhR2V0QXR0IENka0NoYW5nZXNldFJvbGUuQXJuJyxcbiAgICAgICcgICAgRXhwb3J0OicsXG4gICAgICBcIiAgICAgIE5hbWU6ICFTdWIgJyR7QVdTOjpTdGFja05hbWV9LUNka0NoYW5nZXNldFJvbGVBcm4nXCIsXG4gICAgICAnJyxcbiAgICAgICcgIENka0NoYW5nZXNldFJvbGVOYW1lOicsXG4gICAgICBcIiAgICBEZXNjcmlwdGlvbjogJ05hbWUgb2YgdGhlIENESyBjaGFuZ2VzZXQgcm9sZSdcIixcbiAgICAgICcgICAgVmFsdWU6ICFSZWYgQ2RrQ2hhbmdlc2V0Um9sZScsXG4gICAgICAnICAgIEV4cG9ydDonLFxuICAgICAgXCIgICAgICBOYW1lOiAhU3ViICcke0FXUzo6U3RhY2tOYW1lfS1DZGtDaGFuZ2VzZXRSb2xlTmFtZSdcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBBV1MgQ0xJIGRlcGxveSBjb21tYW5kIGZvciB0aGUgSUFNIHRlbXBsYXRlLlxuICAgKi9cbiAgc3RhdGljIGdlbmVyYXRlRGVwbG95Q29tbWFuZCh0ZW1wbGF0ZVBhdGg6IHN0cmluZyA9ICdjZGstZGlmZi13b3JrZmxvdy1pYW0tdGVtcGxhdGUueWFtbCcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlcGxveSAtLXRlbXBsYXRlLWZpbGUgJHt0ZW1wbGF0ZVBhdGh9IC0tc3RhY2stbmFtZSBjZGstZGlmZi13b3JrZmxvdy1pYW0tcm9sZSAtLWNhcGFiaWxpdGllcyBDQVBBQklMSVRZX05BTUVEX0lBTWA7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIFByb2plbi1pbnRlZ3JhdGVkIENESyBEaWZmIElBTSB0ZW1wbGF0ZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtEaWZmSWFtVGVtcGxhdGVQcm9wcyBleHRlbmRzIENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvclByb3BzIHtcbiAgLyoqIFByb2plbiBwcm9qZWN0IGluc3RhbmNlICovXG4gIHJlYWRvbmx5IHByb2plY3Q6IGFueTtcbiAgLyoqIE91dHB1dCBwYXRoIGZvciB0aGUgdGVtcGxhdGUgZmlsZSAoZGVmYXVsdDogJ2Nkay1kaWZmLXdvcmtmbG93LWlhbS10ZW1wbGF0ZS55YW1sJykgKi9cbiAgcmVhZG9ubHkgb3V0cHV0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9qZW4gY29uc3RydWN0IHRoYXQgZW1pdHMgYSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSB3aXRoIG1pbmltYWwgSUFNIHBlcm1pc3Npb25zXG4gKiBmb3IgdGhlIENESyBEaWZmIFN0YWNrIFdvcmtmbG93LlxuICpcbiAqIEZvciBub24tUHJvamVuIHByb2plY3RzLCB1c2UgYENka0RpZmZJYW1UZW1wbGF0ZUdlbmVyYXRvcmAgZGlyZWN0bHkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtEaWZmSWFtVGVtcGxhdGUge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogQ2RrRGlmZklhbVRlbXBsYXRlUHJvcHMpIHtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gcHJvcHMub3V0cHV0UGF0aCA/PyAnY2RrLWRpZmYtd29ya2Zsb3ctaWFtLXRlbXBsYXRlLnlhbWwnO1xuXG4gICAgLy8gR2VuZXJhdGUgdGVtcGxhdGUgdXNpbmcgdGhlIGdlbmVyYXRvclxuICAgIGNvbnN0IHRlbXBsYXRlID0gQ2RrRGlmZklhbVRlbXBsYXRlR2VuZXJhdG9yLmdlbmVyYXRlVGVtcGxhdGUocHJvcHMpO1xuICAgIG5ldyBUZXh0RmlsZShwcm9wcy5wcm9qZWN0LCBvdXRwdXRQYXRoLCB7IGxpbmVzOiB0ZW1wbGF0ZS5zcGxpdCgnXFxuJykgfSk7XG5cbiAgICAvLyBBZGQgZGVwbG95IHRhc2tcbiAgICBwcm9wcy5wcm9qZWN0LmFkZFRhc2soJ2RlcGxveS1jZGtkaWZmLWlhbS10ZW1wbGF0ZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnRGVwbG95IHRoZSBDREsgRGlmZiBJQU0gdGVtcGxhdGUgdmlhIENsb3VkRm9ybWF0aW9uIChhY2NlcHRzIGV4dHJhIEFXUyBDTEkgYXJncywgZS5nLiwgLS1wYXJhbWV0ZXItb3ZlcnJpZGVzIEtleT1WYWx1ZS4uLiknLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgICBleGVjOiBDZGtEaWZmSWFtVGVtcGxhdGVHZW5lcmF0b3IuZ2VuZXJhdGVEZXBsb3lDb21tYW5kKG91dHB1dFBhdGgpLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|