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.

70 lines 9.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSecretValue = getSecretValue; exports.getSecretJsonValue = getSecretJsonValue; exports.updateSecretValue = updateSecretValue; exports.customResourceRespond = customResourceRespond; const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager"); const sm = new client_secrets_manager_1.SecretsManagerClient(); async function getSecretValue(arn) { if (!arn) { throw new Error('Missing secret ARN. Check the Lambda configuration and required environment variables.'); } const secret = await sm.send(new client_secrets_manager_1.GetSecretValueCommand({ SecretId: arn })); if (!secret.SecretString) { throw new Error('Secrets Manager getSecretValue returned no SecretString. This often indicates that the secret was stored as binary data (SecretBinary) instead of a string. Ensure the secret is stored in SecretString or update the code to handle SecretBinary.'); } return secret.SecretString; } async function getSecretJsonValue(arn) { return JSON.parse(await getSecretValue(arn)); } async function updateSecretValue(arn, value) { if (!arn) { throw new Error('Missing secret ARN. Check the Lambda configuration and required environment variables.'); } await sm.send(new client_secrets_manager_1.UpdateSecretCommand({ SecretId: arn, SecretString: value })); } 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({ notice: 'Responding to CloudFormation custom resource', status: responseStatus, reason, physicalResourceId, responseBody, }); // eslint-disable-next-line @typescript-eslint/no-require-imports 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 { // eslint-disable-next-line @typescript-eslint/no-require-imports const request = require('https').request(requestOptions, resolve); request.on('error', reject); request.write(responseBody); request.end(); } catch (e) { reject(e); } }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGFtYmRhLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsd0NBWUM7QUFFRCxnREFFQztBQUVELDhDQU1DO0FBRUQsc0RBNENDO0FBdEZELDRFQUFtSDtBQWNuSCxNQUFNLEVBQUUsR0FBRyxJQUFJLDZDQUFvQixFQUFFLENBQUM7QUFFL0IsS0FBSyxVQUFVLGNBQWMsQ0FBQyxHQUF1QjtJQUMxRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLHdGQUF3RixDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLDhDQUFxQixDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUUzRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb1BBQW9QLENBQUMsQ0FBQztJQUN4USxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDO0FBQzdCLENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsR0FBdUI7SUFDOUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVNLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxHQUF1QixFQUFFLEtBQWE7SUFDNUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyx3RkFBd0YsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSw0Q0FBbUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRU0sS0FBSyxVQUFVLHFCQUFxQixDQUFDLEtBQWtELEVBQUUsY0FBc0IsRUFDcEgsTUFBYyxFQUFFLGtCQUEwQixFQUFFLElBQVM7SUFDckQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxNQUFNLEVBQUUsY0FBYztRQUN0QixNQUFNLEVBQUUsTUFBTTtRQUNkLGtCQUFrQixFQUFFLGtCQUFrQjtRQUN0QyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7UUFDMUMsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDVixNQUFNLEVBQUUsOENBQThDO1FBQ3RELE1BQU0sRUFBRSxjQUFjO1FBQ3RCLE1BQU07UUFDTixrQkFBa0I7UUFDbEIsWUFBWTtLQUNiLENBQUMsQ0FBQztJQUVILGlFQUFpRTtJQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxRCxNQUFNLGNBQWMsR0FBRztRQUNyQixRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7UUFDNUIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsT0FBTyxFQUFFO1lBQ1AsY0FBYyxFQUFFLEVBQUU7WUFDbEIsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLE1BQU07U0FDdEM7S0FDRixDQUFDO0lBRUYsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxJQUFJLENBQUM7WUFDSCxpRUFBaUU7WUFDakUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2V0U2VjcmV0VmFsdWVDb21tYW5kLCBTZWNyZXRzTWFuYWdlckNsaWVudCwgVXBkYXRlU2VjcmV0Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBGdW5jdGlvbkxhbWJkYUlucHV0IHtcbiAgcmVhZG9ubHkgb3duZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVwbzogc3RyaW5nO1xuICByZWFkb25seSBydW5uZXJOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluc3RhbGxhdGlvbklkPzogbnVtYmVyO1xuICByZWFkb25seSBsYWJlbHM6IHN0cmluZ1tdO1xuICByZWFkb25seSBlcnJvcj86IHtcbiAgICByZWFkb25seSBFcnJvcjogc3RyaW5nO1xuICAgIHJlYWRvbmx5IENhdXNlOiBzdHJpbmc7XG4gIH07XG59XG5cbmNvbnN0IHNtID0gbmV3IFNlY3JldHNNYW5hZ2VyQ2xpZW50KCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZWNyZXRWYWx1ZShhcm46IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICBpZiAoIWFybikge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBzZWNyZXQgQVJOLiBDaGVjayB0aGUgTGFtYmRhIGNvbmZpZ3VyYXRpb24gYW5kIHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlcy4nKTtcbiAgfVxuXG4gIGNvbnN0IHNlY3JldCA9IGF3YWl0IHNtLnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7IFNlY3JldElkOiBhcm4gfSkpO1xuXG4gIGlmICghc2VjcmV0LlNlY3JldFN0cmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcignU2VjcmV0cyBNYW5hZ2VyIGdldFNlY3JldFZhbHVlIHJldHVybmVkIG5vIFNlY3JldFN0cmluZy4gVGhpcyBvZnRlbiBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VjcmV0IHdhcyBzdG9yZWQgYXMgYmluYXJ5IGRhdGEgKFNlY3JldEJpbmFyeSkgaW5zdGVhZCBvZiBhIHN0cmluZy4gRW5zdXJlIHRoZSBzZWNyZXQgaXMgc3RvcmVkIGluIFNlY3JldFN0cmluZyBvciB1cGRhdGUgdGhlIGNvZGUgdG8gaGFuZGxlIFNlY3JldEJpbmFyeS4nKTtcbiAgfVxuXG4gIHJldHVybiBzZWNyZXQuU2VjcmV0U3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2VjcmV0SnNvblZhbHVlKGFybjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKGF3YWl0IGdldFNlY3JldFZhbHVlKGFybikpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlU2VjcmV0VmFsdWUoYXJuOiBzdHJpbmcgfCB1bmRlZmluZWQsIHZhbHVlOiBzdHJpbmcpIHtcbiAgaWYgKCFhcm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgc2VjcmV0IEFSTi4gQ2hlY2sgdGhlIExhbWJkYSBjb25maWd1cmF0aW9uIGFuZCByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuJyk7XG4gIH1cblxuICBhd2FpdCBzbS5zZW5kKG5ldyBVcGRhdGVTZWNyZXRDb21tYW5kKHsgU2VjcmV0SWQ6IGFybiwgU2VjcmV0U3RyaW5nOiB2YWx1ZSB9KSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXN0b21SZXNvdXJjZVJlc3BvbmQoZXZlbnQ6IEFXU0xhbWJkYS5DbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIHJlc3BvbnNlU3RhdHVzOiBzdHJpbmcsXG4gIHJlYXNvbjogc3RyaW5nLCBwaHlzaWNhbFJlc291cmNlSWQ6IHN0cmluZywgZGF0YTogYW55KSB7XG4gIGNvbnN0IHJlc3BvbnNlQm9keSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBTdGF0dXM6IHJlc3BvbnNlU3RhdHVzLFxuICAgIFJlYXNvbjogcmVhc29uLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIE5vRWNobzogZmFsc2UsXG4gICAgRGF0YTogZGF0YSxcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coe1xuICAgIG5vdGljZTogJ1Jlc3BvbmRpbmcgdG8gQ2xvdWRGb3JtYXRpb24gY3VzdG9tIHJlc291cmNlJyxcbiAgICBzdGF0dXM6IHJlc3BvbnNlU3RhdHVzLFxuICAgIHJlYXNvbixcbiAgICBwaHlzaWNhbFJlc291cmNlSWQsXG4gICAgcmVzcG9uc2VCb2R5LFxuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICBjb25zdCBwYXJzZWRVcmwgPSByZXF1aXJlKCd1cmwnKS5wYXJzZShldmVudC5SZXNwb25zZVVSTCk7XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgIGhvc3RuYW1lOiBwYXJzZWRVcmwuaG9zdG5hbWUsXG4gICAgcGF0aDogcGFyc2VkVXJsLnBhdGgsXG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAnY29udGVudC10eXBlJzogJycsXG4gICAgICAnY29udGVudC1sZW5ndGgnOiByZXNwb25zZUJvZHkubGVuZ3RoLFxuICAgIH0sXG4gIH07XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKCdodHRwcycpLnJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIHJlc29sdmUpO1xuICAgICAgcmVxdWVzdC5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgcmVxdWVzdC53cml0ZShyZXNwb25zZUJvZHkpO1xuICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==