aws-delivlib
Version:
A fabulous library for defining continuous pipelines for building, testing and releasing code libraries.
71 lines • 8.75 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChimeNotifier = void 0;
const path = __importStar(require("path"));
const aws_cdk_lib_1 = require("aws-cdk-lib");
const constructs_1 = require("constructs");
/**
* Send a message to a Chime room when a pipeline fails
*/
class ChimeNotifier extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
const message = props.message ?? '/md @All Pipeline **$PIPELINE** failed in action **$ACTION**. Latest change:\n```\n$REVISION\n```\n([Failure details]($URL))';
if (props.webhookUrls.length > 0) {
// Reuse the same Lambda code for all pipelines, we will move the Lambda parameterizations into
// the CloudWatch Event Input.
const notifierLambda = new aws_cdk_lib_1.aws_lambda.SingletonFunction(this, 'Default', {
handler: 'index.handler',
uuid: '0f4a3ee0-692e-4249-932f-a46a833886d8',
code: aws_cdk_lib_1.aws_lambda.Code.fromAsset(path.join(__dirname, 'handler')),
runtime: aws_cdk_lib_1.aws_lambda.Runtime.NODEJS_20_X,
timeout: aws_cdk_lib_1.Duration.minutes(5),
});
notifierLambda.addToRolePolicy(new aws_cdk_lib_1.aws_iam.PolicyStatement({
actions: ['codepipeline:GetPipelineExecution', 'codepipeline:ListActionExecutions'],
resources: [props.pipeline.pipelineArn],
}));
props.pipeline.onStateChange(`${this.node.path}-ChimeNotifier`, {
target: new aws_cdk_lib_1.aws_events_targets.LambdaFunction(notifierLambda, {
event: aws_cdk_lib_1.aws_events.RuleTargetInput.fromObject({
// Add parameters
message,
webhookUrls: props.webhookUrls,
// Copy over "detail" field
detail: aws_cdk_lib_1.aws_events.EventField.fromPath('$.detail'),
}),
}),
eventPattern: {
detail: {
state: ['FAILED'],
},
},
});
}
}
}
exports.ChimeNotifier = ChimeNotifier;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbWUtbm90aWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjaGltZS1ub3RpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3Qiw2Q0FPcUI7QUFDckIsMkNBQXVDO0FBaUN2Qzs7R0FFRztBQUNILE1BQWEsYUFBYyxTQUFRLHNCQUFTO0lBQzFDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLDhIQUE4SCxDQUFDO1FBRWhLLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLCtGQUErRjtZQUMvRiw4QkFBOEI7WUFDOUIsTUFBTSxjQUFjLEdBQUcsSUFBSSx3QkFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7Z0JBQ25FLE9BQU8sRUFBRSxlQUFlO2dCQUN4QixJQUFJLEVBQUUsc0NBQXNDO2dCQUM1QyxJQUFJLEVBQUUsd0JBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUM1RCxPQUFPLEVBQUUsd0JBQU0sQ0FBQyxPQUFPLENBQUMsV0FBVztnQkFDbkMsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUM3QixDQUFDLENBQUM7WUFFSCxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUkscUJBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3JELE9BQU8sRUFBRSxDQUFDLG1DQUFtQyxFQUFFLG1DQUFtQyxDQUFDO2dCQUNuRixTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQzthQUN4QyxDQUFDLENBQUMsQ0FBQztZQUVKLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGdCQUFnQixFQUFFO2dCQUM5RCxNQUFNLEVBQUUsSUFBSSxnQ0FBYyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7b0JBQ3hELEtBQUssRUFBRSx3QkFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7d0JBQ3ZDLGlCQUFpQjt3QkFDakIsT0FBTzt3QkFDUCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7d0JBQzlCLDJCQUEyQjt3QkFDM0IsTUFBTSxFQUFFLHdCQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7cUJBQy9DLENBQUM7aUJBQ0gsQ0FBQztnQkFDRixZQUFZLEVBQUU7b0JBQ1osTUFBTSxFQUFFO3dCQUNOLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQztxQkFDbEI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7Q0FDRjtBQXhDRCxzQ0F3Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtcbiAgRHVyYXRpb24sXG4gIGF3c19jb2RlcGlwZWxpbmUgYXMgY3BpcGVsaW5lLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIGF3c19ldmVudHMgYXMgZXZlbnRzLFxuICBhd3NfZXZlbnRzX3RhcmdldHMgYXMgZXZlbnRzX3RhcmdldHMsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoaW1lTm90aWZpZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIENoaW1lIHdlYmhvb2sgVVJMcyB0byBzZW5kIHRvXG4gICAqL1xuICByZWFkb25seSB3ZWJob29rVXJsczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRvIHNlbmQgdG8gdGhlIGNoYW5uZWxzLlxuICAgKlxuICAgKiBDYW4gdXNlIHRoZSBmb2xsb3dpbmcgcGxhY2Vob2xkZXJzOlxuICAgKlxuICAgKiAtICRQSVBFTElORTogdGhlIG5hbWUgb2YgdGhlIHBpcGVsaW5lXG4gICAqIC0gJFJFVklTSU9OOiBkZXNjcmlwdGlvbiBvZiB0aGUgZmFpbGluZyByZXZpc2lvblxuICAgKiAtICRBQ1RJT046IG5hbWUgb2YgZmFpbGluZyBhY3Rpb25cbiAgICogLSAkVVJMOiBsaW5rIHRvIGZhaWxpbmcgYWN0aW9uIGRldGFpbHNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIGRlZmF1bHQgbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIENoaW1lTm90aWZpZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGltZU5vdGlmaWVyUHJvcHMgZXh0ZW5kcyBDaGltZU5vdGlmaWVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb2RlIFBpcGVsaW5lIHRvIGxpc3RlbiB0b1xuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmU6IGNwaXBlbGluZS5JUGlwZWxpbmU7XG59XG5cbi8qKlxuICogU2VuZCBhIG1lc3NhZ2UgdG8gYSBDaGltZSByb29tIHdoZW4gYSBwaXBlbGluZSBmYWlsc1xuICovXG5leHBvcnQgY2xhc3MgQ2hpbWVOb3RpZmllciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDaGltZU5vdGlmaWVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IHByb3BzLm1lc3NhZ2UgPz8gJy9tZCBAQWxsIFBpcGVsaW5lICoqJFBJUEVMSU5FKiogZmFpbGVkIGluIGFjdGlvbiAqKiRBQ1RJT04qKi4gTGF0ZXN0IGNoYW5nZTpcXG5gYGBcXG4kUkVWSVNJT05cXG5gYGBcXG4oW0ZhaWx1cmUgZGV0YWlsc10oJFVSTCkpJztcblxuICAgIGlmIChwcm9wcy53ZWJob29rVXJscy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBSZXVzZSB0aGUgc2FtZSBMYW1iZGEgY29kZSBmb3IgYWxsIHBpcGVsaW5lcywgd2Ugd2lsbCBtb3ZlIHRoZSBMYW1iZGEgcGFyYW1ldGVyaXphdGlvbnMgaW50b1xuICAgICAgLy8gdGhlIENsb3VkV2F0Y2ggRXZlbnQgSW5wdXQuXG4gICAgICBjb25zdCBub3RpZmllckxhbWJkYSA9IG5ldyBsYW1iZGEuU2luZ2xldG9uRnVuY3Rpb24odGhpcywgJ0RlZmF1bHQnLCB7XG4gICAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgICAgdXVpZDogJzBmNGEzZWUwLTY5MmUtNDI0OS05MzJmLWE0NmE4MzM4ODZkOCcsXG4gICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChwYXRoLmpvaW4oX19kaXJuYW1lLCAnaGFuZGxlcicpKSxcbiAgICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICB9KTtcblxuICAgICAgbm90aWZpZXJMYW1iZGEuYWRkVG9Sb2xlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydjb2RlcGlwZWxpbmU6R2V0UGlwZWxpbmVFeGVjdXRpb24nLCAnY29kZXBpcGVsaW5lOkxpc3RBY3Rpb25FeGVjdXRpb25zJ10sXG4gICAgICAgIHJlc291cmNlczogW3Byb3BzLnBpcGVsaW5lLnBpcGVsaW5lQXJuXSxcbiAgICAgIH0pKTtcblxuICAgICAgcHJvcHMucGlwZWxpbmUub25TdGF0ZUNoYW5nZShgJHt0aGlzLm5vZGUucGF0aH0tQ2hpbWVOb3RpZmllcmAsIHtcbiAgICAgICAgdGFyZ2V0OiBuZXcgZXZlbnRzX3RhcmdldHMuTGFtYmRhRnVuY3Rpb24obm90aWZpZXJMYW1iZGEsIHtcbiAgICAgICAgICBldmVudDogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgIC8vIEFkZCBwYXJhbWV0ZXJzXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgd2ViaG9va1VybHM6IHByb3BzLndlYmhvb2tVcmxzLFxuICAgICAgICAgICAgLy8gQ29weSBvdmVyIFwiZGV0YWlsXCIgZmllbGRcbiAgICAgICAgICAgIGRldGFpbDogZXZlbnRzLkV2ZW50RmllbGQuZnJvbVBhdGgoJyQuZGV0YWlsJyksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pLFxuICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIHN0YXRlOiBbJ0ZBSUxFRCddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==