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/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2NwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9nY3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBdUM7QUFDdkMsMkNBQXVDO0FBQ3ZDLGtFQUFvRTtBQUNwRSwwR0FBcUc7QUFDckcsa0ZBQTRFO0FBQzVFLGdHQUEwRjtBQUMxRixnRkFBNEU7QUFDNUUsc0ZBQWlGO0FBQ2pGLDJDQUE4QztBQUM5QyxvRkFBK0U7QUFDL0UsZ0VBQWlFO0FBQ2pFLGdFQUE0RDtBQUU1RCxNQUFhLEdBQUksU0FBUSxzQkFBUztJQUM5QixZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUNwQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQztRQUNqQyxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQztRQUVyQyxJQUFJLHlCQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUMvQixPQUFPO1lBQ1AsTUFBTSxFQUFFLFFBQVE7U0FDbkIsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBWSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUU5QixNQUFNLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUEsMkJBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLHlEQUEwQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDOUQsTUFBTSxFQUFFLFFBQVE7WUFDaEIsSUFBSSxFQUFFLG1CQUFtQjtZQUN6QixZQUFZLEVBQUUsaUJBQWlCO1lBQy9CLFdBQVcsRUFBRSwyREFBMkQ7WUFDeEUsc0JBQXNCLEVBQUU7Z0JBQ3BCLGdCQUFnQixFQUFFO29CQUNkLGdCQUFnQixFQUFFO3dCQUNkLEdBQUcsRUFBRSxpQkFBaUI7cUJBQ3pCO2lCQUNKO2FBQ0o7U0FDSixDQUFDLENBQUM7UUFFSCxNQUFNLEtB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QixLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUs7aUNBQy9CO2dDQUNEO29DQUNJLElBQUksRUFBRSxVQUFVO29DQUNoQixLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUk7aUNBQ3hCO2dDQUNEO29DQUNJLElBQUksRUFBRSxnQkFBZ0I7b0NBQ3RCLEtBQUssRUFBRSxlQUFlO2lDQUN6QjtnQ0FDRDtvQ0FDSSxJQUFJLEVBQUUscUJBQXFCO29DQUMzQixLQUFLLEVBQUUsUUFBUTtpQ0FDbEI7Z0NBQ0Q7b0NBQ0ksSUFBSSxFQUFFLHNCQUFzQjtvQ0FDNUIsS0FBSyxFQUFFLE9BQU87aUNBQ2pCOzZCQUVKOzRCQUNELFNBQVMsRUFBRTtnQ0FDUCx1RkFBdUY7Z0NBQ3ZGLE1BQU0sRUFBRTtvQ0FDSixHQUFHLEVBQUUsT0FBTztvQ0FDWixNQUFNLEVBQUUsT0FBTztpQ0FDbEI7NkJBQ0o7eUJBQ0o7cUJBQ0o7b0JBQ0Qsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLEtBQUs7aUJBQ3pDO2FBQ0o7U0FDSixDQUFDLENBQUE7SUFDTixDQUFDOztBQTVQTCxrQkE2UEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXJyYWZvcm1Mb2NhbCB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEdvb2dsZVByb3ZpZGVyIH0gZnJvbSAnQGNka3RmL3Byb3ZpZGVyLWdvb2dsZS9saWIvcHJvdmlkZXInXG5pbXBvcnQgeyBBcnRpZmFjdFJlZ2lzdHJ5UmVwb3NpdG9yeSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9hcnRpZmFjdC1yZWdpc3RyeS1yZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBDbG91ZFJ1blYySm9iIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL2Nsb3VkLXJ1bi12Mi1qb2JcIjtcbmltcG9ydCB7IFByb2plY3RJYW1DdXN0b21Sb2xlIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1nb29nbGUvbGliL3Byb2plY3QtaWFtLWN1c3RvbS1yb2xlXCI7XG5pbXBvcnQgeyBTZXJ2aWNlQWNjb3VudCB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9zZXJ2aWNlLWFjY291bnRcIjtcbmltcG9ydCB7IFByb2plY3RJYW1NZW1iZXIgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWdvb2dsZS9saWIvcHJvamVjdC1pYW0tbWVtYmVyXCI7XG5pbXBvcnQgeyBjb21tb25WYXJpYWJsZXMgfSBmcm9tIFwiLi92YXJpYWJsZXNcIjtcbmltcG9ydCB7IENsb3VkUnVuU2VydmljZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItZ29vZ2xlL2xpYi9jbG91ZC1ydW4tc2VydmljZVwiO1xuaW1wb3J0IHsgTnVsbFByb3ZpZGVyIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1udWxsL2xpYi9wcm92aWRlclwiO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tICdAY2RrdGYvcHJvdmlkZXItbnVsbC9saWIvcmVzb3VyY2UnXG5cbmV4cG9ydCBjbGFzcyBHY3AgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9ICdldXJvcGUtbm9ydGgxJztcbiAgICAgICAgY29uc3QgcHJvamVjdCA9ICdnaGEtcnVubmVyLWV4YW1wbGUnO1xuICAgICAgICBcbiAgICAgICAgbmV3IEdvb2dsZVByb3ZpZGVyKHRoaXMsICdnb29nbGUnLCB7XG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcmVnaW9uOiBsb2NhdGlvblxuICAgICAgICB9KTtcblxuICAgICAgICBuZXcgTnVsbFByb3ZpZGVyKHRoaXMsICdudWxsJylcblxuICAgICAgICBjb25zdCB7IHBhdCwgZ2l0aHViQ29uZmlnVXJsIH0gPSBjb21tb25WYXJpYWJsZXModGhpcyk7XG5cbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBuZXcgQXJ0aWZhY3RSZWdpc3RyeVJlcG9zaXRvcnkodGhpcywgJ3JlZ2lzdHJ5Jywge1xuICAgICAgICAgICAgZm9ybWF0OiAnRE9DS0VSJyxcbiAgICAgICAgICAgIG1vZGU6ICdSRU1PVEVfUkVQT1NJVE9SWScsXG4gICAgICAgICAgICByZXBvc2l0b3J5SWQ6ICdnaGEtcnVubmVyLXRlc3QnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXBvc2l0b3J5IHRvIGhvc3QgcnVuIGFuZCByZXN1bHRpbmcgaW1hZ2VzIGZyb20gR0hBIHJ1bnMnLFxuICAgICAgICAgICAgcmVtb3RlUmVwb3NpdG9yeUNvbmZpZzoge1xuICAgICAgICAgICAgICAgIGRvY2tlclJlcG9zaXRvcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tUmVwb3NpdG9yeToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiAnaHR0cHM6Ly9naGNyLmlvJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBqb2JTYSA9IG5ldyBTZXJ2aWNlQWNjb3VudCh0aGlzLCAnam9iU2VydmljZUFjY291bnQnLCB7XG4gICAgICAgICAgICBhY2NvdW50SWQ6ICdnaGEtcnVubmVyLWpvYi1zYScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJ1bm5lclJvbGUgPSBuZXcgUHJvamVjdElhbUN1c3RvbVJvbGUodGhpcywgJ3J1bm5lclJvbGUnLCB7XG4gICAgICAgICAgICByb2xlSWQ6ICdnaGFSdW5uZXJSb2xlJyxcbiAgICAgICAgICAgIHRpdGxlOiAnR0hBIFJ1bm5lciBSb2xlJyxcbiAgICAgICAgICAgIHBlcm1pc3Npb25zOiBbXG4gICAgICAgICAgICAgICAgJ2FydGlmYWN0cmVnaXN0cnkuZG9ja2VyaW1hZ2VzLmdldCcsXG4gICAgICAgICAgICAgICAgJ2FydGlmYWN0cmVnaXN0cnkuZG9ja2VyaW1hZ2VzLmxpc3QnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5ydW4nLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5jcmVhdGUnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5kZWxldGUnLFxuICAgICAgICAgICAgICAgICdydW4uam9icy5saXN0JyxcbiAgICAgICAgICAgICAgICAvLyBOZWVkZWQgZm9yIHdhaXRpbmdcbiAgICAgICAgICAgICAgICAncnVuLmV4ZWN1dGlvbnMuZ2V0JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGpvYlBvbGljeU1lbWJlciA9IG5ldyBUZXJyYWZvcm1Mb2NhbCh0aGlzLCAnZ2hhTWVtYmVyJywgYHNlcnZpY2VBY2NvdW50OiR7am9iU2EuZW1haWx9YClcblxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAncnVubmVyUm9sZUJpbmRpbmcnLCB7XG4gICAgICAgICAgICBtZW1iZXI6IGpvYlBvbGljeU1lbWJlci50b1N0cmluZygpLFxuICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgIHJvbGU6IHJ1bm5lclJvbGUuaWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ3J1bm5lclJvbGVCaW5kaW5nU3RvcmFnZScsIHtcbiAgICAgICAgICAgIG1lbWJlcjogam9iUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3N0b3JhZ2UuYWRtaW4nLFxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBQcm9qZWN0SWFtTWVtYmVyKHRoaXMsICdydW5uZXJSb2xlQmluZGluZ1J1blNlcnZpY2VBZ2VudCcsIHtcbiAgICAgICAgICAgIG1lbWJlcjogam9iUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3J1bi5zZXJ2aWNlQWdlbnQnLFxuICAgICAgICB9KVxuXG4gICAgICAgIG5ldyBQcm9qZWN0SWFtTWVtYmVyKHRoaXMsICdydW5uZXJSb2xlQmluZGluZ1J1blZpZXdlcicsIHtcbiAgICAgICAgICAgIG1lbWJlcjogam9iUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3J1bi52aWV3ZXInLFxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VOYW1lID0gJ2doYS1ydW5uZXItam9iLWV4dGVybmFscyc7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUJ1Y2tldCA9IG5ldyBUZXJyYWZvcm1Mb2NhbCh0aGlzLCAnYnVja2V0TW9kaWZpY2F0aW9uJywgYENMT1VEU0RLX0NPUkVfRElTQUJMRV9QUk9NUFRTPTEgZ2Nsb3VkIGFscGhhIHN0b3JhZ2UgYnVja2V0cyBjcmVhdGUgZ3M6Ly8ke3N0b3JhZ2VOYW1lfSAtLXByb2plY3Q9JHtwcm9qZWN0fSAtLWxvY2F0aW9uPSR7bG9jYXRpb259IC0tdW5pZm9ybS1idWNrZXQtbGV2ZWwtYWNjZXNzIC0tZW5hYmxlLWhpZXJhcmNoaWNhbC1uYW1lc3BhY2VgKVxuXG4gICAgICAgIC8vIEhpZXJhcmNoaWFsIG5hbWVzcGFjZXMgY2FuJ3QgYmUgZW5hYmxlZCB3aXRoIFRlcnJhZm9ybS5cbiAgICAgICAgY29uc3QgYnVja2V0Q3JlYXRpb24gPSBuZXcgUmVzb3VyY2UodGhpcywgJ2djbG91ZCcsIHtcbiAgICAgICAgICAgIHByb3Zpc2lvbmVyczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJsb2NhbC1leGVjXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IGNyZWF0ZUJ1Y2tldC5mcW5cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgICAgZnFuOiBjcmVhdGVCdWNrZXQuZnFuXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBUT0RPOiBjaGVjayBjYWNoaW5nIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9hcnRpZmFjdC1yZWdpc3RyeS9kb2NzL3B1bGwtY2FjaGVkLWRvY2tlcmh1Yi1pbWFnZXNcbiAgICAgICAgY29uc3QgcnVubmVySm9iID0gbmV3IENsb3VkUnVuVjJKb2IodGhpcywgJ2doYUpvYicsIHtcbiAgICAgICAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICBuYW1lOiAnZ2hhLXJ1bm5lci1qb2InLFxuICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICB0ZW1wbGF0ZToge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogYCR7cmVnaXN0cnkubG9jYXRpb259LWRvY2tlci5wa2cuZGV2LyR7cHJvamVjdH0vJHtyZWdpc3RyeS5yZXBvc2l0b3J5SWR9L2hpLWZpL2FjdGlvbnMtcnVubmVyOmNyYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NMT1VEU0RLX1JVTl9SRUdJT04nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnR09PR0xFX0NMT1VEX1BST0pFQ1QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHByb2plY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdFWFRFUk5BTF9TVE9SQUdFX05BTUUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0b3JhZ2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGVVNFIG1vdW50cyBkaXJlY3RvcnkgYXMgcm9vdCB3aXRoIDc3NyBmbyBkaXJlY3RvcmllcyBhbmQgNTU1IGZvciBvdGhlciBmaWxlcy4gQXMgcGF0aCBpcyBvd25lZCBhbHdheXMgYnkgcm9vdCwgdXRpbWUgb3IgcGVybWlzc2lvbiBjaGFuZ2UgaXMgbm90IHBvc3NpYmxlLiBUaGVzZSBvcHRpb25zIHByZXZlbnQgdGFyIHRvIHRyeSB0aG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVEFSX09QVElPTlMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICctLXRvdWNoIC0tbm8tb3ZlcndyaXRlLWRpciAtLW5vLXNhbWUtb3duZXInXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZU1vdW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXh0ZXJuYWxzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdW50UGF0aDogJy9ob21lL3J1bm5lci9fd29yay9leHRlcm5hbHMnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IFsnL2hvbWUvcnVubmVyL2VwaGVtZXJhbF9ydW5uZXIuc2gnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHU6ICcxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeTogJzJHaSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHZvbHVtZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZXh0ZXJuYWxzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVja2V0OiBzdG9yYWdlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgbWF4UmV0cmllczogMCxcbiAgICAgICAgICAgICAgICAgICAgc2VydmljZUFjY291bnQ6IGpvYlNhLmVtYWlsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlcGVuZHNPbjogW1xuICAgICAgICAgICAgICAgIGJ1Y2tldENyZWF0aW9uXG4gICAgICAgICAgICBdXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgYXV0b3NjYWxlclNhID0gbmV3IFNlcnZpY2VBY2NvdW50KHRoaXMsICdhdXRvc2NhbGVyU2VydmljZUFjY291bnQnLCB7XG4gICAgICAgICAgICBhY2NvdW50SWQ6ICdhdXRvc2NhbGVyLXNhJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1DdXN0b21Sb2xlKHRoaXMsICdhdXRvc2NhbGVyUm9sZScsIHtcbiAgICAgICAgICAgIHJvbGVJZDogJ2doYUF1dG9zY2FsZXJSb2xlJyxcbiAgICAgICAgICAgIHRpdGxlOiAnR0hBIEF1dG9zY2FsZXIgUm9sZScsXG4gICAgICAgICAgICBwZXJtaXNzaW9uczogW1xuICAgICAgICAgICAgICAgICdhcnRpZmFjdHJlZ2lzdHJ5LmRvY2tlcmltYWdlcy5nZXQnLFxuICAgICAgICAgICAgICAgICdhcnRpZmFjdHJlZ2lzdHJ5LmRvY2tlcmltYWdlcy5saXN0JyxcbiAgICAgICAgICAgICAgICAncnVuLmpvYnMucnVuJyxcbiAgICAgICAgICAgICAgICAncnVuLmpvYnMuY3JlYXRlJyxcbiAgICAgICAgICAgICAgICAncnVuLmpvYnMuZGVsZXRlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGF1dG9zY2FsZXJQb2xpY3lNZW1iZXIgPSBuZXcgVGVycmFmb3JtTG9jYWwodGhpcywgJ2F1dG9zY2FsZXJNZW1iZXInLCBgc2VydmljZUFjY291bnQ6JHthdXRvc2NhbGVyU2EuZW1haWx9YClcblxuICAgICAgICAvLyBUT0RPOiByZXBsYWNlIDIgZm9sbG93aW5nIHdpdGggbW9yZSBzcGVjaWZpYyBvbmVzLlxuICAgICAgICBuZXcgUHJvamVjdElhbU1lbWJlcih0aGlzLCAnYXV0b3NjYWxlclJvbGVCaW5kaW5nUnVuJywge1xuICAgICAgICAgICAgbWVtYmVyOiBhdXRvc2NhbGVyUG9saWN5TWVtYmVyLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgcm9sZTogJ3JvbGVzL3J1bi5kZXZlbG9wZXInLFxuICAgICAgICB9KVxuXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ2F1dG9zY2FsZXJSb2xlQmluZGluZ1N0b3JhZ2UnLCB7XG4gICAgICAgICAgICBtZW1iZXI6IGF1dG9zY2FsZXJQb2xpY3lNZW1iZXIudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHByb2plY3QsXG4gICAgICAgICAgICByb2xlOiAncm9sZXMvc3RvcmFnZS5hZG1pbicsXG4gICAgICAgIH0pXG5cbiAgICAgICAgbmV3IFByb2plY3RJYW1NZW1iZXIodGhpcywgJ2F1dG9zY2FsZXJSb2xlQmluZGluZ1J1blNlcnZpY2VBZ2VudCcsIHtcbiAgICAgICAgICAgIG1lbWJlcjogYXV0b3NjYWxlclBvbGljeU1lbWJlci50b1N0cmluZygpLFxuICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgIHJvbGU6ICdyb2xlcy9ydW4uc2VydmljZUFnZW50JyxcbiAgICAgICAgfSlcblxuICAgICAgICBuZXcgQ2xvdWRSdW5TZXJ2aWNlKHRoaXMsICdhdXRvc2NhbGVyU2VydmljZScsIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgbmFtZTogJ2doYS1hdXRvc2NhbGVyJyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3J1bi5nb29nbGVhcGlzLmNvbS9pbmdyZXNzJzogJ2ludGVybmFsJyxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcGxhdGU6IHtcbiAgICAgICAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dG9zY2FsaW5nLmtuYXRpdmUuZGV2L21heFNjYWxlJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dG9zY2FsaW5nLmtuYXRpdmUuZGV2L21pblNjYWxlJzogJzEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3J1bi5nb29nbGVhcGlzLmNvbS9jcHUtdGhyb3R0bGluZyc6ICdmYWxzZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAncnVuLmdvb2dsZWFwaXMuY29tL3N0YXJ0dXAtY3B1LWJvb3N0JzogJ2ZhbHNlJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzcGVjOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckNvbmN1cnJlbmN5OiAxLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGAke3JlZ2lzdHJ5LmxvY2F0aW9ufS1kb2NrZXIucGtnLmRldi8ke3Byb2plY3R9LyR7cmVnaXN0cnkucmVwb3NpdG9yeUlkfS9oaS1maS9naGEtcnVubmVycy1vbi1tYW5hZ2VkLWVudjp0ZXN0YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1BBVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcGF0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHSVRIVUJfQ09ORklHX1VSTCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZ2l0aHViQ29uZmlnVXJsLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdKT0JfTkFNRScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcnVubmVySm9iLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NDQUxFX1NFVF9OQU1FJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnY3ItcnVubmVyLXNldCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NMT1VEU0RLX1JVTl9SRUdJT04nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdHT09HTEVfQ0xPVURfUFJPSkVDVCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcHJvamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXJ2aWNlIHdvdWxkIHdvcmsgZm9yIG11Y2ggbG93ZXIsIGJ1dCB0aGVzZSBhcmUgbWluaW11bSB2YWx1ZXMgZm9yIFwiYWx3YXlzIG9uXCIgbW9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdTogJzEwMDBtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeTogJzUxMk1pJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlQWNjb3VudE5hbWU6IGF1dG9zY2FsZXJTYS5lbWFpbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi92YXJpYWJsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSwwQ0FnQkM7QUF4QkQsaUNBQTBDO0FBUTFDLFNBQWdCLGVBQWUsQ0FBQyxLQUFnQjtJQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLHlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7UUFDNUMsV0FBVyxFQUFFLDBEQUEwRDtRQUN2RSxRQUFRLEVBQUUsS0FBSztRQUNmLFNBQVMsRUFBRSxJQUFJO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLE1BQU0sZUFBZSxHQUFHLElBQUkseUJBQWlCLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFO1FBQ3RFLFdBQVcsRUFBRSxzR0FBc0c7UUFDbkgsUUFBUSxFQUFFLEtBQUs7S0FDbEIsQ0FBQyxDQUFBO0lBRUYsT0FBTztRQUNILEdBQUc7UUFDSCxlQUFlO0tBQ2xCLENBQUE7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVycmFmb3JtVmFyaWFibGUgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFyaWFibGVzIHtcbiAgICBwYXQ6IFRlcnJhZm9ybVZhcmlhYmxlO1xuICAgIGdpdGh1YkNvbmZpZ1VybDogVGVycmFmb3JtVmFyaWFibGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tb25WYXJpYWJsZXMoc2NvcGU6IENvbnN0cnVjdCk6IFZhcmlhYmxlcyB7XG4gICAgY29uc3QgcGF0ID0gbmV3IFRlcnJhZm9ybVZhcmlhYmxlKHNjb3BlLCAnUEFUJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ0dpdGh1YiBQQVQgd2l0aCBBY3Rpb25zOlJlYWQgYW5kIEFkbWluOlJlYWQrV3JpdGUgc2NvcGVzJyxcbiAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICBzZW5zaXRpdmU6IHRydWVcbiAgICB9KVxuXG4gICAgY29uc3QgZ2l0aHViQ29uZmlnVXJsID0gbmV3IFRlcnJhZm9ybVZhcmlhYmxlKHNjb3BlLCAnZ2l0aHViX2NvbmZpZ191cmwnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2l0aHViIFVSTCB3aGVyZSBydW5uZXJzIHNob3VsZCByZWdpc3RlciB0by4gRm9ybWF0IGh0dHBzOi8vPEdpdEh1YiBob3N0Pi88eW91cl9lbnRlcnByaXNlL29yZy9yZXBvPicsXG4gICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcGF0LFxuICAgICAgICBnaXRodWJDb25maWdVcmxcbiAgICB9XG59XG4iXX0=
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGZNb2R1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RmTW9kdWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGlDQUE0QjtBQUU1Qiw0REFBdUQ7QUFDdkQsdUNBQW9DO0FBRXBDLE1BQU0scUJBQXNCLFNBQVEsK0JBQWE7SUFDL0MsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLGFBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFHLEVBQUUsQ0FBQztBQUN0QixtREFBbUQ7QUFDbkQsNkRBQTZEO0FBQzdELHVEQUF1RDtBQUN2RCxJQUFJLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3ZELEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFRGTW9kdWxlU3RhY2sgfSBmcm9tIFwiQGNka3RmL3RmLW1vZHVsZS1zdGFja1wiO1xuaW1wb3J0IHsgQXp1cmUgfSBmcm9tIFwiLi9saWIvYXp1cmVcIjtcblxuY2xhc3MgQXp1cmVDb250YWluZXJBcHBzQXJjIGV4dGVuZHMgVEZNb2R1bGVTdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IEF6dXJlKHRoaXMsIFwiYWNhXCIpO1xuICB9XG59XG5cbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbi8vIFRoaXMgaXMgdGhlIG5hbWUgdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQgdW5kZXIuIFxuLy8gV2UgZXhwZWN0IGEgXCJteS1hd2Vzb21lLW1vZHVsZS5tZFwiIGZpbGUgaW4gdGhpcyBkaXJlY3RvcnkuXG4vLyBUaGUgUkVBRE1FLm1kIGZpbGUgd2lsbCBiZSBnZW5lcmF0ZWQgZnJvbSB0aGlzIGZpbGUuXG5uZXcgQXp1cmVDb250YWluZXJBcHBzQXJjKGFwcCwgXCJhenVyZS1jb250YWluZXItYXBwc1wiKTtcbmFwcC5zeW50aCgpOyJdfQ==
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 = "juho.saarinen/terraform-cdk-serverless-github-actions-runner-controller.git//modules/azure-container-apps"
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="input_aca_PAT_B54A3B25"></a> [aca\_PAT\_B54A3B25](#input\_aca\_PAT\_B54A3B25) | Github PAT with Actions:Read and Admin:Read+Write scopes | `any` | n/a | yes |
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.aca_PAT_B54A3B25}"
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.aca_github_config_url_7230B339}"
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
- "aca_PAT_B54A3B25": {
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 -->