Cdk component that automatically check pull requests
TypeScript/JavaScript:
npm install --save @cloudcomponents/cdk-pull-request-check
Python:
pip install cloudcomponents.cdk-pull-request-check
import { Construct, Stack, StackProps } from '@aws-cdk/core';
import { Repository } from '@aws-cdk/aws-codecommit';
import { BuildSpec } from '@aws-cdk/aws-codebuild';
import { PullRequestCheck } from '@cloudcomponents/cdk-pull-request-check';
export class CodePipelineStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const repository = new Repository(this, 'Repository', {
repositoryName: 'MyRepositoryName',
});
// CodePipeline etc.
new PullRequestCheck(this, 'PullRequestCheck', {
repository,
buildSpec: BuildSpec.fromSourceFilename('prcheck.yml'),
});
}
}
import { Construct, Stack, StackProps } from '@aws-cdk/core';
import { Repository } from '@aws-cdk/aws-codecommit';
import { BuildSpec } from '@aws-cdk/aws-codebuild';
import { PullRequestCheck } from '@cloudcomponents/cdk-pull-request-check';
import {
ApprovalRuleTemplate,
ApprovalRuleTemplateRepositoryAssociation,
} from '@cloudcomponents/cdk-pull-request-approval-rule';
export class CodePipelinePullRequestCheckStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const repository = new Repository(this, 'Repository', {
repositoryName: 'repository',
});
const { approvalRuleTemplateName } = new ApprovalRuleTemplate(
this,
'ApprovalRuleTemplate',
{
approvalRuleTemplateName: 'Require 1 approver',
template: {
approvers: {
numberOfApprovalsNeeded: 1,
},
},
},
);
new ApprovalRuleTemplateRepositoryAssociation(
this,
'ApprovalRuleTemplateRepositoryAssociation',
{
approvalRuleTemplateName,
repository,
},
);
// Approves the pull request
new PullRequestCheck(this, 'PullRequestCheck', {
repository,
buildSpec: BuildSpec.fromSourceFilename('prcheck.yml'),
});
}
}
The component comments the pull request and sets the approval state by default. Custom notifications can be set up this way
import { Construct, Stack, StackProps } from '@aws-cdk/core';
import { Repository } from '@aws-cdk/aws-codecommit';
import { BuildSpec } from '@aws-cdk/aws-codebuild';
import { SnsTopic } from '@aws-cdk/aws-events-targets';
import { Topic } from '@aws-cdk/aws-sns';
import { EmailSubscription } from '@aws-cdk/aws-sns-subscriptions';
import { PullRequestCheck } from '@cloudcomponents/cdk-pull-request-check';
export class CodePipelineStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const repository = new Repository(this, 'Repository', {
repositoryName: 'MyRepositoryName',
description: 'Some description.', // optional property
});
// Your CodePipeline...
const prCheck = new PullRequestCheck(this, 'PullRequestCheck', {
repository,
buildSpec: BuildSpec.fromSourceFilename('buildspecs/prcheck.yml'),
});
const prTopic = new Topic(this, 'PullRequestTopic');
prTopic.addSubscription(
new EmailSubscription(process.env.DEVSECOPS_TEAM_EMAIL as string),
);
prCheck.onCheckStarted('started', {
target: new SnsTopic(prTopic),
});
prCheck.onCheckSucceeded('succeeded', {
target: new SnsTopic(prTopic),
});
prCheck.onCheckFailed('failed', {
target: new SnsTopic(prTopic),
});
}
}
See API.md.
See more complete examples.