UNPKG

@cloudsnorkel/cdk-github-runners

Version:

CDK construct to create GitHub Actions self-hosted runners. Creates ephemeral runners on demand. Easy to deploy and highly customizable.

100 lines (96 loc) 3.42 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/image-builders/build-image.lambda.ts var build_image_lambda_exports = {}; __export(build_image_lambda_exports, { handler: () => handler }); module.exports = __toCommonJS(build_image_lambda_exports); var import_client_codebuild = require("@aws-sdk/client-codebuild"); // src/lambda-helpers.ts var import_client_secrets_manager = require("@aws-sdk/client-secrets-manager"); var sm = new import_client_secrets_manager.SecretsManagerClient(); async function customResourceRespond(event, responseStatus, reason, physicalResourceId, data) { const responseBody = JSON.stringify({ Status: responseStatus, Reason: reason, PhysicalResourceId: physicalResourceId, StackId: event.StackId, RequestId: event.RequestId, LogicalResourceId: event.LogicalResourceId, NoEcho: false, Data: data }); console.log("Responding", responseBody); const parsedUrl = require("url").parse(event.ResponseURL); const requestOptions = { hostname: parsedUrl.hostname, path: parsedUrl.path, method: "PUT", headers: { "content-type": "", "content-length": responseBody.length } }; return new Promise((resolve, reject) => { try { const request = require("https").request(requestOptions, resolve); request.on("error", reject); request.write(responseBody); request.end(); } catch (e) { reject(e); } }); } // src/image-builders/build-image.lambda.ts var codebuild = new import_client_codebuild.CodeBuildClient(); async function handler(event, context) { try { console.log({ ...event, ResponseURL: "..." }); const props = event.ResourceProperties; switch (event.RequestType) { case "Create": case "Update": console.log(`Starting CodeBuild project ${props.ProjectName}`); const cbRes = await codebuild.send(new import_client_codebuild.StartBuildCommand({ projectName: props.ProjectName, environmentVariablesOverride: [ { type: "PLAINTEXT", name: "WAIT_HANDLE", value: props.WaitHandle } ] })); await customResourceRespond(event, "SUCCESS", "OK", cbRes.build?.id ?? "build", {}); break; case "Delete": await customResourceRespond(event, "SUCCESS", "OK", event.PhysicalResourceId, {}); break; } } catch (e) { console.error(e); await customResourceRespond(event, "FAILED", e.message || "Internal Error", context.logStreamName, {}); } } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { handler });