import { SecretsManagerSecretOptions, aws_codebuild as cbuild, aws_codecommit as ccommit, aws_codepipeline as cpipeline } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { ExternalSecret } from './permissions';
export interface IRepo {
    repositoryUrlHttp: string;
    repositoryUrlSsh: string;
    readonly allowsBadge: boolean;
    readonly tokenSecretArn?: string;
    createBuildSource(parent: Construct, webhook: boolean, options?: BuildSourceOptions): cbuild.ISource;
    createSourceStage(pipeline: cpipeline.Pipeline, branch: string): cpipeline.Artifact;
    describe(): any;
}
export interface BuildSourceOptions {
    /**
     * Single branch
     *
     * Cannot be specified together with `branches`.
     *
     * @default - All branches
     * @deprecated Use `branches` instead.
     */
    branch?: string;
    /**
     * Multiple branches
     *
     * Cannot be specified together with `branch`.
     *
     * @default - All branches
     */
    branches?: string[];
    cloneDepth?: number;
}
export declare class CodeCommitRepo implements IRepo {
    private readonly repository;
    readonly allowsBadge = false;
    readonly tokenSecretArn?: string;
    constructor(repository: ccommit.IRepository);
    createSourceStage(pipeline: cpipeline.Pipeline, branch: string): cpipeline.Artifact;
    get repositoryUrlHttp(): string;
    get repositoryUrlSsh(): string;
    createBuildSource(_: Construct, _webhook: boolean, options?: BuildSourceOptions): cbuild.ISource;
    describe(): any;
}
interface GitHubRepoProps {
    /**
     * Secrets Manager ARN of the OAuth token secret that allows access to your github repo.
     */
    tokenSecretArn: string;
    /**
     * Options for referencing a secret value from Secrets Manager
     */
    tokenSecretOptions?: SecretsManagerSecretOptions;
    /**
     * In the form "account/repo".
     */
    repository: string;
}
export declare class GitHubRepo implements IRepo {
    readonly allowsBadge = true;
    readonly owner: string;
    readonly repo: string;
    readonly tokenSecretArn: string;
    readonly tokenSecretOptions?: SecretsManagerSecretOptions;
    constructor(props: GitHubRepoProps);
    get repositoryUrlHttp(): string;
    get repositoryUrlSsh(): string;
    createSourceStage(pipeline: cpipeline.Pipeline, branch: string): cpipeline.Artifact;
    createBuildSource(_: Construct, webhook: boolean, options?: BuildSourceOptions): cbuild.ISource;
    describe(): string;
    private createWebhookFilters;
}
export interface WritableGitHubRepoProps extends GitHubRepoProps {
    /**
     * SSH key associated with this repository.
     *
     * This is required if you wish to be able to use actions that write to the repo
     * such as docs publishing and automatic bumps.
     */
    sshKeySecret: ExternalSecret;
    /**
     * The username to use for the published commits
     */
    commitUsername: string;
    /**
     * The email address to use for the published commits
     */
    commitEmail: string;
}
export declare class WritableGitHubRepo extends GitHubRepo {
    static isWritableGitHubRepo(repo: IRepo): repo is WritableGitHubRepo;
    readonly sshKeySecret: ExternalSecret;
    readonly commitEmail: string;
    readonly commitUsername: string;
    constructor(props: WritableGitHubRepoProps);
}
export {};
