446 lines
16 KiB
TypeScript
446 lines
16 KiB
TypeScript
import type { Construct } from 'constructs';
|
|
import type { CfnProject } from './codebuild.generated';
|
|
import type { IProject } from './project';
|
|
import type * as codecommit from '../../aws-codecommit';
|
|
import type * as s3 from '../../aws-s3';
|
|
/**
|
|
* The type returned from `ISource#bind`.
|
|
*/
|
|
export interface SourceConfig {
|
|
readonly sourceProperty: CfnProject.SourceProperty;
|
|
readonly buildTriggers?: CfnProject.ProjectTriggersProperty;
|
|
/**
|
|
* `AWS::CodeBuild::Project.SourceVersion`
|
|
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html#cfn-codebuild-project-sourceversion
|
|
* @default the latest version
|
|
*/
|
|
readonly sourceVersion?: string;
|
|
}
|
|
/**
|
|
* The abstract interface of a CodeBuild source.
|
|
* Implemented by `Source`.
|
|
*/
|
|
export interface ISource {
|
|
readonly identifier?: string;
|
|
readonly type: string;
|
|
readonly badgeSupported: boolean;
|
|
bind(scope: Construct, project: IProject): SourceConfig;
|
|
}
|
|
/**
|
|
* Properties common to all Source classes.
|
|
*/
|
|
export interface SourceProps {
|
|
/**
|
|
* The source identifier.
|
|
* This property is required on secondary sources.
|
|
*/
|
|
readonly identifier?: string;
|
|
}
|
|
/**
|
|
* Source provider definition for a CodeBuild Project.
|
|
*/
|
|
export declare abstract class Source implements ISource {
|
|
static s3(props: S3SourceProps): ISource;
|
|
static codeCommit(props: CodeCommitSourceProps): ISource;
|
|
static gitHub(props: GitHubSourceProps): ISource;
|
|
static gitHubEnterprise(props: GitHubEnterpriseSourceProps): ISource;
|
|
static bitBucket(props: BitBucketSourceProps): ISource;
|
|
readonly identifier?: string;
|
|
abstract readonly type: string;
|
|
readonly badgeSupported: boolean;
|
|
protected constructor(props: SourceProps);
|
|
/**
|
|
* Called by the project when the source is added so that the source can perform
|
|
* binding operations on the source. For example, it can grant permissions to the
|
|
* code build project to read from the S3 bucket.
|
|
*/
|
|
bind(_scope: Construct, _project: IProject): SourceConfig;
|
|
}
|
|
/**
|
|
* The construction properties common to all build sources that are backed by Git.
|
|
*/
|
|
interface GitSourceProps extends SourceProps {
|
|
/**
|
|
* The depth of history to download. Minimum value is 0.
|
|
* If this value is 0, greater than 25, or not provided,
|
|
* then the full history is downloaded with each build of the project.
|
|
*/
|
|
readonly cloneDepth?: number;
|
|
/**
|
|
* The commit ID, pull request ID, branch name, or tag name that corresponds to
|
|
* the version of the source code you want to build
|
|
*
|
|
* @example 'mybranch'
|
|
* @default the default branch's HEAD commit ID is used
|
|
*/
|
|
readonly branchOrRef?: string;
|
|
/**
|
|
* Whether to fetch submodules while cloning git repo.
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly fetchSubmodules?: boolean;
|
|
}
|
|
/**
|
|
* The types of webhook event actions.
|
|
*/
|
|
export declare enum EventAction {
|
|
/**
|
|
* A push (of a branch, or a tag) to the repository.
|
|
*/
|
|
PUSH = "PUSH",
|
|
/**
|
|
* Creating a Pull Request.
|
|
*/
|
|
PULL_REQUEST_CREATED = "PULL_REQUEST_CREATED",
|
|
/**
|
|
* Updating a Pull Request.
|
|
*/
|
|
PULL_REQUEST_UPDATED = "PULL_REQUEST_UPDATED",
|
|
/**
|
|
* Closing a Pull Request.
|
|
*/
|
|
PULL_REQUEST_CLOSED = "PULL_REQUEST_CLOSED",
|
|
/**
|
|
* Merging a Pull Request.
|
|
*/
|
|
PULL_REQUEST_MERGED = "PULL_REQUEST_MERGED",
|
|
/**
|
|
* Re-opening a previously closed Pull Request.
|
|
* Note that this event is only supported for GitHub and GitHubEnterprise sources.
|
|
*/
|
|
PULL_REQUEST_REOPENED = "PULL_REQUEST_REOPENED",
|
|
/**
|
|
* A release is created in the repository.
|
|
* Works with GitHub only.
|
|
*/
|
|
RELEASED = "RELEASED",
|
|
/**
|
|
* A prerelease is created in the repository.
|
|
* Works with GitHub only.
|
|
*/
|
|
PRERELEASED = "PRERELEASED",
|
|
/**
|
|
* A workflow job is queued in the repository.
|
|
* Works with GitHub only.
|
|
*/
|
|
WORKFLOW_JOB_QUEUED = "WORKFLOW_JOB_QUEUED"
|
|
}
|
|
/**
|
|
* An object that represents a group of filter conditions for a webhook.
|
|
* Every condition in a given FilterGroup must be true in order for the whole group to be true.
|
|
* You construct instances of it by calling the `#inEventOf` static factory method,
|
|
* and then calling various `andXyz` instance methods to create modified instances of it
|
|
* (this class is immutable).
|
|
*
|
|
* You pass instances of this class to the `webhookFilters` property when constructing a source.
|
|
*/
|
|
export declare class FilterGroup {
|
|
/**
|
|
* Creates a new event FilterGroup that triggers on any of the provided actions.
|
|
*
|
|
* @param actions the actions to trigger the webhook on
|
|
*/
|
|
static inEventOf(...actions: EventAction[]): FilterGroup;
|
|
private readonly actions;
|
|
private readonly filters;
|
|
private constructor();
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the event must affect the given branch.
|
|
*
|
|
* @param branchName the name of the branch (can be a regular expression)
|
|
*/
|
|
andBranchIs(branchName: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the event must not affect the given branch.
|
|
*
|
|
* @param branchName the name of the branch (can be a regular expression)
|
|
*/
|
|
andBranchIsNot(branchName: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the event must affect a head commit with the given message.
|
|
*
|
|
* @param commitMessage the commit message (can be a regular expression)
|
|
*/
|
|
andCommitMessageIs(commitMessage: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the event must not affect a head commit with the given message.
|
|
*
|
|
* @param commitMessage the commit message (can be a regular expression)
|
|
*/
|
|
andCommitMessageIsNot(commitMessage: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the event must affect the given tag.
|
|
*
|
|
* @param tagName the name of the tag (can be a regular expression)
|
|
*/
|
|
andTagIs(tagName: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the event must not affect the given tag.
|
|
*
|
|
* @param tagName the name of the tag (can be a regular expression)
|
|
*/
|
|
andTagIsNot(tagName: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the event must affect a Git reference (ie., a branch or a tag)
|
|
* that matches the given pattern.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andHeadRefIs(pattern: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the event must not affect a Git reference (ie., a branch or a tag)
|
|
* that matches the given pattern.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andHeadRefIsNot(pattern: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the account ID of the actor initiating the event must match the given pattern.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andActorAccountIs(pattern: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the account ID of the actor initiating the event must not match the given pattern.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andActorAccountIsNot(pattern: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the Pull Request that is the source of the event must target the given base branch.
|
|
* Note that you cannot use this method if this Group contains the `PUSH` event action.
|
|
*
|
|
* @param branchName the name of the branch (can be a regular expression)
|
|
*/
|
|
andBaseBranchIs(branchName: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the Pull Request that is the source of the event must not target the given base branch.
|
|
* Note that you cannot use this method if this Group contains the `PUSH` event action.
|
|
*
|
|
* @param branchName the name of the branch (can be a regular expression)
|
|
*/
|
|
andBaseBranchIsNot(branchName: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the Pull Request that is the source of the event must target the given Git reference.
|
|
* Note that you cannot use this method if this Group contains the `PUSH` event action.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andBaseRefIs(pattern: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the Pull Request that is the source of the event must not target the given Git reference.
|
|
* Note that you cannot use this method if this Group contains the `PUSH` event action.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andBaseRefIsNot(pattern: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the push that is the source of the event must affect a file that matches the given pattern.
|
|
* Note that you can only use this method if this Group contains only the `PUSH` event action,
|
|
* and only for GitHub, Bitbucket and GitHubEnterprise sources.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andFilePathIs(pattern: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the push that is the source of the event must not affect a file that matches the given pattern.
|
|
* Note that you can only use this method if this Group contains only the `PUSH` event action,
|
|
* and only for GitHub, Bitbucket and GitHubEnterprise sources.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andFilePathIsNot(pattern: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the push that is the source of the event affect only a repository name that matches the given pattern.
|
|
* Note that you can only use this method if this Group contains only the `WORKFLOW_JOB_QUEUED` event action,
|
|
* only for GitHub sources and only for organization webhook.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andRepositoryNameIs(pattern: string): FilterGroup;
|
|
/**
|
|
* Create a new FilterGroup with an added condition:
|
|
* the push that is the source of the event must not affect a repository name that matches the given pattern.
|
|
* Note that you can only use this method if this Group contains only the `WORKFLOW_JOB_QUEUED` event action,
|
|
* only for GitHub sources and only for organization webhook.
|
|
*
|
|
* @param pattern a regular expression
|
|
*/
|
|
andRepositoryNameIsNot(pattern: string): FilterGroup;
|
|
/** @internal */
|
|
get _actions(): EventAction[];
|
|
/** @internal */
|
|
get _filters(): CfnProject.WebhookFilterProperty[];
|
|
/** @internal */
|
|
_toJson(): CfnProject.WebhookFilterProperty[];
|
|
private addCommitMessageFilter;
|
|
private addHeadBranchFilter;
|
|
private addHeadTagFilter;
|
|
private addHeadRefFilter;
|
|
private addActorAccountId;
|
|
private addBaseBranchFilter;
|
|
private addBaseRefFilter;
|
|
private addFilePathFilter;
|
|
private addRepositoryNameFilter;
|
|
private addFilter;
|
|
}
|
|
/**
|
|
* The construction properties common to all third-party build sources that are backed by Git.
|
|
*/
|
|
interface ThirdPartyGitSourceProps extends GitSourceProps {
|
|
/**
|
|
* Whether to send notifications on your build's start and end.
|
|
*
|
|
* @default true
|
|
*/
|
|
readonly reportBuildStatus?: boolean;
|
|
/**
|
|
* Whether to create a webhook that will trigger a build every time an event happens in the repository.
|
|
*
|
|
* @default true if any `webhookFilters` were provided, false otherwise
|
|
*/
|
|
readonly webhook?: boolean;
|
|
/**
|
|
* Trigger a batch build from a webhook instead of a standard one.
|
|
*
|
|
* Enabling this will enable batch builds on the CodeBuild project.
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly webhookTriggersBatchBuild?: boolean;
|
|
/**
|
|
* A list of webhook filters that can constraint what events in the repository will trigger a build.
|
|
* A build is triggered if any of the provided filter groups match.
|
|
* Only valid if `webhook` was not provided as false.
|
|
*
|
|
* @default every push and every Pull Request (create or update) triggers a build
|
|
*/
|
|
readonly webhookFilters?: FilterGroup[];
|
|
/**
|
|
* The URL that the build will report back to the source provider.
|
|
* Can use built-in CodeBuild variables, like $AWS_REGION.
|
|
*
|
|
* @see https://docs.aws.amazon.com/codebuild/latest/userguide/create-project-cli.html#cli.source.buildstatusconfig.targeturl
|
|
* @see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
|
|
*
|
|
* @example "$CODEBUILD_PUBLIC_BUILD_URL"
|
|
* @default - link to the AWS Console for CodeBuild to a particular build execution
|
|
*/
|
|
readonly buildStatusUrl?: string;
|
|
}
|
|
/**
|
|
* Construction properties for `CodeCommitSource`.
|
|
*/
|
|
export interface CodeCommitSourceProps extends GitSourceProps {
|
|
readonly repository: codecommit.IRepository;
|
|
}
|
|
/**
|
|
* Construction properties for `S3Source`.
|
|
*/
|
|
export interface S3SourceProps extends SourceProps {
|
|
readonly bucket: s3.IBucket;
|
|
readonly path: string;
|
|
/**
|
|
* The version ID of the object that represents the build input ZIP file to use.
|
|
*
|
|
* @default latest
|
|
*/
|
|
readonly version?: string;
|
|
}
|
|
/**
|
|
* Common properties between `GitHubSource` and `GitHubEnterpriseSource`.
|
|
*/
|
|
interface CommonGithubSourceProps extends ThirdPartyGitSourceProps {
|
|
/**
|
|
* This parameter is used for the `context` parameter in the GitHub commit status.
|
|
* Can use built-in CodeBuild variables, like $AWS_REGION.
|
|
*
|
|
* @see https://docs.aws.amazon.com/codebuild/latest/userguide/create-project-cli.html#cli.source.buildstatusconfig.context
|
|
* @see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
|
|
*
|
|
* @example "My build #$CODEBUILD_BUILD_NUMBER"
|
|
* @default "AWS CodeBuild $AWS_REGION ($PROJECT_NAME)"
|
|
*/
|
|
readonly buildStatusContext?: string;
|
|
}
|
|
/**
|
|
* Construction properties for `GitHubSource` and `GitHubEnterpriseSource`.
|
|
*/
|
|
export interface GitHubSourceProps extends CommonGithubSourceProps {
|
|
/**
|
|
* The GitHub Organization/user that owns the repo.
|
|
*
|
|
* @example 'awslabs'
|
|
*/
|
|
readonly owner: string;
|
|
/**
|
|
* The name of the repo (without the username).
|
|
*
|
|
* @example 'aws-cdk'
|
|
* @default undefined will create an organization webhook
|
|
*/
|
|
readonly repo?: string;
|
|
}
|
|
/**
|
|
* Construction properties for `GitHubEnterpriseSource`.
|
|
*/
|
|
export interface GitHubEnterpriseSourceProps extends CommonGithubSourceProps {
|
|
/**
|
|
* The HTTPS URL of the repository in your GitHub Enterprise installation.
|
|
*/
|
|
readonly httpsCloneUrl: string;
|
|
/**
|
|
* Whether to ignore SSL errors when connecting to the repository.
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly ignoreSslErrors?: boolean;
|
|
}
|
|
/**
|
|
* Construction properties for `BitBucketSource`.
|
|
*/
|
|
export interface BitBucketSourceProps extends ThirdPartyGitSourceProps {
|
|
/**
|
|
* The BitBucket account/user that owns the repo.
|
|
*
|
|
* @example 'awslabs'
|
|
*/
|
|
readonly owner: string;
|
|
/**
|
|
* The name of the repo (without the username).
|
|
*
|
|
* @example 'aws-cdk'
|
|
*/
|
|
readonly repo: string;
|
|
/**
|
|
* This parameter is used for the `name` parameter in the Bitbucket commit status.
|
|
* Can use built-in CodeBuild variables, like $AWS_REGION.
|
|
*
|
|
* @see https://docs.aws.amazon.com/codebuild/latest/userguide/create-project-cli.html#cli.source.buildstatusconfig.context
|
|
* @see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
|
|
*
|
|
* @example "My build #$CODEBUILD_BUILD_NUMBER"
|
|
* @default "AWS CodeBuild $AWS_REGION ($PROJECT_NAME)"
|
|
*/
|
|
readonly buildStatusName?: string;
|
|
}
|
|
export {};
|