import type { Construct } from 'constructs';
import type { IArtifacts } from './artifacts';
import { BuildSpec } from './build-spec';
import { Cache } from './cache';
import { CfnProject } from './codebuild.generated';
import type { DockerServerComputeType } from './compute-type';
import { ComputeType } from './compute-type';
import type { IFileSystemLocation } from './file-location';
import type { IFleet } from './fleet';
import { ImagePullPrincipalType } from './image-pull-principal-type';
import type { LoggingOptions } from './project-logs';
import type { ISource } from './source';
import * as cloudwatch from '../../aws-cloudwatch';
import * as notifications from '../../aws-codestarnotifications';
import * as ec2 from '../../aws-ec2';
import type * as ecr from '../../aws-ecr';
import type { DockerImageAssetProps } from '../../aws-ecr-assets';
import * as events from '../../aws-events';
import * as iam from '../../aws-iam';
import * as kms from '../../aws-kms';
import type * as s3 from '../../aws-s3';
import type * as secretsmanager from '../../aws-secretsmanager';
import type { Duration, IResource } from '../../core';
import { Resource } from '../../core';
import type { IProjectRef, ProjectReference } from '../../interfaces/generated/aws-codebuild-interfaces.generated';
/**
 * The type returned from `IProject#enableBatchBuilds`.
 */
export interface BatchBuildConfig {
    /** The IAM batch service Role of this Project. */
    readonly role: iam.IRole;
}
/**
 * Location of a PEM certificate on S3
 */
export interface BuildEnvironmentCertificate {
    /**
     * The bucket where the certificate is
     */
    readonly bucket: s3.IBucket;
    /**
     * The full path and name of the key file
     */
    readonly objectKey: string;
}
/**
 * Additional options to pass to the notification rule.
 */
export interface ProjectNotifyOnOptions extends notifications.NotificationRuleOptions {
    /**
     * A list of event types associated with this notification rule for CodeBuild Project.
     * For a complete list of event types and IDs, see Notification concepts in the Developer Tools Console User Guide.
     * @see https://docs.aws.amazon.com/dtconsole/latest/userguide/concepts.html#concepts-api
     */
    readonly events: ProjectNotificationEvents[];
}
export interface IProject extends IResource, iam.IGrantable, ec2.IConnectable, notifications.INotificationRuleSource, IProjectRef {
    /**
     * The ARN of this Project.
     * @attribute
     */
    readonly projectArn: string;
    /**
     * The human-visible name of this Project.
     * @attribute
     */
    readonly projectName: string;
    /** The IAM service Role of this Project. Undefined for imported Projects. */
    readonly role?: iam.IRole;
    /**
     * Enable batch builds.
     *
     * Returns an object contining the batch service role if batch builds
     * could be enabled.
     */
    enableBatchBuilds(): BatchBuildConfig | undefined;
    addToRolePolicy(policyStatement: iam.PolicyStatement): void;
    /**
     * Defines a CloudWatch event rule triggered when something happens with this project.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-build-notifications.html
     */
    onEvent(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines a CloudWatch event rule triggered when the build project state
     * changes. You can filter specific build status events using an event
     * pattern filter on the `build-status` detail field:
     *
     *    const rule = project.onStateChange('OnBuildStarted', { target });
     *    rule.addEventPattern({
     *      detail: {
     *        'build-status': [
     *          "IN_PROGRESS",
     *          "SUCCEEDED",
     *          "FAILED",
     *          "STOPPED"
     *        ]
     *      }
     *    });
     *
     * You can also use the methods `onBuildFailed` and `onBuildSucceeded` to define rules for
     * these specific state changes.
     *
     * To access fields from the event in the event target input,
     * use the static fields on the `StateChangeEvent` class.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-build-notifications.html
     */
    onStateChange(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines a CloudWatch event rule that triggers upon phase change of this
     * build project.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-build-notifications.html
     */
    onPhaseChange(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines an event rule which triggers when a build starts.
     */
    onBuildStarted(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines an event rule which triggers when a build fails.
     */
    onBuildFailed(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines an event rule which triggers when a build completes successfully.
     */
    onBuildSucceeded(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * @returns a CloudWatch metric associated with this build project.
     * @param metricName The name of the metric
     * @param props Customization properties
     */
    metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * Measures the number of builds triggered.
     *
     * Units: Count
     *
     * Valid CloudWatch statistics: Sum
     *
     * @default sum over 5 minutes
     */
    metricBuilds(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * Measures the duration of all builds over time.
     *
     * Units: Seconds
     *
     * Valid CloudWatch statistics: Average (recommended), Maximum, Minimum
     *
     * @default average over 5 minutes
     */
    metricDuration(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * Measures the number of successful builds.
     *
     * Units: Count
     *
     * Valid CloudWatch statistics: Sum
     *
     * @default sum over 5 minutes
     */
    metricSucceededBuilds(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * Measures the number of builds that failed because of client error or
     * because of a timeout.
     *
     * Units: Count
     *
     * Valid CloudWatch statistics: Sum
     *
     * @default sum over 5 minutes
     */
    metricFailedBuilds(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * Defines a CodeStar Notification rule triggered when the project
     * events emitted by you specified, it very similar to `onEvent` API.
     *
     * You can also use the methods `notifyOnBuildSucceeded` and
     * `notifyOnBuildFailed` to define rules for these specific event emitted.
     *
     * @param id The logical identifier of the CodeStar Notifications rule that will be created
     * @param target The target to register for the CodeStar Notifications destination.
     * @param options Customization options for CodeStar Notifications rule
     * @returns CodeStar Notifications rule associated with this build project.
     */
    notifyOn(id: string, target: notifications.INotificationRuleTarget, options: ProjectNotifyOnOptions): notifications.INotificationRule;
    /**
     * Defines a CodeStar notification rule which triggers when a build completes successfully.
     */
    notifyOnBuildSucceeded(id: string, target: notifications.INotificationRuleTarget, options?: notifications.NotificationRuleOptions): notifications.INotificationRule;
    /**
     * Defines a CodeStar notification rule which triggers when a build fails.
     */
    notifyOnBuildFailed(id: string, target: notifications.INotificationRuleTarget, options?: notifications.NotificationRuleOptions): notifications.INotificationRule;
}
/**
 * Represents a reference to a CodeBuild Project.
 *
 * If you're managing the Project alongside the rest of your CDK resources,
 * use the `Project` class.
 *
 * If you want to reference an already existing Project
 * (or one defined in a different CDK Stack),
 * use the `import` method.
 */
declare abstract class ProjectBase extends Resource implements IProject {
    abstract readonly grantPrincipal: iam.IPrincipal;
    /** The ARN of this Project. */
    abstract readonly projectArn: string;
    /** The human-visible name of this Project. */
    abstract readonly projectName: string;
    /** The IAM service Role of this Project. */
    abstract readonly role?: iam.IRole;
    get projectRef(): ProjectReference;
    /**
     * Actual connections object for this Project.
     * May be unset, in which case this Project is not configured to use a VPC.
     * @internal
     */
    protected _connections: ec2.Connections | undefined;
    /**
     * Access the Connections object.
     * Will fail if this Project does not have a VPC set.
     */
    get connections(): ec2.Connections;
    enableBatchBuilds(): BatchBuildConfig | undefined;
    /**
     * Add a permission only if there's a policy attached.
     * @param statement The permissions statement to add
     */
    addToRolePolicy(statement: iam.PolicyStatement): void;
    /**
     * Defines a CloudWatch event rule triggered when something happens with this project.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-build-notifications.html
     */
    onEvent(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines a CloudWatch event rule triggered when the build project state
     * changes. You can filter specific build status events using an event
     * pattern filter on the `build-status` detail field:
     *
     *    const rule = project.onStateChange('OnBuildStarted', { target });
     *    rule.addEventPattern({
     *      detail: {
     *        'build-status': [
     *          "IN_PROGRESS",
     *          "SUCCEEDED",
     *          "FAILED",
     *          "STOPPED"
     *        ]
     *      }
     *    });
     *
     * You can also use the methods `onBuildFailed` and `onBuildSucceeded` to define rules for
     * these specific state changes.
     *
     * To access fields from the event in the event target input,
     * use the static fields on the `StateChangeEvent` class.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-build-notifications.html
     */
    onStateChange(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines a CloudWatch event rule that triggers upon phase change of this
     * build project.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-build-notifications.html
     */
    onPhaseChange(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines an event rule which triggers when a build starts.
     *
     * To access fields from the event in the event target input,
     * use the static fields on the `StateChangeEvent` class.
     */
    onBuildStarted(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines an event rule which triggers when a build fails.
     *
     * To access fields from the event in the event target input,
     * use the static fields on the `StateChangeEvent` class.
     */
    onBuildFailed(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * Defines an event rule which triggers when a build completes successfully.
     *
     * To access fields from the event in the event target input,
     * use the static fields on the `StateChangeEvent` class.
     */
    onBuildSucceeded(id: string, options?: events.OnEventOptions): events.Rule;
    /**
     * @returns a CloudWatch metric associated with this build project.
     * @param metricName The name of the metric
     * @param props Customization properties
     */
    metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * Measures the number of builds triggered.
     *
     * Units: Count
     *
     * Valid CloudWatch statistics: Sum
     *
     * @default sum over 5 minutes
     */
    metricBuilds(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * Measures the duration of all builds over time.
     *
     * Units: Seconds
     *
     * Valid CloudWatch statistics: Average (recommended), Maximum, Minimum
     *
     * @default average over 5 minutes
     */
    metricDuration(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * Measures the number of successful builds.
     *
     * Units: Count
     *
     * Valid CloudWatch statistics: Sum
     *
     * @default sum over 5 minutes
     */
    metricSucceededBuilds(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    /**
     * Measures the number of builds that failed because of client error or
     * because of a timeout.
     *
     * Units: Count
     *
     * Valid CloudWatch statistics: Sum
     *
     * @default sum over 5 minutes
     */
    metricFailedBuilds(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
    notifyOn(id: string, target: notifications.INotificationRuleTarget, options: ProjectNotifyOnOptions): notifications.INotificationRule;
    notifyOnBuildSucceeded(id: string, target: notifications.INotificationRuleTarget, options?: notifications.NotificationRuleOptions): notifications.INotificationRule;
    notifyOnBuildFailed(id: string, target: notifications.INotificationRuleTarget, options?: notifications.NotificationRuleOptions): notifications.INotificationRule;
    bindAsNotificationRuleSource(_scope: Construct): notifications.NotificationRuleSourceConfig;
    private cannedMetric;
}
export interface CommonProjectProps {
    /**
     * A description of the project. Use the description to identify the purpose
     * of the project.
     *
     * @default - No description.
     */
    readonly description?: string;
    /**
     * Filename or contents of buildspec in JSON format.
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-example
     *
     * @default - Empty buildspec.
     */
    readonly buildSpec?: BuildSpec;
    /**
     * Service Role to assume while running the build.
     *
     * @default - A role will be created.
     */
    readonly role?: iam.IRole;
    /**
     * Encryption key to use to read and write artifacts.
     *
     * @default - The AWS-managed CMK for Amazon Simple Storage Service (Amazon S3) is used.
     */
    readonly encryptionKey?: kms.IKey;
    /**
     * Caching strategy to use.
     *
     * @default Cache.none
     */
    readonly cache?: Cache;
    /**
     * Build environment to use for the build.
     *
     * @default BuildEnvironment.LinuxBuildImage.STANDARD_7_0
     */
    readonly environment?: BuildEnvironment;
    /**
     * Indicates whether AWS CodeBuild generates a publicly accessible URL for
     * your project's build badge. For more information, see Build Badges Sample
     * in the AWS CodeBuild User Guide.
     *
     * @default false
     */
    readonly badge?: boolean;
    /**
     * The number of minutes after which AWS CodeBuild stops the build if it's
     * not complete. For valid values, see the timeoutInMinutes field in the AWS
     * CodeBuild User Guide.
     *
     * @default Duration.hours(1)
     */
    readonly timeout?: Duration;
    /**
     * Additional environment variables to add to the build environment.
     *
     * @default - No additional environment variables are specified.
     */
    readonly environmentVariables?: {
        [name: string]: BuildEnvironmentVariable;
    };
    /**
     * Whether to check for the presence of any secrets in the environment variables of the default type, BuildEnvironmentVariableType.PLAINTEXT.
     * Since using a secret for the value of that kind of variable would result in it being displayed in plain text in the AWS Console,
     * the construct will throw an exception if it detects a secret was passed there.
     * Pass this property as false if you want to skip this validation,
     * and keep using a secret in a plain text environment variable.
     *
     * @default true
     */
    readonly checkSecretsInPlainTextEnvVariables?: boolean;
    /**
     * The physical, human-readable name of the CodeBuild Project.
     *
     * @default - Name is automatically generated.
     */
    readonly projectName?: string;
    /**
     * VPC network to place codebuild network interfaces
     *
     * Specify this if the codebuild project needs to access resources in a VPC.
     *
     * @default - No VPC is specified.
     */
    readonly vpc?: ec2.IVpc;
    /**
     * Where to place the network interfaces within the VPC.
     *
     * To access AWS services, your CodeBuild project needs to be in one of the following types of subnets:
     *
     * 1. Subnets with access to the internet (of type PRIVATE_WITH_EGRESS).
     * 2. Private subnets unconnected to the internet, but with [VPC endpoints](https://docs.aws.amazon.com/codebuild/latest/userguide/use-vpc-endpoints-with-codebuild.html) for the necessary services.
     *
     * If you don't specify a subnet selection, the default behavior is to use PRIVATE_WITH_EGRESS subnets first if they exist,
     * then PRIVATE_WITHOUT_EGRESS, and finally PUBLIC subnets. If your VPC doesn't have PRIVATE_WITH_EGRESS subnets but you need
     * AWS service access, add VPC Endpoints to your private subnets.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/vpc-support.html
     *
     * @default - private subnets if available else public subnets
     */
    readonly subnetSelection?: ec2.SubnetSelection;
    /**
     * What security group to associate with the codebuild project's network interfaces.
     * If no security group is identified, one will be created automatically.
     *
     * Only used if 'vpc' is supplied.
     *
     * @default - Security group will be automatically created.
     *
     */
    readonly securityGroups?: ec2.ISecurityGroup[];
    /**
     * Whether to allow the CodeBuild to send all network traffic
     *
     * If set to false, you must individually add traffic rules to allow the
     * CodeBuild project to connect to network targets.
     *
     * Only used if 'vpc' is supplied.
     *
     * @default true
     */
    readonly allowAllOutbound?: boolean;
    /**
     * An  ProjectFileSystemLocation objects for a CodeBuild build project.
     *
     * A ProjectFileSystemLocation object specifies the identifier, location, mountOptions, mountPoint,
     * and type of a file system created using Amazon Elastic File System.
     *
     * @default - no file system locations
     */
    readonly fileSystemLocations?: IFileSystemLocation[];
    /**
     * Add permissions to this project's role to create and use test report groups with name starting with the name of this project.
     *
     * That is the standard report group that gets created when a simple name
     * (in contrast to an ARN)
     * is used in the 'reports' section of the buildspec of this project.
     * This is usually harmless, but you can turn these off if you don't plan on using test
     * reports in this project.
     *
     * @default true
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/test-report-group-naming.html
     */
    readonly grantReportGroupPermissions?: boolean;
    /**
     * Information about logs for the build project. A project can create logs in Amazon CloudWatch Logs, an S3 bucket, or both.
     *
     * @default - no log configuration is set
     */
    readonly logging?: LoggingOptions;
    /**
     * The number of minutes after which AWS CodeBuild stops the build if it's
     * still in queue. For valid values, see the timeoutInMinutes field in the AWS
     * CodeBuild User Guide.
     *
     * @default - no queue timeout is set
     */
    readonly queuedTimeout?: Duration;
    /**
     * Maximum number of concurrent builds. Minimum value is 1 and maximum is account build limit.
     *
     * @default - no explicit limit is set
     */
    readonly concurrentBuildLimit?: number;
    /**
     * Add the permissions necessary for debugging builds with SSM Session Manager
     *
     * If the following prerequisites have been met:
     *
     * - The necessary permissions have been added by setting this flag to true.
     * - The build image has the SSM agent installed (true for default CodeBuild images).
     * - The build is started with [debugSessionEnabled](https://docs.aws.amazon.com/codebuild/latest/APIReference/API_StartBuild.html#CodeBuild-StartBuild-request-debugSessionEnabled) set to true.
     *
     * Then the build container can be paused and inspected using Session Manager
     * by invoking the `codebuild-breakpoint` command somewhere during the build.
     *
     * `codebuild-breakpoint` commands will be ignored if the build is not started
     * with `debugSessionEnabled=true`.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/session-manager.html
     * @default false
     */
    readonly ssmSessionPermissions?: boolean;
    /**
     * Specifies the visibility of the project's builds.
     *
     * @default - no visibility is set
     */
    readonly visibility?: ProjectVisibility;
    /**
     * CodeBuild will automatically call retry build using the project's service role up to the auto-retry limit.
     * `autoRetryLimit` must be between 0 and 10.
     *
     * @default - no retry
     */
    readonly autoRetryLimit?: number;
}
export interface ProjectProps extends CommonProjectProps {
    /**
     * The source of the build.
     * *Note*: if `NoSource` is given as the source,
     * then you need to provide an explicit `buildSpec`.
     *
     * @default - NoSource
     */
    readonly source?: ISource;
    /**
     * Defines where build artifacts will be stored.
     * Could be: PipelineBuildArtifacts, NoArtifacts and S3Artifacts.
     *
     * @default NoArtifacts
     */
    readonly artifacts?: IArtifacts;
    /**
     * The secondary sources for the Project.
     * Can be also added after the Project has been created by using the `Project#addSecondarySource` method.
     *
     * @default - No secondary sources.
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-multi-in-out.html
     */
    readonly secondarySources?: ISource[];
    /**
     * The secondary artifacts for the Project.
     * Can also be added after the Project has been created by using the `Project#addSecondaryArtifact` method.
     *
     * @default - No secondary artifacts.
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-multi-in-out.html
     */
    readonly secondaryArtifacts?: IArtifacts[];
}
/**
 * The extra options passed to the `IProject.bindToCodePipeline` method.
 */
export interface BindToCodePipelineOptions {
    /**
     * The artifact bucket that will be used by the action that invokes this project.
     */
    readonly artifactBucket: s3.IBucket;
}
/**
 * A representation of a CodeBuild Project.
 */
export declare class Project extends ProjectBase {
    /** Uniquely identifies this class. */
    static readonly PROPERTY_INJECTION_ID: string;
    static fromProjectArn(scope: Construct, id: string, projectArn: string): IProject;
    /**
     * Import a Project defined either outside the CDK,
     * or in a different CDK Stack
     * (and exported using the `export` method).
     *
     * @note if you're importing a CodeBuild Project for use
     *   in a CodePipeline, make sure the existing Project
     *   has permissions to access the S3 Bucket of that Pipeline -
     *   otherwise, builds in that Pipeline will always fail.
     *
     * @param scope the parent Construct for this Construct
     * @param id the logical name of this Construct
     * @param projectName the name of the project to import
     * @returns a reference to the existing Project
     */
    static fromProjectName(scope: Construct, id: string, projectName: string): IProject;
    /**
     * Convert the environment variables map of string to `BuildEnvironmentVariable`,
     * which is the customer-facing type, to a list of `CfnProject.EnvironmentVariableProperty`,
     * which is the representation of environment variables in CloudFormation.
     *
     * @param environmentVariables the map of string to environment variables
     * @param validateNoPlainTextSecrets whether to throw an exception
     *   if any of the plain text environment variables contain secrets, defaults to 'false'
     * @returns an array of `CfnProject.EnvironmentVariableProperty` instances
     */
    static serializeEnvVariables(environmentVariables: {
        [name: string]: BuildEnvironmentVariable;
    }, validateNoPlainTextSecrets?: boolean, principal?: iam.IGrantable): CfnProject.EnvironmentVariableProperty[];
    readonly grantPrincipal: iam.IPrincipal;
    /**
     * The IAM role for this project.
     */
    readonly role?: iam.IRole;
    /**
     * The ARN of the project.
     */
    get projectArn(): string;
    /**
     * The name of the project.
     */
    get projectName(): string;
    private readonly source;
    private readonly buildImage;
    private readonly _secondarySources;
    private readonly _secondarySourceVersions;
    private readonly resource;
    private readonly _secondaryArtifacts;
    private _encryptionKey?;
    private readonly _fileSystemLocations;
    private _batchServiceRole?;
    constructor(scope: Construct, id: string, props: ProjectProps);
    enableBatchBuilds(): BatchBuildConfig | undefined;
    /**
     * Adds a secondary source to the Project.
     *
     * @param secondarySource the source to add as a secondary source
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-multi-in-out.html
     */
    addSecondarySource(secondarySource: ISource): void;
    /**
     * Adds a fileSystemLocation to the Project.
     *
     * @param fileSystemLocation the fileSystemLocation to add
     */
    addFileSystemLocation(fileSystemLocation: IFileSystemLocation): void;
    /**
     * Adds a secondary artifact to the Project.
     *
     * @param secondaryArtifact the artifact to add as a secondary artifact
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-multi-in-out.html
     */
    addSecondaryArtifact(secondaryArtifact: IArtifacts): void;
    /**
     * A callback invoked when the given project is added to a CodePipeline.
     *
     * @param _scope the construct the binding is taking place in
     * @param options additional options for the binding
     */
    bindToCodePipeline(_scope: Construct, options: BindToCodePipelineOptions): void;
    private validateProject;
    private set encryptionKey(value);
    private createLoggingPermission;
    private renderEnvironment;
    private renderFileSystemLocations;
    private renderSecondarySources;
    private renderSecondarySourceVersions;
    private renderSecondaryArtifacts;
    private configureFleet;
    /**
     * If configured, set up the VPC-related properties
     *
     * Returns the VpcConfig that should be added to the
     * codebuild creation properties.
     */
    private configureVpc;
    private renderLoggingConfiguration;
    private addVpcRequiredPermissions;
    private validateCodePipelineSettings;
    private isLambdaBuildImage;
    /**
     * Validates a Lambda build image given the project properties.
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/lambda.html#lambda.limitations
     */
    private validateLambdaBuildImage;
}
export interface BuildEnvironment {
    /**
     * The image used for the builds.
     *
     * @default LinuxBuildImage.STANDARD_7_0
     */
    readonly buildImage?: IBuildImage;
    /**
     * The type of compute to use for this build.
     * See the `ComputeType` enum for the possible values.
     *
     * @default taken from `#buildImage#defaultComputeType`
     */
    readonly computeType?: ComputeType;
    /**
     * The Docker server configuration CodeBuild use to build your Docker image.
     *
     * @note Security groups configured for Docker servers should allow ingress network traffic
     * from the VPC configured in the project. They should allow ingress on port 9876.
     * @default - Doesn't use remote docker server
     */
    readonly dockerServer?: DockerServerOptions;
    /**
     * Fleet resource for a reserved capacity CodeBuild project.
     *
     * Fleets allow for process builds or tests to run immediately and reduces build durations,
     * by reserving compute resources for your projects.
     *
     * You will be charged for the resources in the fleet, even if they are idle.
     *
     * @default - No fleet will be attached to the project, which will remain on-demand.
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/fleets.html
     */
    readonly fleet?: IFleet;
    /**
     * Indicates how the project builds Docker images. Specify true to enable
     * running the Docker daemon inside a Docker container. This value must be
     * set to true only if this build project will be used to build Docker
     * images, and the specified build environment image is not one provided by
     * AWS CodeBuild with Docker support. Otherwise, all associated builds that
     * attempt to interact with the Docker daemon will fail.
     *
     * @default false
     */
    readonly privileged?: boolean;
    /**
     * The location of the PEM-encoded certificate for the build project
     *
     * @default - No external certificate is added to the project
     */
    readonly certificate?: BuildEnvironmentCertificate;
    /**
     * The environment variables that your builds can use.
     */
    readonly environmentVariables?: {
        [name: string]: BuildEnvironmentVariable;
    };
}
/**
 * The Docker server configuration CodeBuild use to build your Docker image.
 */
export interface DockerServerOptions {
    /**
     * The type of compute to use for the docker server.
     * See the `DockerServerComputeType` enum for the possible values.
     */
    readonly computeType: DockerServerComputeType;
    /**
     * A list of maximum 5 security groups.
     *
     * @note Security groups configured for Docker servers should allow ingress network traffic
     * from the VPC configured in the project. They should allow ingress on port 9876.
     * @default - no security group
     */
    readonly securityGroups?: ec2.ISecurityGroup[];
}
/**
 * Represents a Docker image used for the CodeBuild Project builds.
 * Use the concrete subclasses, either:
 * `LinuxBuildImage` or `WindowsBuildImage`.
 */
export interface IBuildImage {
    /**
     * The type of build environment.
     */
    readonly type: string;
    /**
     * The Docker image identifier that the build environment uses.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-available.html
     */
    readonly imageId: string;
    /**
     * The default `ComputeType` to use with this image,
     * if one was not specified in `BuildEnvironment#computeType` explicitly.
     */
    readonly defaultComputeType: ComputeType;
    /**
     * The type of principal that CodeBuild will use to pull this build Docker image.
     *
     * @default ImagePullPrincipalType.SERVICE_ROLE
     */
    readonly imagePullPrincipalType?: ImagePullPrincipalType;
    /**
     * The secretsManagerCredentials for access to a private registry.
     *
     * @default no credentials will be used
     */
    readonly secretsManagerCredentials?: secretsmanager.ISecret;
    /**
     * An optional ECR repository that the image is hosted in.
     *
     * @default no repository
     */
    readonly repository?: ecr.IRepository;
    /**
     * Allows the image a chance to validate whether the passed configuration is correct.
     *
     * @param buildEnvironment the current build environment
     */
    validate(buildEnvironment: BuildEnvironment): string[];
    /**
     * Make a buildspec to run the indicated script
     */
    runScriptBuildspec(entrypoint: string): BuildSpec;
}
/** Optional arguments to `IBuildImage.binder` - currently empty. */
export interface BuildImageBindOptions {
}
/** The return type from `IBuildImage.binder` - currently empty. */
export interface BuildImageConfig {
}
/** A variant of `IBuildImage` that allows binding to the project. */
export interface IBindableBuildImage extends IBuildImage {
    /** Function that allows the build image access to the construct tree. */
    bind(scope: Construct, project: IProject, options: BuildImageBindOptions): BuildImageConfig;
}
/**
 * The options when creating a CodeBuild Docker build image
 * using `LinuxBuildImage.fromDockerRegistry`,
 * `WindowsBuildImage.fromDockerRegistry`,
 * or `MacBuildImage.fromDockerRegistry`
 */
export interface DockerImageOptions {
    /**
     * The credentials, stored in Secrets Manager,
     * used for accessing the repository holding the image,
     * if the repository is private.
     *
     * @default no credentials will be used (we assume the repository is public)
     */
    readonly secretsManagerCredentials?: secretsmanager.ISecret;
}
/**
 * A CodeBuild image running x86-64 Linux.
 *
 * This class has a bunch of public constants that represent the most popular images.
 *
 * You can also specify a custom image using one of the static methods:
 *
 * - LinuxBuildImage.fromDockerRegistry(image[, { secretsManagerCredentials }])
 * - LinuxBuildImage.fromEcrRepository(repo[, tag])
 * - LinuxBuildImage.fromAsset(parent, id, props)
 *
 *
 * @see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-available.html
 */
export declare class LinuxBuildImage implements IBuildImage {
    /** @deprecated Use {@link LinuxBuildImage.STANDARD_7_0} instead. */
    static readonly STANDARD_1_0: IBuildImage;
    /** @deprecated Use {@link LinuxBuildImage.STANDARD_7_0} instead. */
    static readonly STANDARD_2_0: IBuildImage;
    /** @deprecated Use {@link LinuxBuildImage.STANDARD_7_0} instead. */
    static readonly STANDARD_3_0: IBuildImage;
    /**
     * The `aws/codebuild/standard:4.0` build image.
     * @deprecated Use {@link LinuxBuildImage.STANDARD_7_0} instead.
     * */
    static readonly STANDARD_4_0: IBuildImage;
    /** The `aws/codebuild/standard:5.0` build image. */
    static readonly STANDARD_5_0: IBuildImage;
    /** The `aws/codebuild/standard:6.0` build image. */
    static readonly STANDARD_6_0: IBuildImage;
    /** The `aws/codebuild/standard:7.0` build image. */
    static readonly STANDARD_7_0: IBuildImage;
    /** @deprecated Use {@link LinuxBuildImage.AMAZON_LINUX_2_5} instead. */
    static readonly AMAZON_LINUX_2: IBuildImage;
    /** @deprecated Use {@link LinuxBuildImage.AMAZON_LINUX_2_5} instead. */
    static readonly AMAZON_LINUX_2_2: IBuildImage;
    /**
     * The Amazon Linux 2 x86_64 standard image, version `3.0`.
     * @deprecated Use {@link LinuxBuildImage.AMAZON_LINUX_2_5} instead.
     * */
    static readonly AMAZON_LINUX_2_3: IBuildImage;
    /** The Amazon Linux 2 x86_64 standard image, version `4.0`. */
    static readonly AMAZON_LINUX_2_4: IBuildImage;
    /** The Amazon Linux 2023 x86_64 standard image, version `5.0`. */
    static readonly AMAZON_LINUX_2_5: IBuildImage;
    /** The Amazon Linux 2023 x86_64 standard image, version `4.0`. */
    static readonly AMAZON_LINUX_2023_4: IBuildImage;
    /** The Amazon Linux 2023 x86_64 standard image, version `5.0`. */
    static readonly AMAZON_LINUX_2023_5: IBuildImage;
    /** The Amazon Coretto 8 image x86_64, based on Amazon Linux 2. */
    static readonly AMAZON_LINUX_2_CORETTO_8: IBuildImage;
    /** The Amazon Coretto 11 image x86_64, based on Amazon Linux 2. */
    static readonly AMAZON_LINUX_2_CORETTO_11: IBuildImage;
    /** The Amazon Coretto 8 image x86_64, based on Amazon Linux 2023. */
    static readonly AMAZON_LINUX_2023_CORETTO_8: IBuildImage;
    /** The Amazon Coretto 11 image x86_64, based on Amazon Linux 2023. */
    static readonly AMAZON_LINUX_2023_CORETTO_11: IBuildImage;
    /**
     * Image "aws/codebuild/amazonlinux2-aarch64-standard:1.0".
     * @see {LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_1_0}
     *
     * @deprecated Use {@link LinuxArmBuildImage.AMAZON_LINUX_2_ARM_3} instead.
     **/
    static readonly AMAZON_LINUX_2_ARM: IBuildImage;
    /**
     * Image "aws/codebuild/amazonlinux2-aarch64-standard:2.0".
     * @see {LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_2_0}
     * */
    static readonly AMAZON_LINUX_2_ARM_2: IBuildImage;
    /**
     * Image "aws/codebuild/amazonlinux2-aarch64-standard:3.0".
     * @see {LinuxArmBuildImage.AMAZON_LINUX_2_STANDARD_3_0}
     * */
    static readonly AMAZON_LINUX_2_ARM_3: IBuildImage;
    /**
     * @returns a x86-64 Linux build image from a Docker Hub image.
     */
    static fromDockerRegistry(name: string, options?: DockerImageOptions): IBuildImage;
    /**
     * @returns A x86-64 Linux build image from an ECR repository.
     *
     * NOTE: if the repository is external (i.e. imported), then we won't be able to add
     * a resource policy statement for it so CodeBuild can pull the image.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-ecr.html
     *
     * @param repository The ECR repository
     * @param tagOrDigest Image tag or digest (default "latest", digests must start with `sha256:`)
     */
    static fromEcrRepository(repository: ecr.IRepository, tagOrDigest?: string): IBuildImage;
    /**
     * Uses an Docker image asset as a x86-64 Linux build image.
     */
    static fromAsset(scope: Construct, id: string, props: DockerImageAssetProps): IBuildImage;
    /**
     * Uses a Docker image provided by CodeBuild.
     *
     * @returns A Docker image provided by CodeBuild.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-available.html
     *
     * @param id The image identifier
     * @example 'aws/codebuild/standard:4.0'
     */
    static fromCodeBuildImageId(id: string): IBuildImage;
    private static codeBuildImage;
    readonly type: string;
    readonly defaultComputeType = ComputeType.SMALL;
    readonly imageId: string;
    readonly imagePullPrincipalType?: ImagePullPrincipalType;
    readonly secretsManagerCredentials?: secretsmanager.ISecret;
    readonly repository?: ecr.IRepository;
    private constructor();
    validate(env: BuildEnvironment): string[];
    runScriptBuildspec(entrypoint: string): BuildSpec;
}
/**
 * Environment type for Windows Docker images
 */
export declare enum WindowsImageType {
    /**
     * The standard environment type, WINDOWS_CONTAINER
     */
    STANDARD = "WINDOWS_CONTAINER",
    /**
     * The WINDOWS_SERVER_2019_CONTAINER environment type
     */
    SERVER_2019 = "WINDOWS_SERVER_2019_CONTAINER",
    /**
     * The WINDOWS_SERVER_2022_CONTAINER environment type
     *
     * Notice: Cannot be used with on-demand compute, only with a {@link BuildEnvironment.fleet}.
     *
     * @see https://github.com/aws/aws-cdk/issues/29617
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/fleets.html
     */
    SERVER_2022 = "WINDOWS_SERVER_2022_CONTAINER"
}
/**
 * A CodeBuild image running Windows.
 *
 * This class has a bunch of public constants that represent the most popular images.
 *
 * You can also specify a custom image using one of the static methods:
 *
 * - WindowsBuildImage.fromDockerRegistry(image[, { secretsManagerCredentials }, imageType])
 * - WindowsBuildImage.fromEcrRepository(repo[, tag, imageType])
 * - WindowsBuildImage.fromAsset(parent, id, props, [, imageType])
 *
 * @see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-available.html
 */
export declare class WindowsBuildImage implements IBuildImage {
    /**
     * The standard CodeBuild image `aws/codebuild/windows-base:2.0`, which is
     * based off Windows Server Core 2016.
     *
     * @deprecated {@link WindowsBuildImage.WIN_SERVER_CORE_2019_BASE_3_0} should be used instead.
     */
    static readonly WINDOWS_BASE_2_0: IBuildImage;
    /**
     * The standard CodeBuild image `aws/codebuild/windows-base:2019-1.0`, which is
     * based off Windows Server Core 2019.
     */
    static readonly WIN_SERVER_CORE_2019_BASE: IBuildImage;
    /**
     * The standard CodeBuild image `aws/codebuild/windows-base:2019-2.0`, which is
     * based off Windows Server Core 2019.
     */
    static readonly WIN_SERVER_CORE_2019_BASE_2_0: IBuildImage;
    /**
     * The standard CodeBuild image `aws/codebuild/windows-base:2019-3.0`, which is
     * based off Windows Server Core 2019.
     */
    static readonly WIN_SERVER_CORE_2019_BASE_3_0: IBuildImage;
    /**
     * The standard CodeBuild image `aws/codebuild/windows-base:2022-1.0`, which is
     * based off Windows Server Core 2022.
     *
     * Notice: Cannot be used with on-demand compute, only with a {@link BuildEnvironment.fleet}.
     *
     * @see https://github.com/aws/aws-cdk/issues/29617
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/fleets.html
     */
    static readonly WIN_SERVER_CORE_2022_BASE_3_0: IBuildImage;
    /**
     * @returns a Windows build image from a Docker Hub image.
     */
    static fromDockerRegistry(name: string, options?: DockerImageOptions, imageType?: WindowsImageType): IBuildImage;
    /**
     * @returns A Windows build image from an ECR repository.
     *
     * NOTE: if the repository is external (i.e. imported), then we won't be able to add
     * a resource policy statement for it so CodeBuild can pull the image.
     *
     * @see https://docs.aws.amazon.com/codebuild/latest/userguide/sample-ecr.html
     *
     * @param repository The ECR repository
     * @param tagOrDigest Image tag or digest (default "latest", digests must start with `sha256:`)
     */
    static fromEcrRepository(repository: ecr.IRepository, tagOrDigest?: string, imageType?: WindowsImageType): IBuildImage;
    /**
     * Uses an Docker image asset as a Windows build image.
     */
    static fromAsset(scope: Construct, id: string, props: DockerImageAssetProps, imageType?: WindowsImageType): IBuildImage;
    readonly type: string;
    readonly defaultComputeType = ComputeType.MEDIUM;
    readonly imageId: string;
    readonly imagePullPrincipalType?: ImagePullPrincipalType;
    readonly secretsManagerCredentials?: secretsmanager.ISecret;
    readonly repository?: ecr.IRepository;
    private constructor();
    validate(buildEnvironment: BuildEnvironment): string[];
    runScriptBuildspec(entrypoint: string): BuildSpec;
}
/**
 * A CodeBuild image running ARM MacOS.
 *
 * This class has a bunch of public constants that represent the most popular images.
 *
 * You can also specify a custom image using one of the static methods:
 *
 * - MacBuildImage.fromDockerRegistry(image[, { secretsManagerCredentials }])
 * - MacBuildImage.fromEcrRepository(repo[, tag])
 * - MacBuildImage.fromAsset(parent, id, props)
 *
 *
 * @see https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-available.html
 */
export declare class MacBuildImage implements IBuildImage {
    /**
     * Corresponds to the standard CodeBuild image `aws/codebuild/macos-arm-base:14`.
     */
    static readonly BASE_14: IBuildImage;
    /**
     * Corresponds to the CodeBuild image `aws/codebuild/macos-arm-base:15`.
     */
    static readonly BASE_15: IBuildImage;
    /**
     * Corresponds to the CodeBuild image `aws/codebuild/macos-arm-base:26`.
     */
    static readonly BASE_26: IBuildImage;
    /**
     * Makes an ARM MacOS build image from a Docker Hub image.
     */
    static fromDockerRegistry(name: string, options?: DockerImageOptions): IBuildImage;
    /**
     * Makes an ARM MacOS build image from an ECR repository.
     */
    static fromEcrRepository(repository: ecr.IRepository, tagOrDigest?: string): IBuildImage;
    /**
     * Uses an Docker image asset as a ARM MacOS build image.
     */
    static fromAsset(scope: Construct, id: string, props: DockerImageAssetProps): IBuildImage;
    readonly type: string;
    readonly defaultComputeType = ComputeType.MEDIUM;
    readonly imageId: string;
    readonly imagePullPrincipalType?: ImagePullPrincipalType;
    readonly secretsManagerCredentials?: secretsmanager.ISecret;
    readonly repository?: ecr.IRepository;
    private constructor();
    validate(buildEnvironment: BuildEnvironment): string[];
    runScriptBuildspec(entrypoint: string): BuildSpec;
}
export interface BuildEnvironmentVariable {
    /**
     * The type of environment variable.
     * @default PlainText
     */
    readonly type?: BuildEnvironmentVariableType;
    /**
     * The value of the environment variable.
     * For plain-text variables (the default), this is the literal value of variable.
     * For SSM parameter variables, pass the name of the parameter here (`parameterName` property of `IParameter`).
     * For SecretsManager variables secrets, pass either the secret name (`secretName` property of `ISecret`)
     * or the secret ARN (`secretArn` property of `ISecret`) here,
     * along with optional SecretsManager qualifiers separated by ':', like the JSON key, or the version or stage
     * (see https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec.env.secrets-manager for details).
     */
    readonly value: any;
}
export declare enum BuildEnvironmentVariableType {
    /**
     * An environment variable in plaintext format.
     */
    PLAINTEXT = "PLAINTEXT",
    /**
     * An environment variable stored in Systems Manager Parameter Store.
     */
    PARAMETER_STORE = "PARAMETER_STORE",
    /**
     * An environment variable stored in AWS Secrets Manager.
     */
    SECRETS_MANAGER = "SECRETS_MANAGER"
}
/**
 * Specifies the visibility of the project's builds.
 */
export declare enum ProjectVisibility {
    /**
     * The project builds are visible to the public.
     */
    PUBLIC_READ = "PUBLIC_READ",
    /**
     * The project builds are not visible to the public.
     */
    PRIVATE = "PRIVATE"
}
/**
 * The list of event types for AWS Codebuild
 * @see https://docs.aws.amazon.com/dtconsole/latest/userguide/concepts.html#events-ref-buildproject
 */
export declare enum ProjectNotificationEvents {
    /**
     * Trigger notification when project build state failed
     */
    BUILD_FAILED = "codebuild-project-build-state-failed",
    /**
     * Trigger notification when project build state succeeded
     */
    BUILD_SUCCEEDED = "codebuild-project-build-state-succeeded",
    /**
     * Trigger notification when project build state in progress
     */
    BUILD_IN_PROGRESS = "codebuild-project-build-state-in-progress",
    /**
     * Trigger notification when project build state stopped
     */
    BUILD_STOPPED = "codebuild-project-build-state-stopped",
    /**
     * Trigger notification when project build phase failure
     */
    BUILD_PHASE_FAILED = "codebuild-project-build-phase-failure",
    /**
     * Trigger notification when project build phase success
     */
    BUILD_PHASE_SUCCEEDED = "codebuild-project-build-phase-success"
}
export {};
