terraform-cdk-serverless-github-actions-runner-controller 0.0.0 → 0.0.2
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 +3647 -2
- package/API.md +212 -0
- package/lib/__tests__/index-test.js +16 -4
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/lib/aws.d.ts +4 -0
- package/lib/lib/aws.js +395 -0
- package/lib/lib/azure.js +1 -1
- package/lib/lib/gcp.d.ts +4 -0
- package/lib/lib/gcp.js +251 -0
- package/lib/lib/variables.js +3 -1
- package/lib/tfModules.js +17 -1
- package/main.tf +26 -0
- package/modules/azure-container-apps/README.md +3 -3
- package/modules/azure-container-apps/cdk.tf.json +7 -7
- package/modules/elastic-container-service/README.md +66 -0
- package/modules/elastic-container-service/cdk.tf.json +314 -0
- package/modules/google-cloud-run/README.md +62 -0
- package/modules/google-cloud-run/cdk.tf.json +355 -0
- package/package.json +8 -1
- package/scripts/collect-variables.ts +188 -0
- package/variables.tf +27 -0
package/lib/lib/gcp.js
ADDED
@@ -0,0 +1,251 @@
|
|
1
|
+
"use strict";
|
2
|
+
var _a;
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
4
|
+
exports.Gcp = void 0;
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
6
|
+
const cdktf_1 = require("cdktf");
|
7
|
+
const constructs_1 = require("constructs");
|
8
|
+
const provider_1 = require("@cdktf/provider-google/lib/provider");
|
9
|
+
const artifact_registry_repository_1 = require("@cdktf/provider-google/lib/artifact-registry-repository");
|
10
|
+
const cloud_run_v2_job_1 = require("@cdktf/provider-google/lib/cloud-run-v2-job");
|
11
|
+
const project_iam_custom_role_1 = require("@cdktf/provider-google/lib/project-iam-custom-role");
|
12
|
+
const service_account_1 = require("@cdktf/provider-google/lib/service-account");
|
13
|
+
const project_iam_member_1 = require("@cdktf/provider-google/lib/project-iam-member");
|
14
|
+
const variables_1 = require("./variables");
|
15
|
+
const cloud_run_service_1 = require("@cdktf/provider-google/lib/cloud-run-service");
|
16
|
+
const provider_2 = require("@cdktf/provider-null/lib/provider");
|
17
|
+
const resource_1 = require("@cdktf/provider-null/lib/resource");
|
18
|
+
class Gcp extends constructs_1.Construct {
|
19
|
+
constructor(scope, id) {
|
20
|
+
super(scope, id);
|
21
|
+
const location = 'europe-north1';
|
22
|
+
const project = 'gha-runner-example';
|
23
|
+
new provider_1.GoogleProvider(this, 'google', {
|
24
|
+
project,
|
25
|
+
region: location
|
26
|
+
});
|
27
|
+
new provider_2.NullProvider(this, 'null');
|
28
|
+
const { pat, githubConfigUrl } = (0, variables_1.commonVariables)(this);
|
29
|
+
const registry = new artifact_registry_repository_1.ArtifactRegistryRepository(this, 'registry', {
|
30
|
+
format: 'DOCKER',
|
31
|
+
mode: 'REMOTE_REPOSITORY',
|
32
|
+
repositoryId: 'gha-runner-test',
|
33
|
+
description: 'Repository to host run and resulting images from GHA runs',
|
34
|
+
remoteRepositoryConfig: {
|
35
|
+
dockerRepository: {
|
36
|
+
customRepository: {
|
37
|
+
uri: 'https://ghcr.io'
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
});
|
42
|
+
const jobSa = new service_account_1.ServiceAccount(this, 'jobServiceAccount', {
|
43
|
+
accountId: 'gha-runner-job-sa',
|
44
|
+
});
|
45
|
+
const runnerRole = new project_iam_custom_role_1.ProjectIamCustomRole(this, 'runnerRole', {
|
46
|
+
roleId: 'ghaRunnerRole',
|
47
|
+
title: 'GHA Runner Role',
|
48
|
+
permissions: [
|
49
|
+
'artifactregistry.dockerimages.get',
|
50
|
+
'artifactregistry.dockerimages.list',
|
51
|
+
'run.jobs.run',
|
52
|
+
'run.jobs.create',
|
53
|
+
'run.jobs.delete',
|
54
|
+
'run.jobs.list',
|
55
|
+
// Needed for waiting
|
56
|
+
'run.executions.get',
|
57
|
+
],
|
58
|
+
});
|
59
|
+
const jobPolicyMember = new cdktf_1.TerraformLocal(this, 'ghaMember', `serviceAccount:${jobSa.email}`);
|
60
|
+
new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBinding', {
|
61
|
+
member: jobPolicyMember.toString(),
|
62
|
+
project,
|
63
|
+
role: runnerRole.id,
|
64
|
+
});
|
65
|
+
new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBindingStorage', {
|
66
|
+
member: jobPolicyMember.toString(),
|
67
|
+
project,
|
68
|
+
role: 'roles/storage.admin',
|
69
|
+
});
|
70
|
+
new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBindingRunServiceAgent', {
|
71
|
+
member: jobPolicyMember.toString(),
|
72
|
+
project,
|
73
|
+
role: 'roles/run.serviceAgent',
|
74
|
+
});
|
75
|
+
new project_iam_member_1.ProjectIamMember(this, 'runnerRoleBindingRunViewer', {
|
76
|
+
member: jobPolicyMember.toString(),
|
77
|
+
project,
|
78
|
+
role: 'roles/run.viewer',
|
79
|
+
});
|
80
|
+
const storageName = 'gha-runner-job-externals';
|
81
|
+
const createBucket = new cdktf_1.TerraformLocal(this, 'bucketModification', `CLOUDSDK_CORE_DISABLE_PROMPTS=1 gcloud alpha storage buckets create gs://${storageName} --project=${project} --location=${location} --uniform-bucket-level-access --enable-hierarchical-namespace`);
|
82
|
+
// Hierarchial namespaces can't be enabled with Terraform.
|
83
|
+
const bucketCreation = new resource_1.Resource(this, 'gcloud', {
|
84
|
+
provisioners: [
|
85
|
+
{
|
86
|
+
type: "local-exec",
|
87
|
+
command: createBucket.fqn
|
88
|
+
},
|
89
|
+
],
|
90
|
+
triggers: {
|
91
|
+
fqn: createBucket.fqn
|
92
|
+
},
|
93
|
+
});
|
94
|
+
// TODO: check caching https://cloud.google.com/artifact-registry/docs/pull-cached-dockerhub-images
|
95
|
+
const runnerJob = new cloud_run_v2_job_1.CloudRunV2Job(this, 'ghaJob', {
|
96
|
+
deletionProtection: false,
|
97
|
+
name: 'gha-runner-job',
|
98
|
+
location,
|
99
|
+
template: {
|
100
|
+
template: {
|
101
|
+
containers: [
|
102
|
+
{
|
103
|
+
image: `${registry.location}-docker.pkg.dev/${project}/${registry.repositoryId}/hi-fi/actions-runner:cr`,
|
104
|
+
env: [
|
105
|
+
{
|
106
|
+
name: 'CLOUDSDK_RUN_REGION',
|
107
|
+
value: location,
|
108
|
+
},
|
109
|
+
{
|
110
|
+
name: 'GOOGLE_CLOUD_PROJECT',
|
111
|
+
value: project,
|
112
|
+
},
|
113
|
+
{
|
114
|
+
name: 'EXTERNAL_STORAGE_NAME',
|
115
|
+
value: storageName,
|
116
|
+
},
|
117
|
+
// FUSE mounts directory as root with 777 fo directories and 555 for other files. As path is owned always by root, utime or permission change is not possible. These options prevent tar to try those
|
118
|
+
{
|
119
|
+
name: 'TAR_OPTIONS',
|
120
|
+
value: '--touch --no-overwrite-dir --no-same-owner'
|
121
|
+
}
|
122
|
+
],
|
123
|
+
volumeMounts: [
|
124
|
+
{
|
125
|
+
name: 'externals',
|
126
|
+
mountPath: '/home/runner/_work/externals'
|
127
|
+
}
|
128
|
+
],
|
129
|
+
command: ['/home/runner/ephemeral_runner.sh'],
|
130
|
+
resources: {
|
131
|
+
limits: {
|
132
|
+
cpu: '1',
|
133
|
+
memory: '2Gi'
|
134
|
+
}
|
135
|
+
},
|
136
|
+
}
|
137
|
+
],
|
138
|
+
volumes: [
|
139
|
+
{
|
140
|
+
name: 'externals',
|
141
|
+
gcs: {
|
142
|
+
bucket: storageName
|
143
|
+
}
|
144
|
+
}
|
145
|
+
],
|
146
|
+
maxRetries: 0,
|
147
|
+
serviceAccount: jobSa.email
|
148
|
+
}
|
149
|
+
},
|
150
|
+
dependsOn: [
|
151
|
+
bucketCreation
|
152
|
+
]
|
153
|
+
});
|
154
|
+
const autoscalerSa = new service_account_1.ServiceAccount(this, 'autoscalerServiceAccount', {
|
155
|
+
accountId: 'autoscaler-sa',
|
156
|
+
});
|
157
|
+
new project_iam_custom_role_1.ProjectIamCustomRole(this, 'autoscalerRole', {
|
158
|
+
roleId: 'ghaAutoscalerRole',
|
159
|
+
title: 'GHA Autoscaler Role',
|
160
|
+
permissions: [
|
161
|
+
'artifactregistry.dockerimages.get',
|
162
|
+
'artifactregistry.dockerimages.list',
|
163
|
+
'run.jobs.run',
|
164
|
+
'run.jobs.create',
|
165
|
+
'run.jobs.delete',
|
166
|
+
],
|
167
|
+
});
|
168
|
+
const autoscalerPolicyMember = new cdktf_1.TerraformLocal(this, 'autoscalerMember', `serviceAccount:${autoscalerSa.email}`);
|
169
|
+
// TODO: replace 2 following with more specific ones.
|
170
|
+
new project_iam_member_1.ProjectIamMember(this, 'autoscalerRoleBindingRun', {
|
171
|
+
member: autoscalerPolicyMember.toString(),
|
172
|
+
project,
|
173
|
+
role: 'roles/run.developer',
|
174
|
+
});
|
175
|
+
new project_iam_member_1.ProjectIamMember(this, 'autoscalerRoleBindingStorage', {
|
176
|
+
member: autoscalerPolicyMember.toString(),
|
177
|
+
project,
|
178
|
+
role: 'roles/storage.admin',
|
179
|
+
});
|
180
|
+
new project_iam_member_1.ProjectIamMember(this, 'autoscalerRoleBindingRunServiceAgent', {
|
181
|
+
member: autoscalerPolicyMember.toString(),
|
182
|
+
project,
|
183
|
+
role: 'roles/run.serviceAgent',
|
184
|
+
});
|
185
|
+
new cloud_run_service_1.CloudRunService(this, 'autoscalerService', {
|
186
|
+
location,
|
187
|
+
name: 'gha-autoscaler',
|
188
|
+
metadata: {
|
189
|
+
annotations: {
|
190
|
+
'run.googleapis.com/ingress': 'internal',
|
191
|
+
}
|
192
|
+
},
|
193
|
+
template: {
|
194
|
+
metadata: {
|
195
|
+
annotations: {
|
196
|
+
'autoscaling.knative.dev/maxScale': '1',
|
197
|
+
'autoscaling.knative.dev/minScale': '1',
|
198
|
+
'run.googleapis.com/cpu-throttling': 'false',
|
199
|
+
'run.googleapis.com/startup-cpu-boost': 'false'
|
200
|
+
}
|
201
|
+
},
|
202
|
+
spec: {
|
203
|
+
containerConcurrency: 1,
|
204
|
+
containers: [
|
205
|
+
{
|
206
|
+
image: `${registry.location}-docker.pkg.dev/${project}/${registry.repositoryId}/hi-fi/gha-runners-on-managed-env:test`,
|
207
|
+
env: [
|
208
|
+
{
|
209
|
+
name: 'PAT',
|
210
|
+
value: pat.value
|
211
|
+
},
|
212
|
+
{
|
213
|
+
name: 'GITHUB_CONFIG_URL',
|
214
|
+
value: githubConfigUrl.value
|
215
|
+
},
|
216
|
+
{
|
217
|
+
name: 'JOB_NAME',
|
218
|
+
value: runnerJob.name
|
219
|
+
},
|
220
|
+
{
|
221
|
+
name: 'SCALE_SET_NAME',
|
222
|
+
value: 'cr-runner-set'
|
223
|
+
},
|
224
|
+
{
|
225
|
+
name: 'CLOUDSDK_RUN_REGION',
|
226
|
+
value: location
|
227
|
+
},
|
228
|
+
{
|
229
|
+
name: 'GOOGLE_CLOUD_PROJECT',
|
230
|
+
value: project
|
231
|
+
}
|
232
|
+
],
|
233
|
+
resources: {
|
234
|
+
// Service would work for much lower, but these are minimum values for "always on" mode
|
235
|
+
limits: {
|
236
|
+
cpu: '1000m',
|
237
|
+
memory: '512Mi'
|
238
|
+
}
|
239
|
+
}
|
240
|
+
}
|
241
|
+
],
|
242
|
+
serviceAccountName: autoscalerSa.email
|
243
|
+
}
|
244
|
+
}
|
245
|
+
});
|
246
|
+
}
|
247
|
+
}
|
248
|
+
exports.Gcp = Gcp;
|
249
|
+
_a = JSII_RTTI_SYMBOL_1;
|
250
|
+
Gcp[_a] = { fqn: "terraform-cdk-serverless-github-actions-runner-controller.Gcp", version: "0.0.2" };
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2NwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9nY3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBdUM7QUFDdkMsMkNBQXVDO0FBQ3ZDLGtFQUFvRTtBQUNwRSwwR0FBcUc7QUFDckcsa0ZBQTRFO0FBQzVFLGdHQUEwRjtBQUMxRixnRkFBNEU7QUFDNUUsc0ZBQWlGO0FBQ2pGLDJDQUE4QztBQUM5QyxvRkFBK0U7QUFDL0UsZ0VBQWlFO0FBQ2pFLGdFQUE0RDtBQUU1RCxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUM5QixZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUNwQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQztRQUVyQyxJQUFJLHlCQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUMvQixPQUFPO1lBQ1AsTUFBTSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBWSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUU5QixNQUFNLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUEsMkJBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLHlEQUEwQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDOUQsTUFBTSxFQUFFLFFBQVE7WUFDaEIsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixZQUFZLEVBQUUsaUJBQWlCO1lBQy9CLFdBQVcsRUFBRSwyREFBMkQ7WUFDeEUsc0JBQXNCLEVBQUU7Z0JBQ3BCLGdCQUFnQixFQUFFO29CQUNkLGdCQUFnQixFQUFFO3dCQUNkLEdBQUcsRUFBRSxpQkFBaUI7cUJBQ3pCO2lCQUNKO2FBQ0o7U0FDSixDQUFDLENBQUM7UUFFSCxNQUFNLEtBQUssR0FBRyxJQUFJLGdDQUFjLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ3hELFNBQVMsRUFBRSxtQkFBbUI7U0FDakMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSw4Q0FBb0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQzVELE1BQU0sRUFBRSxlQUFlO1lBQ3ZCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsV0FBVyxFQUFFO2dCQUNULG1DQUFtQztnQkFDbkMsb0NBQW9DO2dCQUNwQyxjQUFjO2dCQUNkLGlCQUFpQjtnQkFDakIsaUJBQWlCO2dCQUNqQixlQUFlO2dCQUNmLHFCQUFxQjtnQkFDckIsb0JBQW9CO2FBQ3ZCO1NBQ0osQ0FBQyxDQUFDO1FBRUgsTUFBTSxlQUFlLEdBQUcsSUFBSSxzQkFBYyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBRTlGLElBQUkscUNBQWdCLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQzVDLE1BQU0sRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQ2xDLE9BQU87WUFDUCxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUU7U0FDdEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxxQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDbkQsTUFBTSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUU7WUFDbEMsT0FBTztZQUNQLElBQUksRUFBRSxxQkFBcUI7U0FDOUIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxxQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLEVBQUU7WUFDM0QsTUFBTSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUU7WUFDbEMsT0FBTztZQUNQLElBQUksRUFBRSx3QkFBd0I7U0FDakMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxxQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEVBQUU7WUFDckQsTUFBTSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUU7WUFDbEMsT0FBTztZQUNQLElBQUksRUFBRSxrQkFBa0I7U0FDM0IsQ0FBQyxDQUFBO1FBRUYsTUFBTSxXQUFXLEdBQUcsMEJBQTBCLENBQUM7UUFDL0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxzQkFBYyxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRSw0RUFBNEUsV0FBVyxjQUFjLE9BQU8sZUFBZSxRQUFRLGdFQUFnRSxDQUFDLENBQUE7UUFFeFEsMERBQTBEO1FBQzFELE1BQU0sY0FBYyxHQUFHLElBQUksbUJBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ2hELFlBQVksRUFBRTtnQkFDVjtvQkFDSSxJQUFJLEVBQUUsWUFBWTtvQkFDbEIsT0FBTyxFQUFFLFlBQVksQ0FBQyxHQUFHO2lCQUM1QjthQUNKO1lBQ0QsUUFBUSxFQUFFO2dCQUNOLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRzthQUN4QjtTQUNKLENBQUMsQ0FBQztRQUVILG1HQUFtRztRQUNuRyxNQUFNLFNBQVMsR0FBRyxJQUFJLGdDQUFhLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNoRCxrQkFBa0IsRUFBRSxLQUFLO1lBQ3pCLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsUUFBUTtZQUNSLFFBQVEsRUFBRTtnQkFDTixRQUFRLEVBQUU7b0JBQ04sVUFBVSxFQUFFO3dCQUNSOzRCQUNJLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxRQUFRLG1CQUFtQixPQUFPLElBQUksUUFBUSxDQUFDLFlBQVksMEJBQTBCOzRCQUN4RyxHQUFHLEVBQUU7Z0NBQ0Q7b0NBQ0ksSUFBSSxFQUFFLHFCQUFxQjtvQ0FDM0IsS0FBSyxFQUFFLFFBQVE7aUNBQ2xCO2dDQUNEO29DQUNJLElBQUksRUFBRSxzQkFBc0I7b0NBQzVCLEtBQUssRUFBRSxPQUFPO2lDQUNqQjtnQ0FDRDtvQ0FDSSxJQUFJLEVBQUUsdUJBQXVCO29DQUM3QixLQUFLLEVBQUUsV0FBVztpQ0FDckI7Z0NBQ0QscU1BQXFNO2dDQUNyTTtvQ0FDSSxJQUFJLEVBQUUsYUFBYTtvQ0FDbkIsS0FBSyxFQUFFLDRDQUE0QztpQ0FDdEQ7NkJBQ0o7NEJBQ0QsWUFBWSxFQUFFO2dDQUNWO29DQUNJLElBQUksRUFBRSxXQUFXO29DQUNqQixTQUFTLEVBQUUsOEJBQThCO2lDQUM1Qzs2QkFDSjs0QkFDRCxPQUFPLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQzs0QkFDN0MsU0FBUyxFQUFFO2dDQUNQLE1BQU0sRUFBRTtvQ0FDSixHQUFHLEVBQUUsR0FBRztvQ0FDUixNQUFNLEVBQUUsS0FBSztpQ0FDaEI7NkJBQ0o7eUJBQ0o7cUJBQ0o7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLElBQUksRUFBRSxXQUFXOzRCQUNqQixHQUFHLEVBQUU7Z0NBQ0QsTUFBTSxFQUFFLFdBQVc7NkJBQ3RCO3lCQUNKO3FCQUNKO29CQUNELFVBQVUsRUFBRSxDQUFDO29CQUNiLGNBQWMsRUFBRSxLQUFLLENBQUMsS0FBSztpQkFDOUI7YUFDSjtZQUNELFNBQVMsRUFBRTtnQkFDUCxjQUFjO2FBQ2pCO1NBQ0osQ0FBQyxDQUFBO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxnQ0FBYyxDQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUN0RSxTQUFTLEVBQUUsZUFBZTtTQUM3QixDQUFDLENBQUM7UUFFSCxJQUFJLDhDQUFvQixDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUM3QyxNQUFNLEVBQUUsbUJBQW1CO1lBQzNCLEtBQUssRUFBRSxxQkFBcUI7WUFDNUIsV0FBVyxFQUFFO2dCQUNULG1DQUFtQztnQkFDbkMsb0NBQW9DO2dCQUNwQyxjQUFjO2dCQUNkLGlCQUFpQjtnQkFDakIsaUJBQWlCO2FBQ3BCO1NBQ0osQ0FBQyxDQUFDO1FBRUgsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLHNCQUFjLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUVuSCxxREFBcUQ7UUFDckQsSUFBSSxxQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7WUFDbkQsTUFBTSxFQUFFLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtZQUN6QyxPQUFPO1lBQ1AsSUFBSSxFQUFFLHFCQUFxQjtTQUM5QixDQUFDLENBQUE7UUFHRixJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRSw4QkFBOEIsRUFBRTtZQUN2RCxNQUFNLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxFQUFFO1lBQ3pDLE9BQU87WUFDUCxJQUFJLEVBQUUscUJBQXFCO1NBQzlCLENBQUMsQ0FBQTtRQUVGLElBQUkscUNBQWdCLENBQUMsSUFBSSxFQUFFLHNDQUFzQyxFQUFFO1lBQy9ELE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxRQUFRLEVBQUU7WUFDekMsT0FBTztZQUNQLElBQUksRUFBRSx3QkFBd0I7U0FDakMsQ0FBQyxDQUFBO1FBRUYsSUFBSSxtQ0FBZSxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUMzQyxRQUFRO1lBQ1IsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixRQUFRLEVBQUU7Z0JBQ04sV0FBVyxFQUFFO29CQUNULDRCQUE0QixFQUFFLFVBQVU7aUJBQzNDO2FBQ0o7WUFDRCxRQUFRLEVBQUU7Z0JBQ04sUUFBUSxFQUFFO29CQUNOLFdBQVcsRUFBRTt3QkFDVCxrQ0FBa0MsRUFBRSxHQUFHO3dCQUN2QyxrQ0FBa0MsRUFBRSxHQUFHO3dCQUN2QyxtQ0FBbUMsRUFBRSxPQUFPO3dCQUM1QyxzQ0FBc0MsRUFBRSxPQUFPO3FCQUNsRDtpQkFDSjtnQkFDRCxJQUFJLEVBQUU7b0JBQ0Ysb0JBQW9CLEVBQUUsQ0FBQztvQkFDdkIsVUFBVSxFQUFFO3dCQUNSOzRCQUNJLEtBQUssRUFBRSxHQUFHLFFBQVEsQ0FBQyxRQUFRLG1CQUFtQixPQUFPLElBQUksUUFBUSxDQUFDLFlBQVksd0NBQXdDOzRCQUN0SCxHQUFHLEVBQUU7Z0NBQ0Q7b0NBQ0ksSUFBSSxFQUFFLEtBQUs7b0NBQ1gsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2lDQUNuQjtnQ0FDRDtvQ0FDSSxJQUFJLEVBQUUsbUJBQW1CO29DQUN6QixLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUs7aUNBQy9CO2dDQUNEO29DQUNJLElBQUksRUFBRSxVQUFVO29DQUNoQixLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUk7aUNBQ3hCO2dDQUNEO29DQUNJLElBQUksRUFBRSxnQkFBZ0I7b0NBQ3RCLEtBQUssRUFBRSxlQUFlO2lDQUN6QjtnQ0FDRDtvQ0FDSSxJQUFJLEVBQUUscUJBQXFCO29DQUMzQixLQUFLLEVBQUUsUUFBUTtpQ0FDbEI7Z0NBQ0Q7b0NBQ0ksSUFBSSxFQUFFLHNCQUFzQjtvQ0FDNUIsS0FBSyxFQUFFLE9BQU87aUNBQ2pCOzZCQUVKOzRCQUNELFNBQVMsRUFBRTtnQ0FDUCx1RkFBdUY7Z0NBQ3ZGLE1BQU0sRUFBRTtvQ0FDSixHQUFHLEVBQUUsT0FBTztvQ0FDWixNQUFNLEVBQUUsT0FBTztpQ0FDbEI7NkJBQ0o7eUJBQ0o7cUJBQ0o7b0JBQ0Qsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLEtBQUs7aUJBQ3pDO2FBQ0o7U0FDSixDQUFDLENBQUE7SUFDTixDQUFDOztBQTVQTCxrQkE2UEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXJyYWZvcm1Mb2NhbCB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEdvb2dsZVByb3ZpZGVyIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWdvb2dsZS9saWIvcHJvdmlkZXInXG5pbXBvcnQgeyBBcnRpZmFjdFJlZ2lzdHJ5UmVwb3NpdG9yeSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9hcnRpZmFjdC1yZWdpc3RyeS1yZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBDbG91ZFJ1blYySm9iIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL2Nsb3VkLXJ1bi12Mi1qb2JcIjtcbmltcG9ydCB7IFByb2plY3RJYW1DdXN0b21Sb2xlIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL3Byb2plY3QtaWFtLWN1c3RvbS1yb2xlXCI7XG5pbXBvcnQgeyBTZXJ2aWNlQWNjb3VudCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9zZXJ2aWNlLWFjY291bnRcIjtcbmltcG9ydCB7IFByb2plY3RJYW1NZW1iZXIgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWdvb2dsZS9saWIvcHJvamVjdC1pYW0tbWVtYmVyXCI7XG5pbXBvcnQgeyBjb21tb25WYXJpYWJsZXMgfSBmcm9tIFwiLi92YXJpYWJsZXNcIjtcbmltcG9ydCB7IENsb3VkUnVuU2VydmljZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9jbG91ZC1ydW4tc2VydmljZVwiO1xuaW1wb3J0IHsgTnVsbFByb3ZpZGVyIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1udWxsL2xpYi9wcm92aWRlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItbnVsbC9saWIvcmVzb3VyY2UnXG5cbmV4cG9ydCBjbGFzcyBHY3AgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9ICdldXJvcGUtbm9ydGgxJztcbiAgICAgICAgY29uc3QgcHJvamVjdCA9ICdnaGEtcnVubmVyLWV4YW1wbGUnO1xuICAgICAgICBcbiAgICAgICAgbmV3IEdvb2dsZVByb3ZpZGVyKHRoaXMsICdnb29nbGUnLCB7XG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcmVnaW9uOiBsb2NhdGlvblxuICAgICAgICB9KTtcblxuICAgICAgICBuZXcgTnVsbFByb3ZpZGVyKHRoaXMsICdudWxsJylcblxuICAgICAgICBjb25zdCB7IHBhdCwgZ2l0aHViQ29uZmlnVXJsIH0gPSBjb21tb25WYXJpYWJsZXModGhpcyk7XG5cbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBuZXcgQXJ0aWZhY3RSZWdpc3RyeVJlcG9zaXRvcnkodGhpcywgJ3JlZ2lzdHJ5Jywge1xuICAgICAgICAgICAgZm9ybWF0OiAnRE9DS0VSJyxcbiAgICAgICAgICAgIG1vZGU6ICdSRU1PVEVfUkVQT1NJVE9SWScsXG4gICAgICAgICAgICByZXBvc2l0b3J5SWQ6ICdnaGEtcnVubmVyLXRlc3QnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXBvc2l0b3J5IHRvIGhvc3QgcnVuIGFuZCByZXN1bHRpbmcgaW1hZ2VzIGZyb20gR0hBIHJ1bnMnLFxuICAgICAgICAgICAgcmVtb3RlUmVwb3NpdG9yeUNvbmZpZzoge1xuICAgICAgICAgICAgICAgIGRvY2tlclJlcG9zaXRvcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tUmVwb3NpdG9yeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiAnaHR0cHM6Ly9naGNyLmlvJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBqb2JTYSA9IG5ldyBTZXJ2aWNlQWNjb3VudCh0aGlzLCAnam9iU2VydmljZUFjY291bnQnLCB7XG4gICAgICAgICAgICBhY2NvdW50SWQ6ICdnaGEtcnVubmVyLWpvYi1zYScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJ1bm5lclJvbGUgPSBuZXcgUHJvamVjdElhbUN1c3RvbVJvbGUodGhpcywgJ3J1bm5lclJvbGUnLCB7XG4gICAgICAgICAgICByb2xlSWQ6ICdnaGFSdW5uZXJSb2xlJyxcbiAgICAgICAgICAgIHRpdGxlOiAnR0hBIFJ1bm5lciBSb2xlJyxcbiAgICAgICAgICAgIHBlcm1pc3Npb25zOiBbXG4gICAgICAgICAgICAgICAgJ2FydGlmYWN0cmVnaXN0cnkuZG9ja2VyaW1hZ2VzLmdldCcsXG4gICAgICAgICAgICAgICAgJ2FydGlmYWN0cmVnaXN0cnkuZG9ja2VyaW1hZ2VzLmxpc3QnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5ydW4nLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5jcmVhdGUnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5kZWxldGUnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5saXN0JyxcbiAgICAgICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICAgICAncnVuLmV4ZWN1dGlvbnMuZ2V0JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGpvYlBvbGljeU1lbWJlciA9IG5ldyBUZXJyYWZvcm1Mb2NhbCh0aGlzLCAnZ2hhTWVtYmVyJywgYHNlcnZpY2VBY2NvdW50OiR7am9iU2EuZW1haWx9YClcblxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAncnVubmVyUm9sZUJpbmRpbmcnLCB7XG4gICAgICAgICAgICBtZW1iZXI6IGpvYlBvbGljeU1lbWJlci50b1N0cmluZygpLFxuICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgIHJvbGU6IHJ1bm5lclJvbGUuaWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ3J1bm5lclJvbGVCaW5kaW5nU3RvcmFnZScsIHtcbiAgICAgICAgICAgIG1lbWJlcjogam9iUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3N0b3JhZ2UuYWRtaW4nLFxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBQcm9qZWN0SWFtTWVtYmVyKHRoaXMsICdydW5uZXJSb2xlQmluZGluZ1J1blNlcnZpY2VBZ2VudCcsIHtcbiAgICAgICAgICAgIG1lbWJlcjogam9iUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3J1bi5zZXJ2aWNlQWdlbnQnLFxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBQcm9qZWN0SWFtTWVtYmVyKHRoaXMsICdydW5uZXJSb2xlQmluZGluZ1J1blZpZXdlcicsIHtcbiAgICAgICAgICAgIG1lbWJlcjogam9iUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3J1bi52aWV3ZXInLFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VOYW1lID0gJ2doYS1ydW5uZXItam9iLWV4dGVybmFscyc7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUJ1Y2tldCA9IG5ldyBUZXJyYWZvcm1Mb2NhbCh0aGlzLCAnYnVja2V0TW9kaWZpY2F0aW9uJywgYENMT1VEU0RLX0NPUkVfRElTQUJMRV9QUk9NUFRTPTEgZ2Nsb3VkIGFscGhhIHN0b3JhZ2UgYnVja2V0cyBjcmVhdGUgZ3M6Ly8ke3N0b3JhZ2VOYW1lfSAtLXByb2plY3Q9JHtwcm9qZWN0fSAtLWxvY2F0aW9uPSR7bG9jYXRpb259IC0tdW5pZm9ybS1idWNrZXQtbGV2ZWwtYWNjZXNzIC0tZW5hYmxlLWhpZXJhcmNoaWNhbC1uYW1lc3BhY2VgKVxuXG4gICAgICAgIC8vIEhpZXJhcmNoaWFsIG5hbWVzcGFjZXMgY2FuJ3QgYmUgZW5hYmxlZCB3aXRoIFRlcnJhZm9ybS5cbiAgICAgICAgY29uc3QgYnVja2V0Q3JlYXRpb24gPSBuZXcgUmVzb3VyY2UodGhpcywgJ2djbG91ZCcsIHtcbiAgICAgICAgICAgIHByb3Zpc2lvbmVyczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJsb2NhbC1leGVjXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGNyZWF0ZUJ1Y2tldC5mcW5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgICAgZnFuOiBjcmVhdGVCdWNrZXQuZnFuXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUT0RPOiBjaGVjayBjYWNoaW5nIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9hcnRpZmFjdC1yZWdpc3RyeS9kb2NzL3B1bGwtY2FjaGVkLWRvY2tlcmh1Yi1pbWFnZXNcbiAgICAgICAgY29uc3QgcnVubmVySm9iID0gbmV3IENsb3VkUnVuVjJKb2IodGhpcywgJ2doYUpvYicsIHtcbiAgICAgICAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBuYW1lOiAnZ2hhLXJ1bm5lci1qb2InLFxuICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICB0ZW1wbGF0ZToge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogYCR7cmVnaXN0cnkubG9jYXRpb259LWRvY2tlci5wa2cuZGV2LyR7cHJvamVjdH0vJHtyZWdpc3RyeS5yZXBvc2l0b3J5SWR9L2hpLWZpL2FjdGlvbnMtcnVubmVyOmNyYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NMT1VEU0RLX1JVTl9SRUdJT04nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnR09PR0xFX0NMT1VEX1BST0pFQ1QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByb2plY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFWFRFUk5BTF9TVE9SQUdFX05BTUUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0b3JhZ2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGVVNFIG1vdW50cyBkaXJlY3RvcnkgYXMgcm9vdCB3aXRoIDc3NyBmbyBkaXJlY3RvcmllcyBhbmQgNTU1IGZvciBvdGhlciBmaWxlcy4gQXMgcGF0aCBpcyBvd25lZCBhbHdheXMgYnkgcm9vdCwgdXRpbWUgb3IgcGVybWlzc2lvbiBjaGFuZ2UgaXMgbm90IHBvc3NpYmxlLiBUaGVzZSBvcHRpb25zIHByZXZlbnQgdGFyIHRvIHRyeSB0aG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVEFSX09QVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICctLXRvdWNoIC0tbm8tb3ZlcndyaXRlLWRpciAtLW5vLXNhbWUtb3duZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZU1vdW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXh0ZXJuYWxzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdW50UGF0aDogJy9ob21lL3J1bm5lci9fd29yay9leHRlcm5hbHMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IFsnL2hvbWUvcnVubmVyL2VwaGVtZXJhbF9ydW5uZXIuc2gnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHU6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeTogJzJHaSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXh0ZXJuYWxzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0OiBzdG9yYWdlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgbWF4UmV0cmllczogMCxcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUFjY291bnQ6IGpvYlNhLmVtYWlsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlcGVuZHNPbjogW1xuICAgICAgICAgICAgICAgIGJ1Y2tldENyZWF0aW9uXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgYXV0b3NjYWxlclNhID0gbmV3IFNlcnZpY2VBY2NvdW50KHRoaXMsICdhdXRvc2NhbGVyU2VydmljZUFjY291bnQnLCB7XG4gICAgICAgICAgICBhY2NvdW50SWQ6ICdhdXRvc2NhbGVyLXNhJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1DdXN0b21Sb2xlKHRoaXMsICdhdXRvc2NhbGVyUm9sZScsIHtcbiAgICAgICAgICAgIHJvbGVJZDogJ2doYUF1dG9zY2FsZXJSb2xlJyxcbiAgICAgICAgICAgIHRpdGxlOiAnR0hBIEF1dG9zY2FsZXIgUm9sZScsXG4gICAgICAgICAgICBwZXJtaXNzaW9uczogW1xuICAgICAgICAgICAgICAgICdhcnRpZmFjdHJlZ2lzdHJ5LmRvY2tlcmltYWdlcy5nZXQnLFxuICAgICAgICAgICAgICAgICdhcnRpZmFjdHJlZ2lzdHJ5LmRvY2tlcmltYWdlcy5saXN0JyxcbiAgICAgICAgICAgICAgICAncnVuLmpvYnMucnVuJyxcbiAgICAgICAgICAgICAgICAncnVuLmpvYnMuY3JlYXRlJyxcbiAgICAgICAgICAgICAgICAncnVuLmpvYnMuZGVsZXRlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGF1dG9zY2FsZXJQb2xpY3lNZW1iZXIgPSBuZXcgVGVycmFmb3JtTG9jYWwodGhpcywgJ2F1dG9zY2FsZXJNZW1iZXInLCBgc2VydmljZUFjY291bnQ6JHthdXRvc2NhbGVyU2EuZW1haWx9YClcblxuICAgICAgICAvLyBUT0RPOiByZXBsYWNlIDIgZm9sbG93aW5nIHdpdGggbW9yZSBzcGVjaWZpYyBvbmVzLlxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAnYXV0b3NjYWxlclJvbGVCaW5kaW5nUnVuJywge1xuICAgICAgICAgICAgbWVtYmVyOiBhdXRvc2NhbGVyUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3J1bi5kZXZlbG9wZXInLFxuICAgICAgICB9KVxuXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ2F1dG9zY2FsZXJSb2xlQmluZGluZ1N0b3JhZ2UnLCB7XG4gICAgICAgICAgICBtZW1iZXI6IGF1dG9zY2FsZXJQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvc3RvcmFnZS5hZG1pbicsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ2F1dG9zY2FsZXJSb2xlQmluZGluZ1J1blNlcnZpY2VBZ2VudCcsIHtcbiAgICAgICAgICAgIG1lbWJlcjogYXV0b3NjYWxlclBvbGljeU1lbWJlci50b1N0cmluZygpLFxuICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgIHJvbGU6ICdyb2xlcy9ydW4uc2VydmljZUFnZW50JyxcbiAgICAgICAgfSlcblxuICAgICAgICBuZXcgQ2xvdWRSdW5TZXJ2aWNlKHRoaXMsICdhdXRvc2NhbGVyU2VydmljZScsIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgbmFtZTogJ2doYS1hdXRvc2NhbGVyJyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3J1bi5nb29nbGVhcGlzLmNvbS9pbmdyZXNzJzogJ2ludGVybmFsJyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcGxhdGU6IHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dG9zY2FsaW5nLmtuYXRpdmUuZGV2L21heFNjYWxlJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dG9zY2FsaW5nLmtuYXRpdmUuZGV2L21pblNjYWxlJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bi5nb29nbGVhcGlzLmNvbS9jcHUtdGhyb3R0bGluZyc6ICdmYWxzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAncnVuLmdvb2dsZWFwaXMuY29tL3N0YXJ0dXAtY3B1LWJvb3N0JzogJ2ZhbHNlJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzcGVjOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckNvbmN1cnJlbmN5OiAxLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGAke3JlZ2lzdHJ5LmxvY2F0aW9ufS1kb2NrZXIucGtnLmRldi8ke3Byb2plY3R9LyR7cmVnaXN0cnkucmVwb3NpdG9yeUlkfS9oaS1maS9naGEtcnVubmVycy1vbi1tYW5hZ2VkLWVudjp0ZXN0YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BBVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGF0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHSVRIVUJfQ09ORklHX1VSTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZ2l0aHViQ29uZmlnVXJsLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdKT0JfTkFNRScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcnVubmVySm9iLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NDQUxFX1NFVF9OQU1FJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnY3ItcnVubmVyLXNldCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NMT1VEU0RLX1JVTl9SRUdJT04nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHT09HTEVfQ0xPVURfUFJPSkVDVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXJ2aWNlIHdvdWxkIHdvcmsgZm9yIG11Y2ggbG93ZXIsIGJ1dCB0aGVzZSBhcmUgbWluaW11bSB2YWx1ZXMgZm9yIFwiYWx3YXlzIG9uXCIgbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdTogJzEwMDBtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeTogJzUxMk1pJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlQWNjb3VudE5hbWU6IGF1dG9zY2FsZXJTYS5lbWFpbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
|
package/lib/lib/variables.js
CHANGED
@@ -8,13 +8,15 @@ function commonVariables(scope) {
|
|
8
8
|
nullable: false,
|
9
9
|
sensitive: true
|
10
10
|
});
|
11
|
+
pat.overrideLogicalId('PAT');
|
11
12
|
const githubConfigUrl = new cdktf_1.TerraformVariable(scope, 'github_config_url', {
|
12
13
|
description: 'Github URL where runners should register to. Format https://<GitHub host>/<your_enterprise/org/repo>',
|
13
14
|
nullable: false,
|
14
15
|
});
|
16
|
+
githubConfigUrl.overrideLogicalId('github_config_url');
|
15
17
|
return {
|
16
18
|
pat,
|
17
19
|
githubConfigUrl
|
18
20
|
};
|
19
21
|
}
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi92YXJpYWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSwwQ0FvQkM7QUE1QkQsaUNBQTBDO0FBUTFDLFNBQWdCLGVBQWUsQ0FBQyxLQUFnQjtJQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLHlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDNUMsV0FBVyxFQUFFLDBEQUEwRDtRQUN2RSxRQUFRLEVBQUUsS0FBSztRQUNmLFNBQVMsRUFBRSxJQUFJO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU3QixNQUFNLGVBQWUsR0FBRyxJQUFJLHlCQUFpQixDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtRQUN0RSxXQUFXLEVBQUUsc0dBQXNHO1FBQ25ILFFBQVEsRUFBRSxLQUFLO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXZELE9BQU87UUFDSCxHQUFHO1FBQ0gsZUFBZTtLQUNsQixDQUFBO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlcnJhZm9ybVZhcmlhYmxlIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZhcmlhYmxlcyB7XG4gICAgcGF0OiBUZXJyYWZvcm1WYXJpYWJsZTtcbiAgICBnaXRodWJDb25maWdVcmw6IFRlcnJhZm9ybVZhcmlhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbW9uVmFyaWFibGVzKHNjb3BlOiBDb25zdHJ1Y3QpOiBWYXJpYWJsZXMge1xuICAgIGNvbnN0IHBhdCA9IG5ldyBUZXJyYWZvcm1WYXJpYWJsZShzY29wZSwgJ1BBVCcsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXRodWIgUEFUIHdpdGggQWN0aW9uczpSZWFkIGFuZCBBZG1pbjpSZWFkK1dyaXRlIHNjb3BlcycsXG4gICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgc2Vuc2l0aXZlOiB0cnVlXG4gICAgfSlcblxuICAgIHBhdC5vdmVycmlkZUxvZ2ljYWxJZCgnUEFUJyk7XG5cbiAgICBjb25zdCBnaXRodWJDb25maWdVcmwgPSBuZXcgVGVycmFmb3JtVmFyaWFibGUoc2NvcGUsICdnaXRodWJfY29uZmlnX3VybCcsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXRodWIgVVJMIHdoZXJlIHJ1bm5lcnMgc2hvdWxkIHJlZ2lzdGVyIHRvLiBGb3JtYXQgaHR0cHM6Ly88R2l0SHViIGhvc3Q+Lzx5b3VyX2VudGVycHJpc2Uvb3JnL3JlcG8+JyxcbiAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgIH0pXG5cbiAgICBnaXRodWJDb25maWdVcmwub3ZlcnJpZGVMb2dpY2FsSWQoJ2dpdGh1Yl9jb25maWdfdXJsJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBwYXQsXG4gICAgICAgIGdpdGh1YkNvbmZpZ1VybFxuICAgIH1cbn1cbiJdfQ==
|
package/lib/tfModules.js
CHANGED
@@ -3,16 +3,32 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const cdktf_1 = require("cdktf");
|
4
4
|
const tf_module_stack_1 = require("@cdktf/tf-module-stack");
|
5
5
|
const azure_1 = require("./lib/azure");
|
6
|
+
const aws_1 = require("./lib/aws");
|
7
|
+
const gcp_1 = require("./lib/gcp");
|
6
8
|
class AzureContainerAppsArc extends tf_module_stack_1.TFModuleStack {
|
7
9
|
constructor(scope, id) {
|
8
10
|
super(scope, id);
|
9
11
|
new azure_1.Azure(this, "aca");
|
10
12
|
}
|
11
13
|
}
|
14
|
+
class ElasticContainerServiceArc extends tf_module_stack_1.TFModuleStack {
|
15
|
+
constructor(scope, id) {
|
16
|
+
super(scope, id);
|
17
|
+
new aws_1.Aws(this, "aws");
|
18
|
+
}
|
19
|
+
}
|
20
|
+
class CloudRunArc extends tf_module_stack_1.TFModuleStack {
|
21
|
+
constructor(scope, id) {
|
22
|
+
super(scope, id);
|
23
|
+
new gcp_1.Gcp(this, "cr");
|
24
|
+
}
|
25
|
+
}
|
12
26
|
const app = new cdktf_1.App();
|
13
27
|
// This is the name the module can be found under.
|
14
28
|
// We expect a "my-awesome-module.md" file in this directory.
|
15
29
|
// The README.md file will be generated from this file.
|
16
30
|
new AzureContainerAppsArc(app, "azure-container-apps");
|
31
|
+
new ElasticContainerServiceArc(app, "elastic-container-service");
|
32
|
+
new CloudRunArc(app, "google-cloud-run");
|
17
33
|
app.synth();
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGZNb2R1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RmTW9kdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUE0QjtBQUU1Qiw0REFBdUQ7QUFDdkQsdUNBQW9DO0FBQ3BDLG1DQUFnQztBQUNoQyxtQ0FBZ0M7QUFFaEMsTUFBTSxxQkFBc0IsU0FBUSwrQkFBYTtJQUMvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksYUFBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLDBCQUEyQixTQUFRLCtCQUFhO0lBQ3BELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxTQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQUVELE1BQU0sV0FBWSxTQUFRLCtCQUFhO0lBQ3JDLFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3RDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxTQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQUVELE1BQU0sR0FBRyxHQUFHLElBQUksV0FBRyxFQUFFLENBQUM7QUFDdEIsbURBQW1EO0FBQ25ELDZEQUE2RDtBQUM3RCx1REFBdUQ7QUFDdkQsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUN2RCxJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0FBQ2pFLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBRXpDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRGTW9kdWxlU3RhY2sgfSBmcm9tIFwiQGNka3RmL3RmLW1vZHVsZS1zdGFja1wiO1xuaW1wb3J0IHsgQXp1cmUgfSBmcm9tIFwiLi9saWIvYXp1cmVcIjtcbmltcG9ydCB7IEF3cyB9IGZyb20gXCIuL2xpYi9hd3NcIjtcbmltcG9ydCB7IEdjcCB9IGZyb20gXCIuL2xpYi9nY3BcIjtcblxuY2xhc3MgQXp1cmVDb250YWluZXJBcHBzQXJjIGV4dGVuZHMgVEZNb2R1bGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF6dXJlKHRoaXMsIFwiYWNhXCIpO1xuICB9XG59XG5cbmNsYXNzIEVsYXN0aWNDb250YWluZXJTZXJ2aWNlQXJjIGV4dGVuZHMgVEZNb2R1bGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF3cyh0aGlzLCBcImF3c1wiKTtcbiAgfVxufVxuXG5jbGFzcyBDbG91ZFJ1bkFyYyBleHRlbmRzIFRGTW9kdWxlU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBHY3AodGhpcywgXCJjclwiKTtcbiAgfVxufVxuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG4vLyBUaGlzIGlzIHRoZSBuYW1lIHRoZSBtb2R1bGUgY2FuIGJlIGZvdW5kIHVuZGVyLiBcbi8vIFdlIGV4cGVjdCBhIFwibXktYXdlc29tZS1tb2R1bGUubWRcIiBmaWxlIGluIHRoaXMgZGlyZWN0b3J5LlxuLy8gVGhlIFJFQURNRS5tZCBmaWxlIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gdGhpcyBmaWxlLlxubmV3IEF6dXJlQ29udGFpbmVyQXBwc0FyYyhhcHAsIFwiYXp1cmUtY29udGFpbmVyLWFwcHNcIik7XG5uZXcgRWxhc3RpY0NvbnRhaW5lclNlcnZpY2VBcmMoYXBwLCBcImVsYXN0aWMtY29udGFpbmVyLXNlcnZpY2VcIik7XG5uZXcgQ2xvdWRSdW5BcmMoYXBwLCBcImdvb2dsZS1jbG91ZC1ydW5cIik7XG5cbmFwcC5zeW50aCgpOyJdfQ==
|
package/main.tf
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
locals {
|
2
|
+
is_ecs = upper(var.runner_platform) == "ECS" ? 1: 0
|
3
|
+
is_aca = upper(var.runner_platform) == "ACA" ? 1: 0
|
4
|
+
is_cr = upper(var.runner_platform) == "GCR" ? 1: 0
|
5
|
+
}
|
6
|
+
|
7
|
+
module "ecs" {
|
8
|
+
count = local.is_ecs
|
9
|
+
source = "./modules/elastic-container-service"
|
10
|
+
PAT = var.PAT
|
11
|
+
github_config_url = var.github_config_url
|
12
|
+
}
|
13
|
+
|
14
|
+
module "aca" {
|
15
|
+
count = local.is_aca
|
16
|
+
source = "./modules/azure-container-apps"
|
17
|
+
PAT = var.PAT
|
18
|
+
github_config_url = var.github_config_url
|
19
|
+
}
|
20
|
+
|
21
|
+
module "gcr" {
|
22
|
+
count = local.is_cr
|
23
|
+
source = "./modules/google-cloud-run"
|
24
|
+
PAT = var.PAT
|
25
|
+
github_config_url = var.github_config_url
|
26
|
+
}
|
@@ -7,7 +7,7 @@
|
|
7
7
|
|
8
8
|
```hcl
|
9
9
|
module "arc_on_aca" {
|
10
|
-
source = "
|
10
|
+
source = "Hi-Fi/serverless-github-actions-runner-controller/cdk//modules/azure-container-apps"
|
11
11
|
}
|
12
12
|
```
|
13
13
|
<!-- BEGIN_TF_DOCS -->
|
@@ -64,9 +64,9 @@ No modules.
|
|
64
64
|
|
65
65
|
| Name | Description | Type | Default | Required |
|
66
66
|
|------|-------------|------|---------|:--------:|
|
67
|
-
| <a name="
|
68
|
-
| <a name="input_aca_github_config_url_7230B339"></a> [aca\_github\_config\_url\_7230B339](#input\_aca\_github\_config\_url\_7230B339) | Github URL where runners should register to. Format https://<GitHub host>/<your\_enterprise/org/repo> | `any` | n/a | yes |
|
67
|
+
| <a name="input_PAT"></a> [PAT](#input\_PAT) | Github PAT with Actions:Read and Admin:Read+Write scopes | `any` | n/a | yes |
|
69
68
|
| <a name="input_aca_location_486B7D73"></a> [aca\_location\_486B7D73](#input\_aca\_location\_486B7D73) | Location where to provision resources to | `string` | `"westeurope"` | no |
|
69
|
+
| <a name="input_github_config_url"></a> [github\_config\_url](#input\_github\_config\_url) | Github URL where runners should register to. Format https://<GitHub host>/<your\_enterprise/org/repo> | `any` | n/a | yes |
|
70
70
|
|
71
71
|
## Outputs
|
72
72
|
|
@@ -329,7 +329,7 @@
|
|
329
329
|
"secret": [
|
330
330
|
{
|
331
331
|
"name": "pat",
|
332
|
-
"value": "${var.
|
332
|
+
"value": "${var.PAT}"
|
333
333
|
}
|
334
334
|
],
|
335
335
|
"template": {
|
@@ -343,7 +343,7 @@
|
|
343
343
|
},
|
344
344
|
{
|
345
345
|
"name": "GITHUB_CONFIG_URL",
|
346
|
-
"value": "${var.
|
346
|
+
"value": "${var.github_config_url}"
|
347
347
|
},
|
348
348
|
{
|
349
349
|
"name": "AZURE_TENANT_ID",
|
@@ -615,21 +615,21 @@
|
|
615
615
|
}
|
616
616
|
},
|
617
617
|
"variable": {
|
618
|
-
"
|
618
|
+
"PAT": {
|
619
619
|
"description": "Github PAT with Actions:Read and Admin:Read+Write scopes",
|
620
620
|
"nullable": false,
|
621
621
|
"sensitive": true
|
622
622
|
},
|
623
|
-
"aca_github_config_url_7230B339": {
|
624
|
-
"description": "Github URL where runners should register to. Format https://<GitHub host>/<your_enterprise/org/repo>",
|
625
|
-
"nullable": false
|
626
|
-
},
|
627
623
|
"aca_location_486B7D73": {
|
628
624
|
"default": "westeurope",
|
629
625
|
"description": "Location where to provision resources to",
|
630
626
|
"nullable": false,
|
631
627
|
"sensitive": false,
|
632
628
|
"type": "string"
|
629
|
+
},
|
630
|
+
"github_config_url": {
|
631
|
+
"description": "Github URL where runners should register to. Format https://<GitHub host>/<your_enterprise/org/repo>",
|
632
|
+
"nullable": false
|
633
633
|
}
|
634
634
|
}
|
635
635
|
}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# Actions Runner Controller (ARC) on Elastic Container Service (ECS)
|
2
|
+
|
3
|
+
> [!WARNING]
|
4
|
+
> This is currently PoC level thing for module publishing. Not ready for production or any use
|
5
|
+
|
6
|
+
## Usage
|
7
|
+
|
8
|
+
```hcl
|
9
|
+
module "arc_on_aca" {
|
10
|
+
source = "Hi-Fi/serverless-github-actions-runner-controller/cdk//modules/elastic-container-service"
|
11
|
+
}
|
12
|
+
```
|
13
|
+
<!-- BEGIN_TF_DOCS -->
|
14
|
+
## Requirements
|
15
|
+
|
16
|
+
| Name | Version |
|
17
|
+
|------|---------|
|
18
|
+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | 5.96.0 |
|
19
|
+
|
20
|
+
## Providers
|
21
|
+
|
22
|
+
| Name | Version |
|
23
|
+
|------|---------|
|
24
|
+
| <a name="provider_aws"></a> [aws](#provider\_aws) | 5.96.0 |
|
25
|
+
|
26
|
+
## Modules
|
27
|
+
|
28
|
+
No modules.
|
29
|
+
|
30
|
+
## Resources
|
31
|
+
|
32
|
+
| Name | Type |
|
33
|
+
|------|------|
|
34
|
+
| [aws_cloudwatch_log_group.aws_AutoscalerLogGroup_BFE58053](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/cloudwatch_log_group) | resource |
|
35
|
+
| [aws_cloudwatch_log_group.aws_RunnerLogGroup_711756A6](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/cloudwatch_log_group) | resource |
|
36
|
+
| [aws_ecs_cluster.aws_Cluster_BA268616](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_cluster) | resource |
|
37
|
+
| [aws_ecs_service.aws_AutoscalerService_C7C3AA3C](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_service) | resource |
|
38
|
+
| [aws_ecs_task_definition.aws_AutoscalerTaskDefinition_24A76F67](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_task_definition) | resource |
|
39
|
+
| [aws_ecs_task_definition.aws_RunnerTaskDefinition_9C7563BE](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/ecs_task_definition) | resource |
|
40
|
+
| [aws_efs_file_system.aws_efs_B3BBB350](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_file_system) | resource |
|
41
|
+
| [aws_efs_file_system.aws_externalsEfs_C15353C9](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_file_system) | resource |
|
42
|
+
| [aws_efs_mount_target.aws_EfsMountTarget_B2BDD3E5](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_mount_target) | resource |
|
43
|
+
| [aws_efs_mount_target.aws_ExternalsEfsMountTarget_2D9AE418](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/efs_mount_target) | resource |
|
44
|
+
| [aws_iam_policy.aws_AutoscalerPolicy_FF16A997](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_policy) | resource |
|
45
|
+
| [aws_iam_policy.aws_RunnerPolicy_7B21DB81](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_policy) | resource |
|
46
|
+
| [aws_iam_role.aws_AutoscalerRole_CEB26423](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role) | resource |
|
47
|
+
| [aws_iam_role.aws_RunnerRole_75263C23](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role) | resource |
|
48
|
+
| [aws_iam_role.aws_TaskExecutionRole_FAB64402](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role) | resource |
|
49
|
+
| [aws_iam_role_policy_attachment.aws_AutoscalerPolicyAttachment_5402A0C0](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role_policy_attachment) | resource |
|
50
|
+
| [aws_iam_role_policy_attachment.aws_RunnerPolicyAttachment_A293771C](https://registry.terraform.io/providers/aws/5.96.0/docs/resources/iam_role_policy_attachment) | resource |
|
51
|
+
| [aws_caller_identity.aws_Identity_FDC445BF](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/caller_identity) | data source |
|
52
|
+
| [aws_region.aws_Region_7477CA06](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/region) | data source |
|
53
|
+
| [aws_security_groups.aws_SecurityGroups_BAABB08D](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/security_groups) | data source |
|
54
|
+
| [aws_subnets.aws_Subnets_75E5377D](https://registry.terraform.io/providers/aws/5.96.0/docs/data-sources/subnets) | data source |
|
55
|
+
|
56
|
+
## Inputs
|
57
|
+
|
58
|
+
| Name | Description | Type | Default | Required |
|
59
|
+
|------|-------------|------|---------|:--------:|
|
60
|
+
| <a name="input_PAT"></a> [PAT](#input\_PAT) | Github PAT with Actions:Read and Admin:Read+Write scopes | `any` | n/a | yes |
|
61
|
+
| <a name="input_github_config_url"></a> [github\_config\_url](#input\_github\_config\_url) | Github URL where runners should register to. Format https://<GitHub host>/<your\_enterprise/org/repo> | `any` | n/a | yes |
|
62
|
+
|
63
|
+
## Outputs
|
64
|
+
|
65
|
+
No outputs.
|
66
|
+
<!-- END_TF_DOCS -->
|