# AWS CodeCommit Construct Library

AWS CodeCommit is a version control service that enables you to privately store and manage Git repositories in the AWS cloud.

For further information on CodeCommit,
see the [AWS CodeCommit documentation](https://docs.aws.amazon.com/codecommit).

To add a CodeCommit Repository to your stack:

```ts
const repo = new codecommit.Repository(this, 'Repository', {
  repositoryName: 'MyRepositoryName',
  description: 'Some description.', // optional property
});
```

Use the `repositoryCloneUrlHttp`, `repositoryCloneUrlSsh` or `repositoryCloneUrlGrc`
property to clone your repository.

To add an Amazon SNS trigger to your repository:

```ts
declare const repo: codecommit.Repository;

// trigger is established for all repository actions on all branches by default.
repo.notify('arn:aws:sns:*:123456789012:my_topic');
```

## Add initial commit

It is possible to initialize the Repository via the [`Code`](/v2/docs/aws-cdk-lib.aws_codecommit.Code) class.
It provides methods for loading code from a directory, `.zip` file and from a pre-created CDK Asset.

Example:

```ts
const repo = new codecommit.Repository(this, 'Repository', {
  repositoryName: 'MyRepositoryName',
  code: codecommit.Code.fromDirectory(path.join(__dirname, 'directory/'), 'develop'), // optional property, branch parameter can be omitted
});
```

## Use a customer managed key

CodeCommit repositories are automatically encrypted with an AWS managed key. To use
a customer managed key, specify the `kmsKey` property.

For more information, see
[AWS Key Management Service and encryption for AWS CodeCommit repositories](https://docs.aws.amazon.com/cdk/latest/guide/reference.html#versioning).

```ts
import * as kms from 'aws-cdk-lib/aws-kms';

declare const kmsKey: kms.IKey;

const repo = new codecommit.Repository(this, 'Repository', {
  repositoryName: 'MyRepositoryName',
  kmsKey,
});
```

## Events

CodeCommit repositories emit Amazon CloudWatch events for certain activities.
Use the `repo.onXxx` methods to define rules that trigger on these events
and invoke targets as a result:

```ts
import * as sns from 'aws-cdk-lib/aws-sns';
import * as targets from 'aws-cdk-lib/aws-events-targets';

declare const repo: codecommit.Repository;
declare const project: codebuild.PipelineProject;
declare const myTopic: sns.Topic;

// starts a CodeBuild project when a commit is pushed to the "main" branch of the repo
repo.onCommit('CommitToMain', {
  target: new targets.CodeBuildProject(project),
  branches: ['main'],
});

// publishes a message to an Amazon SNS topic when a comment is made on a pull request
const rule = repo.onCommentOnPullRequest('CommentOnPullRequest', {
  target: new targets.SnsTopic(myTopic),
});
```

## CodeStar Notifications

To define CodeStar Notification rules for Repositories, use one of the `notifyOnXxx()` methods.
They are very similar to `onXxx()` methods for CloudWatch events:

```ts
import * as chatbot from 'aws-cdk-lib/aws-chatbot';

declare const repository: codecommit.Repository;
const target = new chatbot.SlackChannelConfiguration(this, 'MySlackChannel', {
  slackChannelConfigurationName: 'YOUR_CHANNEL_NAME',
  slackWorkspaceId: 'YOUR_SLACK_WORKSPACE_ID',
  slackChannelId: 'YOUR_SLACK_CHANNEL_ID',
});
const rule = repository.notifyOnPullRequestCreated('NotifyOnPullRequestCreated', target);
```

## Types

| Name | Kind | Summary |
| --- | --- | --- |
| [`Repository`](/v2/docs/aws-cdk-lib.aws_codecommit.Repository) | Construct (L2) | Provides a CodeCommit Repository. |
| [`CfnRepository`](/v2/docs/aws-cdk-lib.aws_codecommit.CfnRepository) | Construct (L1) | Creates a new, empty repository. |
| [`CfnRepository.CodeProperty`](/v2/docs/aws-cdk-lib.aws_codecommit.CfnRepository.CodeProperty) | Struct | Information about code to be committed. |
| [`CfnRepository.RepositoryTriggerProperty`](/v2/docs/aws-cdk-lib.aws_codecommit.CfnRepository.RepositoryTriggerProperty) | Struct | Information about a trigger for a repository. |
| [`CfnRepository.S3Property`](/v2/docs/aws-cdk-lib.aws_codecommit.CfnRepository.S3Property) | Struct | Information about the Amazon S3 bucket that contains the code that will be committed to the new repository. |
| [`CfnRepositoryProps`](/v2/docs/aws-cdk-lib.aws_codecommit.CfnRepositoryProps) | Struct | Properties for defining a `CfnRepository`. |
| [`Code`](/v2/docs/aws-cdk-lib.aws_codecommit.Code) | Class | Represents the contents to initialize the repository with. |
| [`CodeConfig`](/v2/docs/aws-cdk-lib.aws_codecommit.CodeConfig) | Struct | Represents the structure to pass into the underlying CfnRepository class. |
| [`IRepository`](/v2/docs/aws-cdk-lib.aws_codecommit.IRepository) | Interface |  |
| [`OnCommitOptions`](/v2/docs/aws-cdk-lib.aws_codecommit.OnCommitOptions) | Struct | Options for the onCommit() method. |
| [`ReferenceEvent`](/v2/docs/aws-cdk-lib.aws_codecommit.ReferenceEvent) | Class | Fields of CloudWatch Events that change references. |
| [`RepositoryEventTrigger`](/v2/docs/aws-cdk-lib.aws_codecommit.RepositoryEventTrigger) | Enum | Repository events that will cause the trigger to run actions in another service. |
| [`RepositoryGrants`](/v2/docs/aws-cdk-lib.aws_codecommit.RepositoryGrants) | Facade | Collection of grant methods for a IRepositoryRef. |
| [`RepositoryNotificationEvents`](/v2/docs/aws-cdk-lib.aws_codecommit.RepositoryNotificationEvents) | Enum | List of event types for AWS CodeCommit. |
| [`RepositoryNotifyOnOptions`](/v2/docs/aws-cdk-lib.aws_codecommit.RepositoryNotifyOnOptions) | Struct | Additional options to pass to the notification rule. |
| [`RepositoryProps`](/v2/docs/aws-cdk-lib.aws_codecommit.RepositoryProps) | Struct |  |
| [`RepositoryTriggerOptions`](/v2/docs/aws-cdk-lib.aws_codecommit.RepositoryTriggerOptions) | Struct | Creates for a repository trigger to an SNS topic or Lambda function. |
