@cloudsnorkel/cdk-github-runners 0.1.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.
Files changed (61) hide show
  1. package/.gitattributes +6 -1
  2. package/.jsii +1663 -596
  3. package/API.md +1105 -107
  4. package/README.md +63 -48
  5. package/SETUP_GITHUB.md +56 -19
  6. package/demo-thumbnail.jpg +0 -0
  7. package/lib/index.d.ts +3 -2
  8. package/lib/index.js +7 -1
  9. package/lib/lambdas/build-image/index.js +121 -0
  10. package/lib/lambdas/delete-runner/index.js +29 -15
  11. package/lib/lambdas/setup/index.js +9103 -0
  12. package/lib/lambdas/status/index.js +33 -14
  13. package/lib/lambdas/token-retriever/index.js +20 -10
  14. package/lib/lambdas/update-lambda/index.js +55 -0
  15. package/lib/lambdas/webhook-handler/index.js +21 -8
  16. package/lib/providers/codebuild.d.ts +32 -3
  17. package/lib/providers/codebuild.js +58 -13
  18. package/lib/providers/common.d.ts +87 -7
  19. package/lib/providers/common.js +64 -4
  20. package/lib/providers/docker-images/codebuild/linux-arm64/Dockerfile +59 -0
  21. package/lib/providers/docker-images/codebuild/{Dockerfile → linux-x64/Dockerfile} +10 -5
  22. package/lib/providers/docker-images/fargate/linux-arm64/Dockerfile +41 -0
  23. package/lib/providers/docker-images/fargate/{runner.sh → linux-arm64/runner.sh} +0 -0
  24. package/lib/providers/docker-images/fargate/{Dockerfile → linux-x64/Dockerfile} +10 -5
  25. package/lib/providers/docker-images/fargate/linux-x64/runner.sh +5 -0
  26. package/lib/providers/docker-images/lambda/linux-arm64/Dockerfile +32 -0
  27. package/lib/providers/docker-images/lambda/{runner.js → linux-arm64/runner.js} +0 -0
  28. package/lib/providers/docker-images/lambda/{runner.sh → linux-arm64/runner.sh} +0 -0
  29. package/lib/providers/docker-images/lambda/linux-x64/Dockerfile +31 -0
  30. package/lib/providers/docker-images/lambda/linux-x64/runner.js +29 -0
  31. package/lib/providers/docker-images/lambda/linux-x64/runner.sh +12 -0
  32. package/lib/providers/fargate.d.ts +46 -2
  33. package/lib/providers/fargate.js +65 -10
  34. package/lib/providers/image-builders/codebuild.d.ts +170 -0
  35. package/lib/providers/image-builders/codebuild.js +340 -0
  36. package/lib/providers/image-builders/static.d.ts +29 -0
  37. package/lib/providers/image-builders/static.js +58 -0
  38. package/lib/providers/lambda.d.ts +27 -2
  39. package/lib/providers/lambda.js +88 -9
  40. package/lib/runner.d.ts +5 -16
  41. package/lib/runner.js +38 -26
  42. package/lib/secrets.d.ts +4 -1
  43. package/lib/secrets.js +12 -2
  44. package/lib/utils.d.ts +2 -2
  45. package/lib/utils.js +14 -3
  46. package/lib/webhook.d.ts +0 -1
  47. package/lib/webhook.js +2 -1
  48. package/package.json +12 -10
  49. package/changelog.md +0 -11
  50. package/lib/index.d.ts.map +0 -1
  51. package/lib/providers/codebuild.d.ts.map +0 -1
  52. package/lib/providers/common.d.ts.map +0 -1
  53. package/lib/providers/docker-images/lambda/Dockerfile +0 -27
  54. package/lib/providers/fargate.d.ts.map +0 -1
  55. package/lib/providers/lambda.d.ts.map +0 -1
  56. package/lib/runner.d.ts.map +0 -1
  57. package/lib/secrets.d.ts.map +0 -1
  58. package/lib/utils.d.ts.map +0 -1
  59. package/lib/webhook.d.ts.map +0 -1
  60. package/releasetag.txt +0 -1
  61. package/version.txt +0 -1
@@ -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.1.0" };
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3ZpZGVycy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQWEsYUFBYTtJQW1CeEIsWUFBK0IsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFDOUMsQ0FBQztJQW5CRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxNQUFNO1FBQ2xCLE9BQU8sSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBZTtRQUNwQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O0FBakJILHNDQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c19lYzIgYXMgZWMyLCBhd3NfaWFtIGFzIGlhbSwgYXdzX2xvZ3MgYXMgbG9ncywgYXdzX3N0ZXBmdW5jdGlvbnMgYXMgc3RlcGZ1bmN0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcblxuLyoqXG4gKiBEZWZpbmVzIGRlc2lyZWQgR2l0SHViIEFjdGlvbnMgcnVubmVyIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBSdW5uZXJWZXJzaW9uIHtcbiAgLyoqXG4gICAqIFVzZSB0aGUgbGF0ZXN0IHZlcnNpb24gYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRoZSBydW5uZXIgcHJvdmlkZXIgaW1hZ2UgaXMgYnVpbHQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxhdGVzdCgpOiBSdW5uZXJWZXJzaW9uIHtcbiAgICByZXR1cm4gbmV3IFJ1bm5lclZlcnNpb24oJ2xhdGVzdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZSBhIHNwZWNpZmljIHZlcnNpb24uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FjdGlvbnMvcnVubmVyL3JlbGVhc2VzXG4gICAqXG4gICAqIEBwYXJhbSB2ZXJzaW9uIEdpdEh1YiBSdW5uZXIgdmVyc2lvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcGVjaWZpYyh2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFJ1bm5lclZlcnNpb24odmVyc2lvbik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nKSB7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21tb24gcHJvcGVydGllcyBmb3IgYWxsIHJ1bm5lciBwcm92aWRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVubmVyUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIEdpdEh1YiBSdW5uZXJzIHRvIGluc3RhbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGxhdGVzdCB2ZXJzaW9uIGF2YWlsYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyVmVyc2lvbj86IFJ1bm5lclZlcnNpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgZGF5cyBsb2cgZXZlbnRzIGFyZSBrZXB0IGluIENsb3VkV2F0Y2ggTG9ncy4gV2hlbiB1cGRhdGluZ1xuICAgKiB0aGlzIHByb3BlcnR5LCB1bnNldHRpbmcgaXQgZG9lc24ndCByZW1vdmUgdGhlIGxvZyByZXRlbnRpb24gcG9saWN5LiBUb1xuICAgKiByZW1vdmUgdGhlIHJldGVudGlvbiBwb2xpY3ksIHNldCB0aGUgdmFsdWUgdG8gYElORklOSVRFYC5cbiAgICpcbiAgICogQGRlZmF1bHQgbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9NT05USFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nUmV0ZW50aW9uPzogbG9ncy5SZXRlbnRpb25EYXlzO1xufVxuXG4vKipcbiAqIFdvcmtmbG93IGpvYiBwYXJhbWV0ZXJzIGFzIHBhcnNlZCBmcm9tIHRoZSB3ZWJob29rIGV2ZW50LiBQYXNzIHRoZXNlIGludG8geW91ciBydW5uZXIgZXhlY3V0b3IgYW5kIHJ1biBzb21ldGhpbmcgbGlrZTpcbiAqXG4gKiBgYGBzaFxuICogLi9jb25maWcuc2ggLS11bmF0dGVuZGVkIC0tdXJsIFwiaHR0cHM6Ly8ke0dJVEhVQl9ET01BSU59LyR7T1dORVJ9LyR7UkVQT31cIiAtLXRva2VuIFwiJHtSVU5ORVJfVE9LRU59XCIgLS1lcGhlbWVyYWwgLS13b3JrIF93b3JrIC0tbGFiZWxzIFwiJHtSVU5ORVJfTEFCRUx9XCIgLS1uYW1lIFwiJHtSVU5ORVJfTkFNRX1cIiAtLWRpc2FibGV1cGRhdGVcbiAqIGBgYFxuICpcbiAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZpZWQgYXMgc3RlcCBmdW5jdGlvbiBwYXRocyBhbmQgdGhlcmVmb3JlIG11c3QgYmUgdXNlZCBvbmx5IGluIHN0ZXAgZnVuY3Rpb24gdGFzayBwYXJhbWV0ZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bm5lclJ1bnRpbWVQYXJhbWV0ZXJzIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gcnVubmVyIHRva2VuIHVzZWQgdG8gcmVnaXN0ZXIgdG9rZW4uXG4gICAqL1xuICByZWFkb25seSBydW5uZXJUb2tlblBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBkZXNpcmVkIHJ1bm5lciBuYW1lLiBXZSBzcGVjaWZpY2FsbHkgc2V0IHRoZSBuYW1lIHRvIG1ha2UgdHJvdWJsZXNob290aW5nIGVhc2llci5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bm5lck5hbWVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gR2l0SHViIGRvbWFpbi4gTW9zdCBvZiB0aGUgdGltZSB0aGlzIHdpbGwgYmUgZ2l0aHViLmNvbSBidXQgZm9yIHNlbGYtaG9zdGVkIEdpdEh1YiBpbnN0YW5jZXMsIHRoaXMgd2lsbCBiZSBkaWZmZXJlbnQuXG4gICAqL1xuICByZWFkb25seSBnaXRodWJEb21haW5QYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gcmVwb3N0aXJveSBvd25lciBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gcmVwb3NpdG9yeSBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb1BhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBydW5uZXIgcHJvdmlkZXJzLiBJbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGFsbCByZXF1aXJlZCByZXNvdXJjZXMgYW5kIHJldHVybiBhIHN0ZXAgZnVuY3Rpb24gdGFzayB0aGF0IHN0YXJ0cyB0aG9zZSByZXNvdXJjZXMgZnJvbSB7QGxpbmsgZ2V0U3RlcEZ1bmN0aW9uVGFza30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJ1bm5lclByb3ZpZGVyIGV4dGVuZHMgZWMyLklDb25uZWN0YWJsZSwgaWFtLklHcmFudGFibGUge1xuICAvKipcbiAgICogR2l0SHViIEFjdGlvbnMgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcnVubmVyIHByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogVlBDIG5ldHdvcmsgaW4gd2hpY2ggcnVubmVycyB3aWxsIGJlIHBsYWNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cCBhc3NvY2lhdGVkIHdpdGggcnVubmVycy5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuSVNlY3VyaXR5R3JvdXA7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHN0ZXAgZnVuY3Rpb24gdGFza3MgdGhhdCBleGVjdXRlIHRoZSBydW5uZXIuXG4gICAqXG4gICAqIENhbGxlZCBieSBHaXRodWJSdW5uZXJzIGFuZCBzaG91bGRuJ3QgYmUgY2FsbGVkIG1hbnVhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1ldGVycyBzcGVjaWZpYyBidWlsZCBwYXJhbWV0ZXJzXG4gICAqL1xuICBnZXRTdGVwRnVuY3Rpb25UYXNrKHBhcmFtZXRlcnM6IFJ1bm5lclJ1bnRpbWVQYXJhbWV0ZXJzKTogc3RlcGZ1bmN0aW9ucy5JQ2hhaW5hYmxlO1xufVxuIl19
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
- FROM public.ecr.aws/lts/ubuntu:18.04
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
- RUN apt-get update && apt-get upgrade -y && apt-get install -y curl sudo jq bash git zip unzip iptables && \
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 -fsSL https://api.github.com/repos/actions/runner/releases/latest | jq -r .tag_name | cut -c2-`; fi && \
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"]
@@ -1,13 +1,18 @@
1
- FROM public.ecr.aws/lts/ubuntu:18.04
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
- RUN apt-get update && apt-get upgrade -y && apt-get install -y curl sudo jq bash git zip unzip && \
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 -fsSL https://api.github.com/repos/actions/runner/releases/latest | jq -r .tag_name | cut -c2-`; fi && \
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,5 @@
1
+ #!/bin/bash
2
+ set -e -u -o pipefail
3
+
4
+ /home/runner/config.sh --unattended --url "https://${GITHUB_DOMAIN}/${OWNER}/${REPO}" --token "${RUNNER_TOKEN}" --ephemeral --work _work --labels "${RUNNER_LABEL}" --disableupdate --name "${RUNNER_NAME}"
5
+ /home/runner/run.sh
@@ -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"]
@@ -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
  *
@@ -80,6 +96,15 @@ export interface FargateRunnerProps extends RunnerProviderProps {
80
96
  * @default 20
81
97
  */
82
98
  readonly ephemeralStorageGiB?: number;
99
+ /**
100
+ * Use Fargate spot capacity provider to save money.
101
+ *
102
+ * * Runners may fail to start due to missing capacity.
103
+ * * Runners might be stopped prematurely with spot pricing.
104
+ *
105
+ * @default false
106
+ */
107
+ readonly spot?: boolean;
83
108
  }
84
109
  /**
85
110
  * GitHub Actions runner provider using Fargate to execute the actions.
@@ -89,6 +114,22 @@ export interface FargateRunnerProps extends RunnerProviderProps {
89
114
  * This construct is not meant to be used by itself. It should be passed in the providers property for GitHubRunners.
90
115
  */
91
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;
92
133
  /**
93
134
  * Cluster hosting the task hosting the runner.
94
135
  */
@@ -125,6 +166,10 @@ export declare class FargateRunner extends Construct implements IRunnerProvider
125
166
  * The network connections associated with this resource.
126
167
  */
127
168
  readonly connections: ec2.Connections;
169
+ /**
170
+ * Use spot pricing for Fargate tasks.
171
+ */
172
+ readonly spot: boolean;
128
173
  constructor(scope: Construct, id: string, props: FargateRunnerProps);
129
174
  /**
130
175
  * Generate step function task(s) to start a new runner.
@@ -135,4 +180,3 @@ export declare class FargateRunner extends Construct implements IRunnerProvider
135
180
  */
136
181
  getStepFunctionTask(parameters: RunnerRuntimeParameters): stepfunctions.IChainable;
137
182
  }
138
- //# sourceMappingURL=fargate.d.ts.map