@cloudsnorkel/cdk-github-runners 0.3.2 → 0.4.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/.gitattributes +1 -0
- package/.jsii +1418 -418
- package/API.md +1074 -101
- package/README.md +12 -10
- package/lib/index.d.ts +2 -1
- package/lib/index.js +4 -1
- package/lib/lambdas/aws-image-builder-versioner/index.js +2469 -0
- package/lib/lambdas/build-image/index.js +77 -43
- package/lib/lambdas/delete-runner/index.js +70 -42
- package/lib/lambdas/setup/index.html +9 -9
- package/lib/lambdas/setup/index.js +27 -12
- package/lib/lambdas/status/index.js +103 -45
- package/lib/lambdas/token-retriever/index.js +70 -42
- package/lib/lambdas/update-lambda/index.js +5 -2
- package/lib/lambdas/webhook-handler/index.js +11 -5
- package/lib/providers/codebuild.d.ts +5 -1
- package/lib/providers/codebuild.js +16 -6
- package/lib/providers/common.d.ts +28 -1
- package/lib/providers/common.js +4 -4
- package/lib/providers/fargate.d.ts +5 -1
- package/lib/providers/fargate.js +3 -3
- package/lib/providers/image-builders/codebuild.d.ts +2 -2
- package/lib/providers/image-builders/codebuild.js +5 -4
- package/lib/providers/image-builders/container.d.ts +220 -0
- package/lib/providers/image-builders/container.js +508 -0
- package/lib/providers/image-builders/static.js +2 -3
- package/lib/providers/lambda.d.ts +5 -1
- package/lib/providers/lambda.js +19 -8
- package/lib/runner.js +29 -13
- package/lib/secrets.js +1 -1
- package/package.json +14 -12
|
@@ -17,7 +17,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
}
|
|
18
18
|
return to;
|
|
19
19
|
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
22
|
+
mod
|
|
23
|
+
));
|
|
21
24
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
22
25
|
|
|
23
26
|
// src/lambdas/build-image/index.ts
|
|
@@ -26,17 +29,63 @@ __export(build_image_exports, {
|
|
|
26
29
|
handler: () => handler
|
|
27
30
|
});
|
|
28
31
|
module.exports = __toCommonJS(build_image_exports);
|
|
32
|
+
var AWS2 = __toESM(require("aws-sdk"));
|
|
33
|
+
|
|
34
|
+
// src/lambdas/helpers.ts
|
|
29
35
|
var AWS = __toESM(require("aws-sdk"));
|
|
30
|
-
var
|
|
31
|
-
|
|
36
|
+
var sm = new AWS.SecretsManager();
|
|
37
|
+
async function customResourceRespond(event, responseStatus, reason, physicalResourceId, data) {
|
|
38
|
+
const responseBody = JSON.stringify({
|
|
39
|
+
Status: responseStatus,
|
|
40
|
+
Reason: reason,
|
|
41
|
+
PhysicalResourceId: physicalResourceId,
|
|
42
|
+
StackId: event.StackId,
|
|
43
|
+
RequestId: event.RequestId,
|
|
44
|
+
LogicalResourceId: event.LogicalResourceId,
|
|
45
|
+
NoEcho: false,
|
|
46
|
+
Data: data
|
|
47
|
+
});
|
|
48
|
+
console.log("Responding", responseBody);
|
|
49
|
+
const parsedUrl = require("url").parse(event.ResponseURL);
|
|
50
|
+
const requestOptions = {
|
|
51
|
+
hostname: parsedUrl.hostname,
|
|
52
|
+
path: parsedUrl.path,
|
|
53
|
+
method: "PUT",
|
|
54
|
+
headers: {
|
|
55
|
+
"content-type": "",
|
|
56
|
+
"content-length": responseBody.length
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
try {
|
|
61
|
+
const request = require("https").request(requestOptions, resolve);
|
|
62
|
+
request.on("error", reject);
|
|
63
|
+
request.write(responseBody);
|
|
64
|
+
request.end();
|
|
65
|
+
} catch (e) {
|
|
66
|
+
reject(e);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// src/lambdas/build-image/index.ts
|
|
72
|
+
var codebuild = new AWS2.CodeBuild();
|
|
73
|
+
var ecr = new AWS2.ECR();
|
|
74
|
+
var ib = new AWS2.Imagebuilder();
|
|
32
75
|
async function handler(event, context) {
|
|
33
76
|
try {
|
|
34
|
-
console.log(JSON.stringify(event));
|
|
77
|
+
console.log(JSON.stringify({ ...event, ResponseURL: "..." }));
|
|
78
|
+
const deleteOnly = event.ResourceProperties.DeleteOnly;
|
|
35
79
|
const repoName = event.ResourceProperties.RepoName;
|
|
36
80
|
const projectName = event.ResourceProperties.ProjectName;
|
|
81
|
+
const ibName = event.ResourceProperties.ImageBuilderName;
|
|
37
82
|
switch (event.RequestType) {
|
|
38
83
|
case "Create":
|
|
39
84
|
case "Update":
|
|
85
|
+
if (deleteOnly) {
|
|
86
|
+
await customResourceRespond(event, "SUCCESS", "OK", "Deleter", {});
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
40
89
|
console.log(`Starting CodeBuild project ${projectName}`);
|
|
41
90
|
await codebuild.startBuild({
|
|
42
91
|
projectName,
|
|
@@ -65,54 +114,39 @@ async function handler(event, context) {
|
|
|
65
114
|
}).promise();
|
|
66
115
|
break;
|
|
67
116
|
case "Delete":
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
117
|
+
const ecrImages = await ecr.listImages({ repositoryName: repoName, maxResults: 100 }).promise();
|
|
118
|
+
if (ecrImages.imageIds && ecrImages.imageIds.length > 0) {
|
|
70
119
|
await ecr.batchDeleteImage({
|
|
71
|
-
imageIds:
|
|
120
|
+
imageIds: ecrImages.imageIds.map((i) => {
|
|
72
121
|
return { imageDigest: i.imageDigest };
|
|
73
122
|
}),
|
|
74
123
|
repositoryName: repoName
|
|
75
124
|
}).promise();
|
|
76
125
|
}
|
|
77
|
-
|
|
126
|
+
if (ibName) {
|
|
127
|
+
const ibImages = await ib.listImages({ filters: [{ name: "name", values: [ibName] }] }).promise();
|
|
128
|
+
if (ibImages.imageVersionList) {
|
|
129
|
+
for (const v of ibImages.imageVersionList) {
|
|
130
|
+
if (v.arn) {
|
|
131
|
+
const ibImageVersions = await ib.listImageBuildVersions({ imageVersionArn: v.arn }).promise();
|
|
132
|
+
if (ibImageVersions.imageSummaryList) {
|
|
133
|
+
for (const vs of ibImageVersions.imageSummaryList) {
|
|
134
|
+
if (vs.arn) {
|
|
135
|
+
console.log(`Deleting ${vs.arn}`);
|
|
136
|
+
await ib.deleteImage({ imageBuildVersionArn: vs.arn }).promise();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
await customResourceRespond(event, "SUCCESS", "OK", event.PhysicalResourceId, {});
|
|
78
145
|
break;
|
|
79
146
|
}
|
|
80
147
|
} catch (e) {
|
|
81
|
-
console.
|
|
82
|
-
await
|
|
83
|
-
}
|
|
84
|
-
function respond(responseStatus, reason, physicalResourceId, data) {
|
|
85
|
-
const responseBody = JSON.stringify({
|
|
86
|
-
Status: responseStatus,
|
|
87
|
-
Reason: reason,
|
|
88
|
-
PhysicalResourceId: physicalResourceId,
|
|
89
|
-
StackId: event.StackId,
|
|
90
|
-
RequestId: event.RequestId,
|
|
91
|
-
LogicalResourceId: event.LogicalResourceId,
|
|
92
|
-
NoEcho: false,
|
|
93
|
-
Data: data
|
|
94
|
-
});
|
|
95
|
-
console.log("Responding", responseBody);
|
|
96
|
-
const parsedUrl = require("url").parse(event.ResponseURL);
|
|
97
|
-
const requestOptions = {
|
|
98
|
-
hostname: parsedUrl.hostname,
|
|
99
|
-
path: parsedUrl.path,
|
|
100
|
-
method: "PUT",
|
|
101
|
-
headers: {
|
|
102
|
-
"content-type": "",
|
|
103
|
-
"content-length": responseBody.length
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
return new Promise((resolve, reject) => {
|
|
107
|
-
try {
|
|
108
|
-
const request = require("https").request(requestOptions, resolve);
|
|
109
|
-
request.on("error", reject);
|
|
110
|
-
request.write(responseBody);
|
|
111
|
-
request.end();
|
|
112
|
-
} catch (e) {
|
|
113
|
-
reject(e);
|
|
114
|
-
}
|
|
115
|
-
});
|
|
148
|
+
console.error(e);
|
|
149
|
+
await customResourceRespond(event, "FAILED", e.message || "Internal Error", context.logStreamName, {});
|
|
116
150
|
}
|
|
117
151
|
}
|
|
118
152
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -16,7 +16,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
}
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
20
23
|
|
|
21
24
|
// node_modules/universal-user-agent/dist-node/index.js
|
|
22
25
|
var require_dist_node = __commonJS({
|
|
@@ -5951,11 +5954,14 @@ var require_lib3 = __commonJS({
|
|
|
5951
5954
|
blob() {
|
|
5952
5955
|
let ct = this.headers && this.headers.get("content-type") || "";
|
|
5953
5956
|
return consumeBody.call(this).then(function(buf) {
|
|
5954
|
-
return Object.assign(
|
|
5955
|
-
|
|
5956
|
-
|
|
5957
|
-
|
|
5958
|
-
|
|
5957
|
+
return Object.assign(
|
|
5958
|
+
new Blob([], {
|
|
5959
|
+
type: ct.toLowerCase()
|
|
5960
|
+
}),
|
|
5961
|
+
{
|
|
5962
|
+
[BUFFER]: buf
|
|
5963
|
+
}
|
|
5964
|
+
);
|
|
5959
5965
|
});
|
|
5960
5966
|
},
|
|
5961
5967
|
json() {
|
|
@@ -7012,12 +7018,15 @@ var require_dist_node5 = __commonJS({
|
|
|
7012
7018
|
let status;
|
|
7013
7019
|
let url;
|
|
7014
7020
|
const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;
|
|
7015
|
-
return fetch(requestOptions.url, Object.assign(
|
|
7016
|
-
|
|
7017
|
-
|
|
7018
|
-
|
|
7019
|
-
|
|
7020
|
-
|
|
7021
|
+
return fetch(requestOptions.url, Object.assign(
|
|
7022
|
+
{
|
|
7023
|
+
method: requestOptions.method,
|
|
7024
|
+
body: requestOptions.body,
|
|
7025
|
+
headers: requestOptions.headers,
|
|
7026
|
+
redirect: requestOptions.redirect
|
|
7027
|
+
},
|
|
7028
|
+
requestOptions.request
|
|
7029
|
+
)).then(async (response) => {
|
|
7021
7030
|
url = response.url;
|
|
7022
7031
|
status = response.status;
|
|
7023
7032
|
for (const keyAndValue of response.headers) {
|
|
@@ -7425,7 +7434,7 @@ var require_dist_node6 = __commonJS({
|
|
|
7425
7434
|
parse
|
|
7426
7435
|
});
|
|
7427
7436
|
}
|
|
7428
|
-
var VERSION = "7.0.
|
|
7437
|
+
var VERSION = "7.0.1";
|
|
7429
7438
|
var userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`;
|
|
7430
7439
|
var DEFAULTS = {
|
|
7431
7440
|
method: "GET",
|
|
@@ -7511,7 +7520,7 @@ var require_dist_node8 = __commonJS({
|
|
|
7511
7520
|
var isPlainObject = require_is_plain_object();
|
|
7512
7521
|
var nodeFetch = _interopDefault(require_lib3());
|
|
7513
7522
|
var requestError = require_dist_node7();
|
|
7514
|
-
var VERSION = "6.2.
|
|
7523
|
+
var VERSION = "6.2.1";
|
|
7515
7524
|
function getBufferResponse(response) {
|
|
7516
7525
|
return response.arrayBuffer();
|
|
7517
7526
|
}
|
|
@@ -7524,12 +7533,15 @@ var require_dist_node8 = __commonJS({
|
|
|
7524
7533
|
let status;
|
|
7525
7534
|
let url;
|
|
7526
7535
|
const fetch = requestOptions.request && requestOptions.request.fetch || globalThis.fetch || nodeFetch;
|
|
7527
|
-
return fetch(requestOptions.url, Object.assign(
|
|
7528
|
-
|
|
7529
|
-
|
|
7530
|
-
|
|
7531
|
-
|
|
7532
|
-
|
|
7536
|
+
return fetch(requestOptions.url, Object.assign(
|
|
7537
|
+
{
|
|
7538
|
+
method: requestOptions.method,
|
|
7539
|
+
body: requestOptions.body,
|
|
7540
|
+
headers: requestOptions.headers,
|
|
7541
|
+
redirect: requestOptions.redirect
|
|
7542
|
+
},
|
|
7543
|
+
requestOptions.request
|
|
7544
|
+
)).then(async (response) => {
|
|
7533
7545
|
url = response.url;
|
|
7534
7546
|
status = response.status;
|
|
7535
7547
|
for (const keyAndValue of response.headers) {
|
|
@@ -7980,7 +7992,7 @@ var require_dist_node10 = __commonJS({
|
|
|
7980
7992
|
parse
|
|
7981
7993
|
});
|
|
7982
7994
|
}
|
|
7983
|
-
var VERSION = "7.0.
|
|
7995
|
+
var VERSION = "7.0.1";
|
|
7984
7996
|
var userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`;
|
|
7985
7997
|
var DEFAULTS = {
|
|
7986
7998
|
method: "GET",
|
|
@@ -8066,7 +8078,7 @@ var require_dist_node12 = __commonJS({
|
|
|
8066
8078
|
var isPlainObject = require_is_plain_object();
|
|
8067
8079
|
var nodeFetch = _interopDefault(require_lib3());
|
|
8068
8080
|
var requestError = require_dist_node11();
|
|
8069
|
-
var VERSION = "6.2.
|
|
8081
|
+
var VERSION = "6.2.1";
|
|
8070
8082
|
function getBufferResponse(response) {
|
|
8071
8083
|
return response.arrayBuffer();
|
|
8072
8084
|
}
|
|
@@ -8079,12 +8091,15 @@ var require_dist_node12 = __commonJS({
|
|
|
8079
8091
|
let status;
|
|
8080
8092
|
let url;
|
|
8081
8093
|
const fetch = requestOptions.request && requestOptions.request.fetch || globalThis.fetch || nodeFetch;
|
|
8082
|
-
return fetch(requestOptions.url, Object.assign(
|
|
8083
|
-
|
|
8084
|
-
|
|
8085
|
-
|
|
8086
|
-
|
|
8087
|
-
|
|
8094
|
+
return fetch(requestOptions.url, Object.assign(
|
|
8095
|
+
{
|
|
8096
|
+
method: requestOptions.method,
|
|
8097
|
+
body: requestOptions.body,
|
|
8098
|
+
headers: requestOptions.headers,
|
|
8099
|
+
redirect: requestOptions.redirect
|
|
8100
|
+
},
|
|
8101
|
+
requestOptions.request
|
|
8102
|
+
)).then(async (response) => {
|
|
8088
8103
|
url = response.url;
|
|
8089
8104
|
status = response.status;
|
|
8090
8105
|
for (const keyAndValue of response.headers) {
|
|
@@ -8565,7 +8580,7 @@ var require_dist_node14 = __commonJS({
|
|
|
8565
8580
|
endpoint.headers.authorization = `token ${token}`;
|
|
8566
8581
|
return request2(endpoint);
|
|
8567
8582
|
}
|
|
8568
|
-
var VERSION = "4.0.
|
|
8583
|
+
var VERSION = "4.0.1";
|
|
8569
8584
|
function createOAuthDeviceAuth(options) {
|
|
8570
8585
|
const requestWithDefaults = options.request || request.request.defaults({
|
|
8571
8586
|
headers: {
|
|
@@ -8613,7 +8628,7 @@ var require_dist_node15 = __commonJS({
|
|
|
8613
8628
|
var authOauthDevice = require_dist_node14();
|
|
8614
8629
|
var oauthMethods = require_dist_node13();
|
|
8615
8630
|
var btoa = _interopDefault(require_btoa_node());
|
|
8616
|
-
var VERSION = "2.0.
|
|
8631
|
+
var VERSION = "2.0.3";
|
|
8617
8632
|
async function getAuthentication(state) {
|
|
8618
8633
|
if ("code" in state.strategyOptions) {
|
|
8619
8634
|
const {
|
|
@@ -9792,14 +9807,18 @@ var require_ms = __commonJS({
|
|
|
9792
9807
|
} else if (type === "number" && isFinite(val)) {
|
|
9793
9808
|
return options.long ? fmtLong(val) : fmtShort(val);
|
|
9794
9809
|
}
|
|
9795
|
-
throw new Error(
|
|
9810
|
+
throw new Error(
|
|
9811
|
+
"val is not a non-empty string or a valid number. val=" + JSON.stringify(val)
|
|
9812
|
+
);
|
|
9796
9813
|
};
|
|
9797
9814
|
function parse(str) {
|
|
9798
9815
|
str = String(str);
|
|
9799
9816
|
if (str.length > 100) {
|
|
9800
9817
|
return;
|
|
9801
9818
|
}
|
|
9802
|
-
var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
|
|
9819
|
+
var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
|
|
9820
|
+
str
|
|
9821
|
+
);
|
|
9803
9822
|
if (!match) {
|
|
9804
9823
|
return;
|
|
9805
9824
|
}
|
|
@@ -12739,7 +12758,7 @@ var require_dist_node18 = __commonJS({
|
|
|
12739
12758
|
parse
|
|
12740
12759
|
});
|
|
12741
12760
|
}
|
|
12742
|
-
var VERSION = "7.0.
|
|
12761
|
+
var VERSION = "7.0.1";
|
|
12743
12762
|
var userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`;
|
|
12744
12763
|
var DEFAULTS = {
|
|
12745
12764
|
method: "GET",
|
|
@@ -12825,7 +12844,7 @@ var require_dist_node20 = __commonJS({
|
|
|
12825
12844
|
var isPlainObject = require_is_plain_object();
|
|
12826
12845
|
var nodeFetch = _interopDefault(require_lib3());
|
|
12827
12846
|
var requestError = require_dist_node19();
|
|
12828
|
-
var VERSION = "6.2.
|
|
12847
|
+
var VERSION = "6.2.1";
|
|
12829
12848
|
function getBufferResponse(response) {
|
|
12830
12849
|
return response.arrayBuffer();
|
|
12831
12850
|
}
|
|
@@ -12838,12 +12857,15 @@ var require_dist_node20 = __commonJS({
|
|
|
12838
12857
|
let status;
|
|
12839
12858
|
let url;
|
|
12840
12859
|
const fetch = requestOptions.request && requestOptions.request.fetch || globalThis.fetch || nodeFetch;
|
|
12841
|
-
return fetch(requestOptions.url, Object.assign(
|
|
12842
|
-
|
|
12843
|
-
|
|
12844
|
-
|
|
12845
|
-
|
|
12846
|
-
|
|
12860
|
+
return fetch(requestOptions.url, Object.assign(
|
|
12861
|
+
{
|
|
12862
|
+
method: requestOptions.method,
|
|
12863
|
+
body: requestOptions.body,
|
|
12864
|
+
headers: requestOptions.headers,
|
|
12865
|
+
redirect: requestOptions.redirect
|
|
12866
|
+
},
|
|
12867
|
+
requestOptions.request
|
|
12868
|
+
)).then(async (response) => {
|
|
12847
12869
|
url = response.url;
|
|
12848
12870
|
status = response.status;
|
|
12849
12871
|
for (const keyAndValue of response.headers) {
|
|
@@ -14096,7 +14118,9 @@ var require_dist_node25 = __commonJS({
|
|
|
14096
14118
|
case "app":
|
|
14097
14119
|
return getAppAuthentication(state);
|
|
14098
14120
|
case "oauth":
|
|
14099
|
-
state.log.warn(
|
|
14121
|
+
state.log.warn(
|
|
14122
|
+
new deprecation.Deprecation(`[@octokit/auth-app] {type: "oauth"} is deprecated. Use {type: "oauth-app"} instead`)
|
|
14123
|
+
);
|
|
14100
14124
|
case "oauth-app":
|
|
14101
14125
|
return state.oauthApp({
|
|
14102
14126
|
type: "oauth-app"
|
|
@@ -14169,7 +14193,11 @@ var require_dist_node25 = __commonJS({
|
|
|
14169
14193
|
const {
|
|
14170
14194
|
token,
|
|
14171
14195
|
createdAt
|
|
14172
|
-
} = await getInstallationAuthentication(
|
|
14196
|
+
} = await getInstallationAuthentication(
|
|
14197
|
+
state,
|
|
14198
|
+
{},
|
|
14199
|
+
request2
|
|
14200
|
+
);
|
|
14173
14201
|
endpoint.headers.authorization = `token ${token}`;
|
|
14174
14202
|
return sendRequestWithRetries(state, request2, endpoint, createdAt);
|
|
14175
14203
|
}
|
|
@@ -5,24 +5,24 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Setup GitHub Runners</title>
|
|
7
7
|
<script type="module" crossorigin>
|
|
8
|
-
|
|
8
|
+
(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))i(n);new MutationObserver(n=>{for(const c of n)if(c.type==="childList")for(const p of c.addedNodes)p.tagName==="LINK"&&p.rel==="modulepreload"&&i(p)}).observe(document,{childList:!0,subtree:!0});function o(n){const c={};return n.integrity&&(c.integrity=n.integrity),n.referrerpolicy&&(c.referrerPolicy=n.referrerpolicy),n.crossorigin==="use-credentials"?c.credentials="include":n.crossorigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function i(n){if(n.ep)return;n.ep=!0;const c=o(n);fetch(n.href,c)}})();function ee(){}function Le(e){return e()}function Ce(){return Object.create(null)}function j(e){e.forEach(Le)}function Be(e){return typeof e=="function"}function De(e,t){return e!=e?t==t:e!==t||e&&typeof e=="object"||typeof e=="function"}function Me(e){return Object.keys(e).length===0}function l(e,t){e.appendChild(t)}function H(e,t,o){e.insertBefore(t,o||null)}function T(e){e.parentNode.removeChild(e)}function r(e){return document.createElement(e)}function I(e){return document.createTextNode(e)}function v(){return I(" ")}function $e(){return I("")}function z(e,t,o,i){return e.addEventListener(t,o,i),()=>e.removeEventListener(t,o,i)}function s(e,t,o){o==null?e.removeAttribute(t):e.getAttribute(t)!==o&&e.setAttribute(t,o)}function Ue(e){return e===""?null:+e}function je(e){return Array.from(e.childNodes)}function pe(e,t){t=""+t,e.wholeText!==t&&(e.data=t)}function B(e,t){e.value=t==null?"":t}let ke;function x(e){ke=e}const X=[],Se=[],ae=[],Te=[],qe=Promise.resolve();let be=!1;function Je(){be||(be=!0,qe.then(ze))}function ve(e){ae.push(e)}const he=new Set;let ue=0;function ze(){const e=ke;do{for(;ue<X.length;){const t=X[ue];ue++,x(t),Ke(t.$$)}for(x(null),X.length=0,ue=0;Se.length;)Se.pop()();for(let t=0;t<ae.length;t+=1){const o=ae[t];he.has(o)||(he.add(o),o())}ae.length=0}while(X.length);for(;Te.length;)Te.pop()();be=!1,he.clear(),x(e)}function Ke(e){if(e.fragment!==null){e.update(),j(e.before_update);const t=e.dirty;e.dirty=[-1],e.fragment&&e.fragment.p(e.ctx,t),e.after_update.forEach(ve)}}const We=new Set;function Fe(e,t){e&&e.i&&(We.delete(e),e.i(t))}function Ye(e,t,o,i){const{fragment:n,on_mount:c,on_destroy:p,after_update:u}=e.$$;n&&n.m(t,o),i||ve(()=>{const m=c.map(Le).filter(Be);p?p.push(...m):j(m),e.$$.on_mount=[]}),u.forEach(ve)}function Ze(e,t){const o=e.$$;o.fragment!==null&&(j(o.on_destroy),o.fragment&&o.fragment.d(t),o.on_destroy=o.fragment=null,o.ctx=[])}function Qe(e,t){e.$$.dirty[0]===-1&&(X.push(e),Je(),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<<t%31}function Ve(e,t,o,i,n,c,p,u=[-1]){const m=ke;x(e);const a=e.$$={fragment:null,ctx:null,props:c,update:ee,not_equal:n,bound:Ce(),on_mount:[],on_destroy:[],on_disconnect:[],before_update:[],after_update:[],context:new Map(t.context||(m?m.$$.context:[])),callbacks:Ce(),dirty:u,skip_bound:!1,root:t.target||m.$$.root};p&&p(a.root);let h=!1;if(a.ctx=o?o(e,t.props||{},(g,f,...O)=>{const k=O.length?O[0]:f;return a.ctx&&n(a.ctx[g],a.ctx[g]=k)&&(!a.skip_bound&&a.bound[g]&&a.bound[g](k),h&&Qe(e,g)),f}):[],a.update(),h=!0,j(a.before_update),a.fragment=i?i(a.ctx):!1,t.target){if(t.hydrate){const g=je(t.target);a.fragment&&a.fragment.l(g),g.forEach(T)}else a.fragment&&a.fragment.c();t.intro&&Fe(e.$$.fragment),Ye(e,t.target,t.anchor,t.customElement),ze()}x(m)}class Xe{$destroy(){Ze(this,1),this.$destroy=ee}$on(t,o){const i=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return i.push(o),()=>{const n=i.indexOf(o);n!==-1&&i.splice(n,1)}}$set(t){this.$$set&&!Me(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}function Oe(e){let t,o,i,n,c,p,u,m;return{c(){t=r("h3"),t.textContent="GitHub Enterprise Server Domain",o=v(),i=r("div"),n=r("p"),n.innerHTML=`Where is GitHub Enterprise Server hosted? Type in the domain without <code>https://</code>
|
|
9
9
|
and without any path. It should look something like <code>github.mycompany.com</code>.`,c=v(),p=r("input"),s(p,"class","form-control"),s(i,"class","px-3 py-3")},m(a,h){H(a,t,h),H(a,o,h),H(a,i,h),l(i,n),l(i,c),l(i,p),B(p,e[1]),u||(m=z(p,"input",e[15]),u=!0)},p(a,h){h&2&&p.value!==a[1]&&B(p,a[1])},d(a){a&&T(t),a&&T(o),a&&T(i),u=!1,m()}}}function He(e){let t,o,i,n,c,p,u,m,a,h,g,f,O,k,S,C,d,_,A,E,N;return{c(){t=r("h3"),t.textContent="Authentication Type",o=v(),i=r("div"),n=r("p"),n.textContent=`You can choose between creating a new app that will provide authentication for specific
|
|
10
10
|
repositories, or a personal access token that will provide access to all repositories
|
|
11
11
|
available to you. Apps are easier to set up and provide more fine-grained access control. If
|
|
12
|
-
you have previously created an app, you can choose to use an existing app.`,c=v(),p=r("div"),u=r("input"),m=v(),a=r("label"),a.innerHTML="New GitHub App <b>(recommended)</b>",h=v(),g=r("div"),f=r("input"),O=v(),k=r("label"),k.textContent="Existing GitHub App",S=v(),C=r("div"),d=r("input"),_=v(),A=r("label"),A.textContent="Personal Authentication Token",s(u,"class","form-check-input"),s(u,"type","radio"),u.__value="newApp",u.value=u.__value,s(u,"id","newApp"),e[13][1].push(u),s(a,"class","form-check-label"),s(a,"for","newApp"),s(p,"class","form-check"),s(f,"class","form-check-input"),s(f,"type","radio"),f.__value="existingApp",f.value=f.__value,s(f,"id","existingApp"),e[13][1].push(f),s(k,"class","form-check-label"),s(k,"for","existingApp"),s(g,"class","form-check"),s(d,"class","form-check-input"),s(d,"type","radio"),d.__value="pat",d.value=d.__value,s(d,"id","pat"),e[13][1].push(d),s(A,"class","form-check-label"),s(A,"for","pat"),s(C,"class","form-check"),s(i,"class","px-3 py-3")},m(b,w){H(b,t,w),H(b,o,w),H(b,i,w),l(i,n),l(i,c),l(i,p),l(p,u),u.checked=u.__value===e[2],l(p,m),l(p,a),l(i,h),l(i,g),l(g,f),f.checked=f.__value===e[2],l(g,O),l(g,k),l(i,S),l(i,C),l(C,d),d.checked=d.__value===e[2],l(C,_),l(C,A),E||(N=[z(u,"change",e[16]),z(f,"change",e[17]),z(d,"change",e[18])],E=!0)},p(b,w){w&4&&(u.checked=u.__value===b[2]),w&4&&(f.checked=f.__value===b[2]),w&4&&(d.checked=d.__value===b[2])},d(b){b&&T(t),b&&T(o),b&&T(i),e[13][1].splice(e[13][1].indexOf(u),1),e[13][1].splice(e[13][1].indexOf(f),1),e[13][1].splice(e[13][1].indexOf(d),1),E=!1,j(N)}}}function
|
|
13
|
-
scope enabled. Don't forget to also create a webhook as described in `),f=r("a"),f.textContent="SETUP_GITHUB.md",O=I("."),k=v(),S=r("input"),s(p,"href",m="https://"+e[1]+"/settings/tokens"),s(f,"href","https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md"),s(S,"class","form-control"),s(S,"placeholder","Token e.g. ghp_abcdefghijklmnopqrstuvwxyz1234567890"),s(i,"class","px-3 py-3")},m(_,A){H(_,t,A),H(_,o,A),H(_,i,A),l(i,n),l(n,c),l(n,p),l(p,u),l(n,a),l(n,h),l(n,g),l(n,f),l(n,O),l(i,k),l(i,S),B(S,e[7]),C||(d=z(S,"input",e[25]),C=!0)},p(_,A){A&2&&m!==(m="https://"+_[1]+"/settings/tokens")&&s(p,"href",m),A&128&&S.value!==_[7]&&B(S,_[7])},d(_){_&&T(t),_&&T(o),_&&T(i),C=!1,d()}}}function
|
|
14
|
-
permissions. Don't forget to set up the webhook and its secret as described in <a href="https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md">SETUP_GITHUB.md</a>.`,c=v(),p=r("div"),u=r("label"),u.textContent="App Id",m=v(),a=r("div"),h=r("input"),g=v(),f=r("div"),O=r("label"),O.textContent="Private Key",k=v(),S=r("div"),C=r("textarea"),s(u,"for","appid"),s(u,"class","col-sm-2 col-form-label"),s(h,"type","number"),s(h,"class","form-control"),s(h,"id","appid"),s(a,"class","col-sm-10"),s(p,"class","form-group row px-3 py-2"),s(O,"for","pk"),s(O,"class","col-sm-2 col-form-label"),s(C,"class","form-control"),s(C,"id","pk"),s(C,"rows","10"),s(S,"class","col-sm-10"),s(f,"class","form-group row px-3 py-2"),s(i,"class","px-3 py-3")},m(A,E){H(A,t,E),H(A,o,E),H(A,i,E),l(i,n),l(i,c),l(i,p),l(p,u),l(p,m),l(p,a),l(a,h),B(h,e[5]),l(i,g),l(i,f),l(f,O),l(f,k),l(f,S),l(S,C),B(C,e[6]),d||(_=[z(h,"input",e[23]),z(C,"input",e[24])],d=!0)},p(A,E){E&32&&Ue(h.value)!==A[5]&&B(h,A[5]),E&64&&B(C,A[6])},d(A){A&&T(t),A&&T(o),A&&T(i),d=!1,j(_)}}}function
|
|
12
|
+
you have previously created an app, you can choose to use an existing app.`,c=v(),p=r("div"),u=r("input"),m=v(),a=r("label"),a.innerHTML="New GitHub App <b>(recommended)</b>",h=v(),g=r("div"),f=r("input"),O=v(),k=r("label"),k.textContent="Existing GitHub App",S=v(),C=r("div"),d=r("input"),_=v(),A=r("label"),A.textContent="Personal Authentication Token",s(u,"class","form-check-input"),s(u,"type","radio"),u.__value="newApp",u.value=u.__value,s(u,"id","newApp"),e[13][1].push(u),s(a,"class","form-check-label"),s(a,"for","newApp"),s(p,"class","form-check"),s(f,"class","form-check-input"),s(f,"type","radio"),f.__value="existingApp",f.value=f.__value,s(f,"id","existingApp"),e[13][1].push(f),s(k,"class","form-check-label"),s(k,"for","existingApp"),s(g,"class","form-check"),s(d,"class","form-check-input"),s(d,"type","radio"),d.__value="pat",d.value=d.__value,s(d,"id","pat"),e[13][1].push(d),s(A,"class","form-check-label"),s(A,"for","pat"),s(C,"class","form-check"),s(i,"class","px-3 py-3")},m(b,w){H(b,t,w),H(b,o,w),H(b,i,w),l(i,n),l(i,c),l(i,p),l(p,u),u.checked=u.__value===e[2],l(p,m),l(p,a),l(i,h),l(i,g),l(g,f),f.checked=f.__value===e[2],l(g,O),l(g,k),l(i,S),l(i,C),l(C,d),d.checked=d.__value===e[2],l(C,_),l(C,A),E||(N=[z(u,"change",e[16]),z(f,"change",e[17]),z(d,"change",e[18])],E=!0)},p(b,w){w&4&&(u.checked=u.__value===b[2]),w&4&&(f.checked=f.__value===b[2]),w&4&&(d.checked=d.__value===b[2])},d(b){b&&T(t),b&&T(o),b&&T(i),e[13][1].splice(e[13][1].indexOf(u),1),e[13][1].splice(e[13][1].indexOf(f),1),e[13][1].splice(e[13][1].indexOf(d),1),E=!1,j(N)}}}function xe(e){let t,o,i,n,c,p,u,m,a,h,g,f,O,k,S,C,d;return{c(){t=r("h2"),t.textContent="Personal Access Token",o=v(),i=r("div"),n=r("p"),c=I("The "),p=r("a"),u=I("personal access token"),a=I(" must have the "),h=r("code"),h.textContent="repo",g=I(`
|
|
13
|
+
scope enabled. Don't forget to also create a webhook as described in `),f=r("a"),f.textContent="SETUP_GITHUB.md",O=I("."),k=v(),S=r("input"),s(p,"href",m="https://"+e[1]+"/settings/tokens"),s(f,"href","https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md"),s(S,"class","form-control"),s(S,"placeholder","Token e.g. ghp_abcdefghijklmnopqrstuvwxyz1234567890"),s(i,"class","px-3 py-3")},m(_,A){H(_,t,A),H(_,o,A),H(_,i,A),l(i,n),l(n,c),l(n,p),l(p,u),l(n,a),l(n,h),l(n,g),l(n,f),l(n,O),l(i,k),l(i,S),B(S,e[7]),C||(d=z(S,"input",e[25]),C=!0)},p(_,A){A&2&&m!==(m="https://"+_[1]+"/settings/tokens")&&s(p,"href",m),A&128&&S.value!==_[7]&&B(S,_[7])},d(_){_&&T(t),_&&T(o),_&&T(i),C=!1,d()}}}function et(e){let t,o,i,n,c,p,u,m,a,h,g,f,O,k,S,C,d,_;return{c(){t=r("h3"),t.textContent="Existing App Details",o=v(),i=r("div"),n=r("p"),n.innerHTML=`Existing apps must have <code>actions</code> and <code>administration</code> write
|
|
14
|
+
permissions. Don't forget to set up the webhook and its secret as described in <a href="https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md">SETUP_GITHUB.md</a>.`,c=v(),p=r("div"),u=r("label"),u.textContent="App Id",m=v(),a=r("div"),h=r("input"),g=v(),f=r("div"),O=r("label"),O.textContent="Private Key",k=v(),S=r("div"),C=r("textarea"),s(u,"for","appid"),s(u,"class","col-sm-2 col-form-label"),s(h,"type","number"),s(h,"class","form-control"),s(h,"id","appid"),s(a,"class","col-sm-10"),s(p,"class","form-group row px-3 py-2"),s(O,"for","pk"),s(O,"class","col-sm-2 col-form-label"),s(C,"class","form-control"),s(C,"id","pk"),s(C,"rows","10"),s(S,"class","col-sm-10"),s(f,"class","form-group row px-3 py-2"),s(i,"class","px-3 py-3")},m(A,E){H(A,t,E),H(A,o,E),H(A,i,E),l(i,n),l(i,c),l(i,p),l(p,u),l(p,m),l(p,a),l(a,h),B(h,e[5]),l(i,g),l(i,f),l(f,O),l(f,k),l(f,S),l(S,C),B(C,e[6]),d||(_=[z(h,"input",e[23]),z(C,"input",e[24])],d=!0)},p(A,E){E&32&&Ue(h.value)!==A[5]&&B(h,A[5]),E&64&&B(C,A[6])},d(A){A&&T(t),A&&T(o),A&&T(i),d=!1,j(_)}}}function tt(e){let t,o,i,n,c,p,u,m,a,h,g,f,O,k,S,C,d,_,A,E=e[0]==="ghes"&&Ne(e),N=e[3]==="org"&&Ie(e);return{c(){t=r("h3"),t.textContent="New App Settings",o=v(),i=r("div"),n=r("p"),n.textContent=`Choose whether to create a new personal app or organization app. A private personal app can
|
|
15
15
|
only be used for repositories under your user. A private origination app can only be used
|
|
16
|
-
for repositories under that organization.`,c=v(),p=r("div"),u=r("input"),m=v(),a=r("label"),a.textContent="User app",h=v(),g=r("div"),f=r("input"),O=v(),k=r("label"),k.textContent="Organization app",S=v(),E&&E.c(),C=v(),N&&N.c(),d
|
|
16
|
+
for repositories under that organization.`,c=v(),p=r("div"),u=r("input"),m=v(),a=r("label"),a.textContent="User app",h=v(),g=r("div"),f=r("input"),O=v(),k=r("label"),k.textContent="Organization app",S=v(),E&&E.c(),C=v(),N&&N.c(),d=$e(),s(u,"class","form-check-input"),s(u,"type","radio"),u.__value="user",u.value=u.__value,s(u,"id","userScope"),e[13][2].push(u),s(a,"class","form-check-label"),s(a,"for","userScope"),s(p,"class","form-check"),s(f,"class","form-check-input"),s(f,"type","radio"),f.__value="org",f.value=f.__value,s(f,"id","orgScope"),e[13][2].push(f),s(k,"class","form-check-label"),s(k,"for","orgScope"),s(g,"class","form-check"),s(i,"class","px-3 py-3")},m(b,w){H(b,t,w),H(b,o,w),H(b,i,w),l(i,n),l(i,c),l(i,p),l(p,u),u.checked=u.__value===e[3],l(p,m),l(p,a),l(i,h),l(i,g),l(g,f),f.checked=f.__value===e[3],l(g,O),l(g,k),l(i,S),E&&E.m(i,null),H(b,C,w),N&&N.m(b,w),H(b,d,w),_||(A=[z(u,"change",e[19]),z(f,"change",e[20])],_=!0)},p(b,w){w&8&&(u.checked=u.__value===b[3]),w&8&&(f.checked=f.__value===b[3]),b[0]==="ghes"?E?E.p(b,w):(E=Ne(b),E.c(),E.m(i,null)):E&&(E.d(1),E=null),b[3]==="org"?N?N.p(b,w):(N=Ie(b),N.c(),N.m(d.parentNode,d)):N&&(N.d(1),N=null)},d(b){b&&T(t),b&&T(o),b&&T(i),e[13][2].splice(e[13][2].indexOf(u),1),e[13][2].splice(e[13][2].indexOf(f),1),E&&E.d(),b&&T(C),N&&N.d(b),b&&T(d),_=!1,j(A)}}}function Ne(e){let t,o,i,n,c,p,u,m;return{c(){t=r("p"),t.textContent=`If multiple organizations under the same GitHub Enterprise Server need to use the runners,
|
|
17
17
|
you can make the app public.`,o=v(),i=r("div"),n=r("input"),c=v(),p=r("label"),p.textContent="Public app",s(t,"class","pt-2"),s(n,"class","form-check-input"),s(n,"type","checkbox"),s(n,"id","public"),s(p,"class","form-check-label"),s(p,"for","public"),s(i,"class","form-check")},m(a,h){H(a,t,h),H(a,o,h),H(a,i,h),l(i,n),B(n,e[10].public),l(i,c),l(i,p),u||(m=z(n,"change",e[21]),u=!0)},p(a,h){h&1024&&B(n,a[10].public)},d(a){a&&T(t),a&&T(o),a&&T(i),u=!1,m()}}}function Ie(e){let t,o,i,n,c,p,u,m,a,h,g,f,O,k,S,C;return{c(){t=r("h3"),t.textContent="Organization name",o=v(),i=r("div"),n=r("p"),c=I(`What is the slug for your organization? If your repositories have a URL like
|
|
18
18
|
`),p=r("code"),u=I("https://"),m=I(e[1]),a=I("/MyOrg/my-repo"),h=I(`
|
|
19
|
-
then your organization slug is `),g=r("code"),g.textContent="MyOrg",f=I("."),O=v(),k=r("input"),s(k,"class","form-control"),s(i,"class","px-3 py-3")},m(d,_){H(d,t,_),H(d,o,_),H(d,i,_),l(i,n),l(n,c),l(n,p),l(p,u),l(p,m),l(p,a),l(n,h),l(n,g),l(n,f),l(i,O),l(i,k),B(k,e[4]),S||(C=z(k,"input",e[22]),S=!0)},p(d,_){_&2&&pe(m,d[1]),_&16&&k.value!==d[4]&&B(k,d[4])},d(d){d&&T(t),d&&T(o),d&&T(i),S=!1,C()}}}function
|
|
19
|
+
then your organization slug is `),g=r("code"),g.textContent="MyOrg",f=I("."),O=v(),k=r("input"),s(k,"class","form-control"),s(i,"class","px-3 py-3")},m(d,_){H(d,t,_),H(d,o,_),H(d,i,_),l(i,n),l(n,c),l(n,p),l(p,u),l(p,m),l(p,a),l(n,h),l(n,g),l(n,f),l(i,O),l(i,k),B(k,e[4]),S||(C=z(k,"input",e[22]),S=!0)},p(d,_){_&2&&pe(m,d[1]),_&16&&k.value!==d[4]&&B(k,d[4])},d(d){d&&T(t),d&&T(o),d&&T(i),S=!1,C()}}}function nt(e){let t,o,i;return{c(){t=r("div"),o=I(e[9]),s(t,"class",i="alert alert-"+(e[8]?"success":"danger")),s(t,"role","alert")},m(n,c){H(n,t,c),l(t,o)},p(n,c){c&512&&pe(o,n[9]),c&256&&i!==(i="alert alert-"+(n[8]?"success":"danger"))&&s(t,"class",i)},d(n){n&&T(t)}}}function lt(e){let t;return{c(){t=r("p"),t.textContent="This button will be enabled once all the questions above are answered."},m(o,i){H(o,t,i)},p:ee,d(o){o&&T(t)}}}function Ge(e){let t,o,i,n,c,p;return{c(){t=r("p"),o=r("b"),o.textContent="WARNING:",i=I(" using a public app means anyone with access to "),n=r("code"),c=I(e[1]),p=I(`
|
|
20
20
|
can use the runners you're setting up now. Anyone can create a workflow that will run on those runners,
|
|
21
21
|
have access to their instance profile, and be part of their security group. Consider the security
|
|
22
|
-
implications before continuing.`),s(o,"class","text-danger")},m(u,m){H(u,t,m),l(t,o),l(t,i),l(t,n),l(n,c),l(t,p)},p(u,m){m&2&&pe(c,u[1])},d(u){u&&T(t)}}}function
|
|
22
|
+
implications before continuing.`),s(o,"class","text-danger")},m(u,m){H(u,t,m),l(t,o),l(t,i),l(t,n),l(n,c),l(t,p)},p(u,m){m&2&&pe(c,u[1])},d(u){u&&T(t)}}}function it(e){let t,o,i,n,c,p,u,m,a,h,g,f,O,k,S,C,d,_,A,E,N,b,w,te,q,ne,Y,Z,Q,V,M,D,ce,fe,J,le=Pe(e[2])+"",de,ie,ye,K,W,oe,se,_e,we,R=e[0]==="ghes"&&Oe(e),P=e[0]&&He(e);function Ee(y,G){if(y[2]==="newApp")return tt;if(y[2]==="existingApp")return et;if(y[2]==="pat")return xe}let F=Ee(e),L=F&&F(e);function Ae(y,G){return y[9]===void 0?lt:nt}let re=Ae(e),$=re(e),U=e[10].public&&e[2]==="newApp"&&Ge(e);return{c(){t=r("main"),o=r("div"),i=r("div"),n=r("form"),c=r("h1"),c.textContent="Setup GitHub Runners",p=v(),u=r("p"),m=I(`Answer all the questions on this page to automatically configure GitHub integration and get the
|
|
23
23
|
runners working. This page will not be accessible once you complete this operation. If you ever want
|
|
24
|
-
to access it again, edit `),a=r("code"),a.textContent=`${
|
|
25
|
-
Enterprise Server?`,C=v(),d=r("div"),_=r("input"),A=v(),E=r("label"),E.textContent="GitHub.com",N=v(),b=r("div"),w=r("input"),te=v(),q=r("label"),q.textContent="GitHub Enterprise Server",ne=v(),R&&R.c(),Y=v(),P&&P.c(),Z=v(),L&&L.c(),Q=v(),V=r("h2"),V.textContent="Finish Setup",M=v(),D=r("div"),$.c(),ce=v(),U&&U.c(),fe=v(),J=r("button"),de=I(le),ye=v(),K=r("form"),W=r("input"),s(_,"class","form-check-input"),s(_,"type","radio"),_.__value="github.com",_.value=_.__value,s(_,"id","github.com"),e[13][0].push(_),s(E,"class","form-check-label"),s(E,"for","github.com"),s(d,"class","form-check"),s(w,"class","form-check-input"),s(w,"type","radio"),w.__value="ghes",w.value=w.__value,s(w,"id","ghes"),e[13][0].push(w),s(q,"class","form-check-label"),s(q,"for","ghes"),s(b,"class","form-check"),s(k,"class","px-3 py-3"),s(J,"type","submit"),s(J,"class","btn btn-success"),J.disabled=ie=Re(e[0],e[2],e[5],e[6],e[7],e[8]),s(D,"class","px-3 py-3"),s(n,"class","col"),s(i,"class","row"),s(o,"class","container py-3 px-2"),s(W,"type","hidden"),s(W,"name","manifest"),W.value=oe=JSON.stringify(e[10]),s(K,"action",se="https://"+e[1]+"/"+(e[3]==="org"?`organizations/${e[4]}/`:"")+"settings/apps/new?state="+ge),s(K,"method","post"),s(K,"id","appform")},m(y,G){H(y,t,G),l(t,o),l(o,i),l(i,n),l(n,c),l(n,p),l(n,u),l(u,m),l(u,a),l(u,h),l(n,g),l(n,f),l(n,O),l(n,k),l(k,S),l(k,C),l(k,d),l(d,_),_.checked=_.__value===e[0],l(d,A),l(d,E),l(k,N),l(k,b),l(b,w),w.checked=w.__value===e[0],l(b,te),l(b,q),l(n,ne),R&&R.m(n,null),l(n,Y),P&&P.m(n,null),l(n,Z),L&&L.m(n,null),l(n,Q),l(n,V),l(n,M),l(n,D),$.m(D,null),l(D,ce),U&&U.m(D,null),l(D,fe),l(D,J),l(J,de),l(t,ye),l(t,K),l(K,W),_e||(we=[z(_,"change",e[12]),z(w,"change",e[14]),z(n,"submit",e[11])],_e=!0)},p(y,[G]){G&1&&(_.checked=_.__value===y[0]),G&1&&(w.checked=w.__value===y[0]),y[0]==="ghes"?R?R.p(y,G):(R=Oe(y),R.c(),R.m(n,Y)):R&&(R.d(1),R=null),y[0]?P?P.p(y,G):(P=He(y),P.c(),P.m(n,Z)):P&&(P.d(1),P=null),F===(F=Ee(y))&&L?L.p(y,G):(L&&L.d(1),L=F&&F(y),L&&(L.c(),L.m(n,Q))),re===(re=Ae(y))&&$?$.p(y,G):($.d(1),$=re(y),$&&($.c(),$.m(D,ce))),y[10].public&&y[2]==="newApp"?U?U.p(y,G):(U=Ge(y),U.c(),U.m(D,fe)):U&&(U.d(1),U=null),G&4&&le!==(le=Pe(y[2])+"")&&pe(de,le),G&485&&ie!==(ie=Re(y[0],y[2],y[5],y[6],y[7],y[8]))&&(J.disabled=ie),G&1024&&oe!==(oe=JSON.stringify(y[10]))&&(W.value=oe),G&26&&se!==(se="https://"+y[1]+"/"+(y[3]==="org"?`organizations/${y[4]}/`:"")+"settings/apps/new?state="+ge)&&s(K,"action",se)},i:ee,o:ee,d(y){y&&T(t),e[13][0].splice(e[13][0].indexOf(_),1),e[13][0].splice(e[13][0].indexOf(w),1),R&&R.d(),P&&P.d(),L&&L.d(),$.d(),U&&U.d(),_e=!1,j(we)}}}const
|
|
24
|
+
to access it again, edit `),a=r("code"),a.textContent=`${ot}`,h=I(" and run the status function again."),g=v(),f=r("h3"),f.textContent="Choose GitHub Instance",O=v(),k=r("div"),S=r("p"),S.textContent=`Are your repositories hosted on GitHub.com or are you using an on-premise installation of GitHub
|
|
25
|
+
Enterprise Server?`,C=v(),d=r("div"),_=r("input"),A=v(),E=r("label"),E.textContent="GitHub.com",N=v(),b=r("div"),w=r("input"),te=v(),q=r("label"),q.textContent="GitHub Enterprise Server",ne=v(),R&&R.c(),Y=v(),P&&P.c(),Z=v(),L&&L.c(),Q=v(),V=r("h2"),V.textContent="Finish Setup",M=v(),D=r("div"),$.c(),ce=v(),U&&U.c(),fe=v(),J=r("button"),de=I(le),ye=v(),K=r("form"),W=r("input"),s(_,"class","form-check-input"),s(_,"type","radio"),_.__value="github.com",_.value=_.__value,s(_,"id","github.com"),e[13][0].push(_),s(E,"class","form-check-label"),s(E,"for","github.com"),s(d,"class","form-check"),s(w,"class","form-check-input"),s(w,"type","radio"),w.__value="ghes",w.value=w.__value,s(w,"id","ghes"),e[13][0].push(w),s(q,"class","form-check-label"),s(q,"for","ghes"),s(b,"class","form-check"),s(k,"class","px-3 py-3"),s(J,"type","submit"),s(J,"class","btn btn-success"),J.disabled=ie=Re(e[0],e[2],e[5],e[6],e[7],e[8]),s(D,"class","px-3 py-3"),s(n,"class","col"),s(i,"class","row"),s(o,"class","container py-3 px-2"),s(W,"type","hidden"),s(W,"name","manifest"),W.value=oe=JSON.stringify(e[10]),s(K,"action",se="https://"+e[1]+"/"+(e[3]==="org"?`organizations/${e[4]}/`:"")+"settings/apps/new?state="+ge),s(K,"method","post"),s(K,"id","appform")},m(y,G){H(y,t,G),l(t,o),l(o,i),l(i,n),l(n,c),l(n,p),l(n,u),l(u,m),l(u,a),l(u,h),l(n,g),l(n,f),l(n,O),l(n,k),l(k,S),l(k,C),l(k,d),l(d,_),_.checked=_.__value===e[0],l(d,A),l(d,E),l(k,N),l(k,b),l(b,w),w.checked=w.__value===e[0],l(b,te),l(b,q),l(n,ne),R&&R.m(n,null),l(n,Y),P&&P.m(n,null),l(n,Z),L&&L.m(n,null),l(n,Q),l(n,V),l(n,M),l(n,D),$.m(D,null),l(D,ce),U&&U.m(D,null),l(D,fe),l(D,J),l(J,de),l(t,ye),l(t,K),l(K,W),_e||(we=[z(_,"change",e[12]),z(w,"change",e[14]),z(n,"submit",e[11])],_e=!0)},p(y,[G]){G&1&&(_.checked=_.__value===y[0]),G&1&&(w.checked=w.__value===y[0]),y[0]==="ghes"?R?R.p(y,G):(R=Oe(y),R.c(),R.m(n,Y)):R&&(R.d(1),R=null),y[0]?P?P.p(y,G):(P=He(y),P.c(),P.m(n,Z)):P&&(P.d(1),P=null),F===(F=Ee(y))&&L?L.p(y,G):(L&&L.d(1),L=F&&F(y),L&&(L.c(),L.m(n,Q))),re===(re=Ae(y))&&$?$.p(y,G):($.d(1),$=re(y),$&&($.c(),$.m(D,ce))),y[10].public&&y[2]==="newApp"?U?U.p(y,G):(U=Ge(y),U.c(),U.m(D,fe)):U&&(U.d(1),U=null),G&4&&le!==(le=Pe(y[2])+"")&&pe(de,le),G&485&&ie!==(ie=Re(y[0],y[2],y[5],y[6],y[7],y[8]))&&(J.disabled=ie),G&1024&&oe!==(oe=JSON.stringify(y[10]))&&(W.value=oe),G&26&&se!==(se="https://"+y[1]+"/"+(y[3]==="org"?`organizations/${y[4]}/`:"")+"settings/apps/new?state="+ge)&&s(K,"action",se)},i:ee,o:ee,d(y){y&&T(t),e[13][0].splice(e[13][0].indexOf(_),1),e[13][0].splice(e[13][0].indexOf(w),1),R&&R.d(),P&&P.d(),L&&L.d(),$.d(),U&&U.d(),_e=!1,j(we)}}}const ot="INSERT_SECRET_ARN_HERE",ge="INSERT_TOKEN_HERE";function Re(e,t,o,i,n,c){return c||e===void 0||t===void 0?!0:t==="newApp"?!1:t==="existingApp"?o===""||i==="":t==="pat"?n==="":(console.error("Something is broken",e,t,o),!0)}function Pe(e){return e==="newApp"?"Create GitHub App":"Setup"}function me(e,t){return new Promise((o,i)=>{fetch(`${e}?token=${ge}`,{method:"POST",mode:"same-origin",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),redirect:"error"}).then(n=>{n.ok?n.text().then(o).catch(i):n.text().then(c=>{i(new Error(`${c} [${n.status}]`))}).catch(i)}).catch(i)})}function st(e,t,o){let i,n="INSERT_DOMAIN_HERE",c,p="user",u="ORGANIZATION",m="",a="",h="",g,f;const O={url:"https://github.com/CloudSnorkel/cdk-github-runners",hook_attributes:{url:"INSERT_WEBHOOK_URL_HERE"},redirect_url:"INSERT_BASE_URL_HERE/complete-new-app",public:!1,default_permissions:{actions:"write",administration:"write"},default_events:["workflow_job"]};function k(Q){Q.preventDefault();function V(){const M=i==="ghes"?n:"github.com";switch(c){case"newApp":return me("domain",{domain:M}).then(D=>(document.getElementById("appform").submit(),Promise.resolve("Redirecting to GitHub...")));case"existingApp":return me("app",{appid:m,pk:a,domain:M});case"pat":return me("pat",{pat:h,domain:M})}}V().then(M=>{o(9,f=M),o(8,g=!0)}).catch(M=>{o(9,f=`${M}`),o(8,g=!1)})}const S=[[],[],[]];function C(){i=this.__value,o(0,i)}function d(){i=this.__value,o(0,i)}function _(){n=this.value,o(1,n)}function A(){c=this.__value,o(2,c)}function E(){c=this.__value,o(2,c)}function N(){c=this.__value,o(2,c)}function b(){p=this.__value,o(3,p)}function w(){p=this.__value,o(3,p)}function te(){O.public=this.value,o(10,O)}function q(){u=this.value,o(4,u)}function ne(){m=Ue(this.value),o(5,m)}function Y(){a=this.value,o(6,a)}function Z(){h=this.value,o(7,h)}return[i,n,c,p,u,m,a,h,g,f,O,k,C,S,d,_,A,E,N,b,w,te,q,ne,Y,Z]}class rt extends Xe{constructor(t){super(),Ve(this,t,st,it,De,{})}}new rt({target:document.getElementById("app")});
|
|
26
26
|
|
|
27
27
|
</script>
|
|
28
28
|
<style type="text/css">
|
|
@@ -16,7 +16,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
}
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
20
23
|
|
|
21
24
|
// node_modules/universal-user-agent/dist-node/index.js
|
|
22
25
|
var require_dist_node = __commonJS({
|
|
@@ -6089,11 +6092,14 @@ var require_lib3 = __commonJS({
|
|
|
6089
6092
|
blob() {
|
|
6090
6093
|
let ct = this.headers && this.headers.get("content-type") || "";
|
|
6091
6094
|
return consumeBody.call(this).then(function(buf) {
|
|
6092
|
-
return Object.assign(
|
|
6093
|
-
|
|
6094
|
-
|
|
6095
|
-
|
|
6096
|
-
|
|
6095
|
+
return Object.assign(
|
|
6096
|
+
new Blob([], {
|
|
6097
|
+
type: ct.toLowerCase()
|
|
6098
|
+
}),
|
|
6099
|
+
{
|
|
6100
|
+
[BUFFER]: buf
|
|
6101
|
+
}
|
|
6102
|
+
);
|
|
6097
6103
|
});
|
|
6098
6104
|
},
|
|
6099
6105
|
json() {
|
|
@@ -7150,12 +7156,15 @@ var require_dist_node5 = __commonJS({
|
|
|
7150
7156
|
let status;
|
|
7151
7157
|
let url;
|
|
7152
7158
|
const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;
|
|
7153
|
-
return fetch(requestOptions.url, Object.assign(
|
|
7154
|
-
|
|
7155
|
-
|
|
7156
|
-
|
|
7157
|
-
|
|
7158
|
-
|
|
7159
|
+
return fetch(requestOptions.url, Object.assign(
|
|
7160
|
+
{
|
|
7161
|
+
method: requestOptions.method,
|
|
7162
|
+
body: requestOptions.body,
|
|
7163
|
+
headers: requestOptions.headers,
|
|
7164
|
+
redirect: requestOptions.redirect
|
|
7165
|
+
},
|
|
7166
|
+
requestOptions.request
|
|
7167
|
+
)).then(async (response2) => {
|
|
7159
7168
|
url = response2.url;
|
|
7160
7169
|
status = response2.status;
|
|
7161
7170
|
for (const keyAndValue of response2.headers) {
|
|
@@ -8885,6 +8894,9 @@ async function handleRoot(event, setupToken) {
|
|
|
8885
8894
|
}
|
|
8886
8895
|
function decodeBody(event) {
|
|
8887
8896
|
let body = event.body;
|
|
8897
|
+
if (!body) {
|
|
8898
|
+
throw new Error("No body found");
|
|
8899
|
+
}
|
|
8888
8900
|
if (event.isBase64Encoded) {
|
|
8889
8901
|
body = Buffer.from(body, "base64").toString("utf-8");
|
|
8890
8902
|
}
|
|
@@ -8914,6 +8926,9 @@ async function handlePat(event) {
|
|
|
8914
8926
|
return response(200, "Personal access token set");
|
|
8915
8927
|
}
|
|
8916
8928
|
async function handleNewApp(event) {
|
|
8929
|
+
if (!event.queryStringParameters) {
|
|
8930
|
+
return response(400, "Invalid code");
|
|
8931
|
+
}
|
|
8917
8932
|
const code = event.queryStringParameters.code;
|
|
8918
8933
|
if (!code) {
|
|
8919
8934
|
return response(400, "Invalid code");
|