Skip to main content

Cdk component that provisions a #slack approval workflow and notification messages on codepipeline state changes

Project description

cloudcomponents Logo

@cloudcomponents/cdk-codepipeline-slack

Build Status cdkdx typescript python Mentioned in Awesome CDK

Cdk component that provisions a #slack approval workflow and notification messages on codepipeline state changes

Approval Workflow

Review Dialog

Install

TypeScript/JavaScript:

npm install --save @cloudcomponents/cdk-codepipeline-slack

Python:

pip install cloudcomponents.cdk-codepipeline-slack

How to use

import { SlackApprovalAction, SlackNotifier } from '@cloudcomponents/cdk-codepipeline-slack';
import { Stack, StackProps } from 'aws-cdk-lib';
import { Repository } from 'aws-cdk-lib/aws-codecommit';
import { Pipeline, Artifact } from 'aws-cdk-lib/aws-codepipeline';
import { CodeCommitSourceAction } from 'aws-cdk-lib/aws-codepipeline-actions';
import { Construct } from 'constructs';

export class CodePipelineSlackApprovalStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    const repository = new Repository(this, 'Repository', {
      repositoryName: 'MyRepositoryName',
    });

    const sourceArtifact = new Artifact();

    const sourceAction = new CodeCommitSourceAction({
      actionName: 'CodeCommit',
      repository,
      output: sourceArtifact,
    });

    if (typeof process.env.SLACK_BOT_TOKEN === 'undefined') {
      throw new Error('environment variable SLACK_BOT_TOKEN undefined');
    }
    const slackBotToken = process.env.SLACK_BOT_TOKEN;

    if (typeof process.env.SLACK_SIGNING_SECRET === 'undefined') {
      throw new Error('environment variable SLACK_SIGNING_SECRET undefined');
    }
    const slackSigningSecret = process.env.SLACK_SIGNING_SECRET;

    if (typeof process.env.SLACK_CHANNEL_NAME === 'undefined') {
      throw new Error('environment variable SLACK_CHANNEL_NAME undefined');
    }
    const slackChannel = process.env.SLACK_CHANNEL_NAME;

    const approvalAction = new SlackApprovalAction({
      actionName: 'SlackApproval',
      slackBotToken,
      slackSigningSecret,
      slackChannel,
      externalEntityLink: 'http://cloudcomponents.org',
      additionalInformation: 'Would you like to promote the build to production?',
    });

    const pipeline = new Pipeline(this, 'MyPipeline', {
      pipelineName: 'MyPipeline',
      stages: [
        {
          stageName: 'Source',
          actions: [sourceAction],
        },
        {
          stageName: 'Approval',
          actions: [approvalAction],
        },
      ],
    });

    new SlackNotifier(this, 'SlackNotifier', {
      pipeline,
      slackBotToken,
      slackSigningSecret,
      slackChannel,
    });
  }
}

Slack App Settings

Create an app that’s just for your workspace

OAuth & Permissions

Grant the channels::history-Scope to the Bot in your app and Add the Bot to the configured Slack-Channel

Select Permission Scopes:

OAuth Scopes

Interactive Components

Enter the url of your api from the AWS Api Gateway and append /slack/actions:

Interactive Components

API Reference

See API.md.

Example

See more complete examples.

License

MIT

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

File details

Details for the file cloudcomponents.cdk-codepipeline-slack-2.4.0.tar.gz.

File metadata

File hashes

Hashes for cloudcomponents.cdk-codepipeline-slack-2.4.0.tar.gz
Algorithm Hash digest
SHA256 73e493371090cb8bedbd5d68daae825d0cdced95417591a7d130d1186f79f878
MD5 165910c8899373f9ccff1d81b3cbab7a
BLAKE2b-256 df2a2edb6620b1f49ccb51c9faf32a3ca2f0277766d98c94737d36fb25b87451

See more details on using hashes here.

File details

Details for the file cloudcomponents.cdk_codepipeline_slack-2.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for cloudcomponents.cdk_codepipeline_slack-2.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a9c25d3846209fed59b5b643806664d8e5f030cf4b843a88a2f534ad53729997
MD5 8bd7b4ab1f773bbf332859e217981edb
BLAKE2b-256 327d5c0eeb4c58c1f347d253088b6fc8cc9544b858a17bdfe14953acb7433924

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page