@cloudsnorkel/cdk-github-runners 0.12.5 → 0.13.1
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 +331 -193
- package/API.md +20 -0
- package/assets/idle-runner-repear.lambda/index.js +44 -11
- package/assets/image-builders/aws-image-builder/delete-ami.lambda/index.js +9 -4
- package/assets/image-builders/aws-image-builder/filter-failed-builds.lambda/index.js +1 -1
- package/assets/image-builders/aws-image-builder/versioner.lambda/index.js +1 -1
- package/assets/image-builders/build-image.lambda/index.js +11 -27
- package/assets/providers/ami-root-device.lambda/index.js +1 -1
- package/assets/providers/update-lambda.lambda/index.js +1 -1
- package/assets/setup.lambda/index.html +1 -1
- package/assets/webhook-handler.lambda/index.js +29 -11
- package/lib/access.js +1 -1
- package/lib/idle-runner-repear.lambda.js +45 -12
- package/lib/image-builders/api.js +1 -1
- package/lib/image-builders/aws-image-builder/builder.d.ts +2 -1
- package/lib/image-builders/aws-image-builder/builder.js +23 -10
- package/lib/image-builders/aws-image-builder/common.js +3 -2
- package/lib/image-builders/aws-image-builder/container.d.ts +1 -3
- package/lib/image-builders/aws-image-builder/container.js +3 -2
- package/lib/image-builders/aws-image-builder/delete-ami.lambda.js +10 -5
- package/lib/image-builders/aws-image-builder/deprecated/ami.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/container.js +3 -3
- package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
- package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
- package/lib/image-builders/aws-image-builder/filter-failed-builds.lambda.js +2 -2
- package/lib/image-builders/aws-image-builder/versioner.lambda.js +2 -2
- package/lib/image-builders/build-image.lambda.d.ts +11 -0
- package/lib/image-builders/build-image.lambda.js +12 -30
- package/lib/image-builders/codebuild-deprecated.js +1 -1
- package/lib/image-builders/codebuild.d.ts +1 -0
- package/lib/image-builders/codebuild.js +51 -26
- package/lib/image-builders/common.d.ts +10 -0
- package/lib/image-builders/common.js +1 -1
- package/lib/image-builders/components.js +1 -1
- package/lib/image-builders/static.js +1 -1
- package/lib/providers/ami-root-device.lambda.js +2 -2
- package/lib/providers/codebuild.js +2 -2
- package/lib/providers/common.js +7 -6
- package/lib/providers/ec2.js +2 -2
- package/lib/providers/ecs.js +1 -1
- package/lib/providers/fargate.js +2 -2
- package/lib/providers/lambda.js +13 -10
- package/lib/providers/update-lambda.lambda.js +2 -2
- package/lib/runner.js +44 -19
- package/lib/secrets.js +1 -1
- package/lib/utils.d.ts +19 -1
- package/lib/utils.js +32 -2
- package/lib/webhook-handler.lambda.js +30 -12
- package/lib/webhook.js +5 -3
- package/package.json +17 -17
package/API.md
CHANGED
|
@@ -7802,6 +7802,7 @@ const runnerImageBuilderProps: RunnerImageBuilderProps = { ... }
|
|
|
7802
7802
|
| <code><a href="#@cloudsnorkel/cdk-github-runners.RunnerImageBuilderProps.property.securityGroups">securityGroups</a></code> | <code>aws-cdk-lib.aws_ec2.ISecurityGroup[]</code> | Security Groups to assign to this instance. |
|
|
7803
7803
|
| <code><a href="#@cloudsnorkel/cdk-github-runners.RunnerImageBuilderProps.property.subnetSelection">subnetSelection</a></code> | <code>aws-cdk-lib.aws_ec2.SubnetSelection</code> | Where to place the network interfaces within the VPC. |
|
|
7804
7804
|
| <code><a href="#@cloudsnorkel/cdk-github-runners.RunnerImageBuilderProps.property.vpc">vpc</a></code> | <code>aws-cdk-lib.aws_ec2.IVpc</code> | VPC to build the image in. |
|
|
7805
|
+
| <code><a href="#@cloudsnorkel/cdk-github-runners.RunnerImageBuilderProps.property.waitOnDeploy">waitOnDeploy</a></code> | <code>boolean</code> | Wait for image to finish building during deployment. |
|
|
7805
7806
|
|
|
7806
7807
|
---
|
|
7807
7808
|
|
|
@@ -8013,6 +8014,25 @@ VPC to build the image in.
|
|
|
8013
8014
|
|
|
8014
8015
|
---
|
|
8015
8016
|
|
|
8017
|
+
##### `waitOnDeploy`<sup>Optional</sup> <a name="waitOnDeploy" id="@cloudsnorkel/cdk-github-runners.RunnerImageBuilderProps.property.waitOnDeploy"></a>
|
|
8018
|
+
|
|
8019
|
+
```typescript
|
|
8020
|
+
public readonly waitOnDeploy: boolean;
|
|
8021
|
+
```
|
|
8022
|
+
|
|
8023
|
+
- *Type:* boolean
|
|
8024
|
+
- *Default:* true
|
|
8025
|
+
|
|
8026
|
+
Wait for image to finish building during deployment.
|
|
8027
|
+
|
|
8028
|
+
It's usually best to leave this enabled to ensure everything is ready once deployment is done. However, it can be disabled to speed up deployment in case where you have a lot of image components that can take a long time to build.
|
|
8029
|
+
|
|
8030
|
+
Disabling this option means a finished deployment is not ready to be used. You will have to wait for the image to finish building before the system can be used.
|
|
8031
|
+
|
|
8032
|
+
Disabling this option may also mean any changes to settings or components can take up to a week (default rebuild interval) to take effect.
|
|
8033
|
+
|
|
8034
|
+
---
|
|
8035
|
+
|
|
8016
8036
|
### RunnerImageComponentCustomProps <a name="RunnerImageComponentCustomProps" id="@cloudsnorkel/cdk-github-runners.RunnerImageComponentCustomProps"></a>
|
|
8017
8037
|
|
|
8018
8038
|
#### Initializer <a name="Initializer" id="@cloudsnorkel/cdk-github-runners.RunnerImageComponentCustomProps.Initializer"></a>
|
|
@@ -13919,11 +13919,17 @@ async function handler(event) {
|
|
|
13919
13919
|
let runnerLevel;
|
|
13920
13920
|
for (const record of event.Records) {
|
|
13921
13921
|
const input = JSON.parse(record.body);
|
|
13922
|
-
console.log(
|
|
13922
|
+
console.log({
|
|
13923
|
+
notice: "Checking runner",
|
|
13924
|
+
input
|
|
13925
|
+
});
|
|
13923
13926
|
const retryLater = () => result.batchItemFailures.push({ itemIdentifier: record.messageId });
|
|
13924
13927
|
const execution = await sfn.send(new import_client_sfn.DescribeExecutionCommand({ executionArn: input.executionArn }));
|
|
13925
13928
|
if (execution.status != "RUNNING") {
|
|
13926
|
-
console.log(
|
|
13929
|
+
console.log({
|
|
13930
|
+
notice: "Runner already finished",
|
|
13931
|
+
input
|
|
13932
|
+
});
|
|
13927
13933
|
continue;
|
|
13928
13934
|
}
|
|
13929
13935
|
if (!octokitCache2) {
|
|
@@ -13933,12 +13939,18 @@ async function handler(event) {
|
|
|
13933
13939
|
}
|
|
13934
13940
|
const runner = await getRunner(octokitCache2, runnerLevel, input.owner, input.repo, input.runnerName);
|
|
13935
13941
|
if (!runner) {
|
|
13936
|
-
console.
|
|
13942
|
+
console.log({
|
|
13943
|
+
notice: "Runner not running yet",
|
|
13944
|
+
input
|
|
13945
|
+
});
|
|
13937
13946
|
retryLater();
|
|
13938
13947
|
continue;
|
|
13939
13948
|
}
|
|
13940
13949
|
if (runner.busy) {
|
|
13941
|
-
console.log(
|
|
13950
|
+
console.log({
|
|
13951
|
+
notice: "Runner is not idle",
|
|
13952
|
+
input
|
|
13953
|
+
});
|
|
13942
13954
|
retryLater();
|
|
13943
13955
|
continue;
|
|
13944
13956
|
}
|
|
@@ -13949,26 +13961,44 @@ async function handler(event) {
|
|
|
13949
13961
|
const startedDate = new Date(started * 1e3);
|
|
13950
13962
|
const now = /* @__PURE__ */ new Date();
|
|
13951
13963
|
const diffMs = now.getTime() - startedDate.getTime();
|
|
13952
|
-
console.log(
|
|
13964
|
+
console.log({
|
|
13965
|
+
notice: `Runner ${input.runnerName} started ${diffMs / 1e3} seconds ago`,
|
|
13966
|
+
input
|
|
13967
|
+
});
|
|
13953
13968
|
if (diffMs > 1e3 * input.maxIdleSeconds) {
|
|
13954
|
-
console.log(
|
|
13969
|
+
console.log({
|
|
13970
|
+
notice: `Runner ${input.runnerName} is idle for too long`,
|
|
13971
|
+
input
|
|
13972
|
+
});
|
|
13955
13973
|
try {
|
|
13956
|
-
console.log(
|
|
13974
|
+
console.log({
|
|
13975
|
+
notice: `Stopping step function ${input.executionArn}...`,
|
|
13976
|
+
input
|
|
13977
|
+
});
|
|
13957
13978
|
await sfn.send(new import_client_sfn.StopExecutionCommand({
|
|
13958
13979
|
executionArn: input.executionArn,
|
|
13959
13980
|
error: "IdleRunner",
|
|
13960
13981
|
cause: `Runner ${input.runnerName} on ${input.owner}/${input.repo} is idle for too long (${diffMs / 1e3} seconds and limit is ${input.maxIdleSeconds} seconds)`
|
|
13961
13982
|
}));
|
|
13962
13983
|
} catch (e) {
|
|
13963
|
-
console.error(
|
|
13984
|
+
console.error({
|
|
13985
|
+
notice: `Failed to stop step function ${input.executionArn}: ${e}`,
|
|
13986
|
+
input
|
|
13987
|
+
});
|
|
13964
13988
|
retryLater();
|
|
13965
13989
|
continue;
|
|
13966
13990
|
}
|
|
13967
13991
|
try {
|
|
13968
|
-
console.log(
|
|
13992
|
+
console.log({
|
|
13993
|
+
notice: `Deleting runner ${runner.id}...`,
|
|
13994
|
+
input
|
|
13995
|
+
});
|
|
13969
13996
|
await deleteRunner(octokitCache2, runnerLevel, input.owner, input.repo, runner.id);
|
|
13970
13997
|
} catch (e) {
|
|
13971
|
-
console.error(
|
|
13998
|
+
console.error({
|
|
13999
|
+
notice: `Failed to delete runner ${runner.id}: ${e}`,
|
|
14000
|
+
input
|
|
14001
|
+
});
|
|
13972
14002
|
retryLater();
|
|
13973
14003
|
continue;
|
|
13974
14004
|
}
|
|
@@ -13980,7 +14010,10 @@ async function handler(event) {
|
|
|
13980
14010
|
}
|
|
13981
14011
|
}
|
|
13982
14012
|
if (!found) {
|
|
13983
|
-
console.error(
|
|
14013
|
+
console.error({
|
|
14014
|
+
notice: "No `cdkghr:started:xxx` label found???",
|
|
14015
|
+
input
|
|
14016
|
+
});
|
|
13984
14017
|
retryLater();
|
|
13985
14018
|
}
|
|
13986
14019
|
}
|
|
@@ -79,11 +79,16 @@ async function deleteAmis(stackName, builderName) {
|
|
|
79
79
|
]
|
|
80
80
|
}));
|
|
81
81
|
let imagesToDelete = images.Images ?? [];
|
|
82
|
-
console.log(
|
|
83
|
-
|
|
82
|
+
console.log({
|
|
83
|
+
notice: `Found ${imagesToDelete.length} AMIs`,
|
|
84
|
+
images: imagesToDelete.map((i) => i.ImageId)
|
|
85
|
+
});
|
|
84
86
|
for (const image of imagesToDelete) {
|
|
85
87
|
if (!image.ImageId) {
|
|
86
|
-
console.warn(
|
|
88
|
+
console.warn({
|
|
89
|
+
notice: "No image id?",
|
|
90
|
+
image
|
|
91
|
+
});
|
|
87
92
|
continue;
|
|
88
93
|
}
|
|
89
94
|
console.log(`Deregistering ${image.ImageId}`);
|
|
@@ -102,7 +107,7 @@ async function deleteAmis(stackName, builderName) {
|
|
|
102
107
|
}
|
|
103
108
|
async function handler(event, context) {
|
|
104
109
|
try {
|
|
105
|
-
console.log(
|
|
110
|
+
console.log({ ...event, ResponseURL: "..." });
|
|
106
111
|
switch (event.RequestType) {
|
|
107
112
|
case "Create":
|
|
108
113
|
case "Update":
|
|
@@ -26,7 +26,7 @@ module.exports = __toCommonJS(filter_failed_builds_lambda_exports);
|
|
|
26
26
|
var import_client_sns = require("@aws-sdk/client-sns");
|
|
27
27
|
var sns = new import_client_sns.SNSClient();
|
|
28
28
|
async function handler(event) {
|
|
29
|
-
console.log(
|
|
29
|
+
console.log(event);
|
|
30
30
|
for (const record of event.Records) {
|
|
31
31
|
let message = JSON.parse(record.Sns.Message);
|
|
32
32
|
if (message.state.status === "FAILED") {
|
|
@@ -2577,7 +2577,7 @@ function increaseVersion(allVersions) {
|
|
|
2577
2577
|
return version;
|
|
2578
2578
|
}
|
|
2579
2579
|
async function handler(event, context) {
|
|
2580
|
-
console.log(
|
|
2580
|
+
console.log({ ...event, ResponseURL: "..." });
|
|
2581
2581
|
try {
|
|
2582
2582
|
const objectType = event.ResourceProperties.ObjectType;
|
|
2583
2583
|
const objectName = event.ResourceProperties.ObjectName;
|
|
@@ -68,47 +68,31 @@ var codebuild = new import_client_codebuild.CodeBuildClient();
|
|
|
68
68
|
var ib = new import_client_imagebuilder.ImagebuilderClient();
|
|
69
69
|
async function handler(event, context) {
|
|
70
70
|
try {
|
|
71
|
-
console.log(
|
|
72
|
-
const
|
|
73
|
-
const projectName = event.ResourceProperties.ProjectName;
|
|
74
|
-
const ibName = event.ResourceProperties.ImageBuilderName;
|
|
71
|
+
console.log({ ...event, ResponseURL: "..." });
|
|
72
|
+
const props = event.ResourceProperties;
|
|
75
73
|
switch (event.RequestType) {
|
|
76
74
|
case "Create":
|
|
77
75
|
case "Update":
|
|
78
|
-
if (
|
|
76
|
+
if (props.DeleteOnly) {
|
|
79
77
|
await customResourceRespond(event, "SUCCESS", "OK", "Deleter", {});
|
|
80
78
|
break;
|
|
81
79
|
}
|
|
82
|
-
console.log(`Starting CodeBuild project ${
|
|
83
|
-
await codebuild.send(new import_client_codebuild.StartBuildCommand({
|
|
84
|
-
projectName,
|
|
80
|
+
console.log(`Starting CodeBuild project ${props.ProjectName}`);
|
|
81
|
+
const cbRes = await codebuild.send(new import_client_codebuild.StartBuildCommand({
|
|
82
|
+
projectName: props.ProjectName,
|
|
85
83
|
environmentVariablesOverride: [
|
|
86
84
|
{
|
|
87
85
|
type: "PLAINTEXT",
|
|
88
|
-
name: "
|
|
89
|
-
value:
|
|
90
|
-
},
|
|
91
|
-
{
|
|
92
|
-
type: "PLAINTEXT",
|
|
93
|
-
name: "REQUEST_ID",
|
|
94
|
-
value: event.RequestId
|
|
95
|
-
},
|
|
96
|
-
{
|
|
97
|
-
type: "PLAINTEXT",
|
|
98
|
-
name: "LOGICAL_RESOURCE_ID",
|
|
99
|
-
value: event.LogicalResourceId
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
type: "PLAINTEXT",
|
|
103
|
-
name: "RESPONSE_URL",
|
|
104
|
-
value: event.ResponseURL
|
|
86
|
+
name: "WAIT_HANDLE",
|
|
87
|
+
value: props.WaitHandle
|
|
105
88
|
}
|
|
106
89
|
]
|
|
107
90
|
}));
|
|
91
|
+
await customResourceRespond(event, "SUCCESS", "OK", cbRes.build?.id ?? "build", {});
|
|
108
92
|
break;
|
|
109
93
|
case "Delete":
|
|
110
|
-
if (
|
|
111
|
-
const ibImages = await ib.send(new import_client_imagebuilder.ListImagesCommand({ filters: [{ name: "name", values: [
|
|
94
|
+
if (props.ImageBuilderName) {
|
|
95
|
+
const ibImages = await ib.send(new import_client_imagebuilder.ListImagesCommand({ filters: [{ name: "name", values: [props.ImageBuilderName] }] }));
|
|
112
96
|
if (ibImages.imageVersionList) {
|
|
113
97
|
for (const v of ibImages.imageVersionList) {
|
|
114
98
|
if (v.arn) {
|
|
@@ -83,7 +83,7 @@ async function handleAmi(event, ami) {
|
|
|
83
83
|
}
|
|
84
84
|
async function handler(event, context) {
|
|
85
85
|
try {
|
|
86
|
-
console.log(
|
|
86
|
+
console.log({ ...event, ResponseURL: "..." });
|
|
87
87
|
const ami = event.ResourceProperties.Ami;
|
|
88
88
|
switch (event.RequestType) {
|
|
89
89
|
case "Create":
|
|
@@ -29,7 +29,7 @@ function sleep(ms) {
|
|
|
29
29
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
30
30
|
}
|
|
31
31
|
async function handler(event) {
|
|
32
|
-
console.log(
|
|
32
|
+
console.log(event);
|
|
33
33
|
while (true) {
|
|
34
34
|
try {
|
|
35
35
|
await lambda.send(new import_client_lambda.UpdateFunctionCodeCommand({
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
available to you. Apps are easier to set up and provide more fine-grained access control. If
|
|
12
12
|
you have previously created an app, you can choose to use an existing app.`,p=d(),c=s("div"),a=s("input"),m=d(),u=s("label"),u.innerHTML="New GitHub App <b>(recommended)</b>",k=d(),g=s("div"),_=s("input"),E=d(),f=s("label"),f.textContent="Existing GitHub App",S=d(),C=s("div"),b=s("input"),v=d(),T=s("label"),T.textContent="Personal Access Token",o(a,"class","form-check-input"),o(a,"type","radio"),a.__value="newApp",a.value=a.__value,o(a,"id","newApp"),o(u,"class","form-check-label"),o(u,"for","newApp"),o(c,"class","form-check"),o(_,"class","form-check-input"),o(_,"type","radio"),_.__value="existingApp",_.value=_.__value,o(_,"id","existingApp"),o(f,"class","form-check-label"),o(f,"for","existingApp"),o(g,"class","form-check"),o(b,"class","form-check-input"),o(b,"type","radio"),b.__value="pat",b.value=b.__value,o(b,"id","pat"),o(T,"class","form-check-label"),o(T,"for","pat"),o(C,"class","form-check"),o(l,"class","px-3 py-3"),A.p(a,_,b)},m(h,R){H(h,t,R),H(h,r,R),H(h,l,R),n(l,i),n(l,p),n(l,c),n(c,a),a.checked=a.__value===e[2],n(c,m),n(c,u),n(l,k),n(l,g),n(g,_),_.checked=_.__value===e[2],n(g,E),n(g,f),n(l,S),n(l,C),n(C,b),b.checked=b.__value===e[2],n(C,v),n(C,T),y||(N=[P(a,"change",e[19]),P(_,"change",e[20]),P(b,"change",e[21])],y=!0)},p(h,R){R[0]&4&&(a.checked=a.__value===h[2]),R[0]&4&&(_.checked=_.__value===h[2]),R[0]&4&&(b.checked=b.__value===h[2])},d(h){h&&O(t),h&&O(r),h&&O(l),A.r(),y=!1,ne(N)}}}function ot(e){let t,r,l,i,p,c,a,m,u,k,g,_,E,f,S,C,b;return{c(){t=s("h2"),t.textContent="Personal Access Token",r=d(),l=s("div"),i=s("p"),p=z("The "),c=s("a"),a=z("personal access token"),u=z(" must have the "),k=s("code"),k.textContent="repo",g=z(`
|
|
13
13
|
scope enabled. Don't forget to also create a webhook as described in `),_=s("a"),_.textContent="SETUP_GITHUB.md",E=z("."),f=d(),S=s("input"),o(c,"href",m="https://"+e[1]+"/settings/tokens"),o(_,"href","https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md"),o(S,"class","form-control"),o(S,"placeholder","Token e.g. ghp_abcdefghijklmnopqrstuvwxyz1234567890"),o(l,"class","px-3 py-3")},m(v,T){H(v,t,T),H(v,r,T),H(v,l,T),n(l,i),n(i,p),n(i,c),n(c,a),n(i,u),n(i,k),n(i,g),n(i,_),n(i,E),n(l,f),n(l,S),X(S,e[8]),C||(b=P(S,"input",e[30]),C=!0)},p(v,T){T[0]&2&&m!==(m="https://"+v[1]+"/settings/tokens")&&o(c,"href",m),T[0]&256&&S.value!==v[8]&&X(S,v[8])},d(v){v&&O(t),v&&O(r),v&&O(l),C=!1,b()}}}function rt(e){let t,r,l,i,p,c,a,m,u,k,g,_,E,f,S,C,b,v,T,A,y,N,h,R,B,G,le,$,ie,x,oe,re,U,ee,Z=JSON.stringify(e[4]==="repo"?e[12]:e[13],void 0,2)+"",K,te,q,se,ae,Y,Q,ue;return Y=me(e[16][0]),{c(){t=s("h3"),t.textContent="Existing App Details",r=d(),l=s("div"),i=s("div"),p=s("label"),p.textContent="App Id",c=d(),a=s("div"),m=s("input"),u=d(),k=s("div"),g=s("label"),g.textContent="Private Key",_=d(),E=s("div"),f=s("textarea"),S=d(),C=s("div"),b=s("div"),b.textContent="Registration Level",v=d(),T=s("div"),A=s("div"),y=s("input"),N=d(),h=s("label"),h.textContent="Repository",R=d(),B=s("div"),G=s("input"),le=d(),$=s("label"),$.textContent="Organization",ie=d(),x=s("h4"),x.textContent="Required Permissions",oe=d(),re=s("p"),re.textContent="The existing app must have the following permissions.",U=d(),ee=s("pre"),K=z(Z),te=d(),q=s("h4"),q.textContent="Webhook",se=d(),ae=s("p"),ae.innerHTML='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>.',o(p,"for","appid"),o(p,"class","col-sm-2 col-form-label"),o(m,"type","number"),o(m,"class","form-control"),o(m,"id","appid"),o(a,"class","col-sm-10"),o(i,"class","form-group row px-3 py-2"),o(g,"for","pk"),o(g,"class","col-sm-2 col-form-label"),o(f,"class","form-control"),o(f,"id","pk"),o(f,"rows","10"),o(E,"class","col-sm-10"),o(k,"class","form-group row px-3 py-2"),o(b,"class","col-sm-2 col-form-label"),o(y,"class","form-check-input"),o(y,"type","radio"),y.__value="repo",y.value=y.__value,o(y,"id","repo"),o(h,"class","form-check-label"),o(h,"for","repo"),o(A,"class","form-check"),o(G,"class","form-check-input"),o(G,"type","radio"),G.__value="org",G.value=G.__value,o(G,"id","org"),o($,"class","form-check-label"),o($,"for","org"),o(B,"class","form-check"),o(T,"class","col-sm-10"),o(C,"class","form-group row px-3 py-2"),o(l,"class","px-3 py-3"),Y.p(y,G)},m(I,F){H(I,t,F),H(I,r,F),H(I,l,F),n(l,i),n(i,p),n(i,c),n(i,a),n(a,m),X(m,e[6]),n(l,u),n(l,k),n(k,g),n(k,_),n(k,E),n(E,f),X(f,e[7]),n(l,S),n(l,C),n(C,b),n(C,v),n(C,T),n(T,A),n(A,y),y.checked=y.__value===e[4],n(A,N),n(A,h),n(T,R),n(T,B),n(B,G),G.checked=G.__value===e[4],n(B,le),n(B,$),n(l,ie),n(l,x),n(l,oe),n(l,re),n(l,U),n(l,ee),n(ee,K),n(l,te),n(l,q),n(l,se),n(l,ae),Q||(ue=[P(m,"input",e[26]),P(f,"input",e[27]),P(y,"change",e[28]),P(G,"change",e[29])],Q=!0)},p(I,F){F[0]&64&&We(m.value)!==I[6]&&X(m,I[6]),F[0]&128&&X(f,I[7]),F[0]&16&&(y.checked=y.__value===I[4]),F[0]&16&&(G.checked=G.__value===I[4]),F[0]&16&&Z!==(Z=JSON.stringify(I[4]==="repo"?I[12]:I[13],void 0,2)+"")&&be(K,Z)},d(I){I&&O(t),I&&O(r),I&&O(l),Y.r(),Q=!1,ne(ue)}}}function st(e){let t,r,l,i,p,c,a,m,u,k,g,_,E,f,S,C,b,v,T,A,y=e[0]==="ghes"&&Ge(e),N=e[3]==="org"&&Pe(e);return v=me(e[16][1]),{c(){t=s("h3"),t.textContent="New App Settings",r=d(),l=s("div"),i=s("p"),i.textContent=`Choose whether to create a new personal app or organization app. A private personal app can
|
|
14
|
-
only be used for repositories under your user. A private
|
|
14
|
+
only be used for repositories under your user. A private organization app can only be used
|
|
15
15
|
for repositories under that organization.`,p=d(),c=s("div"),a=s("input"),m=d(),u=s("label"),u.textContent="User app",k=d(),g=s("div"),_=s("input"),E=d(),f=s("label"),f.textContent="Organization app",S=d(),y&&y.c(),C=d(),N&&N.c(),b=Fe(),o(a,"class","form-check-input"),o(a,"type","radio"),a.__value="user",a.value=a.__value,o(a,"id","userScope"),o(u,"class","form-check-label"),o(u,"for","userScope"),o(c,"class","form-check"),o(_,"class","form-check-input"),o(_,"type","radio"),_.__value="org",_.value=_.__value,o(_,"id","orgScope"),o(f,"class","form-check-label"),o(f,"for","orgScope"),o(g,"class","form-check"),o(l,"class","px-3 py-3"),v.p(a,_)},m(h,R){H(h,t,R),H(h,r,R),H(h,l,R),n(l,i),n(l,p),n(l,c),n(c,a),a.checked=a.__value===e[3],n(c,m),n(c,u),n(l,k),n(l,g),n(g,_),_.checked=_.__value===e[3],n(g,E),n(g,f),n(l,S),y&&y.m(l,null),H(h,C,R),N&&N.m(h,R),H(h,b,R),T||(A=[P(a,"change",e[22]),P(_,"change",e[23])],T=!0)},p(h,R){R[0]&8&&(a.checked=a.__value===h[3]),R[0]&8&&(_.checked=_.__value===h[3]),h[0]==="ghes"?y?y.p(h,R):(y=Ge(h),y.c(),y.m(l,null)):y&&(y.d(1),y=null),h[3]==="org"?N?N.p(h,R):(N=Pe(h),N.c(),N.m(b.parentNode,b)):N&&(N.d(1),N=null)},d(h){h&&O(t),h&&O(r),h&&O(l),y&&y.d(),h&&O(C),N&&N.d(h),h&&O(b),v.r(),T=!1,ne(A)}}}function Ge(e){let t,r,l,i,p,c,a,m;return{c(){t=s("p"),t.textContent=`If multiple organizations under the same GitHub Enterprise Server need to use the runners,
|
|
16
16
|
you can make the app public.`,r=d(),l=s("div"),i=s("input"),p=d(),c=s("label"),c.textContent="Public app",o(t,"class","pt-2"),o(i,"class","form-check-input"),o(i,"type","checkbox"),o(i,"id","public"),o(c,"class","form-check-label"),o(c,"for","public"),o(l,"class","form-check")},m(u,k){H(u,t,k),H(u,r,k),H(u,l,k),n(l,i),i.checked=e[11].public,n(l,p),n(l,c),a||(m=P(i,"change",e[24]),a=!0)},p(u,k){k[0]&2048&&(i.checked=u[11].public)},d(u){u&&O(t),u&&O(r),u&&O(l),a=!1,m()}}}function Pe(e){let t,r,l,i,p,c,a,m,u,k,g,_,E,f,S,C;return{c(){t=s("h3"),t.textContent="Organization name",r=d(),l=s("div"),i=s("p"),p=z(`What is the slug for your organization? If your repositories have a URL like
|
|
17
17
|
`),c=s("code"),a=z("https://"),m=z(e[1]),u=z("/MyOrg/my-repo"),k=z(`
|
|
@@ -13964,14 +13964,20 @@ async function handler(event) {
|
|
|
13964
13964
|
}
|
|
13965
13965
|
const payload = JSON.parse(body);
|
|
13966
13966
|
if (payload.action !== "queued") {
|
|
13967
|
-
console.log(
|
|
13967
|
+
console.log({
|
|
13968
|
+
notice: `Ignoring action "${payload.action}", expecting "queued"`,
|
|
13969
|
+
job: payload.workflow_job
|
|
13970
|
+
});
|
|
13968
13971
|
return {
|
|
13969
13972
|
statusCode: 200,
|
|
13970
13973
|
body: 'OK. No runner started (action is not "queued").'
|
|
13971
13974
|
};
|
|
13972
13975
|
}
|
|
13973
13976
|
if (process.env.REQUIRE_SELF_HOSTED_LABEL === "1" && !payload.workflow_job.labels.includes("self-hosted")) {
|
|
13974
|
-
console.log(
|
|
13977
|
+
console.log({
|
|
13978
|
+
notice: `Ignoring labels "${payload.workflow_job.labels}", expecting "self-hosted"`,
|
|
13979
|
+
job: payload.workflow_job
|
|
13980
|
+
});
|
|
13975
13981
|
return {
|
|
13976
13982
|
statusCode: 200,
|
|
13977
13983
|
body: 'OK. No runner started (no "self-hosted" label).'
|
|
@@ -13979,38 +13985,50 @@ async function handler(event) {
|
|
|
13979
13985
|
}
|
|
13980
13986
|
const provider = matchLabelsToProvider(payload.workflow_job.labels);
|
|
13981
13987
|
if (!provider) {
|
|
13982
|
-
console.log(
|
|
13988
|
+
console.log({
|
|
13989
|
+
notice: `Ignoring labels "${payload.workflow_job.labels}", as they don't match a supported runner provider`,
|
|
13990
|
+
job: payload.workflow_job
|
|
13991
|
+
});
|
|
13983
13992
|
return {
|
|
13984
13993
|
statusCode: 200,
|
|
13985
13994
|
body: "OK. No runner started (no provider with matching labels)."
|
|
13986
13995
|
};
|
|
13987
13996
|
}
|
|
13988
13997
|
if (await isDeploymentPending(payload)) {
|
|
13989
|
-
console.log(
|
|
13998
|
+
console.log({
|
|
13999
|
+
notice: "Ignoring job as its deployment is still pending",
|
|
14000
|
+
job: payload.workflow_job
|
|
14001
|
+
});
|
|
13990
14002
|
return {
|
|
13991
14003
|
statusCode: 200,
|
|
13992
14004
|
body: "OK. No runner started (deployment pending)."
|
|
13993
14005
|
};
|
|
13994
14006
|
}
|
|
13995
|
-
let executionName =
|
|
13996
|
-
|
|
14007
|
+
let executionName = payload.repository.full_name.replace("/", "-").slice(0, 50);
|
|
14008
|
+
let deliveryId = getHeader(event, "x-github-delivery") ?? `${Math.random()}`;
|
|
14009
|
+
executionName = `${executionName}-${deliveryId.slice(0, 63 - executionName.length)}`;
|
|
14010
|
+
const input = {
|
|
13997
14011
|
owner: payload.repository.owner.login,
|
|
13998
14012
|
repo: payload.repository.name,
|
|
13999
14013
|
jobId: payload.workflow_job.id,
|
|
14000
14014
|
jobUrl: payload.workflow_job.html_url,
|
|
14001
14015
|
installationId: payload.installation?.id ?? -1,
|
|
14002
14016
|
// always pass value because step function can't handle missing input
|
|
14003
|
-
labels: payload.workflow_job.labels,
|
|
14017
|
+
labels: payload.workflow_job.labels.join(","),
|
|
14004
14018
|
provider
|
|
14005
|
-
}
|
|
14019
|
+
};
|
|
14006
14020
|
const execution = await sf.send(new import_client_sfn.StartExecutionCommand({
|
|
14007
14021
|
stateMachineArn: process.env.STEP_FUNCTION_ARN,
|
|
14008
|
-
input,
|
|
14022
|
+
input: JSON.stringify(input),
|
|
14009
14023
|
// name is not random so multiple execution of this webhook won't cause multiple builders to start
|
|
14010
14024
|
name: executionName
|
|
14011
14025
|
}));
|
|
14012
|
-
console.log(
|
|
14013
|
-
|
|
14026
|
+
console.log({
|
|
14027
|
+
notice: "Started orchestrator",
|
|
14028
|
+
execution: execution.executionArn,
|
|
14029
|
+
sfnInput: input,
|
|
14030
|
+
job: payload.workflow_job
|
|
14031
|
+
});
|
|
14014
14032
|
return {
|
|
14015
14033
|
statusCode: 202,
|
|
14016
14034
|
body: executionName
|
package/lib/access.js
CHANGED
|
@@ -59,7 +59,7 @@ class LambdaAccess {
|
|
|
59
59
|
}
|
|
60
60
|
exports.LambdaAccess = LambdaAccess;
|
|
61
61
|
_a = JSII_RTTI_SYMBOL_1;
|
|
62
|
-
LambdaAccess[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.LambdaAccess", version: "0.
|
|
62
|
+
LambdaAccess[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.LambdaAccess", version: "0.13.1" };
|
|
63
63
|
/**
|
|
64
64
|
* @internal
|
|
65
65
|
*/
|
|
@@ -10,13 +10,19 @@ async function handler(event) {
|
|
|
10
10
|
let runnerLevel;
|
|
11
11
|
for (const record of event.Records) {
|
|
12
12
|
const input = JSON.parse(record.body);
|
|
13
|
-
console.log(
|
|
13
|
+
console.log({
|
|
14
|
+
notice: 'Checking runner',
|
|
15
|
+
input,
|
|
16
|
+
});
|
|
14
17
|
const retryLater = () => result.batchItemFailures.push({ itemIdentifier: record.messageId });
|
|
15
18
|
// check if step function is still running
|
|
16
19
|
const execution = await sfn.send(new client_sfn_1.DescribeExecutionCommand({ executionArn: input.executionArn }));
|
|
17
20
|
if (execution.status != 'RUNNING') {
|
|
18
21
|
// no need to test again as runner already finished
|
|
19
|
-
console.log(
|
|
22
|
+
console.log({
|
|
23
|
+
notice: 'Runner already finished',
|
|
24
|
+
input,
|
|
25
|
+
});
|
|
20
26
|
continue;
|
|
21
27
|
}
|
|
22
28
|
// get github access
|
|
@@ -30,7 +36,10 @@ async function handler(event) {
|
|
|
30
36
|
// find runner
|
|
31
37
|
const runner = await (0, lambda_github_1.getRunner)(octokitCache, runnerLevel, input.owner, input.repo, input.runnerName);
|
|
32
38
|
if (!runner) {
|
|
33
|
-
console.
|
|
39
|
+
console.log({
|
|
40
|
+
notice: 'Runner not running yet',
|
|
41
|
+
input,
|
|
42
|
+
});
|
|
34
43
|
retryLater();
|
|
35
44
|
continue;
|
|
36
45
|
}
|
|
@@ -38,7 +47,10 @@ async function handler(event) {
|
|
|
38
47
|
// we want to try again because the runner might be retried due to e.g. lambda timeout
|
|
39
48
|
// we need to keep following the retry too and make sure it doesn't go idle
|
|
40
49
|
if (runner.busy) {
|
|
41
|
-
console.log(
|
|
50
|
+
console.log({
|
|
51
|
+
notice: 'Runner is not idle',
|
|
52
|
+
input,
|
|
53
|
+
});
|
|
42
54
|
retryLater();
|
|
43
55
|
continue;
|
|
44
56
|
}
|
|
@@ -50,14 +62,23 @@ async function handler(event) {
|
|
|
50
62
|
const startedDate = new Date(started * 1000);
|
|
51
63
|
const now = new Date();
|
|
52
64
|
const diffMs = now.getTime() - startedDate.getTime();
|
|
53
|
-
console.log(
|
|
65
|
+
console.log({
|
|
66
|
+
notice: `Runner ${input.runnerName} started ${diffMs / 1000} seconds ago`,
|
|
67
|
+
input,
|
|
68
|
+
});
|
|
54
69
|
if (diffMs > 1000 * input.maxIdleSeconds) {
|
|
55
70
|
// max idle time reached, delete runner
|
|
56
|
-
console.log(
|
|
71
|
+
console.log({
|
|
72
|
+
notice: `Runner ${input.runnerName} is idle for too long`,
|
|
73
|
+
input,
|
|
74
|
+
});
|
|
57
75
|
try {
|
|
58
76
|
// stop step function first, so it's marked as aborted with the proper error
|
|
59
77
|
// if we delete the runner first, the step function will be marked as failed with a generic error
|
|
60
|
-
console.log(
|
|
78
|
+
console.log({
|
|
79
|
+
notice: `Stopping step function ${input.executionArn}...`,
|
|
80
|
+
input,
|
|
81
|
+
});
|
|
61
82
|
await sfn.send(new client_sfn_1.StopExecutionCommand({
|
|
62
83
|
executionArn: input.executionArn,
|
|
63
84
|
error: 'IdleRunner',
|
|
@@ -65,16 +86,25 @@ async function handler(event) {
|
|
|
65
86
|
}));
|
|
66
87
|
}
|
|
67
88
|
catch (e) {
|
|
68
|
-
console.error(
|
|
89
|
+
console.error({
|
|
90
|
+
notice: `Failed to stop step function ${input.executionArn}: ${e}`,
|
|
91
|
+
input,
|
|
92
|
+
});
|
|
69
93
|
retryLater();
|
|
70
94
|
continue;
|
|
71
95
|
}
|
|
72
96
|
try {
|
|
73
|
-
console.log(
|
|
97
|
+
console.log({
|
|
98
|
+
notice: `Deleting runner ${runner.id}...`,
|
|
99
|
+
input,
|
|
100
|
+
});
|
|
74
101
|
await (0, lambda_github_1.deleteRunner)(octokitCache, runnerLevel, input.owner, input.repo, runner.id);
|
|
75
102
|
}
|
|
76
103
|
catch (e) {
|
|
77
|
-
console.error(
|
|
104
|
+
console.error({
|
|
105
|
+
notice: `Failed to delete runner ${runner.id}: ${e}`,
|
|
106
|
+
input,
|
|
107
|
+
});
|
|
78
108
|
retryLater();
|
|
79
109
|
continue;
|
|
80
110
|
}
|
|
@@ -89,11 +119,14 @@ async function handler(event) {
|
|
|
89
119
|
}
|
|
90
120
|
if (!found) {
|
|
91
121
|
// no started label? retry later (it won't retry forever as eventually the runner will stop and the step function will finish)
|
|
92
|
-
console.error(
|
|
122
|
+
console.error({
|
|
123
|
+
notice: 'No `cdkghr:started:xxx` label found???',
|
|
124
|
+
input,
|
|
125
|
+
});
|
|
93
126
|
retryLater();
|
|
94
127
|
}
|
|
95
128
|
}
|
|
96
129
|
return result;
|
|
97
130
|
}
|
|
98
131
|
exports.handler = handler;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1ydW5uZXItcmVwZWFyLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pZGxlLXJ1bm5lci1yZXBlYXIubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9EQUFnRztBQUdoRyxtREFBc0U7QUFXdEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxzQkFBUyxFQUFFLENBQUM7QUFFckIsS0FBSyxVQUFVLE9BQU8sQ0FBQyxLQUF5QjtJQUNyRCxNQUFNLE1BQU0sR0FBK0IsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyRSxJQUFJLFlBQWlDLENBQUM7SUFDdEMsSUFBSSxXQUF1QyxDQUFDO0lBRTVDLEtBQUssTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBMEIsQ0FBQztRQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLGtCQUFrQixLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuRyxNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRTdGLDBDQUEwQztRQUMxQyxNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxxQ0FBd0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNsQyxtREFBbUQ7WUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQ3ZDLFNBQVM7UUFDWCxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixtRUFBbUU7WUFDbkUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxNQUFNLElBQUEsMEJBQVUsRUFBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDMUUsZ0lBQWdJO1lBQ2hJLFlBQVksR0FBRyxPQUFPLENBQUM7WUFDdkIsV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDMUMsQ0FBQztRQUVELGNBQWM7UUFDZCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEseUJBQVMsRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLFVBQVUsRUFBRSxDQUFDO1lBQ2IsU0FBUztRQUNYLENBQUM7UUFFRCwrQkFBK0I7UUFDL0Isc0ZBQXNGO1FBQ3RGLDJFQUEyRTtRQUMzRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDbEMsVUFBVSxFQUFFLENBQUM7WUFDYixTQUFTO1FBQ1gsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQzNELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBRXJELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUMsVUFBVSxZQUFZLE1BQU0sR0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO2dCQUU3RSxJQUFJLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN6Qyx1Q0FBdUM7b0JBQ3ZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUMsVUFBVSx1QkFBdUIsQ0FBQyxDQUFDO29CQUUvRCxJQUFJLENBQUM7d0JBQ0gsNEVBQTRFO3dCQUM1RSxpR0FBaUc7d0JBQ2pHLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEtBQUssQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDO3dCQUMvRCxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxpQ0FBb0IsQ0FBQzs0QkFDdEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZOzRCQUNoQyxLQUFLLEVBQUUsWUFBWTs0QkFDbkIsS0FBSyxFQUFFLFVBQVUsS0FBSyxDQUFDLFVBQVUsT0FBTyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLDBCQUEwQixNQUFNLEdBQUcsSUFBSSx5QkFBeUIsS0FBSyxDQUFDLGNBQWMsV0FBVzt5QkFDakssQ0FBQyxDQUFDLENBQUM7b0JBQ04sQ0FBQztvQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEtBQUssQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDMUUsVUFBVSxFQUFFLENBQUM7d0JBQ2IsU0FBUztvQkFDWCxDQUFDO29CQUVELElBQUksQ0FBQzt3QkFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDL0MsTUFBTSxJQUFBLDRCQUFZLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNwRixDQUFDO29CQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM1RCxVQUFVLEVBQUUsQ0FBQzt3QkFDYixTQUFTO29CQUNYLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLGlEQUFpRDtvQkFDakQsVUFBVSxFQUFFLENBQUM7Z0JBQ2YsQ0FBQztnQkFFRCxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNiLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLDhIQUE4SDtZQUM5SCxPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7WUFDeEQsVUFBVSxFQUFFLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFyR0QsMEJBcUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpYmVFeGVjdXRpb25Db21tYW5kLCBTRk5DbGllbnQsIFN0b3BFeGVjdXRpb25Db21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNmbic7XG5pbXBvcnQgeyBPY3Rva2l0IH0gZnJvbSAnQG9jdG9raXQvcmVzdCc7XG5pbXBvcnQgKiBhcyBBV1NMYW1iZGEgZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBkZWxldGVSdW5uZXIsIGdldE9jdG9raXQsIGdldFJ1bm5lciB9IGZyb20gJy4vbGFtYmRhLWdpdGh1Yic7XG5cbmludGVyZmFjZSBJZGxlUmVhcGVyTGFtYmRhSW5wdXQge1xuICByZWFkb25seSBleGVjdXRpb25Bcm46IHN0cmluZztcbiAgcmVhZG9ubHkgcnVubmVyTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBvd25lcjogc3RyaW5nO1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluc3RhbGxhdGlvbklkPzogbnVtYmVyO1xuICByZWFkb25seSBtYXhJZGxlU2Vjb25kczogbnVtYmVyO1xufVxuXG5jb25zdCBzZm4gPSBuZXcgU0ZOQ2xpZW50KCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuU1FTRXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5TUVNCYXRjaFJlc3BvbnNlPiB7XG4gIGNvbnN0IHJlc3VsdDogQVdTTGFtYmRhLlNRU0JhdGNoUmVzcG9uc2UgPSB7IGJhdGNoSXRlbUZhaWx1cmVzOiBbXSB9O1xuICBsZXQgb2N0b2tpdENhY2hlOiBPY3Rva2l0IHwgdW5kZWZpbmVkO1xuICBsZXQgcnVubmVyTGV2ZWw6ICdyZXBvJyB8ICdvcmcnIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgcmVjb3JkIG9mIGV2ZW50LlJlY29yZHMpIHtcbiAgICBjb25zdCBpbnB1dCA9IEpTT04ucGFyc2UocmVjb3JkLmJvZHkpIGFzIElkbGVSZWFwZXJMYW1iZGFJbnB1dDtcbiAgICBjb25zb2xlLmxvZyhgQ2hlY2tpbmcgcnVubmVyIGZvciAke2lucHV0Lm93bmVyfS8ke2lucHV0LnJlcG99IFtleGVjdXRpb24taWQ9JHtpbnB1dC5ydW5uZXJOYW1lfV1gKTtcblxuICAgIGNvbnN0IHJldHJ5TGF0ZXIgPSAoKSA9PiByZXN1bHQuYmF0Y2hJdGVtRmFpbHVyZXMucHVzaCh7IGl0ZW1JZGVudGlmaWVyOiByZWNvcmQubWVzc2FnZUlkIH0pO1xuXG4gICAgLy8gY2hlY2sgaWYgc3RlcCBmdW5jdGlvbiBpcyBzdGlsbCBydW5uaW5nXG4gICAgY29uc3QgZXhlY3V0aW9uID0gYXdhaXQgc2ZuLnNlbmQobmV3IERlc2NyaWJlRXhlY3V0aW9uQ29tbWFuZCh7IGV4ZWN1dGlvbkFybjogaW5wdXQuZXhlY3V0aW9uQXJuIH0pKTtcbiAgICBpZiAoZXhlY3V0aW9uLnN0YXR1cyAhPSAnUlVOTklORycpIHtcbiAgICAgIC8vIG5vIG5lZWQgdG8gdGVzdCBhZ2FpbiBhcyBydW5uZXIgYWxyZWFkeSBmaW5pc2hlZFxuICAgICAgY29uc29sZS5sb2coJ1J1bm5lciBhbHJlYWR5IGZpbmlzaGVkJyk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBnZXQgZ2l0aHViIGFjY2Vzc1xuICAgIGlmICghb2N0b2tpdENhY2hlKSB7XG4gICAgICAvLyBnZXRPY3Rva2l0IGNhbGxzIHNlY3JldHMgbWFuYWdlciBldmVyeSB0aW1lLCBzbyBjYWNoZSB0aGUgcmVzdWx0XG4gICAgICBjb25zdCB7IG9jdG9raXQsIGdpdGh1YlNlY3JldHMgfSA9IGF3YWl0IGdldE9jdG9raXQoaW5wdXQuaW5zdGFsbGF0aW9uSWQpO1xuICAgICAgLy8gVE9ETyBpZiBpbnN0YWxsYXRpb25JZCBjaGFuZ2VzIGR1cmluZyBub3JtYWwgb3BlcmF0aW9ucywgd2UgbWF5IGhhdmUgc29tZSByZWNvcmRzIHdpdGggZ29vZCBpbnN0YWxsYXRpb25JZCwgYW5kIHNvbWUgd2l0aCBiYWRcbiAgICAgIG9jdG9raXRDYWNoZSA9IG9jdG9raXQ7XG4gICAgICBydW5uZXJMZXZlbCA9IGdpdGh1YlNlY3JldHMucnVubmVyTGV2ZWw7XG4gICAgfVxuXG4gICAgLy8gZmluZCBydW5uZXJcbiAgICBjb25zdCBydW5uZXIgPSBhd2FpdCBnZXRSdW5uZXIob2N0b2tpdENhY2hlLCBydW5uZXJMZXZlbCwgaW5wdXQub3duZXIsIGlucHV0LnJlcG8sIGlucHV0LnJ1bm5lck5hbWUpO1xuICAgIGlmICghcnVubmVyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBSdW5uZXIgbm90IHJ1bm5pbmcgeWV0IGZvciAke2lucHV0Lm93bmVyfS8ke2lucHV0LnJlcG99OiR7aW5wdXQucnVubmVyTmFtZX1gKTtcbiAgICAgIHJldHJ5TGF0ZXIoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGlmIG5vdCBpZGxlLCB0cnkgYWdhaW4gbGF0ZXJcbiAgICAvLyB3ZSB3YW50IHRvIHRyeSBhZ2FpbiBiZWNhdXNlIHRoZSBydW5uZXIgbWlnaHQgYmUgcmV0cmllZCBkdWUgdG8gZS5nLiBsYW1iZGEgdGltZW91dFxuICAgIC8vIHdlIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIHJldHJ5IHRvbyBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgZ28gaWRsZVxuICAgIGlmIChydW5uZXIuYnVzeSkge1xuICAgICAgY29uc29sZS5sb2coJ1J1bm5lciBpcyBub3QgaWRsZScpO1xuICAgICAgcmV0cnlMYXRlcigpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgbWF4IGlkbGUgdGltZW91dCBoYXMgcmVhY2hlZFxuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgbGFiZWwgb2YgcnVubmVyLmxhYmVscykge1xuICAgICAgaWYgKGxhYmVsLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjZGtnaHI6c3RhcnRlZDonKSkge1xuICAgICAgICBjb25zdCBzdGFydGVkID0gcGFyc2VGbG9hdChsYWJlbC5uYW1lLnNwbGl0KCc6JylbMl0pO1xuICAgICAgICBjb25zdCBzdGFydGVkRGF0ZSA9IG5ldyBEYXRlKHN0YXJ0ZWQgKiAxMDAwKTtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgZGlmZk1zID0gbm93LmdldFRpbWUoKSAtIHN0YXJ0ZWREYXRlLmdldFRpbWUoKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhgUnVubmVyICR7aW5wdXQucnVubmVyTmFtZX0gc3RhcnRlZCAke2RpZmZNcy8xMDAwfSBzZWNvbmRzIGFnb2ApO1xuXG4gICAgICAgIGlmIChkaWZmTXMgPiAxMDAwICogaW5wdXQubWF4SWRsZVNlY29uZHMpIHtcbiAgICAgICAgICAvLyBtYXggaWRsZSB0aW1lIHJlYWNoZWQsIGRlbGV0ZSBydW5uZXJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgUnVubmVyICR7aW5wdXQucnVubmVyTmFtZX0gaXMgaWRsZSBmb3IgdG9vIGxvbmdgKTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBzdG9wIHN0ZXAgZnVuY3Rpb24gZmlyc3QsIHNvIGl0J3MgbWFya2VkIGFzIGFib3J0ZWQgd2l0aCB0aGUgcHJvcGVyIGVycm9yXG4gICAgICAgICAgICAvLyBpZiB3ZSBkZWxldGUgdGhlIHJ1bm5lciBmaXJzdCwgdGhlIHN0ZXAgZnVuY3Rpb24gd2lsbCBiZSBtYXJrZWQgYXMgZmFpbGVkIHdpdGggYSBnZW5lcmljIGVycm9yXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgU3RvcHBpbmcgc3RlcCBmdW5jdGlvbiAke2lucHV0LmV4ZWN1dGlvbkFybn0uLi5gKTtcbiAgICAgICAgICAgIGF3YWl0IHNmbi5zZW5kKG5ldyBTdG9wRXhlY3V0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgICAgIGV4ZWN1dGlvbkFybjogaW5wdXQuZXhlY3V0aW9uQXJuLFxuICAgICAgICAgICAgICBlcnJvcjogJ0lkbGVSdW5uZXInLFxuICAgICAgICAgICAgICBjYXVzZTogYFJ1bm5lciAke2lucHV0LnJ1bm5lck5hbWV9IG9uICR7aW5wdXQub3duZXJ9LyR7aW5wdXQucmVwb30gaXMgaWRsZSBmb3IgdG9vIGxvbmcgKCR7ZGlmZk1zIC8gMTAwMH0gc2Vjb25kcyBhbmQgbGltaXQgaXMgJHtpbnB1dC5tYXhJZGxlU2Vjb25kc30gc2Vjb25kcylgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBzdG9wIHN0ZXAgZnVuY3Rpb24gJHtpbnB1dC5leGVjdXRpb25Bcm59OiAke2V9YCk7XG4gICAgICAgICAgICByZXRyeUxhdGVyKCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYERlbGV0aW5nIHJ1bm5lciAke3J1bm5lci5pZH0uLi5gKTtcbiAgICAgICAgICAgIGF3YWl0IGRlbGV0ZVJ1bm5lcihvY3Rva2l0Q2FjaGUsIHJ1bm5lckxldmVsLCBpbnB1dC5vd25lciwgaW5wdXQucmVwbywgcnVubmVyLmlkKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIHJ1bm5lciAke3J1bm5lci5pZH06ICR7ZX1gKTtcbiAgICAgICAgICAgIHJldHJ5TGF0ZXIoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzdGlsbCBpZGxlLCB0aW1lb3V0IG5vdCByZWFjaGVkIC0tIHJldHJ5IGxhdGVyXG4gICAgICAgICAgcmV0cnlMYXRlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAvLyBubyBzdGFydGVkIGxhYmVsPyByZXRyeSBsYXRlciAoaXQgd29uJ3QgcmV0cnkgZm9yZXZlciBhcyBldmVudHVhbGx5IHRoZSBydW5uZXIgd2lsbCBzdG9wIGFuZCB0aGUgc3RlcCBmdW5jdGlvbiB3aWxsIGZpbmlzaClcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGBjZGtnaHI6c3RhcnRlZDp4eHhgIGxhYmVsIGZvdW5kPz8/Jyk7XG4gICAgICByZXRyeUxhdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRsZS1ydW5uZXItcmVwZWFyLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pZGxlLXJ1bm5lci1yZXBlYXIubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9EQUFnRztBQUdoRyxtREFBc0U7QUFXdEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxzQkFBUyxFQUFFLENBQUM7QUFFckIsS0FBSyxVQUFVLE9BQU8sQ0FBQyxLQUF5QjtJQUNyRCxNQUFNLE1BQU0sR0FBK0IsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyRSxJQUFJLFlBQWlDLENBQUM7SUFDdEMsSUFBSSxXQUF1QyxDQUFDO0lBRTVDLEtBQUssTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBMEIsQ0FBQztRQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ1YsTUFBTSxFQUFFLGlCQUFpQjtZQUN6QixLQUFLO1NBQ04sQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUU3RiwwQ0FBMEM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUkscUNBQXdCLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbEMsbURBQW1EO1lBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1YsTUFBTSxFQUFFLHlCQUF5QjtnQkFDakMsS0FBSzthQUNOLENBQUMs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QUFFLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUF0SUQsMEJBc0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzY3JpYmVFeGVjdXRpb25Db21tYW5kLCBTRk5DbGllbnQsIFN0b3BFeGVjdXRpb25Db21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNmbic7XG5pbXBvcnQgeyBPY3Rva2l0IH0gZnJvbSAnQG9jdG9raXQvcmVzdCc7XG5pbXBvcnQgKiBhcyBBV1NMYW1iZGEgZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBkZWxldGVSdW5uZXIsIGdldE9jdG9raXQsIGdldFJ1bm5lciB9IGZyb20gJy4vbGFtYmRhLWdpdGh1Yic7XG5cbmludGVyZmFjZSBJZGxlUmVhcGVyTGFtYmRhSW5wdXQge1xuICByZWFkb25seSBleGVjdXRpb25Bcm46IHN0cmluZztcbiAgcmVhZG9ubHkgcnVubmVyTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBvd25lcjogc3RyaW5nO1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluc3RhbGxhdGlvbklkPzogbnVtYmVyO1xuICByZWFkb25seSBtYXhJZGxlU2Vjb25kczogbnVtYmVyO1xufVxuXG5jb25zdCBzZm4gPSBuZXcgU0ZOQ2xpZW50KCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50OiBBV1NMYW1iZGEuU1FTRXZlbnQpOiBQcm9taXNlPEFXU0xhbWJkYS5TUVNCYXRjaFJlc3BvbnNlPiB7XG4gIGNvbnN0IHJlc3VsdDogQVdTTGFtYmRhLlNRU0JhdGNoUmVzcG9uc2UgPSB7IGJhdGNoSXRlbUZhaWx1cmVzOiBbXSB9O1xuICBsZXQgb2N0b2tpdENhY2hlOiBPY3Rva2l0IHwgdW5kZWZpbmVkO1xuICBsZXQgcnVubmVyTGV2ZWw6ICdyZXBvJyB8ICdvcmcnIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgcmVjb3JkIG9mIGV2ZW50LlJlY29yZHMpIHtcbiAgICBjb25zdCBpbnB1dCA9IEpTT04ucGFyc2UocmVjb3JkLmJvZHkpIGFzIElkbGVSZWFwZXJMYW1iZGFJbnB1dDtcbiAgICBjb25zb2xlLmxvZyh7XG4gICAgICBub3RpY2U6ICdDaGVja2luZyBydW5uZXInLFxuICAgICAgaW5wdXQsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXRyeUxhdGVyID0gKCkgPT4gcmVzdWx0LmJhdGNoSXRlbUZhaWx1cmVzLnB1c2goeyBpdGVtSWRlbnRpZmllcjogcmVjb3JkLm1lc3NhZ2VJZCB9KTtcblxuICAgIC8vIGNoZWNrIGlmIHN0ZXAgZnVuY3Rpb24gaXMgc3RpbGwgcnVubmluZ1xuICAgIGNvbnN0IGV4ZWN1dGlvbiA9IGF3YWl0IHNmbi5zZW5kKG5ldyBEZXNjcmliZUV4ZWN1dGlvbkNvbW1hbmQoeyBleGVjdXRpb25Bcm46IGlucHV0LmV4ZWN1dGlvbkFybiB9KSk7XG4gICAgaWYgKGV4ZWN1dGlvbi5zdGF0dXMgIT0gJ1JVTk5JTkcnKSB7XG4gICAgICAvLyBubyBuZWVkIHRvIHRlc3QgYWdhaW4gYXMgcnVubmVyIGFscmVhZHkgZmluaXNoZWRcbiAgICAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgbm90aWNlOiAnUnVubmVyIGFscmVhZHkgZmluaXNoZWQnLFxuICAgICAgICBpbnB1dCxcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGdpdGh1YiBhY2Nlc3NcbiAgICBpZiAoIW9jdG9raXRDYWNoZSkge1xuICAgICAgLy8gZ2V0T2N0b2tpdCBjYWxscyBzZWNyZXRzIG1hbmFnZXIgZXZlcnkgdGltZSwgc28gY2FjaGUgdGhlIHJlc3VsdFxuICAgICAgY29uc3QgeyBvY3Rva2l0LCBnaXRodWJTZWNyZXRzIH0gPSBhd2FpdCBnZXRPY3Rva2l0KGlucHV0Lmluc3RhbGxhdGlvbklkKTtcbiAgICAgIC8vIFRPRE8gaWYgaW5zdGFsbGF0aW9uSWQgY2hhbmdlcyBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbnMsIHdlIG1heSBoYXZlIHNvbWUgcmVjb3JkcyB3aXRoIGdvb2QgaW5zdGFsbGF0aW9uSWQsIGFuZCBzb21lIHdpdGggYmFkXG4gICAgICBvY3Rva2l0Q2FjaGUgPSBvY3Rva2l0O1xuICAgICAgcnVubmVyTGV2ZWwgPSBnaXRodWJTZWNyZXRzLnJ1bm5lckxldmVsO1xuICAgIH1cblxuICAgIC8vIGZpbmQgcnVubmVyXG4gICAgY29uc3QgcnVubmVyID0gYXdhaXQgZ2V0UnVubmVyKG9jdG9raXRDYWNoZSwgcnVubmVyTGV2ZWwsIGlucHV0Lm93bmVyLCBpbnB1dC5yZXBvLCBpbnB1dC5ydW5uZXJOYW1lKTtcbiAgICBpZiAoIXJ1bm5lcikge1xuICAgICAgY29uc29sZS5sb2coe1xuICAgICAgICBub3RpY2U6ICdSdW5uZXIgbm90IHJ1bm5pbmcgeWV0JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICB9KTtcbiAgICAgIHJldHJ5TGF0ZXIoKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGlmIG5vdCBpZGxlLCB0cnkgYWdhaW4gbGF0ZXJcbiAgICAvLyB3ZSB3YW50IHRvIHRyeSBhZ2FpbiBiZWNhdXNlIHRoZSBydW5uZXIgbWlnaHQgYmUgcmV0cmllZCBkdWUgdG8gZS5nLiBsYW1iZGEgdGltZW91dFxuICAgIC8vIHdlIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIHJldHJ5IHRvbyBhbmQgbWFrZSBzdXJlIGl0IGRvZXNuJ3QgZ28gaWRsZVxuICAgIGlmIChydW5uZXIuYnVzeSkge1xuICAgICAgY29uc29sZS5sb2coe1xuICAgICAgICBub3RpY2U6ICdSdW5uZXIgaXMgbm90IGlkbGUnLFxuICAgICAgICBpbnB1dCxcbiAgICAgIH0pO1xuICAgICAgcmV0cnlMYXRlcigpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgbWF4IGlkbGUgdGltZW91dCBoYXMgcmVhY2hlZFxuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIGZvciAoY29uc3QgbGFiZWwgb2YgcnVubmVyLmxhYmVscykge1xuICAgICAgaWYgKGxhYmVsLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjZGtnaHI6c3RhcnRlZDonKSkge1xuICAgICAgICBjb25zdCBzdGFydGVkID0gcGFyc2VGbG9hdChsYWJlbC5uYW1lLnNwbGl0KCc6JylbMl0pO1xuICAgICAgICBjb25zdCBzdGFydGVkRGF0ZSA9IG5ldyBEYXRlKHN0YXJ0ZWQgKiAxMDAwKTtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgY29uc3QgZGlmZk1zID0gbm93LmdldFRpbWUoKSAtIHN0YXJ0ZWREYXRlLmdldFRpbWUoKTtcblxuICAgICAgICBjb25zb2xlLmxvZyh7XG4gICAgICAgICAgbm90aWNlOiBgUnVubmVyICR7aW5wdXQucnVubmVyTmFtZX0gc3RhcnRlZCAke2RpZmZNcyAvIDEwMDB9IHNlY29uZHMgYWdvYCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGRpZmZNcyA+IDEwMDAgKiBpbnB1dC5tYXhJZGxlU2Vjb25kcykge1xuICAgICAgICAgIC8vIG1heCBpZGxlIHRpbWUgcmVhY2hlZCwgZGVsZXRlIHJ1bm5lclxuICAgICAgICAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICAgIG5vdGljZTogYFJ1bm5lciAke2lucHV0LnJ1bm5lck5hbWV9IGlzIGlkbGUgZm9yIHRvbyBsb25nYCxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHN0b3Agc3RlcCBmdW5jdGlvbiBmaXJzdCwgc28gaXQncyBtYXJrZWQgYXMgYWJvcnRlZCB3aXRoIHRoZSBwcm9wZXIgZXJyb3JcbiAgICAgICAgICAgIC8vIGlmIHdlIGRlbGV0ZSB0aGUgcnVubmVyIGZpcnN0LCB0aGUgc3RlcCBmdW5jdGlvbiB3aWxsIGJlIG1hcmtlZCBhcyBmYWlsZWQgd2l0aCBhIGdlbmVyaWMgZXJyb3JcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICAgICAgbm90aWNlOiBgU3RvcHBpbmcgc3RlcCBmdW5jdGlvbiAke2lucHV0LmV4ZWN1dGlvbkFybn0uLi5gLFxuICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgc2ZuLnNlbmQobmV3IFN0b3BFeGVjdXRpb25Db21tYW5kKHtcbiAgICAgICAgICAgICAgZXhlY3V0aW9uQXJuOiBpbnB1dC5leGVjdXRpb25Bcm4sXG4gICAgICAgICAgICAgIGVycm9yOiAnSWRsZVJ1bm5lcicsXG4gICAgICAgICAgICAgIGNhdXNlOiBgUnVubmVyICR7aW5wdXQucnVubmVyTmFtZX0gb24gJHtpbnB1dC5vd25lcn0vJHtpbnB1dC5yZXBvfSBpcyBpZGxlIGZvciB0b28gbG9uZyAoJHtkaWZmTXMgLyAxMDAwfSBzZWNvbmRzIGFuZCBsaW1pdCBpcyAke2lucHV0Lm1heElkbGVTZWNvbmRzfSBzZWNvbmRzKWAsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcih7XG4gICAgICAgICAgICAgIG5vdGljZTogYEZhaWxlZCB0byBzdG9wIHN0ZXAgZnVuY3Rpb24gJHtpbnB1dC5leGVjdXRpb25Bcm59OiAke2V9YCxcbiAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHJ5TGF0ZXIoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh7XG4gICAgICAgICAgICAgIG5vdGljZTogYERlbGV0aW5nIHJ1bm5lciAke3J1bm5lci5pZH0uLi5gLFxuICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXdhaXQgZGVsZXRlUnVubmVyKG9jdG9raXRDYWNoZSwgcnVubmVyTGV2ZWwsIGlucHV0Lm93bmVyLCBpbnB1dC5yZXBvLCBydW5uZXIuaWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Ioe1xuICAgICAgICAgICAgICBub3RpY2U6IGBGYWlsZWQgdG8gZGVsZXRlIHJ1bm5lciAke3J1bm5lci5pZH06ICR7ZX1gLFxuICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0cnlMYXRlcigpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHN0aWxsIGlkbGUsIHRpbWVvdXQgbm90IHJlYWNoZWQgLS0gcmV0cnkgbGF0ZXJcbiAgICAgICAgICByZXRyeUxhdGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm91bmQpIHtcbiAgICAgIC8vIG5vIHN0YXJ0ZWQgbGFiZWw/IHJldHJ5IGxhdGVyIChpdCB3b24ndCByZXRyeSBmb3JldmVyIGFzIGV2ZW50dWFsbHkgdGhlIHJ1bm5lciB3aWxsIHN0b3AgYW5kIHRoZSBzdGVwIGZ1bmN0aW9uIHdpbGwgZmluaXNoKVxuICAgICAgY29uc29sZS5lcnJvcih7XG4gICAgICAgIG5vdGljZTogJ05vIGBjZGtnaHI6c3RhcnRlZDp4eHhgIGxhYmVsIGZvdW5kPz8/JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICB9KTtcbiAgICAgIHJldHJ5TGF0ZXIoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|
|
@@ -43,5 +43,5 @@ class RunnerImageBuilder extends common_1.RunnerImageBuilderBase {
|
|
|
43
43
|
}
|
|
44
44
|
exports.RunnerImageBuilder = RunnerImageBuilder;
|
|
45
45
|
_a = JSII_RTTI_SYMBOL_1;
|
|
46
|
-
RunnerImageBuilder[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.RunnerImageBuilder", version: "0.
|
|
46
|
+
RunnerImageBuilder[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.RunnerImageBuilder", version: "0.13.1" };
|
|
47
47
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltYWdlLWJ1aWxkZXJzL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUEwQztBQUUxQywyREFBd0U7QUFDeEUsMkNBQTBEO0FBQzFELHFDQUFvSTtBQUNwSSw0Q0FBa0M7QUFFbEM7Ozs7OztHQU1HO0FBQ0gsTUFBc0Isa0JBQW1CLFNBQVEsK0JBQXNCO0lBQ3JFOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN0RSxJQUFJLEtBQUssRUFBRSxVQUFVLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdDLHlCQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxrSEFBa0gsQ0FBQyxDQUFDO1FBQ3ZKLENBQUM7UUFFRCxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssK0JBQXNCLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDN0QsT0FBTyxJQUFJLHVDQUEyQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLElBQUksS0FBSyxFQUFFLFdBQVcsS0FBSywrQkFBc0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNFLE9BQU8sSUFBSSxxREFBaUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLGNBQUUsQ0FBQyxZQUFZLENBQUM7UUFDeEMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDcEMsT0FBTyxJQUFJLHVDQUEyQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxjQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUkscURBQWlDLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDOztBQXZCSCxnREF3QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbm5vdGF0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXdzSW1hZ2VCdWlsZGVyUnVubmVySW1hZ2VCdWlsZGVyIH0gZnJvbSAnLi9hd3MtaW1hZ2UtYnVpbGRlcic7XG5pbXBvcnQgeyBDb2RlQnVpbGRSdW5uZXJJbWFnZUJ1aWxkZXIgfSBmcm9tICcuL2NvZGVidWlsZCc7XG5pbXBvcnQgeyBJQ29uZmlndXJhYmxlUnVubmVySW1hZ2VCdWlsZGVyLCBSdW5uZXJJbWFnZUJ1aWxkZXJCYXNlLCBSdW5uZXJJbWFnZUJ1aWxkZXJQcm9wcywgUnVubmVySW1hZ2VCdWlsZGVyVHlwZSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IE9zIH0gZnJvbSAnLi4vcHJvdmlkZXJzJztcblxuLyoqXG4gKiBHaXRIdWIgUnVubmVyIGltYWdlIGJ1aWxkZXIuIEJ1aWxkcyBhIERvY2tlciBpbWFnZSBvciBBTUkgd2l0aCBHaXRIdWIgUnVubmVyIGFuZCBvdGhlciByZXF1aXJlbWVudHMgaW5zdGFsbGVkLlxuICpcbiAqIEltYWdlcyBjYW4gYmUgY3VzdG9taXplZCBiZWZvcmUgcGFzc2VkIGludG8gdGhlIHByb3ZpZGVyIGJ5IGFkZGluZyBvciByZW1vdmluZyBjb21wb25lbnRzIHRvIGJlIGluc3RhbGxlZC5cbiAqXG4gKiBJbWFnZXMgYXJlIHJlYnVpbHQgZXZlcnkgd2VlayBieSBkZWZhdWx0IHRvIGVuc3VyZSB0aGF0IHRoZSBsYXRlc3Qgc2VjdXJpdHkgcGF0Y2hlcyBhcmUgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJ1bm5lckltYWdlQnVpbGRlciBleHRlbmRzIFJ1bm5lckltYWdlQnVpbGRlckJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IGltYWdlIGJ1aWxkZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHByb3BlcnRpZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGRpZmZlciBiYXNlZCBvbiB0aGUgT1MsIGFyY2hpdGVjdHVyZSwgYW5kIHJlcXVlc3RlZCBidWlsZGVyIHR5cGUuXG4gICAqL1xuICBzdGF0aWMgbmV3KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzPzogUnVubmVySW1hZ2VCdWlsZGVyUHJvcHMpOiBJQ29uZmlndXJhYmxlUnVubmVySW1hZ2VCdWlsZGVyIHtcbiAgICBpZiAocHJvcHM/LmNvbXBvbmVudHMgJiYgcHJvcHMucnVubmVyVmVyc2lvbikge1xuICAgICAgQW5ub3RhdGlvbnMub2Yoc2NvcGUpLmFkZFdhcm5pbmcoJ3J1bm5lclZlcnNpb24gaXMgaWdub3JlZCB3aGVuIGNvbXBvbmVudHMgYXJlIHNwZWNpZmllZC4gVGhlIHJ1bm5lciB2ZXJzaW9uIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29tcG9uZW50cy4nKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHM/LmJ1aWxkZXJUeXBlID09PSBSdW5uZXJJbWFnZUJ1aWxkZXJUeXBlLkNPREVfQlVJTEQpIHtcbiAgICAgIHJldHVybiBuZXcgQ29kZUJ1aWxkUnVubmVySW1hZ2VCdWlsZGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH0gZWxzZSBpZiAocHJvcHM/LmJ1aWxkZXJUeXBlID09PSBSdW5uZXJJbWFnZUJ1aWxkZXJUeXBlLkFXU19JTUFHRV9CVUlMREVSKSB7XG4gICAgICByZXR1cm4gbmV3IEF3c0ltYWdlQnVpbGRlclJ1bm5lckltYWdlQnVpbGRlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcyA9IHByb3BzPy5vcyA/PyBPcy5MSU5VWF9VQlVOVFU7XG4gICAgaWYgKG9zLmlzSW4oT3MuX0FMTF9MSU5VWF9WRVJTSU9OUykpIHtcbiAgICAgIHJldHVybiBuZXcgQ29kZUJ1aWxkUnVubmVySW1hZ2VCdWlsZGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH0gZWxzZSBpZiAob3MuaXMoT3MuV0lORE9XUykpIHtcbiAgICAgIHJldHVybiBuZXcgQXdzSW1hZ2VCdWlsZGVyUnVubmVySW1hZ2VCdWlsZGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHJ1bm5lciBpbWFnZSBidWlsZGVyIGltcGxlbWVudGF0aW9uIGZvciAke29zLm5hbWV9YCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -155,6 +155,7 @@ export declare class AwsImageBuilderRunnerImageBuilder extends RunnerImageBuilde
|
|
|
155
155
|
private infrastructure;
|
|
156
156
|
private readonly role;
|
|
157
157
|
private readonly fastLaunchOptions?;
|
|
158
|
+
private readonly waitOnDeploy;
|
|
158
159
|
constructor(scope: Construct, id: string, props?: RunnerImageBuilderProps);
|
|
159
160
|
private platform;
|
|
160
161
|
/**
|
|
@@ -181,7 +182,7 @@ export declare class AwsImageBuilderRunnerImageBuilder extends RunnerImageBuilde
|
|
|
181
182
|
*/
|
|
182
183
|
export declare class AwsImageBuilderFailedBuildNotifier implements cdk.IAspect {
|
|
183
184
|
private topic;
|
|
184
|
-
static createFilteringTopic(scope: Construct, targetTopic: sns.Topic):
|
|
185
|
+
static createFilteringTopic(scope: Construct, targetTopic: sns.Topic): sns.ITopic;
|
|
185
186
|
constructor(topic: sns.ITopic);
|
|
186
187
|
visit(node: IConstruct): void;
|
|
187
188
|
}
|