@cloudgardener/cdk-aws-fargate-github-actions-runner
Version:
CDK construct library to deploy GitHub Actions self-hosted runner to AWS Fargate.
74 lines • 10.4 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GithubActionsRunner = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const path = require("path");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const constructs_1 = require("constructs");
class GithubActionsRunner extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
const vpc = props.vpc
? props.vpc
: new aws_cdk_lib_1.aws_ec2.Vpc(this, "Vpc", {
maxAzs: 1, // Default is all AZs in region
natGateways: 0,
gatewayEndpoints: {
s3: {
service: aws_cdk_lib_1.aws_ec2.GatewayVpcEndpointAwsService.S3,
},
dynamodb: {
service: aws_cdk_lib_1.aws_ec2.GatewayVpcEndpointAwsService.DYNAMODB,
},
},
});
const cluster = props.cluster
? props.cluster
: new aws_cdk_lib_1.aws_ecs.Cluster(this, "Cluster", {
vpc: vpc,
enableFargateCapacityProviders: true,
});
const logRetentionDays = props.logRetentionDays ?? 7;
const useSpotCapacity = props.useSpotCapacity ?? true;
const taskDefinition = new aws_cdk_lib_1.aws_ecs.FargateTaskDefinition(this, "TaskDefinition");
taskDefinition.addContainer("Container", {
image: aws_cdk_lib_1.aws_ecs.ContainerImage.fromAsset(path.resolve(__dirname, "../image")),
logging: aws_cdk_lib_1.aws_ecs.LogDrivers.awsLogs({
streamPrefix: "GitHubActionsRunner",
logRetention: logRetentionDays,
}),
environment: {
GITHUB_ACTIONS_RUNNER_CONTEXT: props.runnerContext,
},
secrets: {
GITHUB_ACCESS_TOKEN: props.githubToken,
},
});
const service = new aws_cdk_lib_1.aws_ecs.FargateService(this, "Service", {
cluster: cluster,
taskDefinition: taskDefinition,
platformVersion: aws_cdk_lib_1.aws_ecs.FargatePlatformVersion.LATEST,
desiredCount: 1,
circuitBreaker: { rollback: true },
vpcSubnets: { subnetType: aws_cdk_lib_1.aws_ec2.SubnetType.PUBLIC },
assignPublicIp: true,
capacityProviderStrategies: [
{
capacityProvider: "FARGATE_SPOT",
weight: useSpotCapacity ? 1 : 0,
},
{
capacityProvider: "FARGATE",
weight: useSpotCapacity ? 0 : 1,
},
],
});
this.connections = service.connections;
this.role = taskDefinition.taskRole;
}
}
exports.GithubActionsRunner = GithubActionsRunner;
_a = JSII_RTTI_SYMBOL_1;
GithubActionsRunner[_a] = { fqn: "@cloudgardener/cdk-aws-fargate-github-actions-runner.GithubActionsRunner", version: "1.0.739" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsNkNBQTZFO0FBQzdFLDJDQUF1QztBQXVDdkMsTUFBYSxtQkFBb0IsU0FBUSxzQkFBUztJQVdoRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUc7WUFDbkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQ1gsQ0FBQyxDQUFDLElBQUkscUJBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDdkIsTUFBTSxFQUFFLENBQUMsRUFBRSwrQkFBK0I7Z0JBQzFDLFdBQVcsRUFBRSxDQUFDO2dCQUNkLGdCQUFnQixFQUFFO29CQUNoQixFQUFFLEVBQUU7d0JBQ0YsT0FBTyxFQUFFLHFCQUFHLENBQUMsNEJBQTRCLENBQUMsRUFBRTtxQkFDN0M7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLE9BQU8sRUFBRSxxQkFBRyxDQUFDLDRCQUE0QixDQUFDLFFBQVE7cUJBQ25EO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1FBRVAsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU87WUFDM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPO1lBQ2YsQ0FBQyxDQUFDLElBQUkscUJBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDL0IsR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsOEJBQThCLEVBQUUsSUFBSTthQUNyQyxDQUFDLENBQUM7UUFFUCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7UUFFckQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7UUFFdEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxxQkFBRyxDQUFDLHFCQUFxQixDQUNsRCxJQUFJLEVBQ0osZ0JBQWdCLENBQ2pCLENBQUM7UUFFRixjQUFjLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtZQUN2QyxLQUFLLEVBQUUscUJBQUcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sRUFBRSxxQkFBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7Z0JBQzlCLFlBQVksRUFBRSxxQkFBcUI7Z0JBQ25DLFlBQVksRUFBRSxnQkFBZ0I7YUFDL0IsQ0FBQztZQUNGLFdBQVcsRUFBRTtnQkFDWCw2QkFBNkIsRUFBRSxLQUFLLENBQUMsYUFBYTthQUNuRDtZQUNELE9BQU8sRUFBRTtnQkFDUCxtQkFBbUIsRUFBRSxLQUFLLENBQUMsV0FBVzthQUN2QztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUN0RCxPQUFPLEVBQUUsT0FBTztZQUNoQixjQUFjLEVBQUUsY0FBYztZQUM5QixlQUFlLEVBQUUscUJBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNO1lBQ2xELFlBQVksRUFBRSxDQUFDO1lBQ2YsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtZQUNsQyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUscUJBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2pELGNBQWMsRUFBRSxJQUFJO1lBQ3BCLDBCQUEwQixFQUFFO2dCQUMxQjtvQkFDRSxnQkFBZ0IsRUFBRSxjQUFjO29CQUNoQyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2hDO2dCQUNEO29CQUNFLGdCQUFnQixFQUFFLFNBQVM7b0JBQzNCLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDaEM7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUV2QyxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7SUFDdEMsQ0FBQzs7QUFsRkgsa0RBbUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgYXdzX2VjMiBhcyBlYzIsIGF3c19lY3MgYXMgZWNzLCBhd3NfaWFtIGFzIGlhbSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIHRoZSBHaXRodWJBY3Rpb25zUnVubmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0aHViQWN0aW9uc1J1bm5lclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdG8gcnVuIHRoZSBjbHVzdGVyIGluXG4gICAqIEBkZWZhdWx0IC0gYSBuZXcgVlBDIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuICAvKipcbiAgICogVGhlIEVDUyBjbHVzdGVyIHRvIHJ1biB0aGUgdGFzayBpblxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IGNsdXN0ZXIgaXMgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3Rlcj86IGVjcy5JQ2x1c3RlcjtcbiAgLyoqXG4gICAqIFNlY3JldCBjb250YWluaW5nXG4gICAqIGEgR2l0SHViIFBlcnNvbmFsIEFjY2VzcyBUb2tlbiB0byBiZSB1c2VkXG4gICAqIGZvciB0aGUgcnVubmVyIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBnaXRodWJUb2tlbjogZWNzLlNlY3JldDtcbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgcmVwb3NpdG9yeSB0byB1c2UgZm9yIHRoZSBydW5uZXJcbiAgICogQGV4YW1wbGUgXCJodHRwczovL2dpdGh1Yi5jb20vY2xvdWRnYXJkZW5lci9ydW5uZXItZGVtb1wiXG4gICAqL1xuICByZWFkb25seSBydW5uZXJDb250ZXh0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byBzdG9yZSB0aGUgR2l0SHViIHJ1bm5lciBsb2dzXG4gICAqIEBkZWZhdWx0IC0gNyBkYXlzXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb25EYXlzPzogbnVtYmVyO1xuICAvKipcbiAgICogVXNlIEZhcmdhdGUgU1BPVCBjYXBhY2l0eVxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHVzZVNwb3RDYXBhY2l0eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBHaXRodWJBY3Rpb25zUnVubmVyIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgZWMyLklDb25uZWN0YWJsZSB7XG4gIC8qKlxuICAgKiBNYWtlcyBydW5uZXIgXCJjb25uZWN0YWJsZVwiXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcnVubmVyXG4gICAqL1xuICByZWFkb25seSByb2xlOiBpYW0uSVJvbGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEdpdGh1YkFjdGlvbnNSdW5uZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB2cGMgPSBwcm9wcy52cGNcbiAgICAgID8gcHJvcHMudnBjXG4gICAgICA6IG5ldyBlYzIuVnBjKHRoaXMsIFwiVnBjXCIsIHtcbiAgICAgICAgICBtYXhBenM6IDEsIC8vIERlZmF1bHQgaXMgYWxsIEFacyBpbiByZWdpb25cbiAgICAgICAgICBuYXRHYXRld2F5czogMCxcbiAgICAgICAgICBnYXRld2F5RW5kcG9pbnRzOiB7XG4gICAgICAgICAgICBzMzoge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiBlYzIuR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZS5TMyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkeW5hbW9kYjoge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiBlYzIuR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZS5EWU5BTU9EQixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBjbHVzdGVyID0gcHJvcHMuY2x1c3RlclxuICAgICAgPyBwcm9wcy5jbHVzdGVyXG4gICAgICA6IG5ldyBlY3MuQ2x1c3Rlcih0aGlzLCBcIkNsdXN0ZXJcIiwge1xuICAgICAgICAgIHZwYzogdnBjLFxuICAgICAgICAgIGVuYWJsZUZhcmdhdGVDYXBhY2l0eVByb3ZpZGVyczogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICBjb25zdCBsb2dSZXRlbnRpb25EYXlzID0gcHJvcHMubG9nUmV0ZW50aW9uRGF5cyA/PyA3O1xuXG4gICAgY29uc3QgdXNlU3BvdENhcGFjaXR5ID0gcHJvcHMudXNlU3BvdENhcGFjaXR5ID8/IHRydWU7XG5cbiAgICBjb25zdCB0YXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRmFyZ2F0ZVRhc2tEZWZpbml0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIFwiVGFza0RlZmluaXRpb25cIlxuICAgICk7XG5cbiAgICB0YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoXCJDb250YWluZXJcIiwge1xuICAgICAgaW1hZ2U6IGVjcy5Db250YWluZXJJbWFnZS5mcm9tQXNzZXQocGF0aC5yZXNvbHZlKF9fZGlybmFtZSwgXCIuLi9pbWFnZVwiKSksXG4gICAgICBsb2dnaW5nOiBlY3MuTG9nRHJpdmVycy5hd3NMb2dzKHtcbiAgICAgICAgc3RyZWFtUHJlZml4OiBcIkdpdEh1YkFjdGlvbnNSdW5uZXJcIixcbiAgICAgICAgbG9nUmV0ZW50aW9uOiBsb2dSZXRlbnRpb25EYXlzLFxuICAgICAgfSksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBHSVRIVUJfQUNUSU9OU19SVU5ORVJfQ09OVEVYVDogcHJvcHMucnVubmVyQ29udGV4dCxcbiAgICAgIH0sXG4gICAgICBzZWNyZXRzOiB7XG4gICAgICAgIEdJVEhVQl9BQ0NFU1NfVE9LRU46IHByb3BzLmdpdGh1YlRva2VuLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZWNzLkZhcmdhdGVTZXJ2aWNlKHRoaXMsIFwiU2VydmljZVwiLCB7XG4gICAgICBjbHVzdGVyOiBjbHVzdGVyLFxuICAgICAgdGFza0RlZmluaXRpb246IHRhc2tEZWZpbml0aW9uLFxuICAgICAgcGxhdGZvcm1WZXJzaW9uOiBlY3MuRmFyZ2F0ZVBsYXRmb3JtVmVyc2lvbi5MQVRFU1QsXG4gICAgICBkZXNpcmVkQ291bnQ6IDEsXG4gICAgICBjaXJjdWl0QnJlYWtlcjogeyByb2xsYmFjazogdHJ1ZSB9LFxuICAgICAgdnBjU3VibmV0czogeyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMgfSxcbiAgICAgIGFzc2lnblB1YmxpY0lwOiB0cnVlLFxuICAgICAgY2FwYWNpdHlQcm92aWRlclN0cmF0ZWdpZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNhcGFjaXR5UHJvdmlkZXI6IFwiRkFSR0FURV9TUE9UXCIsXG4gICAgICAgICAgd2VpZ2h0OiB1c2VTcG90Q2FwYWNpdHkgPyAxIDogMCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNhcGFjaXR5UHJvdmlkZXI6IFwiRkFSR0FURVwiLFxuICAgICAgICAgIHdlaWdodDogdXNlU3BvdENhcGFjaXR5ID8gMCA6IDEsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHNlcnZpY2UuY29ubmVjdGlvbnM7XG5cbiAgICB0aGlzLnJvbGUgPSB0YXNrRGVmaW5pdGlvbi50YXNrUm9sZTtcbiAgfVxufVxuIl19