UNPKG

deploy-time-build

Version:
43 lines 6.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SingletonProject = void 0; const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild"); const constructs_1 = require("constructs"); /** * A CodeBuild project that is created only once per stack. */ class SingletonProject extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); this.project = this.ensureProject(props); } ensureProject(props) { const constructName = (props.projectPurpose ?? 'SingletonProject') + this.slugify(props.uuid, this.propsToAdditionalString(props)); const existing = aws_cdk_lib_1.Stack.of(this).node.tryFindChild(constructName); if (existing) { return existing; } return new aws_codebuild_1.Project(aws_cdk_lib_1.Stack.of(this), constructName, props); } propsToAdditionalString(props) { // This string must be stable to avoid from replacement. // Things that can be added to the slug later (we have to create a new project per these properties): // * vpc addr // * instance type // * platform (amd64/arm64) // But actually, replacement will not cause any disruption because of its stateless nature. let slug = ''; slug += props.vpc?.node.addr ?? ''; // Get platform info from environment.buildImage if available if (props.environment?.buildImage) { slug += props.environment.buildImage.toString().includes('aarch64') ? 'arm64' : 'amd64'; } return slug; } slugify(x, additionalString) { return `${x}${additionalString ?? ''}`.replace(/[^a-zA-Z0-9]/g, ''); } } exports.SingletonProject = SingletonProject; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uLXByb2plY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2luZ2xldG9uLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQW9DO0FBQ3BDLDZEQUFrRTtBQUNsRSwyQ0FBdUM7QUFvQnZDOztHQUVHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxzQkFBUztJQUc3QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBNEI7UUFDaEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25JLE1BQU0sUUFBUSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakUsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sUUFBbUIsQ0FBQztRQUM3QixDQUFDO1FBRUQsT0FBTyxJQUFJLHVCQUFPLENBQUMsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxLQUE0QjtRQUMxRCx3REFBd0Q7UUFDeEQscUdBQXFHO1FBQ3JHLGVBQWU7UUFDZixvQkFBb0I7UUFDcEIsNkJBQTZCO1FBQzdCLDJGQUEyRjtRQUMzRixJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQyw2REFBNkQ7UUFDN0QsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzFGLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxPQUFPLENBQUMsQ0FBUyxFQUFFLGdCQUF5QjtRQUNsRCxPQUFPLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNGO0FBckNELDRDQXFDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUHJvamVjdCwgUHJvamVjdFByb3BzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGV0b25Qcm9qZWN0UHJvcHMgZXh0ZW5kcyBQcm9qZWN0UHJvcHMge1xuICAvKipcbiAgICogQSB1bmlxdWUgaWRlbnRpZmllciB0byBpZGVudGlmeSB0aGlzIENvZGVCdWlsZCBwcm9qZWN0LlxuICAgKlxuICAgKiBUaGUgaWRlbnRpZmllciBzaG91bGQgYmUgdW5pcXVlIGFjcm9zcyBhbGwgc2luZ2xldG9uIHByb2plY3RzLiBXZSByZWNvbW1lbmQgZ2VuZXJhdGluZyBhIFVVSUQgcGVyIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSB1dWlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZGVzY3JpcHRpdmUgbmFtZSBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBDb2RlQnVpbGQgcHJvamVjdC5cbiAgICpcbiAgICogSWYgdGhlIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhIHBoeXNpY2FsIG5hbWUsIHRoaXMgc3RyaW5nIHdpbGwgYmUgcmVmbGVjdGVkIGl0cyBnZW5lcmF0ZWQgbmFtZS4gVGhlIGNvbWJpbmF0aW9uIG9mIHByb2plY3RQdXJwb3NlIGFuZCB1dWlkIG11c3QgYmUgdW5pcXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBTaW5nbGV0b25Qcm9qZWN0XG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0UHVycG9zZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIENvZGVCdWlsZCBwcm9qZWN0IHRoYXQgaXMgY3JlYXRlZCBvbmx5IG9uY2UgcGVyIHN0YWNrLlxuICovXG5leHBvcnQgY2xhc3MgU2luZ2xldG9uUHJvamVjdCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBQcm9qZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTaW5nbGV0b25Qcm9qZWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvamVjdCA9IHRoaXMuZW5zdXJlUHJvamVjdChwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVByb2plY3QocHJvcHM6IFNpbmdsZXRvblByb2plY3RQcm9wcyk6IFByb2plY3Qge1xuICAgIGNvbnN0IGNvbnN0cnVjdE5hbWUgPSAocHJvcHMucHJvamVjdFB1cnBvc2UgPz8gJ1NpbmdsZXRvblByb2plY3QnKSArIHRoaXMuc2x1Z2lmeShwcm9wcy51dWlkLCB0aGlzLnByb3BzVG9BZGRpdGlvbmFsU3RyaW5nKHByb3BzKSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBTdGFjay5vZih0aGlzKS5ub2RlLnRyeUZpbmRDaGlsZChjb25zdHJ1Y3ROYW1lKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBleGlzdGluZyBhcyBQcm9qZWN0O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvamVjdChTdGFjay5vZih0aGlzKSwgY29uc3RydWN0TmFtZSwgcHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9wc1RvQWRkaXRpb25hbFN0cmluZyhwcm9wczogU2luZ2xldG9uUHJvamVjdFByb3BzKSB7XG4gICAgLy8gVGhpcyBzdHJpbmcgbXVzdCBiZSBzdGFibGUgdG8gYXZvaWQgZnJvbSByZXBsYWNlbWVudC5cbiAgICAvLyBUaGluZ3MgdGhhdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHNsdWcgbGF0ZXIgKHdlIGhhdmUgdG8gY3JlYXRlIGEgbmV3IHByb2plY3QgcGVyIHRoZXNlIHByb3BlcnRpZXMpOlxuICAgIC8vICAgKiB2cGMgYWRkclxuICAgIC8vICAgKiBpbnN0YW5jZSB0eXBlXG4gICAgLy8gICAqIHBsYXRmb3JtIChhbWQ2NC9hcm02NClcbiAgICAvLyBCdXQgYWN0dWFsbHksIHJlcGxhY2VtZW50IHdpbGwgbm90IGNhdXNlIGFueSBkaXNydXB0aW9uIGJlY2F1c2Ugb2YgaXRzIHN0YXRlbGVzcyBuYXR1cmUuXG4gICAgbGV0IHNsdWcgPSAnJztcbiAgICBzbHVnICs9IHByb3BzLnZwYz8ubm9kZS5hZGRyID8/ICcnO1xuICAgIC8vIEdldCBwbGF0Zm9ybSBpbmZvIGZyb20gZW52aXJvbm1lbnQuYnVpbGRJbWFnZSBpZiBhdmFpbGFibGVcbiAgICBpZiAocHJvcHMuZW52aXJvbm1lbnQ/LmJ1aWxkSW1hZ2UpIHtcbiAgICAgIHNsdWcgKz0gcHJvcHMuZW52aXJvbm1lbnQuYnVpbGRJbWFnZS50b1N0cmluZygpLmluY2x1ZGVzKCdhYXJjaDY0JykgPyAnYXJtNjQnIDogJ2FtZDY0JztcbiAgICB9XG4gICAgcmV0dXJuIHNsdWc7XG4gIH1cblxuICBwcml2YXRlIHNsdWdpZnkoeDogc3RyaW5nLCBhZGRpdGlvbmFsU3RyaW5nPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7eH0ke2FkZGl0aW9uYWxTdHJpbmcgPz8gJyd9YC5yZXBsYWNlKC9bXmEtekEtWjAtOV0vZywgJycpO1xuICB9XG59XG4iXX0=