@rio-cloud/cdk-v2-constructs 6.2.1 → 6.3.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 +430 -1
- package/CHANGELOG.md +9 -0
- package/docs/API.md +646 -0
- package/lib/contributions/smart-route/gitlab-runner/autoscaling-runner.d.ts +46 -30
- package/lib/contributions/smart-route/gitlab-runner/autoscaling-runner.js +83 -60
- package/lib/contributions/smart-route/gitlab-runner/runner-roles.d.ts +1 -1
- package/lib/contributions/smart-route/gitlab-runner/runner-roles.js +31 -9
- package/lib/contributions/smart-route/gitlab-runner/spot-role.js +5 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/package.json +1 -1
- package/version.json +1 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Environment, Stack } from 'aws-cdk-lib';
|
|
2
2
|
import { InstanceType } from 'aws-cdk-lib/aws-ec2';
|
|
3
3
|
import { IRole } from 'aws-cdk-lib/aws-iam';
|
|
4
|
-
import {
|
|
4
|
+
import { IBucket } from 'aws-cdk-lib/aws-s3';
|
|
5
|
+
import { IStringParameter } from 'aws-cdk-lib/aws-ssm';
|
|
5
6
|
import { Construct } from 'constructs';
|
|
6
7
|
/**
|
|
7
8
|
* The GitLabRunnerProps require the VPC ID, a defined environment of account and region, optional
|
|
@@ -10,8 +11,9 @@ import { Construct } from 'constructs';
|
|
|
10
11
|
*/
|
|
11
12
|
export interface GitLabRunnerProps {
|
|
12
13
|
readonly env: Environment;
|
|
13
|
-
readonly runnersWorkerProps?: GitlabRunnerWorkerProps
|
|
14
|
+
readonly runnersWorkerProps?: GitlabRunnerWorkerProps;
|
|
14
15
|
readonly managerInstanceType?: InstanceType;
|
|
16
|
+
readonly cache: IBucket;
|
|
15
17
|
}
|
|
16
18
|
/**
|
|
17
19
|
* The GitlabRunnerWorkerProps interface provides a simplified GitLab Runner worker configuration
|
|
@@ -21,23 +23,23 @@ export interface GitLabRunnerProps {
|
|
|
21
23
|
*/
|
|
22
24
|
export interface GitlabRunnerWorkerProps {
|
|
23
25
|
/** The SSM StringParameter with the registered runner token */
|
|
24
|
-
token:
|
|
26
|
+
readonly token: IStringParameter;
|
|
25
27
|
/** The GitLab instance URL, either https://gitlab.cicd.man or https://gitlab.collaborationlayer-traton.com */
|
|
26
|
-
gitInstanceUrl: GitlabInstanceUrl;
|
|
28
|
+
readonly gitInstanceUrl: GitlabInstanceUrl;
|
|
27
29
|
/** The instance type for the runner worker */
|
|
28
|
-
instanceType: InstanceType;
|
|
30
|
+
readonly instanceType: InstanceType;
|
|
29
31
|
/** The desired max spot price */
|
|
30
|
-
spotPrice: number;
|
|
32
|
+
readonly spotPrice: number;
|
|
31
33
|
/** Whether to use spot instance or not, Requires ServiceLinked Role for EC2 Spot to be deployed in the account */
|
|
32
|
-
requestSpotPrice: boolean;
|
|
34
|
+
readonly requestSpotPrice: boolean;
|
|
33
35
|
/** The default role for the runner worker when spawned */
|
|
34
|
-
defaultWorkerRole: IRole;
|
|
36
|
+
readonly defaultWorkerRole: IRole;
|
|
35
37
|
/** The maximum number of builds for an instance before it has to be decommissioned. Default 10 */
|
|
36
|
-
maxBuilds?: number;
|
|
38
|
+
readonly maxBuilds?: number;
|
|
37
39
|
/** The maximum number of instances to keep idle for new incoming jobs. Default 5 */
|
|
38
|
-
maxIdleInstance?: number;
|
|
40
|
+
readonly maxIdleInstance?: number;
|
|
39
41
|
/** The maximum idle time seconds for an instance. Default 900 seconds */
|
|
40
|
-
maxIdleTime?: number;
|
|
42
|
+
readonly maxIdleTime?: number;
|
|
41
43
|
}
|
|
42
44
|
export type GitlabInstanceUrl = 'https://gitlab.cicd.man' | 'https://gitlab.collaborationlayer-traton.com';
|
|
43
45
|
/**
|
|
@@ -48,34 +50,48 @@ export type GitlabInstanceUrl = 'https://gitlab.cicd.man' | 'https://gitlab.coll
|
|
|
48
50
|
* minimal configuration with runner spot instance:
|
|
49
51
|
* ```ts
|
|
50
52
|
* new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
53
|
+
* const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
54
|
+
* enforceSSL: true,
|
|
55
|
+
* publicReadAccess: false,
|
|
56
|
+
* encryption: BucketEncryption.S3_MANAGED,
|
|
57
|
+
* lifecycleRules: [
|
|
58
|
+
* {
|
|
59
|
+
* enabled: true,
|
|
60
|
+
* expiration: Duration.days(30),
|
|
61
|
+
* },
|
|
62
|
+
* ],
|
|
63
|
+
* });
|
|
51
64
|
* new GitlabRunner(stack, 'GitLabRunner', {
|
|
52
|
-
* env: {account: '123456789012', region: 'eu-west-1'}
|
|
65
|
+
* env: {account: '123456789012', region: 'eu-west-1'},
|
|
66
|
+
* cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
53
67
|
* });
|
|
54
68
|
*```
|
|
55
69
|
* recommended:
|
|
56
70
|
* ```ts
|
|
57
71
|
* new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
58
72
|
* const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
|
|
73
|
+
* const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
74
|
+
* enforceSSL: true,
|
|
75
|
+
* publicReadAccess: false,
|
|
76
|
+
* encryption: BucketEncryption.S3_MANAGED,
|
|
77
|
+
* lifecycleRules: [
|
|
78
|
+
* {
|
|
79
|
+
* enabled: true,
|
|
80
|
+
* expiration: Duration.days(30),
|
|
81
|
+
* },
|
|
82
|
+
* ],
|
|
83
|
+
* });
|
|
59
84
|
* new GitlabRunner(stack, 'GitLabRunner', {
|
|
60
85
|
* env: {account: '123456789012', region: 'eu-west-1'},
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* {
|
|
71
|
-
* token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
|
|
72
|
-
* gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
73
|
-
* instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
|
|
74
|
-
* spotPrice: 0.044, // exemplary spot price
|
|
75
|
-
* requestSpotPrice: true,
|
|
76
|
-
* defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
77
|
-
* },
|
|
78
|
-
* ],
|
|
86
|
+
* cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
87
|
+
* runnersWorkerProps: {
|
|
88
|
+
* token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
|
|
89
|
+
* gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
90
|
+
* instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
|
|
91
|
+
* spotPrice: 0.2, // exemplary spot price
|
|
92
|
+
* requestSpotPrice: true,
|
|
93
|
+
* defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
94
|
+
* },
|
|
79
95
|
* });
|
|
80
96
|
* ```
|
|
81
97
|
*/
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var _a;
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.GitlabRunner = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
4
6
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
5
7
|
const cdk_autoscaling_gitlab_runner_1 = require("@pepperize/cdk-autoscaling-gitlab-runner");
|
|
6
8
|
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
@@ -15,34 +17,48 @@ const rio_landing_zone_1 = require("../../../rio-landing-zone");
|
|
|
15
17
|
* minimal configuration with runner spot instance:
|
|
16
18
|
* ```ts
|
|
17
19
|
* new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
20
|
+
* const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
21
|
+
* enforceSSL: true,
|
|
22
|
+
* publicReadAccess: false,
|
|
23
|
+
* encryption: BucketEncryption.S3_MANAGED,
|
|
24
|
+
* lifecycleRules: [
|
|
25
|
+
* {
|
|
26
|
+
* enabled: true,
|
|
27
|
+
* expiration: Duration.days(30),
|
|
28
|
+
* },
|
|
29
|
+
* ],
|
|
30
|
+
* });
|
|
18
31
|
* new GitlabRunner(stack, 'GitLabRunner', {
|
|
19
|
-
* env: {account: '123456789012', region: 'eu-west-1'}
|
|
32
|
+
* env: {account: '123456789012', region: 'eu-west-1'},
|
|
33
|
+
* cache: myBucket // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
20
34
|
* });
|
|
21
35
|
*```
|
|
22
36
|
* recommended:
|
|
23
37
|
* ```ts
|
|
24
38
|
* new SpotServiceLinkedRole(stack, 'SpotLinkedRole');
|
|
25
39
|
* const runnerRoles = new RunnerRoles(stack, 'RunnerRoles', {env: {account: '123456789012', region: 'eu-west-1'}});
|
|
40
|
+
* const myBucket = new Bucket(stack, 'MyShareRunnerCache', {
|
|
41
|
+
* enforceSSL: true,
|
|
42
|
+
* publicReadAccess: false,
|
|
43
|
+
* encryption: BucketEncryption.S3_MANAGED,
|
|
44
|
+
* lifecycleRules: [
|
|
45
|
+
* {
|
|
46
|
+
* enabled: true,
|
|
47
|
+
* expiration: Duration.days(30),
|
|
48
|
+
* },
|
|
49
|
+
* ],
|
|
50
|
+
* });
|
|
26
51
|
* new GitlabRunner(stack, 'GitLabRunner', {
|
|
27
52
|
* env: {account: '123456789012', region: 'eu-west-1'},
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* {
|
|
38
|
-
* token: myTokenForTaggedRunner2, // with this runner we want to run all generic jobs that do not require much processing power
|
|
39
|
-
* gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
40
|
-
* instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MEDIUM), // exemplary smaller runner
|
|
41
|
-
* spotPrice: 0.044, // exemplary spot price
|
|
42
|
-
* requestSpotPrice: true,
|
|
43
|
-
* defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
44
|
-
* },
|
|
45
|
-
* ],
|
|
53
|
+
* cache: myBucket // // use a S3 bucket without public access and a retention defined, use one cache bucket for all you runners
|
|
54
|
+
* runnersWorkerProps: {
|
|
55
|
+
* token: myTokenForTaggedRunner1, // with this runner we only want to run jobs that require more power
|
|
56
|
+
* gitInstanceUrl: 'https://gitlab.cicd.man', // or the Traton GitLab
|
|
57
|
+
* instanceType: InstanceType.of(InstanceClass.M7I_FLEX, InstanceSize.XLARGE), // exemplary larger runner
|
|
58
|
+
* spotPrice: 0.2, // exemplary spot price
|
|
59
|
+
* requestSpotPrice: true,
|
|
60
|
+
* defaultWorkerRole: runnerRoles.runnerBaseRole, // use the base role
|
|
61
|
+
* },
|
|
46
62
|
* });
|
|
47
63
|
* ```
|
|
48
64
|
*/
|
|
@@ -50,79 +66,86 @@ class GitlabRunner extends constructs_1.Construct {
|
|
|
50
66
|
constructor(scope, id, props) {
|
|
51
67
|
super(scope, id);
|
|
52
68
|
this.autoscalingConfig = [{
|
|
53
|
-
periods: ['* * 7-
|
|
69
|
+
periods: ['* * 7-22 * * mon-fri *'],
|
|
54
70
|
timezone: 'Europe/Berlin',
|
|
55
71
|
}];
|
|
56
72
|
const vpc = rio_landing_zone_1.RioLandingZone.getDefaultVpc(scope);
|
|
57
|
-
const runnerConfig = props.runnersWorkerProps
|
|
58
|
-
this.createWorkerConfigurations(props.runnersWorkerProps, props.env)
|
|
59
|
-
this.getDefaultRunnerWorkerConfig(props.env);
|
|
60
|
-
const managerInstance = props.managerInstanceType ??
|
|
61
|
-
|
|
62
|
-
|
|
73
|
+
const runnerConfig = props.runnersWorkerProps
|
|
74
|
+
? this.createWorkerConfigurations(props.runnersWorkerProps, props.env)
|
|
75
|
+
: this.getDefaultRunnerWorkerConfig(props.env);
|
|
76
|
+
const managerInstance = props.managerInstanceType ??
|
|
77
|
+
aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.MICRO);
|
|
78
|
+
const runner = new cdk_autoscaling_gitlab_runner_1.GitlabRunnerAutoscaling(scope, `GLR${scope.stackName}`, {
|
|
79
|
+
runners: [runnerConfig],
|
|
63
80
|
network: {
|
|
64
81
|
vpc: vpc,
|
|
65
82
|
},
|
|
66
83
|
manager: {
|
|
67
84
|
instanceType: managerInstance,
|
|
68
85
|
},
|
|
86
|
+
cache: { bucket: props.cache },
|
|
69
87
|
checkInterval: 30, // check every 30s for pending jobs
|
|
70
88
|
concurrent: 300, // Global limit of concurrent jobs,
|
|
71
89
|
});
|
|
90
|
+
// due to the new registration process we have to register the runner by running explicit commands on start of the manager
|
|
91
|
+
runner.manager.userData.addCommands('cp /etc/gitlab-runner/config.toml /etc/gitlab-runner/config_back.toml', // avoid toml merge conflicts
|
|
92
|
+
`gitlab-runner register --non-interactive --template-config /etc/gitlab-runner/config_back.toml --token ${props.runnersWorkerProps?.token.stringValue}`, 'gitlab-runner restart');
|
|
72
93
|
}
|
|
73
94
|
createWorkerConfigurations(workerProps, env) {
|
|
74
|
-
return
|
|
75
|
-
token:
|
|
76
|
-
role:
|
|
95
|
+
return {
|
|
96
|
+
token: workerProps.token,
|
|
97
|
+
role: workerProps.defaultWorkerRole,
|
|
77
98
|
configuration: {
|
|
78
|
-
url:
|
|
99
|
+
url: workerProps.gitInstanceUrl,
|
|
79
100
|
machine: {
|
|
80
101
|
autoscaling: this.autoscalingConfig,
|
|
81
|
-
maxBuilds:
|
|
82
|
-
idleCount:
|
|
83
|
-
idleTime:
|
|
102
|
+
maxBuilds: workerProps.maxBuilds ?? 10,
|
|
103
|
+
idleCount: workerProps.maxIdleInstance ?? 5,
|
|
104
|
+
idleTime: workerProps.maxIdleTime ?? 900,
|
|
84
105
|
machineOptions: {
|
|
85
|
-
requestSpotInstance:
|
|
86
|
-
spotPrice:
|
|
106
|
+
requestSpotInstance: workerProps.requestSpotPrice,
|
|
107
|
+
spotPrice: workerProps.spotPrice,
|
|
87
108
|
},
|
|
88
109
|
},
|
|
89
110
|
environment: [
|
|
90
111
|
'DOCKER_DRIVER=overlay2',
|
|
91
112
|
'DOCKER_TLS_DIRCE=/certs',
|
|
92
|
-
`DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr
|
|
113
|
+
`DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
|
|
93
114
|
],
|
|
94
115
|
},
|
|
95
|
-
instanceType:
|
|
96
|
-
}
|
|
116
|
+
instanceType: workerProps.instanceType,
|
|
117
|
+
};
|
|
97
118
|
}
|
|
98
119
|
getDefaultRunnerWorkerConfig(env) {
|
|
99
120
|
const gitLabRunnerTokenParameter = aws_ssm_1.StringParameter.fromStringParameterAttributes(this, 'RunnerToken', {
|
|
100
121
|
parameterName: '/config/gitlab-runner-cdk/token',
|
|
101
122
|
});
|
|
102
|
-
return
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
},
|
|
123
|
+
return {
|
|
124
|
+
token: gitLabRunnerTokenParameter,
|
|
125
|
+
configuration: {
|
|
126
|
+
url: 'https://gitlab.cicd.man',
|
|
127
|
+
limit: 0,
|
|
128
|
+
machine: {
|
|
129
|
+
maxBuilds: 10,
|
|
130
|
+
autoscaling: this.autoscalingConfig,
|
|
131
|
+
idleCount: 5,
|
|
132
|
+
idleTime: 900,
|
|
133
|
+
machineOptions: {
|
|
134
|
+
requestSpotInstance: true,
|
|
135
|
+
spotPrice: 0.09,
|
|
116
136
|
},
|
|
117
|
-
environment: [
|
|
118
|
-
'DOCKER_DRIVER=overlay2',
|
|
119
|
-
'DOCKER_TLS_DIRCE=/certs',
|
|
120
|
-
`DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.<region>.amazonaws.com": "ecr-login" } }`,
|
|
121
|
-
],
|
|
122
137
|
},
|
|
123
|
-
|
|
124
|
-
|
|
138
|
+
environment: [
|
|
139
|
+
'DOCKER_DRIVER=overlay2',
|
|
140
|
+
'DOCKER_TLS_DIRCE=/certs',
|
|
141
|
+
`DOCKER_AUTH_CONFIG={"credHelpers": { "public.ecr.aws": "ecr-login", "${env.account}.dkr.ecr.${env.region}.amazonaws.com": "ecr-login" } }`,
|
|
142
|
+
],
|
|
143
|
+
},
|
|
144
|
+
instanceType: aws_ec2_1.InstanceType.of(aws_ec2_1.InstanceClass.T3, aws_ec2_1.InstanceSize.LARGE),
|
|
145
|
+
};
|
|
125
146
|
}
|
|
126
147
|
}
|
|
127
148
|
exports.GitlabRunner = GitlabRunner;
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQTZEO0FBQzdELDRGQUlrRDtBQUVsRCxpREFBZ0Y7QUFFaEYsaURBQXNEO0FBQ3RELDJDQUF1QztBQUN2QyxnRUFBMkQ7QUE0QzNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNDRztBQUNILE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBS3pDLFlBQVksS0FBWSxFQUFFLEVBQVcsRUFBRSxLQUF3QjtRQUM3RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTFgsc0JBQWlCLEdBQStCLENBQUM7Z0JBQ3ZELE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO2dCQUNuQyxRQUFRLEVBQUUsZUFBZTthQUMxQixDQUFDLENBQUM7UUFJRCxNQUFNLEdBQUcsR0FBRyxpQ0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFL0MsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixJQUFJLHNCQUFZLENBQUMsRUFBRSxDQUFDLHVCQUFhLENBQUMsRUFBRSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0csSUFBSSx1REFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDMUQsT0FBTyxFQUFFLFlBQVk7WUFDckIsT0FBTyxFQUFFO2dCQUNQLEdBQUcsRUFBRSxHQUFHO2FBQ1Q7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsWUFBWSxFQUFFLGVBQWU7YUFDOUI7WUFDRCxhQUFhLEVBQUUsRUFBRSxFQUFFLG1DQUFtQztZQUN0RCxVQUFVLEVBQUUsR0FBRyxFQUFFLG1DQUFtQztTQUNyRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsV0FBc0MsRUFBRSxHQUFnQjtRQUN6RixPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUM1QjtZQUNFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztZQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLGlCQUFpQjtZQUMzQixhQUFhLEVBQUU7Z0JBQ2IsR0FBRyxFQUFFLEdBQUcsQ0FBQyxjQUFjO2dCQUN2QixPQUFPLEVBQUU7b0JBQ1AsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7b0JBQ25DLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUU7b0JBQzlCLFNBQVMsRUFBRSxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUM7b0JBQ25DLFFBQVEsRUFBRSxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUc7b0JBQ2hDLGNBQWMsRUFBRTt3QkFDZCxtQkFBbUIsRUFBRSxHQUFHLENBQUMsZ0JBQWdCO3dCQUN6QyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVM7cUJBQ3pCO2lCQUNGO2dCQUNELFdBQVcsRUFBRTtvQkFDWCx3QkFBd0I7b0JBQ3hCLHlCQUF5QjtvQkFDekIsd0VBQ0UsR0FBRyxDQUFDLE9BQ04sbURBQW1EO2lCQUNwRDthQUNGO1lBQ0QsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1NBQy9CLENBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDRCQUE0QixDQUFDLEdBQWdCO1FBQ25ELE1BQU0sMEJBQTBCLEdBQUcseUJBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3BHLGFBQWEsRUFBRSxpQ0FBaUM7U0FDakQsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDO2dCQUNOLEtBQUssRUFBRSwwQkFBMEI7Z0JBQ2pDLGFBQWEsRUFBRTtvQkFDYixHQUFHLEVBQUUseUJBQXlCO29CQUM5QixLQUFLLEVBQUUsQ0FBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsU0FBUyxFQUFFLEVBQUU7d0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7d0JBQ25DLFNBQVMsRUFBRSxDQUFDO3dCQUNaLFFBQVEsRUFBRSxHQUFHO3dCQUNiLGNBQWMsRUFBRTs0QkFDZCxtQkFBbUIsRUFBRSxJQUFJOzRCQUN6QixTQUFTLEVBQUUsSUFBSTt5QkFDaEI7cUJBQ0Y7b0JBQ0QsV0FBVyxFQUFFO3dCQUNYLHdCQUF3Qjt3QkFDeEIseUJBQXlCO3dCQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixtREFBbUQ7cUJBQ3BEO2lCQUNGO2dCQUNELFlBQVksRUFBRSxzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQzthQUNwRSxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF6RkQsb0NBeUZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uLy4uLy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG5cbi8qKlxuICogVGhlIEdpdExhYlJ1bm5lclByb3BzIHJlcXVpcmUgdGhlIFZQQyBJRCwgYSBkZWZpbmVkIGVudmlyb25tZW50IG9mIGFjY291bnQgYW5kIHJlZ2lvbiwgb3B0aW9uYWxcbiAqIHJ1bm5lciBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25hbGx5IHRoZSBHaXRMYWIgUnVubmVyIE1hbmFnZXIgaW5zdGFuY2UgdHlwZS4gQnkgZGVmYXVsdCwgYSBUMyBNaWNybyBpbnN0YW5jZSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgbGFyZ2VyIHdvcmtsb2FkcyBhbmQgdmVyeSBhY3RpdmUgdGVhbXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFQzIFNtYWxsIGZvciB0aGUgbWFuYWdlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdExhYlJ1bm5lclByb3BzIHtcbiAgcmVhZG9ubHkgZW52OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgcnVubmVyc1dvcmtlclByb3BzPzogR2l0bGFiUnVubmVyV29ya2VyUHJvcHNbXTtcbiAgcmVhZG9ubHkgbWFuYWdlckluc3RhbmNlVHlwZT86IEluc3RhbmNlVHlwZTtcbn1cblxuLyoqXG4gKiBUaGUgR2l0bGFiUnVubmVyV29ya2VyUHJvcHMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgc2ltcGxpZmllZCBHaXRMYWIgUnVubmVyIHdvcmtlciBjb25maWd1cmF0aW9uXG4gKiByZXF1aXJpbmcgYSB0b2tlbiBhcyBhbiBTU00gcGFyYW1ldGVyLCBvbmUgb2YgdGhlIHZhbGlkIGdpdGxhYiBVUkxzLCBpbnN0YW5jZSBvZiB5b3UgY2hvaWNlLCB0aGUgZGVzaXJlZCBtYXggc3BvdCBwcmljZSxcbiAqIHdoZXRoZXIgdG8gdXNlIHNwb3QgaW5zdGFuY2Ugb3Igbm90IGFuZCBhIGRlZmF1bHQgcm9sZS5cbiAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgUnVubmVyUm9sZXMgY29uc3RydWN0LCBhbmQgaXQncyBleHBvc2VkIGRlZmF1bHQgcnVubmVyIHJvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0bGFiUnVubmVyV29ya2VyUHJvcHMge1xuICAvKiogVGhlIFNTTSBTdHJpbmdQYXJhbWV0ZXIgd2l0aCB0aGUgcmVnaXN0ZXJlZCBydW5uZXIgdG9rZW4gICovXG4gIHRva2VuOiBTdHJpbmdQYXJhbWV0ZXI7XG4gIC8qKiBUaGUgR2l0TGFiIGluc3RhbmNlIFVSTCwgZWl0aGVyIGh0dHBzOi8vZ2l0bGFiLmNpY2QubWFuIG9yIGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYXRpb25sYXllci10cmF0b24uY29tICovXG4gIGdpdEluc3RhbmNlVXJsOiBHaXRsYWJJbnN0YW5jZVVybDtcbiAgLyoqIFRoZSBpbnN0YW5jZSB0eXBlIGZvciB0aGUgcnVubmVyIHdvcmtlciAqL1xuICBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgLyoqIFRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlICovXG4gIHNwb3RQcmljZTogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QsIFJlcXVpcmVzIFNlcnZpY2VMaW5rZWQgUm9sZSBmb3IgRUMyIFNwb3QgdG8gYmUgZGVwbG95ZWQgaW4gdGhlIGFjY291bnQgKi9cbiAgcmVxdWVzdFNwb3RQcmljZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBkZWZhdWx0IHJvbGUgZm9yIHRoZSBydW5uZXIgd29ya2VyIHdoZW4gc3Bhd25lZCAqL1xuICBkZWZhdWx0V29ya2VyUm9sZTogSVJvbGU7XG4gIC8qKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnVpbGRzIGZvciBhbiBpbnN0YW5jZSBiZWZvcmUgaXQgaGFzIHRvIGJlIGRlY29tbWlzc2lvbmVkLiBEZWZhdWx0IDEwICovXG4gIG1heEJ1aWxkcz86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdG8ga2VlcCBpZGxlIGZvciBuZXcgaW5jb21pbmcgam9icy4gRGVmYXVsdCA1ICovXG4gIG1heElkbGVJbnN0YW5jZT86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIGlkbGUgdGltZSBzZWNvbmRzIGZvciBhbiBpbnN0YW5jZS4gRGVmYXVsdCA5MDAgc2Vjb25kcyAqL1xuICBtYXhJZGxlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgR2l0bGFiSW5zdGFuY2VVcmwgPSAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nIHwgJ2h0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYXRpb25sYXllci10cmF0b24uY29tJ1xuXG5cbi8qKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGUgdGhlIEdpdExhYlJ1bm5lciBNYW5hZ2VyIGluc3RhbmNlIHdoaWNoIHdpbGwgYXV0b3NjYWxlIFJ1bm5lciBpbnN0YW5jZXMgYmFzZWQgb24gdGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBCeSBkZWZhdWx0LCB0aGUgY29uc3RydWN0IHdpbGwgY3JlYXRlIGEgUnVubmVyIHdpdGggYSBtYW5hZ2VyIFQzIE1pY3JvIGluc3RhbmNlIHdoaWNoIHdpbGwgYmUgZW5hYmxlZCB0byBzcGF3biBUMyBMYXJnZSBSdW5uZXJcbiAqIHdvcmtlciBzcG90IGluc3RhbmNlLiBUaGUgZGVmYXVsdCBydW5uZXIgUm9sZSBoYXMgb25seSB0aGUgcGVybWlzc2lvbnMgdG8gdXBsb2FkIGFuZCBkb3dubG9hZCBmcm9tIHRoZSBTMyBydW5uZXIgY2FjaGUuXG4gKlxuICogbWluaW1hbCBjb25maWd1cmF0aW9uIHdpdGggcnVubmVyIHNwb3QgaW5zdGFuY2U6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBuZXcgR2l0bGFiUnVubmVyKHN0YWNrLCAnR2l0TGFiUnVubmVyJywge1xuICogIGVudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfVxuICogfSk7XG4gKmBgYFxuICogcmVjb21tZW5kZWQ6XG4gKiBgYGB0c1xuICogbmV3IFNwb3RTZXJ2aWNlTGlua2VkUm9sZShzdGFjaywgJ1Nwb3RMaW5rZWRSb2xlJyk7XG4gKiBjb25zdCBydW5uZXJSb2xlcyA9IG5ldyBSdW5uZXJSb2xlcyhzdGFjaywgJ1J1bm5lclJvbGVzJywge2Vudjoge2FjY291bnQ6ICcxMjM0NTY3ODkwMTInLCByZWdpb246ICdldS13ZXN0LTEnfX0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgcnVubmVyc1dvcmtlclByb3BzOiBbXG4gKiAgICB7XG4gKiAgICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTdJX0ZMRVgsIEluc3RhbmNlU2l6ZS5YTEFSR0UpLCAvLyBleGVtcGxhcnkgbGFyZ2VyIHJ1bm5lclxuICogICAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICAgIHtcbiAqICAgICAgdG9rZW46IG15VG9rZW5Gb3JUYWdnZWRSdW5uZXIyLCAvLyB3aXRoIHRoaXMgcnVubmVyIHdlIHdhbnQgdG8gcnVuIGFsbCBnZW5lcmljIGpvYnMgdGhhdCBkbyBub3QgcmVxdWlyZSBtdWNoIHByb2Nlc3NpbmcgcG93ZXJcbiAqICAgICAgZ2l0SW5zdGFuY2VVcmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsIC8vIG9yIHRoZSBUcmF0b24gR2l0TGFiXG4gKiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuVDMsIEluc3RhbmNlU2l6ZS5NRURJVU0pLCAvLyBleGVtcGxhcnkgc21hbGxlciBydW5uZXJcbiAqICAgICAgc3BvdFByaWNlOiAwLjA0NCwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgICAgcmVxdWVzdFNwb3RQcmljZTogdHJ1ZSxcbiAqICAgICAgZGVmYXVsdFdvcmtlclJvbGU6IHJ1bm5lclJvbGVzLnJ1bm5lckJhc2VSb2xlLCAvLyB1c2UgdGhlIGJhc2Ugcm9sZVxuICogICAgfSxcbiAqICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEdpdGxhYlJ1bm5lciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgYXV0b3NjYWxpbmdDb25maWc6IEF1dG9zY2FsaW5nQ29uZmlndXJhdGlvbltdID0gW3tcbiAgICBwZXJpb2RzOiBbJyogKiA3LTI0ICogKiBtb24tZnJpIConXSxcbiAgICB0aW1lem9uZTogJ0V1cm9wZS9CZXJsaW4nLFxuICB9XTtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IFN0YWNrLCBpZCA6IHN0cmluZywgcHJvcHM6IEdpdExhYlJ1bm5lclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHZwYyA9IFJpb0xhbmRpbmdab25lLmdldERlZmF1bHRWcGMoc2NvcGUpO1xuXG4gICAgY29uc3QgcnVubmVyQ29uZmlnID0gcHJvcHMucnVubmVyc1dvcmtlclByb3BzID9cbiAgICAgIHRoaXMuY3JlYXRlV29ya2VyQ29uZmlndXJhdGlvbnMocHJvcHMucnVubmVyc1dvcmtlclByb3BzLCBwcm9wcy5lbnYpIDpcbiAgICAgIHRoaXMuZ2V0RGVmYXVsdFJ1bm5lcldvcmtlckNvbmZpZyhwcm9wcy5lbnYpO1xuXG4gICAgY29uc3QgbWFuYWdlckluc3RhbmNlID0gcHJvcHMubWFuYWdlckluc3RhbmNlVHlwZSA/PyBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IHJ1bm5lckNvbmZpZyxcbiAgICAgIG5ldHdvcms6IHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICB9LFxuICAgICAgbWFuYWdlcjoge1xuICAgICAgICBpbnN0YW5jZVR5cGU6IG1hbmFnZXJJbnN0YW5jZSxcbiAgICAgIH0sXG4gICAgICBjaGVja0ludGVydmFsOiAzMCwgLy8gY2hlY2sgZXZlcnkgMzBzIGZvciBwZW5kaW5nIGpvYnNcbiAgICAgIGNvbmN1cnJlbnQ6IDMwMCwgLy8gR2xvYmFsIGxpbWl0IG9mIGNvbmN1cnJlbnQgam9icyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV29ya2VyQ29uZmlndXJhdGlvbnMod29ya2VyUHJvcHM6IEdpdGxhYlJ1bm5lcldvcmtlclByb3BzW10sIGVudjogRW52aXJvbm1lbnQpOiBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZ0pvYlJ1bm5lclByb3BzW10ge1xuICAgIHJldHVybiB3b3JrZXJQcm9wcy5tYXAodmFsID0+IChcbiAgICAgIHtcbiAgICAgICAgdG9rZW46IHZhbC50b2tlbixcbiAgICAgICAgcm9sZTogdmFsLmRlZmF1bHRXb3JrZXJSb2xlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgdXJsOiB2YWwuZ2l0SW5zdGFuY2VVcmwsXG4gICAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgICAgYXV0b3NjYWxpbmc6IHRoaXMuYXV0b3NjYWxpbmdDb25maWcsXG4gICAgICAgICAgICBtYXhCdWlsZHM6IHZhbC5tYXhCdWlsZHMgPz8gMTAsXG4gICAgICAgICAgICBpZGxlQ291bnQ6IHZhbC5tYXhJZGxlSW5zdGFuY2UgPz8gNSxcbiAgICAgICAgICAgIGlkbGVUaW1lOiB2YWwubWF4SWRsZVRpbWUgPz8gOTAwLFxuICAgICAgICAgICAgbWFjaGluZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogdmFsLnJlcXVlc3RTcG90UHJpY2UsXG4gICAgICAgICAgICAgIHNwb3RQcmljZTogdmFsLnNwb3RQcmljZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbnZpcm9ubWVudDogW1xuICAgICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICAgJ0RPQ0tFUl9UTFNfRElSQ0U9L2NlcnRzJyxcbiAgICAgICAgICAgIGBET0NLRVJfQVVUSF9DT05GSUc9e1wiY3JlZEhlbHBlcnNcIjogeyBcInB1YmxpYy5lY3IuYXdzXCI6IFwiZWNyLWxvZ2luXCIsIFwiJHtcbiAgICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICAgIH0uZGtyLmVjci48cmVnaW9uPi5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBpbnN0YW5jZVR5cGU6IHZhbC5pbnN0YW5jZVR5cGUsXG4gICAgICB9XG4gICAgKSk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcoZW52OiBFbnZpcm9ubWVudCk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHNbXSB7XG4gICAgY29uc3QgZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIgPSBTdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXModGhpcywgJ1J1bm5lclRva2VuJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvZ2l0bGFiLXJ1bm5lci1jZGsvdG9rZW4nLFxuICAgIH0pO1xuICAgIHJldHVybiBbe1xuICAgICAgdG9rZW46IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyLFxuICAgICAgY29uZmlndXJhdGlvbjoge1xuICAgICAgICB1cmw6ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbicsXG4gICAgICAgIGxpbWl0OiAwLFxuICAgICAgICBtYWNoaW5lOiB7XG4gICAgICAgICAgbWF4QnVpbGRzOiAxMCxcbiAgICAgICAgICBhdXRvc2NhbGluZzogdGhpcy5hdXRvc2NhbGluZ0NvbmZpZyxcbiAgICAgICAgICBpZGxlQ291bnQ6IDUsXG4gICAgICAgICAgaWRsZVRpbWU6IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogdHJ1ZSxcbiAgICAgICAgICAgIHNwb3RQcmljZTogMC4wOSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlbnZpcm9ubWVudDogW1xuICAgICAgICAgICdET0NLRVJfRFJJVkVSPW92ZXJsYXkyJyxcbiAgICAgICAgICAnRE9DS0VSX1RMU19ESVJDRT0vY2VydHMnLFxuICAgICAgICAgIGBET0NLRVJfQVVUSF9DT05GSUc9e1wiY3JlZEhlbHBlcnNcIjogeyBcInB1YmxpYy5lY3IuYXdzXCI6IFwiZWNyLWxvZ2luXCIsIFwiJHtcbiAgICAgICAgICAgIGVudi5hY2NvdW50XG4gICAgICAgICAgfS5ka3IuZWNyLjxyZWdpb24+LmFtYXpvbmF3cy5jb21cIjogXCJlY3ItbG9naW5cIiB9IH1gLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuVDMsIEluc3RhbmNlU2l6ZS5MQVJHRSksXG4gICAgfV07XG4gIH1cbn0iXX0=
|
|
149
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
150
|
+
GitlabRunner[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.GitlabRunner", version: "0.0.0" };
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NjYWxpbmctcnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9hdXRvc2NhbGluZy1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2REFBNkQ7QUFDN0QsNEZBSWtEO0FBRWxELGlEQUFnRjtBQUdoRixpREFBd0U7QUFDeEUsMkNBQXVDO0FBQ3ZDLGdFQUEyRDtBQTZDM0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvREc7QUFDSCxNQUFhLFlBQWEsU0FBUSxzQkFBUztJQUt6QyxZQUFZLEtBQVksRUFBRSxFQUFXLEVBQUUsS0FBd0I7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUxYLHNCQUFpQixHQUErQixDQUFDO2dCQUN2RCxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDbkMsUUFBUSxFQUFFLGVBQWU7YUFDMUIsQ0FBQyxDQUFDO1FBSUQsTUFBTSxHQUFHLEdBQUcsaUNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGtCQUFrQjtZQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpELE1BQU0sZUFBZSxHQUNuQixLQUFLLENBQUMsbUJBQW1CO1lBQ3pCLHNCQUFZLENBQUMsRUFBRSxDQUFDLHVCQUFhLENBQUMsRUFBRSxFQUFFLHNCQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSx1REFBdUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDekUsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRTtnQkFDUCxHQUFHLEVBQUUsR0FBRzthQUNUO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2FBQzlCO1lBQ0QsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDOUIsYUFBYSxFQUFFLEVBQUUsRUFBRSxtQ0FBbUM7WUFDdEQsVUFBVSxFQUFFLEdBQUcsRUFBRSxtQ0FBbUM7U0FDckQsQ0FBQyxDQUFDO1FBQ0gsMEhBQTBIO1FBQzFILE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDakMseUVBQXlFLEVBQUUsNkJBQTZCO1FBQ3hHLDBHQUEwRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUN2Six1QkFBdUIsQ0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFTywwQkFBMEIsQ0FBQyxXQUFvQyxFQUFFLEdBQWdCO1FBQ3ZGLE9BQU87WUFDTCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsSUFBSSxFQUFFLFdBQVcsQ0FBQyxpQkFBaUI7WUFDbkMsYUFBYSxFQUFFO2dCQUNiLEdBQUcsRUFBRSxXQUFXLENBQUMsY0FBYztnQkFDL0IsT0FBTyxFQUFFO29CQUNQLFdBQVcsRUFBRSxJQUFJLENBQUMsaUJBQWlCO29CQUNuQyxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFO29CQUN0QyxTQUFTLEVBQUUsV0FBVyxDQUFDLGVBQWUsSUFBSSxDQUFDO29CQUMzQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFdBQVcsSUFBSSxHQUFHO29CQUN4QyxjQUFjLEVBQUU7d0JBQ2QsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLGdCQUFnQjt3QkFDakQsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO3FCQUNqQztpQkFDRjtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsd0JBQXdCO29CQUN4Qix5QkFBeUI7b0JBQ3pCLHdFQUNFLEdBQUcsQ0FBQyxPQUNOLFlBQVksR0FBRyxDQUFDLE1BQU0sa0NBQWtDO2lCQUN6RDthQUNGO1lBQ0QsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBRU8sNEJBQTRCLENBQ2xDLEdBQWdCO1FBRWhCLE1BQU0sMEJBQTBCLEdBQzlCLHlCQUFlLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNqRSxhQUFhLEVBQUUsaUNBQWlDO1NBQ2pELENBQUMsQ0FBQztRQUNMLE9BQU87WUFDTCxLQUFLLEVBQUUsMEJBQTBCO1lBQ2pDLGFBQWEsRUFBRTtnQkFDYixHQUFHLEVBQUUseUJBQXlCO2dCQUM5QixLQUFLLEVBQUUsQ0FBQztnQkFDUixPQUFPLEVBQUU7b0JBQ1AsU0FBUyxFQUFFLEVBQUU7b0JBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7b0JBQ25DLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxHQUFHO29CQUNiLGNBQWMsRUFBRTt3QkFDZCxtQkFBbUIsRUFBRSxJQUFJO3dCQUN6QixTQUFTLEVBQUUsSUFBSTtxQkFDaEI7aUJBQ0Y7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLHdCQUF3QjtvQkFDeEIseUJBQXlCO29CQUN6Qix3RUFDRSxHQUFHLENBQUMsT0FDTixZQUFZLEdBQUcsQ0FBQyxNQUFNLGtDQUFrQztpQkFDekQ7YUFDRjtZQUNELFlBQVksRUFBRSxzQkFBWSxDQUFDLEVBQUUsQ0FBQyx1QkFBYSxDQUFDLEVBQUUsRUFBRSxzQkFBWSxDQUFDLEtBQUssQ0FBQztTQUNwRSxDQUFDO0lBQ0osQ0FBQzs7QUFsR0gsb0NBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgQXV0b3NjYWxpbmdDb25maWd1cmF0aW9uLFxuICBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyxcbiAgR2l0bGFiUnVubmVyQXV0b3NjYWxpbmdKb2JSdW5uZXJQcm9wcyxcbn0gZnJvbSAnQHBlcHBlcml6ZS9jZGstYXV0b3NjYWxpbmctZ2l0bGFiLXJ1bm5lcic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJbnN0YW5jZUNsYXNzLCBJbnN0YW5jZVNpemUsIEluc3RhbmNlVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVN0cmluZ1BhcmFtZXRlciwgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJpb0xhbmRpbmdab25lIH0gZnJvbSAnLi4vLi4vLi4vcmlvLWxhbmRpbmctem9uZSc7XG5cbi8qKlxuICogVGhlIEdpdExhYlJ1bm5lclByb3BzIHJlcXVpcmUgdGhlIFZQQyBJRCwgYSBkZWZpbmVkIGVudmlyb25tZW50IG9mIGFjY291bnQgYW5kIHJlZ2lvbiwgb3B0aW9uYWxcbiAqIHJ1bm5lciBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25hbGx5IHRoZSBHaXRMYWIgUnVubmVyIE1hbmFnZXIgaW5zdGFuY2UgdHlwZS4gQnkgZGVmYXVsdCwgYSBUMyBNaWNybyBpbnN0YW5jZSB3aWxsIGJlIHVzZWQuXG4gKiBGb3IgbGFyZ2VyIHdvcmtsb2FkcyBhbmQgdmVyeSBhY3RpdmUgdGVhbXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIFQzIFNtYWxsIGZvciB0aGUgbWFuYWdlciBpbnN0ZWFkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdpdExhYlJ1bm5lclByb3BzIHtcbiAgcmVhZG9ubHkgZW52OiBFbnZpcm9ubWVudDtcbiAgcmVhZG9ubHkgcnVubmVyc1dvcmtlclByb3BzPzogR2l0bGFiUnVubmVyV29ya2VyUHJvcHM7XG4gIHJlYWRvbmx5IG1hbmFnZXJJbnN0YW5jZVR5cGU/OiBJbnN0YW5jZVR5cGU7XG4gIHJlYWRvbmx5IGNhY2hlOiBJQnVja2V0O1xufVxuXG4vKipcbiAqIFRoZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyBpbnRlcmZhY2UgcHJvdmlkZXMgYSBzaW1wbGlmaWVkIEdpdExhYiBSdW5uZXIgd29ya2VyIGNvbmZpZ3VyYXRpb25cbiAqIHJlcXVpcmluZyBhIHRva2VuIGFzIGFuIFNTTSBwYXJhbWV0ZXIsIG9uZSBvZiB0aGUgdmFsaWQgZ2l0bGFiIFVSTHMsIGluc3RhbmNlIG9mIHlvdSBjaG9pY2UsIHRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlLFxuICogd2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QgYW5kIGEgZGVmYXVsdCByb2xlLlxuICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBSdW5uZXJSb2xlcyBjb25zdHJ1Y3QsIGFuZCBpdCdzIGV4cG9zZWQgZGVmYXVsdCBydW5uZXIgcm9sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcyB7XG4gIC8qKiBUaGUgU1NNIFN0cmluZ1BhcmFtZXRlciB3aXRoIHRoZSByZWdpc3RlcmVkIHJ1bm5lciB0b2tlbiAgKi9cbiAgcmVhZG9ubHkgdG9rZW46IElTdHJpbmdQYXJhbWV0ZXI7XG4gIC8qKiBUaGUgR2l0TGFiIGluc3RhbmNlIFVSTCwgZWl0aGVyIGh0dHBzOi8vZ2l0bGFiLmNpY2QubWFuIG9yIGh0dHBzOi8vZ2l0bGFiLmNvbGxhYm9yYXRpb25sYXllci10cmF0b24uY29tICovXG4gIHJlYWRvbmx5IGdpdEluc3RhbmNlVXJsOiBHaXRsYWJJbnN0YW5jZVVybDtcbiAgLyoqIFRoZSBpbnN0YW5jZSB0eXBlIGZvciB0aGUgcnVubmVyIHdvcmtlciAqL1xuICByZWFkb25seSBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgLyoqIFRoZSBkZXNpcmVkIG1heCBzcG90IHByaWNlICovXG4gIHJlYWRvbmx5IHNwb3RQcmljZTogbnVtYmVyO1xuICAvKiogV2hldGhlciB0byB1c2Ugc3BvdCBpbnN0YW5jZSBvciBub3QsIFJlcXVpcmVzIFNlcnZpY2VMaW5rZWQgUm9sZSBmb3IgRUMyIFNwb3QgdG8gYmUgZGVwbG95ZWQgaW4gdGhlIGFjY291bnQgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdFNwb3RQcmljZTogYm9vbGVhbjtcbiAgLyoqIFRoZSBkZWZhdWx0IHJvbGUgZm9yIHRoZSBydW5uZXIgd29ya2VyIHdoZW4gc3Bhd25lZCAqL1xuICByZWFkb25seSBkZWZhdWx0V29ya2VyUm9sZTogSVJvbGU7XG4gIC8qKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgYnVpbGRzIGZvciBhbiBpbnN0YW5jZSBiZWZvcmUgaXQgaGFzIHRvIGJlIGRlY29tbWlzc2lvbmVkLiBEZWZhdWx0IDEwICovXG4gIHJlYWRvbmx5IG1heEJ1aWxkcz86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgdG8ga2VlcCBpZGxlIGZvciBuZXcgaW5jb21pbmcgam9icy4gRGVmYXVsdCA1ICovXG4gIHJlYWRvbmx5IG1heElkbGVJbnN0YW5jZT86IG51bWJlcjtcbiAgLyoqIFRoZSBtYXhpbXVtIGlkbGUgdGltZSBzZWNvbmRzIGZvciBhbiBpbnN0YW5jZS4gRGVmYXVsdCA5MDAgc2Vjb25kcyAqL1xuICByZWFkb25seSBtYXhJZGxlVGltZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgR2l0bGFiSW5zdGFuY2VVcmwgPVxuICB8ICdodHRwczovL2dpdGxhYi5jaWNkLm1hbidcbiAgfCAnaHR0cHM6Ly9naXRsYWIuY29sbGFib3JhdGlvbmxheWVyLXRyYXRvbi5jb20nO1xuXG4vKipcbiAqIFRoZSBjb25zdHJ1Y3QgY3JlYXRlIHRoZSBHaXRMYWJSdW5uZXIgTWFuYWdlciBpbnN0YW5jZSB3aGljaCB3aWxsIGF1dG9zY2FsZSBSdW5uZXIgaW5zdGFuY2VzIGJhc2VkIG9uIHRoZSBjb25maWd1cmF0aW9uLlxuICogQnkgZGVmYXVsdCwgdGhlIGNvbnN0cnVjdCB3aWxsIGNyZWF0ZSBhIFJ1bm5lciB3aXRoIGEgbWFuYWdlciBUMyBNaWNybyBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIGVuYWJsZWQgdG8gc3Bhd24gVDMgTGFyZ2UgUnVubmVyXG4gKiB3b3JrZXIgc3BvdCBpbnN0YW5jZS4gVGhlIGRlZmF1bHQgcnVubmVyIFJvbGUgaGFzIG9ubHkgdGhlIHBlcm1pc3Npb25zIHRvIHVwbG9hZCBhbmQgZG93bmxvYWQgZnJvbSB0aGUgUzMgcnVubmVyIGNhY2hlLlxuICpcbiAqIG1pbmltYWwgY29uZmlndXJhdGlvbiB3aXRoIHJ1bm5lciBzcG90IGluc3RhbmNlOlxuICogYGBgdHNcbiAqIG5ldyBTcG90U2VydmljZUxpbmtlZFJvbGUoc3RhY2ssICdTcG90TGlua2VkUm9sZScpO1xuICogY29uc3QgbXlCdWNrZXQgPSBuZXcgQnVja2V0KHN0YWNrLCAnTXlTaGFyZVJ1bm5lckNhY2hlJywge1xuICogICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gKiAgICAgcHVibGljUmVhZEFjY2VzczogZmFsc2UsXG4gKiAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICogICAgIGxpZmVjeWNsZVJ1bGVzOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gKiAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICogICAgICAgfSxcbiAqICAgICBdLFxuICogICB9KTtcbiAqIG5ldyBHaXRsYWJSdW5uZXIoc3RhY2ssICdHaXRMYWJSdW5uZXInLCB7XG4gKiAgZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9LFxuICogIGNhY2hlOiBteUJ1Y2tldCAvLyB1c2UgYSBTMyBidWNrZXQgd2l0aG91dCBwdWJsaWMgYWNjZXNzIGFuZCBhIHJldGVudGlvbiBkZWZpbmVkLCB1c2Ugb25lIGNhY2hlIGJ1Y2tldCBmb3IgYWxsIHlvdSBydW5uZXJzXG4gKiB9KTtcbiAqYGBgXG4gKiByZWNvbW1lbmRlZDpcbiAqIGBgYHRzXG4gKiBuZXcgU3BvdFNlcnZpY2VMaW5rZWRSb2xlKHN0YWNrLCAnU3BvdExpbmtlZFJvbGUnKTtcbiAqIGNvbnN0IHJ1bm5lclJvbGVzID0gbmV3IFJ1bm5lclJvbGVzKHN0YWNrLCAnUnVubmVyUm9sZXMnLCB7ZW52OiB7YWNjb3VudDogJzEyMzQ1Njc4OTAxMicsIHJlZ2lvbjogJ2V1LXdlc3QtMSd9fSk7XG4gKiBjb25zdCBteUJ1Y2tldCA9IG5ldyBCdWNrZXQoc3RhY2ssICdNeVNoYXJlUnVubmVyQ2FjaGUnLCB7XG4gKiAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAqICAgICBwdWJsaWNSZWFkQWNjZXNzOiBmYWxzZSxcbiAqICAgICBlbmNyeXB0aW9uOiBCdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG4gKiAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAqICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gKiAgICAgICB9LFxuICogICAgIF0sXG4gKiAgIH0pO1xuICogbmV3IEdpdGxhYlJ1bm5lcihzdGFjaywgJ0dpdExhYlJ1bm5lcicsIHtcbiAqICBlbnY6IHthY2NvdW50OiAnMTIzNDU2Nzg5MDEyJywgcmVnaW9uOiAnZXUtd2VzdC0xJ30sXG4gKiAgY2FjaGU6IG15QnVja2V0IC8vIC8vIHVzZSBhIFMzIGJ1Y2tldCB3aXRob3V0IHB1YmxpYyBhY2Nlc3MgYW5kIGEgcmV0ZW50aW9uIGRlZmluZWQsIHVzZSBvbmUgY2FjaGUgYnVja2V0IGZvciBhbGwgeW91IHJ1bm5lcnNcbiAqICBydW5uZXJzV29ya2VyUHJvcHM6IHtcbiAqICAgIHRva2VuOiBteVRva2VuRm9yVGFnZ2VkUnVubmVyMSwgLy8gd2l0aCB0aGlzIHJ1bm5lciB3ZSBvbmx5IHdhbnQgdG8gcnVuIGpvYnMgdGhhdCByZXF1aXJlIG1vcmUgcG93ZXJcbiAqICAgIGdpdEluc3RhbmNlVXJsOiAnaHR0cHM6Ly9naXRsYWIuY2ljZC5tYW4nLCAvLyBvciB0aGUgVHJhdG9uIEdpdExhYlxuICogICAgaW5zdGFuY2VUeXBlOiBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5NN0lfRkxFWCwgSW5zdGFuY2VTaXplLlhMQVJHRSksIC8vIGV4ZW1wbGFyeSBsYXJnZXIgcnVubmVyXG4gKiAgICBzcG90UHJpY2U6IDAuMiwgLy8gZXhlbXBsYXJ5IHNwb3QgcHJpY2VcbiAqICAgIHJlcXVlc3RTcG90UHJpY2U6IHRydWUsXG4gKiAgICBkZWZhdWx0V29ya2VyUm9sZTogcnVubmVyUm9sZXMucnVubmVyQmFzZVJvbGUsIC8vIHVzZSB0aGUgYmFzZSByb2xlXG4gKiAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRsYWJSdW5uZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIGF1dG9zY2FsaW5nQ29uZmlnOiBBdXRvc2NhbGluZ0NvbmZpZ3VyYXRpb25bXSA9IFt7XG4gICAgcGVyaW9kczogWycqICogNy0yMiAqICogbW9uLWZyaSAqJ10sXG4gICAgdGltZXpvbmU6ICdFdXJvcGUvQmVybGluJyxcbiAgfV07XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBTdGFjaywgaWQgOiBzdHJpbmcsIHByb3BzOiBHaXRMYWJSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBSaW9MYW5kaW5nWm9uZS5nZXREZWZhdWx0VnBjKHNjb3BlKTtcblxuICAgIGNvbnN0IHJ1bm5lckNvbmZpZyA9IHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wc1xuICAgICAgPyB0aGlzLmNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHByb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcywgcHJvcHMuZW52KVxuICAgICAgOiB0aGlzLmdldERlZmF1bHRSdW5uZXJXb3JrZXJDb25maWcocHJvcHMuZW52KTtcblxuICAgIGNvbnN0IG1hbmFnZXJJbnN0YW5jZSA9XG4gICAgICBwcm9wcy5tYW5hZ2VySW5zdGFuY2VUeXBlID8/XG4gICAgICBJbnN0YW5jZVR5cGUub2YoSW5zdGFuY2VDbGFzcy5UMywgSW5zdGFuY2VTaXplLk1JQ1JPKTtcblxuICAgIGNvbnN0IHJ1bm5lciA9IG5ldyBHaXRsYWJSdW5uZXJBdXRvc2NhbGluZyhzY29wZSwgYEdMUiR7c2NvcGUuc3RhY2tOYW1lfWAsIHtcbiAgICAgIHJ1bm5lcnM6IFtydW5uZXJDb25maWddLFxuICAgICAgbmV0d29yazoge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VyOiB7XG4gICAgICAgIGluc3RhbmNlVHlwZTogbWFuYWdlckluc3RhbmNlLFxuICAgICAgfSxcbiAgICAgIGNhY2hlOiB7IGJ1Y2tldDogcHJvcHMuY2FjaGUgfSxcbiAgICAgIGNoZWNrSW50ZXJ2YWw6IDMwLCAvLyBjaGVjayBldmVyeSAzMHMgZm9yIHBlbmRpbmcgam9ic1xuICAgICAgY29uY3VycmVudDogMzAwLCAvLyBHbG9iYWwgbGltaXQgb2YgY29uY3VycmVudCBqb2JzLFxuICAgIH0pO1xuICAgIC8vIGR1ZSB0byB0aGUgbmV3IHJlZ2lzdHJhdGlvbiBwcm9jZXNzIHdlIGhhdmUgdG8gcmVnaXN0ZXIgdGhlIHJ1bm5lciBieSBydW5uaW5nIGV4cGxpY2l0IGNvbW1hbmRzIG9uIHN0YXJ0IG9mIHRoZSBtYW5hZ2VyXG4gICAgcnVubmVyLm1hbmFnZXIudXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICAnY3AgIC9ldGMvZ2l0bGFiLXJ1bm5lci9jb25maWcudG9tbCAgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwnLCAvLyBhdm9pZCB0b21sIG1lcmdlIGNvbmZsaWN0c1xuICAgICAgYGdpdGxhYi1ydW5uZXIgcmVnaXN0ZXIgLS1ub24taW50ZXJhY3RpdmUgLS10ZW1wbGF0ZS1jb25maWcgL2V0Yy9naXRsYWItcnVubmVyL2NvbmZpZ19iYWNrLnRvbWwgLS10b2tlbiAke3Byb3BzLnJ1bm5lcnNXb3JrZXJQcm9wcz8udG9rZW4uc3RyaW5nVmFsdWV9YCxcbiAgICAgICdnaXRsYWItcnVubmVyIHJlc3RhcnQnLCAvLyByZXN0YXJ0IHRoZSBydW5uZXIgdG8gZW5zdXJlIHRoZSBjb25maWcgaXMgcGlja2VkIHVwIGNvcnJlY3RseVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdvcmtlckNvbmZpZ3VyYXRpb25zKHdvcmtlclByb3BzOiBHaXRsYWJSdW5uZXJXb3JrZXJQcm9wcywgZW52OiBFbnZpcm9ubWVudCk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogd29ya2VyUHJvcHMudG9rZW4sXG4gICAgICByb2xlOiB3b3JrZXJQcm9wcy5kZWZhdWx0V29ya2VyUm9sZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgdXJsOiB3b3JrZXJQcm9wcy5naXRJbnN0YW5jZVVybCxcbiAgICAgICAgbWFjaGluZToge1xuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIG1heEJ1aWxkczogd29ya2VyUHJvcHMubWF4QnVpbGRzID8/IDEwLFxuICAgICAgICAgIGlkbGVDb3VudDogd29ya2VyUHJvcHMubWF4SWRsZUluc3RhbmNlID8/IDUsXG4gICAgICAgICAgaWRsZVRpbWU6IHdvcmtlclByb3BzLm1heElkbGVUaW1lID8/IDkwMCxcbiAgICAgICAgICBtYWNoaW5lT3B0aW9uczoge1xuICAgICAgICAgICAgcmVxdWVzdFNwb3RJbnN0YW5jZTogd29ya2VyUHJvcHMucmVxdWVzdFNwb3RQcmljZSxcbiAgICAgICAgICAgIHNwb3RQcmljZTogd29ya2VyUHJvcHMuc3BvdFByaWNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHdvcmtlclByb3BzLmluc3RhbmNlVHlwZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0UnVubmVyV29ya2VyQ29uZmlnKFxuICAgIGVudjogRW52aXJvbm1lbnQsXG4gICk6IEdpdGxhYlJ1bm5lckF1dG9zY2FsaW5nSm9iUnVubmVyUHJvcHMge1xuICAgIGNvbnN0IGdpdExhYlJ1bm5lclRva2VuUGFyYW1ldGVyID1cbiAgICAgIFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnUnVubmVyVG9rZW4nLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL2dpdGxhYi1ydW5uZXItY2RrL3Rva2VuJyxcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogZ2l0TGFiUnVubmVyVG9rZW5QYXJhbWV0ZXIsXG4gICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgIHVybDogJ2h0dHBzOi8vZ2l0bGFiLmNpY2QubWFuJyxcbiAgICAgICAgbGltaXQ6IDAsXG4gICAgICAgIG1hY2hpbmU6IHtcbiAgICAgICAgICBtYXhCdWlsZHM6IDEwLFxuICAgICAgICAgIGF1dG9zY2FsaW5nOiB0aGlzLmF1dG9zY2FsaW5nQ29uZmlnLFxuICAgICAgICAgIGlkbGVDb3VudDogNSxcbiAgICAgICAgICBpZGxlVGltZTogOTAwLFxuICAgICAgICAgIG1hY2hpbmVPcHRpb25zOiB7XG4gICAgICAgICAgICByZXF1ZXN0U3BvdEluc3RhbmNlOiB0cnVlLFxuICAgICAgICAgICAgc3BvdFByaWNlOiAwLjA5LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVudmlyb25tZW50OiBbXG4gICAgICAgICAgJ0RPQ0tFUl9EUklWRVI9b3ZlcmxheTInLFxuICAgICAgICAgICdET0NLRVJfVExTX0RJUkNFPS9jZXJ0cycsXG4gICAgICAgICAgYERPQ0tFUl9BVVRIX0NPTkZJRz17XCJjcmVkSGVscGVyc1wiOiB7IFwicHVibGljLmVjci5hd3NcIjogXCJlY3ItbG9naW5cIiwgXCIke1xuICAgICAgICAgICAgZW52LmFjY291bnRcbiAgICAgICAgICB9LmRrci5lY3IuJHtlbnYucmVnaW9ufS5hbWF6b25hd3MuY29tXCI6IFwiZWNyLWxvZ2luXCIgfSB9YCxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLlQzLCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -2,7 +2,7 @@ import { Environment, Stack } from 'aws-cdk-lib';
|
|
|
2
2
|
import { Role } from 'aws-cdk-lib/aws-iam';
|
|
3
3
|
import { Construct } from 'constructs';
|
|
4
4
|
export interface RunnerRoleProps {
|
|
5
|
-
env: Environment;
|
|
5
|
+
readonly env: Environment;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* This construct provides a set of base roles for gitlab runners in order to build, test, validate and deploy applications
|