@cloudsnorkel/cdk-github-runners 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +6 -1
- package/.jsii +1225 -174
- package/API.md +1047 -64
- package/README.md +54 -44
- package/lib/index.d.ts +3 -1
- package/lib/index.js +7 -1
- package/lib/lambdas/build-image/index.js +121 -0
- package/lib/lambdas/setup/index.js +2 -2
- package/lib/lambdas/update-lambda/index.js +55 -0
- package/lib/providers/codebuild.d.ts +31 -1
- package/lib/providers/codebuild.js +57 -13
- package/lib/providers/common.d.ts +87 -6
- package/lib/providers/common.js +64 -4
- package/lib/providers/docker-images/codebuild/linux-arm64/Dockerfile +59 -0
- package/lib/providers/docker-images/codebuild/{Dockerfile → linux-x64/Dockerfile} +10 -5
- package/lib/providers/docker-images/fargate/linux-arm64/Dockerfile +41 -0
- package/lib/providers/docker-images/fargate/{runner.sh → linux-arm64/runner.sh} +0 -0
- package/lib/providers/docker-images/fargate/{Dockerfile → linux-x64/Dockerfile} +10 -5
- package/lib/providers/docker-images/fargate/linux-x64/runner.sh +5 -0
- package/lib/providers/docker-images/lambda/linux-arm64/Dockerfile +32 -0
- package/lib/providers/docker-images/lambda/{runner.js → linux-arm64/runner.js} +0 -0
- package/lib/providers/docker-images/lambda/{runner.sh → linux-arm64/runner.sh} +0 -0
- package/lib/providers/docker-images/lambda/linux-x64/Dockerfile +31 -0
- package/lib/providers/docker-images/lambda/linux-x64/runner.js +29 -0
- package/lib/providers/docker-images/lambda/linux-x64/runner.sh +12 -0
- package/lib/providers/fargate.d.ts +33 -1
- package/lib/providers/fargate.js +39 -8
- package/lib/providers/image-builders/codebuild.d.ts +170 -0
- package/lib/providers/image-builders/codebuild.js +340 -0
- package/lib/providers/image-builders/static.d.ts +29 -0
- package/lib/providers/image-builders/static.js +58 -0
- package/lib/providers/lambda.d.ts +27 -1
- package/lib/providers/lambda.js +88 -9
- package/lib/runner.d.ts +2 -2
- package/lib/runner.js +7 -3
- package/lib/secrets.js +1 -1
- package/lib/utils.d.ts +2 -1
- package/lib/utils.js +14 -3
- package/lib/webhook.js +2 -1
- package/package.json +8 -7
- package/lib/providers/docker-images/lambda/Dockerfile +0 -27
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { aws_ec2 as ec2, aws_iam as iam, aws_logs as logs, aws_stepfunctions as stepfunctions } from 'aws-cdk-lib';
|
|
1
|
+
import { aws_ec2 as ec2, aws_ecr as ecr, aws_iam as iam, aws_logs as logs, aws_stepfunctions as stepfunctions } from 'aws-cdk-lib';
|
|
2
2
|
/**
|
|
3
3
|
* Defines desired GitHub Actions runner version.
|
|
4
4
|
*/
|
|
@@ -19,15 +19,96 @@ export declare class RunnerVersion {
|
|
|
19
19
|
protected constructor(version: string);
|
|
20
20
|
}
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* CPU architecture enum for an image.
|
|
23
23
|
*/
|
|
24
|
-
export
|
|
24
|
+
export declare class Architecture {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
/**
|
|
27
|
+
* ARM64
|
|
28
|
+
*/
|
|
29
|
+
static readonly ARM64: Architecture;
|
|
30
|
+
/**
|
|
31
|
+
* X86_64
|
|
32
|
+
*/
|
|
33
|
+
static readonly X86_64: Architecture;
|
|
34
|
+
private static of;
|
|
35
|
+
private constructor();
|
|
36
|
+
/**
|
|
37
|
+
* Checks if the given architecture is the same as this one.
|
|
38
|
+
*
|
|
39
|
+
* @param arch architecture to compare
|
|
40
|
+
*/
|
|
41
|
+
is(arch: Architecture): boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* OS enum for an image.
|
|
45
|
+
*/
|
|
46
|
+
export declare class Os {
|
|
47
|
+
readonly name: string;
|
|
25
48
|
/**
|
|
26
|
-
|
|
49
|
+
* Linux
|
|
50
|
+
*/
|
|
51
|
+
static readonly LINUX: Os;
|
|
52
|
+
/**
|
|
53
|
+
* Windows
|
|
54
|
+
*/
|
|
55
|
+
static readonly WINDOWS: Os;
|
|
56
|
+
private static of;
|
|
57
|
+
private constructor();
|
|
58
|
+
/**
|
|
59
|
+
* Checks if the given OS is the same as this one.
|
|
60
|
+
*
|
|
61
|
+
* @param os OS to compare
|
|
62
|
+
*/
|
|
63
|
+
is(os: Os): boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface RunnerImage {
|
|
66
|
+
/**
|
|
67
|
+
* ECR repository containing the image.
|
|
68
|
+
*/
|
|
69
|
+
readonly imageRepository: ecr.IRepository;
|
|
70
|
+
/**
|
|
71
|
+
* Static image tag where the image will be pushed.
|
|
72
|
+
*/
|
|
73
|
+
readonly imageTag: string;
|
|
74
|
+
/**
|
|
75
|
+
* Image digest for providers that need to know the digest like Lambda.
|
|
27
76
|
*
|
|
28
|
-
*
|
|
77
|
+
* WARNING: the digest might change when the builder automatically rebuilds the image on a schedule. Do not expect for this digest to stay the same between deploys.
|
|
29
78
|
*/
|
|
30
|
-
readonly
|
|
79
|
+
readonly imageDigest: string;
|
|
80
|
+
/**
|
|
81
|
+
* Architecture of the image.
|
|
82
|
+
*/
|
|
83
|
+
readonly architecture: Architecture;
|
|
84
|
+
/**
|
|
85
|
+
* OS type of the image.
|
|
86
|
+
*/
|
|
87
|
+
readonly os: Os;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Interface for constructs that build an image that can be used in {@link IRunnerProvider}.
|
|
91
|
+
*
|
|
92
|
+
* Anything that ends up with an ECR repository containing a Docker image that runs GitHub self-hosted runners can be used. A simple implementation could even point to an existing image and nothing else.
|
|
93
|
+
*
|
|
94
|
+
* It's important that the specified image tag be available at the time the repository is available. Providers usually assume the image is ready and will fail if it's not.
|
|
95
|
+
*
|
|
96
|
+
* The image can be further updated over time manually or using a schedule as long as it is always written to the same tag.
|
|
97
|
+
*/
|
|
98
|
+
export interface IImageBuilder {
|
|
99
|
+
/**
|
|
100
|
+
* ECR repository containing the image.
|
|
101
|
+
*
|
|
102
|
+
* This method can be called multiple times if the image is bound to multiple providers. Make sure you cache the image when implementing or return an error if this builder doesn't support reusing images.
|
|
103
|
+
*
|
|
104
|
+
* @return image
|
|
105
|
+
*/
|
|
106
|
+
bind(): RunnerImage;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Common properties for all runner providers.
|
|
110
|
+
*/
|
|
111
|
+
export interface RunnerProviderProps {
|
|
31
112
|
/**
|
|
32
113
|
* The number of days log events are kept in CloudWatch Logs. When updating
|
|
33
114
|
* this property, unsetting it doesn't remove the log retention policy. To
|
package/lib/providers/common.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
2
|
+
var _a, _b, _c;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.RunnerVersion = void 0;
|
|
4
|
+
exports.Os = exports.Architecture = exports.RunnerVersion = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
/**
|
|
7
7
|
* Defines desired GitHub Actions runner version.
|
|
@@ -29,5 +29,65 @@ class RunnerVersion {
|
|
|
29
29
|
}
|
|
30
30
|
exports.RunnerVersion = RunnerVersion;
|
|
31
31
|
_a = JSII_RTTI_SYMBOL_1;
|
|
32
|
-
RunnerVersion[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.RunnerVersion", version: "0.
|
|
33
|
-
|
|
32
|
+
RunnerVersion[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.RunnerVersion", version: "0.3.0" };
|
|
33
|
+
/**
|
|
34
|
+
* CPU architecture enum for an image.
|
|
35
|
+
*/
|
|
36
|
+
class Architecture {
|
|
37
|
+
constructor(name) {
|
|
38
|
+
this.name = name;
|
|
39
|
+
}
|
|
40
|
+
static of(architecture) {
|
|
41
|
+
return new Architecture(architecture);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Checks if the given architecture is the same as this one.
|
|
45
|
+
*
|
|
46
|
+
* @param arch architecture to compare
|
|
47
|
+
*/
|
|
48
|
+
is(arch) {
|
|
49
|
+
return arch.name == this.name;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.Architecture = Architecture;
|
|
53
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
54
|
+
Architecture[_b] = { fqn: "@cloudsnorkel/cdk-github-runners.Architecture", version: "0.3.0" };
|
|
55
|
+
/**
|
|
56
|
+
* ARM64
|
|
57
|
+
*/
|
|
58
|
+
Architecture.ARM64 = Architecture.of('ARM64');
|
|
59
|
+
/**
|
|
60
|
+
* X86_64
|
|
61
|
+
*/
|
|
62
|
+
Architecture.X86_64 = Architecture.of('X86_64');
|
|
63
|
+
/**
|
|
64
|
+
* OS enum for an image.
|
|
65
|
+
*/
|
|
66
|
+
class Os {
|
|
67
|
+
constructor(name) {
|
|
68
|
+
this.name = name;
|
|
69
|
+
}
|
|
70
|
+
static of(os) {
|
|
71
|
+
return new Os(os);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Checks if the given OS is the same as this one.
|
|
75
|
+
*
|
|
76
|
+
* @param os OS to compare
|
|
77
|
+
*/
|
|
78
|
+
is(os) {
|
|
79
|
+
return os.name == this.name;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.Os = Os;
|
|
83
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
84
|
+
Os[_c] = { fqn: "@cloudsnorkel/cdk-github-runners.Os", version: "0.3.0" };
|
|
85
|
+
/**
|
|
86
|
+
* Linux
|
|
87
|
+
*/
|
|
88
|
+
Os.LINUX = Os.of('Linux');
|
|
89
|
+
/**
|
|
90
|
+
* Windows
|
|
91
|
+
*/
|
|
92
|
+
Os.WINDOWS = Os.of('Windows');
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQWEsYUFBYTtJQW1CeEIsWUFBK0IsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFDOUMsQ0FBQztJQW5CRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxNQUFNO1FBQ2xCLE9BQU8sSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBZTtRQUNwQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O0FBakJILHNDQXFCQzs7O0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQVk7SUFldkIsWUFBb0MsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7SUFDaEQsQ0FBQztJQUxPLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBb0I7UUFDcEMsT0FBTyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBS0Q7Ozs7TUFJRTtJQUNLLEVBQUUsQ0FBQyxJQUFrQjtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDOztBQXpCSCxvQ0EwQkM7OztBQXpCQzs7R0FFRztBQUNvQixrQkFBSyxHQUFHLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFeEQ7O0dBRUc7QUFDb0IsbUJBQU0sR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBbUI1RDs7R0FFRztBQUNILE1BQWEsRUFBRTtJQWViLFlBQW9DLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO0lBQ2hELENBQUM7SUFMTyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQVU7UUFDMUIsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBS0Q7Ozs7TUFJRTtJQUNLLEVBQUUsQ0FBQyxFQUFNO1FBQ2QsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUIsQ0FBQzs7QUF6QkgsZ0JBMEJDOzs7QUF6QkM7O0VBRUU7QUFDcUIsUUFBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFOUM7O0VBRUU7QUFDcUIsVUFBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfZWMyIGFzIGVjMiwgYXdzX2VjciBhcyBlY3IsIGF3c19pYW0gYXMgaWFtLCBhd3NfbG9ncyBhcyBsb2dzLCBhd3Nfc3RlcGZ1bmN0aW9ucyBhcyBzdGVwZnVuY3Rpb25zIH0gZnJvbSAnYXdzLWNkay1saWInO1xuXG4vKipcbiAqIERlZmluZXMgZGVzaXJlZCBHaXRIdWIgQWN0aW9ucyBydW5uZXIgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bm5lclZlcnNpb24ge1xuICAvKipcbiAgICogVXNlIHRoZSBsYXRlc3QgdmVyc2lvbiBhdmFpbGFibGUgYXQgdGhlIHRpbWUgdGhlIHJ1bm5lciBwcm92aWRlciBpbWFnZSBpcyBidWlsdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZXN0KCk6IFJ1bm5lclZlcnNpb24ge1xuICAgIHJldHVybiBuZXcgUnVubmVyVmVyc2lvbignbGF0ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogVXNlIGEgc3BlY2lmaWMgdmVyc2lvbi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYWN0aW9ucy9ydW5uZXIvcmVsZWFzZXNcbiAgICpcbiAgICogQHBhcmFtIHZlcnNpb24gR2l0SHViIFJ1bm5lciB2ZXJzaW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNwZWNpZmljKHZlcnNpb246IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgUnVubmVyVmVyc2lvbih2ZXJzaW9uKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihyZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgfVxufVxuXG4vKipcbiAqIENQVSBhcmNoaXRlY3R1cmUgZW51bSBmb3IgYW4gaW1hZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBBcmNoaXRlY3R1cmUge1xuICAvKipcbiAgICogQVJNNjRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVJNNjQgPSBBcmNoaXRlY3R1cmUub2YoJ0FSTTY0Jyk7XG5cbiAgLyoqXG4gICAqIFg4Nl82NFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBYODZfNjQgPSBBcmNoaXRlY3R1cmUub2YoJ1g4Nl82NCcpO1xuXG4gIHByaXZhdGUgc3RhdGljIG9mKGFyY2hpdGVjdHVyZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBBcmNoaXRlY3R1cmUoYXJjaGl0ZWN0dXJlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZykge1xuICB9XG5cbiAgLyoqXG4gICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmNoaXRlY3R1cmUgaXMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gICpcbiAgKiBAcGFyYW0gYXJjaCBhcmNoaXRlY3R1cmUgdG8gY29tcGFyZVxuICAqL1xuICBwdWJsaWMgaXMoYXJjaDogQXJjaGl0ZWN0dXJlKSB7XG4gICAgcmV0dXJuIGFyY2gubmFtZSA9PSB0aGlzLm5hbWU7XG4gIH1cbn1cblxuLyoqXG4gKiBPUyBlbnVtIGZvciBhbiBpbWFnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE9zIHtcbiAgLyoqXG4gICogTGludXhcbiAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMSU5VWCA9IE9zLm9mKCdMaW51eCcpO1xuXG4gIC8qKlxuICAqIFdpbmRvd3NcbiAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBXSU5ET1dTID0gT3Mub2YoJ1dpbmRvd3MnKTtcblxuICBwcml2YXRlIHN0YXRpYyBvZihvczogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBPcyhvcyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcpIHtcbiAgfVxuXG4gIC8qKlxuICAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gT1MgaXMgdGhlIHNhbWUgYXMgdGhpcyBvbmUuXG4gICpcbiAgKiBAcGFyYW0gb3MgT1MgdG8gY29tcGFyZVxuICAqL1xuICBwdWJsaWMgaXMob3M6IE9zKSB7XG4gICAgcmV0dXJuIG9zLm5hbWUgPT0gdGhpcy5uYW1lO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmVySW1hZ2Uge1xuICAvKipcbiAgICogRUNSIHJlcG9zaXRvcnkgY29udGFpbmluZyB0aGUgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBpbWFnZVJlcG9zaXRvcnk6IGVjci5JUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogU3RhdGljIGltYWdlIHRhZyB3aGVyZSB0aGUgaW1hZ2Ugd2lsbCBiZSBwdXNoZWQuXG4gICAqL1xuICByZWFkb25seSBpbWFnZVRhZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbWFnZSBkaWdlc3QgZm9yIHByb3ZpZGVycyB0aGF0IG5lZWQgdG8ga25vdyB0aGUgZGlnZXN0IGxpa2UgTGFtYmRhLlxuICAgKlxuICAgKiBXQVJOSU5HOiB0aGUgZGlnZXN0IG1pZ2h0IGNoYW5nZSB3aGVuIHRoZSBidWlsZGVyIGF1dG9tYXRpY2FsbHkgcmVidWlsZHMgdGhlIGltYWdlIG9uIGEgc2NoZWR1bGUuIERvIG5vdCBleHBlY3QgZm9yIHRoaXMgZGlnZXN0IHRvIHN0YXkgdGhlIHNhbWUgYmV0d2VlbiBkZXBsb3lzLlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VEaWdlc3Q6IHN0cmluZztcblxuICAvKipcbiAgICogQXJjaGl0ZWN0dXJlIG9mIHRoZSBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBPUyB0eXBlIG9mIHRoZSBpbWFnZS5cbiAgICovXG4gIHJlYWRvbmx5IG9zOiBPcztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGNvbnN0cnVjdHMgdGhhdCBidWlsZCBhbiBpbWFnZSB0aGF0IGNhbiBiZSB1c2VkIGluIHtAbGluayBJUnVubmVyUHJvdmlkZXJ9LlxuICpcbiAqIEFueXRoaW5nIHRoYXQgZW5kcyB1cCB3aXRoIGFuIEVDUiByZXBvc2l0b3J5IGNvbnRhaW5pbmcgYSBEb2NrZXIgaW1hZ2UgdGhhdCBydW5zIEdpdEh1YiBzZWxmLWhvc3RlZCBydW5uZXJzIGNhbiBiZSB1c2VkLiBBIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBjb3VsZCBldmVuIHBvaW50IHRvIGFuIGV4aXN0aW5nIGltYWdlIGFuZCBub3RoaW5nIGVsc2UuXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgc3BlY2lmaWVkIGltYWdlIHRhZyBiZSBhdmFpbGFibGUgYXQgdGhlIHRpbWUgdGhlIHJlcG9zaXRvcnkgaXMgYXZhaWxhYmxlLiBQcm92aWRlcnMgdXN1YWxseSBhc3N1bWUgdGhlIGltYWdlIGlzIHJlYWR5IGFuZCB3aWxsIGZhaWwgaWYgaXQncyBub3QuXG4gKlxuICogVGhlIGltYWdlIGNhbiBiZSBmdXJ0aGVyIHVwZGF0ZWQgb3ZlciB0aW1lIG1hbnVhbGx5IG9yIHVzaW5nIGEgc2NoZWR1bGUgYXMgbG9uZyBhcyBpdCBpcyBhbHdheXMgd3JpdHRlbiB0byB0aGUgc2FtZSB0YWcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUltYWdlQnVpbGRlciB7XG4gIC8qKlxuICAgKiBFQ1IgcmVwb3NpdG9yeSBjb250YWluaW5nIHRoZSBpbWFnZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpZiB0aGUgaW1hZ2UgaXMgYm91bmQgdG8gbXVsdGlwbGUgcHJvdmlkZXJzLiBNYWtlIHN1cmUgeW91IGNhY2hlIHRoZSBpbWFnZSB3aGVuIGltcGxlbWVudGluZyBvciByZXR1cm4gYW4gZXJyb3IgaWYgdGhpcyBidWlsZGVyIGRvZXNuJ3Qgc3VwcG9ydCByZXVzaW5nIGltYWdlcy5cbiAgICpcbiAgICogQHJldHVybiBpbWFnZVxuICAgKi9cbiAgYmluZCgpOiBSdW5uZXJJbWFnZTtcbn1cblxuLyoqXG4gKiBDb21tb24gcHJvcGVydGllcyBmb3IgYWxsIHJ1bm5lciBwcm92aWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmVyUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGRheXMgbG9nIGV2ZW50cyBhcmUga2VwdCBpbiBDbG91ZFdhdGNoIExvZ3MuIFdoZW4gdXBkYXRpbmdcbiAgICogdGhpcyBwcm9wZXJ0eSwgdW5zZXR0aW5nIGl0IGRvZXNuJ3QgcmVtb3ZlIHRoZSBsb2cgcmV0ZW50aW9uIHBvbGljeS4gVG9cbiAgICogcmVtb3ZlIHRoZSByZXRlbnRpb24gcG9saWN5LCBzZXQgdGhlIHZhbHVlIHRvIGBJTkZJTklURWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEhcbiAgICovXG4gIHJlYWRvbmx5IGxvZ1JldGVudGlvbj86IGxvZ3MuUmV0ZW50aW9uRGF5cztcbn1cblxuLyoqXG4gKiBXb3JrZmxvdyBqb2IgcGFyYW1ldGVycyBhcyBwYXJzZWQgZnJvbSB0aGUgd2ViaG9vayBldmVudC4gUGFzcyB0aGVzZSBpbnRvIHlvdXIgcnVubmVyIGV4ZWN1dG9yIGFuZCBydW4gc29tZXRoaW5nIGxpa2U6XG4gKlxuICogYGBgc2hcbiAqIC4vY29uZmlnLnNoIC0tdW5hdHRlbmRlZCAtLXVybCBcImh0dHBzOi8vJHtHSVRIVUJfRE9NQUlOfS8ke09XTkVSfS8ke1JFUE99XCIgLS10b2tlbiBcIiR7UlVOTkVSX1RPS0VOfVwiIC0tZXBoZW1lcmFsIC0td29yayBfd29yayAtLWxhYmVscyBcIiR7UlVOTkVSX0xBQkVMfVwiIC0tbmFtZSBcIiR7UlVOTkVSX05BTUV9XCIgLS1kaXNhYmxldXBkYXRlXG4gKiBgYGBcbiAqXG4gKiBBbGwgcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkIGFzIHN0ZXAgZnVuY3Rpb24gcGF0aHMgYW5kIHRoZXJlZm9yZSBtdXN0IGJlIHVzZWQgb25seSBpbiBzdGVwIGZ1bmN0aW9uIHRhc2sgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5uZXJSdW50aW1lUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBQYXRoIHRvIHJ1bm5lciB0b2tlbiB1c2VkIHRvIHJlZ2lzdGVyIHRva2VuLlxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyVG9rZW5QYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gZGVzaXJlZCBydW5uZXIgbmFtZS4gV2Ugc3BlY2lmaWNhbGx5IHNldCB0aGUgbmFtZSB0byBtYWtlIHRyb3VibGVzaG9vdGluZyBlYXNpZXIuXG4gICAqL1xuICByZWFkb25seSBydW5uZXJOYW1lUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIEdpdEh1YiBkb21haW4uIE1vc3Qgb2YgdGhlIHRpbWUgdGhpcyB3aWxsIGJlIGdpdGh1Yi5jb20gYnV0IGZvciBzZWxmLWhvc3RlZCBHaXRIdWIgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYmUgZGlmZmVyZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViRG9tYWluUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHJlcG9zdGlyb3kgb3duZXIgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG93bmVyUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHJlcG9zaXRvcnkgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9QYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBhbGwgcnVubmVyIHByb3ZpZGVycy4gSW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhbGwgcmVxdWlyZWQgcmVzb3VyY2VzIGFuZCByZXR1cm4gYSBzdGVwIGZ1bmN0aW9uIHRhc2sgdGhhdCBzdGFydHMgdGhvc2UgcmVzb3VyY2VzIGZyb20ge0BsaW5rIGdldFN0ZXBGdW5jdGlvblRhc2t9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSdW5uZXJQcm92aWRlciBleHRlbmRzIGVjMi5JQ29ubmVjdGFibGUsIGlhbS5JR3JhbnRhYmxlIHtcbiAgLyoqXG4gICAqIEdpdEh1YiBBY3Rpb25zIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJ1bm5lciBwcm92aWRlci5cbiAgICovXG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZQQyBuZXR3b3JrIGluIHdoaWNoIHJ1bm5lcnMgd2lsbCBiZSBwbGFjZWQuXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHJ1bm5lcnMuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwPzogZWMyLklTZWN1cml0eUdyb3VwO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzdGVwIGZ1bmN0aW9uIHRhc2tzIHRoYXQgZXhlY3V0ZSB0aGUgcnVubmVyLlxuICAgKlxuICAgKiBDYWxsZWQgYnkgR2l0aHViUnVubmVycyBhbmQgc2hvdWxkbid0IGJlIGNhbGxlZCBtYW51YWxseS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtZXRlcnMgc3BlY2lmaWMgYnVpbGQgcGFyYW1ldGVyc1xuICAgKi9cbiAgZ2V0U3RlcEZ1bmN0aW9uVGFzayhwYXJhbWV0ZXJzOiBSdW5uZXJSdW50aW1lUGFyYW1ldGVycyk6IHN0ZXBmdW5jdGlvbnMuSUNoYWluYWJsZTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
ARG BASE_IMAGE="public.ecr.aws/lts/ubuntu:20.04"
|
|
2
|
+
FROM $BASE_IMAGE
|
|
3
|
+
|
|
4
|
+
# setup user
|
|
5
|
+
RUN addgroup runner && adduser --system --disabled-password --home /home/runner --ingroup runner runner
|
|
6
|
+
|
|
7
|
+
# add dependencies and sudo
|
|
8
|
+
ARG EXTRA_PACKAGES=""
|
|
9
|
+
RUN apt-get update && apt-get upgrade -y && apt-get install -y curl sudo jq bash zip unzip iptables software-properties-common $EXTRA_PACKAGES && \
|
|
10
|
+
usermod -aG sudo runner && \
|
|
11
|
+
echo "%sudo ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/runner
|
|
12
|
+
|
|
13
|
+
# add latest git
|
|
14
|
+
RUN add-apt-repository ppa:git-core/ppa && apt update && apt-get install -y git
|
|
15
|
+
|
|
16
|
+
# add awscli
|
|
17
|
+
RUN curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o awscliv2.zip && \
|
|
18
|
+
unzip -q awscliv2.zip && ./aws/install && rm -rf awscliv2.zip aws
|
|
19
|
+
|
|
20
|
+
# add ghcli
|
|
21
|
+
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg && \
|
|
22
|
+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null && \
|
|
23
|
+
apt update && \
|
|
24
|
+
apt install -y gh
|
|
25
|
+
|
|
26
|
+
# setup working directory
|
|
27
|
+
WORKDIR /home/runner
|
|
28
|
+
|
|
29
|
+
# add runner without github's api which is rate limited
|
|
30
|
+
ARG RUNNER_VERSION=latest
|
|
31
|
+
RUN if [ "$RUNNER_VERSION" = "latest" ]; then RUNNER_VERSION=`curl -w "%{redirect_url}" -fsS https://github.com/actions/runner/releases/latest | grep -oE "[^/v]+$"`; fi && \
|
|
32
|
+
curl -fsSLO "https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-arm64-${RUNNER_VERSION}.tar.gz" && \
|
|
33
|
+
tar xzf "actions-runner-linux-arm64-${RUNNER_VERSION}.tar.gz" && \
|
|
34
|
+
rm actions-runner-linux-arm64-${RUNNER_VERSION}.tar.gz && \
|
|
35
|
+
./bin/installdependencies.sh
|
|
36
|
+
|
|
37
|
+
# docker-in-docker
|
|
38
|
+
ARG DOCKER_CHANNEL="stable"
|
|
39
|
+
ARG DIND_COMMIT="42b1175eda071c0e9121e1d64345928384a93df1"
|
|
40
|
+
ARG DOCKER_VERSION="20.10.16"
|
|
41
|
+
ARG DOCKER_COMPOSE_VERSION="2.5.1"
|
|
42
|
+
|
|
43
|
+
RUN curl -fsSL "https://download.docker.com/linux/static/${DOCKER_CHANNEL}/aarch64/docker-${DOCKER_VERSION}.tgz" -o docker.tgz && \
|
|
44
|
+
tar --strip-components 1 -C /usr/local/bin/ -xzf docker.tgz && \
|
|
45
|
+
rm docker.tgz && \
|
|
46
|
+
# set up subuid/subgid so that "--userns-remap=default" works out-of-the-box
|
|
47
|
+
addgroup dockremap && \
|
|
48
|
+
useradd -g dockremap dockremap && \
|
|
49
|
+
echo 'dockremap:165536:65536' >> /etc/subuid && \
|
|
50
|
+
echo 'dockremap:165536:65536' >> /etc/subgid && \
|
|
51
|
+
curl -fsSL "https://raw.githubusercontent.com/docker/docker/${DIND_COMMIT}/hack/dind" -o /usr/local/bin/dind && \
|
|
52
|
+
curl -fsSL https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-linux-aarch64 -o /usr/local/bin/docker-compose && \
|
|
53
|
+
chmod +x /usr/local/bin/dind /usr/local/bin/docker-compose && \
|
|
54
|
+
addgroup docker && usermod -aG docker runner
|
|
55
|
+
|
|
56
|
+
VOLUME /var/lib/docker
|
|
57
|
+
|
|
58
|
+
# configure runner
|
|
59
|
+
USER runner
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
ARG BASE_IMAGE="public.ecr.aws/lts/ubuntu:20.04"
|
|
2
|
+
FROM $BASE_IMAGE
|
|
2
3
|
|
|
3
4
|
# setup user
|
|
4
5
|
RUN addgroup runner && adduser --system --disabled-password --home /home/runner --ingroup runner runner
|
|
5
6
|
|
|
6
7
|
# add dependencies and sudo
|
|
7
|
-
|
|
8
|
+
ARG EXTRA_PACKAGES=""
|
|
9
|
+
RUN apt-get update && apt-get upgrade -y && apt-get install -y curl sudo jq bash zip unzip iptables software-properties-common $EXTRA_PACKAGES && \
|
|
8
10
|
usermod -aG sudo runner && \
|
|
9
11
|
echo "%sudo ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/runner
|
|
10
12
|
|
|
13
|
+
# add latest git
|
|
14
|
+
RUN add-apt-repository ppa:git-core/ppa && apt update && apt-get install -y git
|
|
15
|
+
|
|
11
16
|
# add awscli
|
|
12
17
|
RUN curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip && \
|
|
13
18
|
unzip -q awscliv2.zip && ./aws/install && rm -rf awscliv2.zip aws
|
|
@@ -21,9 +26,9 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | s
|
|
|
21
26
|
# setup working directory
|
|
22
27
|
WORKDIR /home/runner
|
|
23
28
|
|
|
24
|
-
# add runner
|
|
25
|
-
ARG RUNNER_VERSION
|
|
26
|
-
RUN if [ "${RUNNER_VERSION}" = "latest" ]; then RUNNER_VERSION=`curl -
|
|
29
|
+
# add runner without github's api which is rate limited
|
|
30
|
+
ARG RUNNER_VERSION=latest
|
|
31
|
+
RUN if [ "${RUNNER_VERSION}" = "latest" ]; then RUNNER_VERSION=`curl -w "%{redirect_url}" -fsS https://github.com/actions/runner/releases/latest | grep -oE "[^/v]+$"`; fi && \
|
|
27
32
|
curl -fsSLO "https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz" && \
|
|
28
33
|
tar xzf "actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz" && \
|
|
29
34
|
rm actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz && \
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
ARG BASE_IMAGE="public.ecr.aws/lts/ubuntu:20.04"
|
|
2
|
+
FROM $BASE_IMAGE
|
|
3
|
+
|
|
4
|
+
# setup user
|
|
5
|
+
RUN addgroup runner && adduser --system --disabled-password --home /home/runner --ingroup runner runner
|
|
6
|
+
|
|
7
|
+
# add dependencies and sudo
|
|
8
|
+
ARG EXTRA_PACKAGES=""
|
|
9
|
+
RUN apt-get update && apt-get upgrade -y && apt-get install -y curl sudo jq bash zip unzip software-properties-common $EXTRA_PACKAGES && \
|
|
10
|
+
usermod -aG sudo runner && \
|
|
11
|
+
echo "%sudo ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/runner
|
|
12
|
+
|
|
13
|
+
# add latest git
|
|
14
|
+
RUN add-apt-repository ppa:git-core/ppa && apt update && apt-get install -y git
|
|
15
|
+
|
|
16
|
+
# add awscli
|
|
17
|
+
RUN curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o awscliv2.zip && \
|
|
18
|
+
unzip -q awscliv2.zip && ./aws/install && rm -rf awscliv2.zip aws
|
|
19
|
+
|
|
20
|
+
# add ghcli
|
|
21
|
+
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg && \
|
|
22
|
+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null && \
|
|
23
|
+
apt update && \
|
|
24
|
+
apt install -y gh
|
|
25
|
+
|
|
26
|
+
# setup working directory
|
|
27
|
+
WORKDIR /home/runner
|
|
28
|
+
|
|
29
|
+
# add runner without github's api which is rate limited
|
|
30
|
+
ARG RUNNER_VERSION=latest
|
|
31
|
+
RUN if [ "${RUNNER_VERSION}" = "latest" ]; then RUNNER_VERSION=`curl -w "%{redirect_url}" -fsS https://github.com/actions/runner/releases/latest | grep -oE "[^/v]+$"`; fi && \
|
|
32
|
+
curl -fsSLO "https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-arm64-${RUNNER_VERSION}.tar.gz" && \
|
|
33
|
+
tar xzf "actions-runner-linux-arm64-${RUNNER_VERSION}.tar.gz" && \
|
|
34
|
+
rm actions-runner-linux-arm64-${RUNNER_VERSION}.tar.gz && \
|
|
35
|
+
./bin/installdependencies.sh
|
|
36
|
+
|
|
37
|
+
# configure runner
|
|
38
|
+
USER runner
|
|
39
|
+
|
|
40
|
+
ADD runner.sh .
|
|
41
|
+
CMD ["bash", "/home/runner/runner.sh"]
|
|
File without changes
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
ARG BASE_IMAGE="public.ecr.aws/lts/ubuntu:20.04"
|
|
2
|
+
FROM $BASE_IMAGE
|
|
2
3
|
|
|
3
4
|
# setup user
|
|
4
5
|
RUN addgroup runner && adduser --system --disabled-password --home /home/runner --ingroup runner runner
|
|
5
6
|
|
|
6
7
|
# add dependencies and sudo
|
|
7
|
-
|
|
8
|
+
ARG EXTRA_PACKAGES=""
|
|
9
|
+
RUN apt-get update && apt-get upgrade -y && apt-get install -y curl sudo jq bash zip unzip software-properties-common $EXTRA_PACKAGES && \
|
|
8
10
|
usermod -aG sudo runner && \
|
|
9
11
|
echo "%sudo ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/runner
|
|
10
12
|
|
|
13
|
+
# add latest git
|
|
14
|
+
RUN add-apt-repository ppa:git-core/ppa && apt update && apt-get install -y git
|
|
15
|
+
|
|
11
16
|
# add awscli
|
|
12
17
|
RUN curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip && \
|
|
13
18
|
unzip -q awscliv2.zip && ./aws/install && rm -rf awscliv2.zip aws
|
|
@@ -21,9 +26,9 @@ RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | s
|
|
|
21
26
|
# setup working directory
|
|
22
27
|
WORKDIR /home/runner
|
|
23
28
|
|
|
24
|
-
# add runner
|
|
25
|
-
ARG RUNNER_VERSION
|
|
26
|
-
RUN if [ "${RUNNER_VERSION}" = "latest" ]; then RUNNER_VERSION=`curl -
|
|
29
|
+
# add runner without github's api which is rate limited
|
|
30
|
+
ARG RUNNER_VERSION=latest
|
|
31
|
+
RUN if [ "${RUNNER_VERSION}" = "latest" ]; then RUNNER_VERSION=`curl -w "%{redirect_url}" -fsS https://github.com/actions/runner/releases/latest | grep -oE "[^/v]+$"`; fi && \
|
|
27
32
|
curl -fsSLO "https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz" && \
|
|
28
33
|
tar xzf "actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz" && \
|
|
29
34
|
rm actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz && \
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# https://docs.aws.amazon.com/lambda/latest/dg/images-create.html
|
|
2
|
+
|
|
3
|
+
ARG BASE_IMAGE="public.ecr.aws/lambda/nodejs:14-arm64"
|
|
4
|
+
FROM $BASE_IMAGE
|
|
5
|
+
|
|
6
|
+
WORKDIR /runner
|
|
7
|
+
|
|
8
|
+
# add dependencies
|
|
9
|
+
ARG EXTRA_PACKAGES=""
|
|
10
|
+
RUN yum update -y && yum install -y jq tar gzip bzip2 which binutils git zip unzip $EXTRA_PACKAGES
|
|
11
|
+
|
|
12
|
+
# add awscli
|
|
13
|
+
RUN curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o awscliv2.zip && \
|
|
14
|
+
unzip -q awscliv2.zip && ./aws/install && rm -rf awscliv2.zip aws
|
|
15
|
+
|
|
16
|
+
# add ghcli
|
|
17
|
+
RUN curl -fsSSL https://cli.github.com/packages/rpm/gh-cli.repo -o /etc/yum.repos.d/gh-cli.repo && \
|
|
18
|
+
yum install -y gh
|
|
19
|
+
|
|
20
|
+
# add runner without github's api which is rate limited
|
|
21
|
+
ARG RUNNER_VERSION=latest
|
|
22
|
+
RUN if [ "${RUNNER_VERSION}" = "latest" ]; then RUNNER_VERSION=`curl -w "%{redirect_url}" -fsS https://github.com/actions/runner/releases/latest | grep -oE "[^/v]+$"`; fi && \
|
|
23
|
+
curl -fsSLO "https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-arm64-${RUNNER_VERSION}.tar.gz" && \
|
|
24
|
+
tar xzf "actions-runner-linux-arm64-${RUNNER_VERSION}.tar.gz" && \
|
|
25
|
+
rm actions-runner-linux-arm64-${RUNNER_VERSION}.tar.gz && \
|
|
26
|
+
yum install -y openssl-libs krb5-libs zlib libicu60
|
|
27
|
+
# doesn't work on CentOS - RUN ./bin/installdependencies.sh
|
|
28
|
+
|
|
29
|
+
# prepare for execution
|
|
30
|
+
WORKDIR ${LAMBDA_TASK_ROOT}
|
|
31
|
+
COPY runner.js runner.sh ${LAMBDA_TASK_ROOT}/
|
|
32
|
+
CMD ["runner.handler"]
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# https://docs.aws.amazon.com/lambda/latest/dg/images-create.html
|
|
2
|
+
|
|
3
|
+
ARG BASE_IMAGE="public.ecr.aws/lambda/nodejs:14-x86_64"
|
|
4
|
+
FROM $BASE_IMAGE
|
|
5
|
+
|
|
6
|
+
WORKDIR /runner
|
|
7
|
+
|
|
8
|
+
# add dependencies
|
|
9
|
+
ARG EXTRA_PACKAGES=""
|
|
10
|
+
RUN yum update -y && yum install -y jq tar gzip bzip2 which binutils git zip unzip $EXTRA_PACKAGES
|
|
11
|
+
|
|
12
|
+
# add awscli
|
|
13
|
+
RUN curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip && \
|
|
14
|
+
unzip -q awscliv2.zip && ./aws/install && rm -rf awscliv2.zip aws
|
|
15
|
+
|
|
16
|
+
# add ghcli
|
|
17
|
+
RUN curl -fsSSL https://cli.github.com/packages/rpm/gh-cli.repo -o /etc/yum.repos.d/gh-cli.repo && \
|
|
18
|
+
yum install -y gh
|
|
19
|
+
|
|
20
|
+
# add runner without github's api which is rate limited
|
|
21
|
+
ARG RUNNER_VERSION=latest
|
|
22
|
+
RUN if [ "${RUNNER_VERSION}" = "latest" ]; then RUNNER_VERSION=`curl -w "%{redirect_url}" -fsS https://github.com/actions/runner/releases/latest | grep -oE "[^/v]+$"`; fi && \
|
|
23
|
+
curl -fsSLO "https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz" && \
|
|
24
|
+
tar xzf "actions-runner-linux-x64-${RUNNER_VERSION}.tar.gz" && \
|
|
25
|
+
rm -f actions-runner-linux-x64-*.tar.gz && \
|
|
26
|
+
yum install -y openssl-libs krb5-libs zlib libicu60
|
|
27
|
+
|
|
28
|
+
# prepare for execution
|
|
29
|
+
WORKDIR ${LAMBDA_TASK_ROOT}
|
|
30
|
+
COPY runner.js runner.sh ${LAMBDA_TASK_ROOT}/
|
|
31
|
+
CMD ["runner.handler"]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const exec = require('child_process').exec;
|
|
2
|
+
|
|
3
|
+
exports.handler = async (event, context) => {
|
|
4
|
+
await new Promise((resolve, reject) => {
|
|
5
|
+
const shellScript = exec('sh runner.sh', {
|
|
6
|
+
env: {
|
|
7
|
+
OWNER: event.owner,
|
|
8
|
+
REPO: event.repo,
|
|
9
|
+
GITHUB_DOMAIN: event.githubDomain,
|
|
10
|
+
RUNNER_TOKEN: event.token,
|
|
11
|
+
RUNNER_NAME: event.runnerName,
|
|
12
|
+
RUNNER_LABEL: event.label,
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
shellScript.stdout.on('data', (data) => {
|
|
16
|
+
console.log(data);
|
|
17
|
+
});
|
|
18
|
+
shellScript.stderr.on('data', (data) => {
|
|
19
|
+
console.error(data);
|
|
20
|
+
});
|
|
21
|
+
shellScript.on('exit', (code) => {
|
|
22
|
+
if (code) {
|
|
23
|
+
reject(new Error(`Runner failed with exit code ${code}`));
|
|
24
|
+
} else {
|
|
25
|
+
resolve();
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -e -u -o pipefail
|
|
4
|
+
|
|
5
|
+
cp -r /runner /tmp/
|
|
6
|
+
cd /tmp/runner
|
|
7
|
+
|
|
8
|
+
export PATH=/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin
|
|
9
|
+
./config.sh --unattended --url "https://${GITHUB_DOMAIN}/${OWNER}/${REPO}" --token "${RUNNER_TOKEN}" --ephemeral --work _work --labels "${RUNNER_LABEL}" --name "${RUNNER_NAME}" --disableupdate
|
|
10
|
+
echo Config done
|
|
11
|
+
./run.sh
|
|
12
|
+
echo Run done
|
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
import { aws_ec2 as ec2, aws_ecs as ecs, aws_iam as iam, aws_stepfunctions as stepfunctions } from 'aws-cdk-lib';
|
|
2
2
|
import { Construct } from 'constructs';
|
|
3
|
-
import { IRunnerProvider, RunnerProviderProps, RunnerRuntimeParameters } from './common';
|
|
3
|
+
import { IImageBuilder, IRunnerProvider, RunnerProviderProps, RunnerRuntimeParameters } from './common';
|
|
4
4
|
/**
|
|
5
5
|
* Properties for FargateRunner.
|
|
6
6
|
*/
|
|
7
7
|
export interface FargateRunnerProps extends RunnerProviderProps {
|
|
8
|
+
/**
|
|
9
|
+
* Provider running an image to run inside CodeBuild with GitHub runner pre-configured. A user named `runner` is expected to exist.
|
|
10
|
+
*
|
|
11
|
+
* The entry point should start GitHub runner. For example:
|
|
12
|
+
*
|
|
13
|
+
* ```
|
|
14
|
+
* #!/bin/bash
|
|
15
|
+
* set -e -u -o pipefail
|
|
16
|
+
*
|
|
17
|
+
* /home/runner/config.sh --unattended --url "https://${GITHUB_DOMAIN}/${OWNER}/${REPO}" --token "${RUNNER_TOKEN}" --ephemeral --work _work --labels "${RUNNER_LABEL}" --disableupdate --name "${RUNNER_NAME}"
|
|
18
|
+
* /home/runner/run.sh
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @default image builder with `FargateRunner.LINUX_X64_DOCKERFILE_PATH` as Dockerfile
|
|
22
|
+
*/
|
|
23
|
+
readonly imageBuilder?: IImageBuilder;
|
|
8
24
|
/**
|
|
9
25
|
* GitHub Actions label used for this provider.
|
|
10
26
|
*
|
|
@@ -98,6 +114,22 @@ export interface FargateRunnerProps extends RunnerProviderProps {
|
|
|
98
114
|
* This construct is not meant to be used by itself. It should be passed in the providers property for GitHubRunners.
|
|
99
115
|
*/
|
|
100
116
|
export declare class FargateRunner extends Construct implements IRunnerProvider {
|
|
117
|
+
/**
|
|
118
|
+
* Path to Dockerfile for Linux x64 with all the requirement for Fargate runner. Use this Dockerfile unless you need to customize it further than allowed by hooks.
|
|
119
|
+
*
|
|
120
|
+
* Available build arguments that can be set in the image builder:
|
|
121
|
+
* * `BASE_IMAGE` sets the `FROM` line. This should be an Ubuntu compatible image.
|
|
122
|
+
* * `EXTRA_PACKAGES` can be used to install additional packages.
|
|
123
|
+
*/
|
|
124
|
+
static readonly LINUX_X64_DOCKERFILE_PATH: string;
|
|
125
|
+
/**
|
|
126
|
+
* Path to Dockerfile for Linux ARM64 with all the requirement for Fargate runner. Use this Dockerfile unless you need to customize it further than allowed by hooks.
|
|
127
|
+
*
|
|
128
|
+
* Available build arguments that can be set in the image builder:
|
|
129
|
+
* * `BASE_IMAGE` sets the `FROM` line. This should be an Ubuntu compatible image.
|
|
130
|
+
* * `EXTRA_PACKAGES` can be used to install additional packages.
|
|
131
|
+
*/
|
|
132
|
+
static readonly LINUX_ARM64_DOCKERFILE_PATH: string;
|
|
101
133
|
/**
|
|
102
134
|
* Cluster hosting the task hosting the runner.
|
|
103
135
|
*/
|