import { Stage } from "../../../core";
import { Construct } from 'constructs';
import { AddStageOpts as StageOptions, WaveOptions, Wave, IFileSetProducer, FileSet } from '../blueprint';
/**
 * (experimental) Properties for a `Pipeline`.
 *
 * @experimental
 */
export interface PipelineBaseProps {
    /**
     * (experimental) The build step that produces the CDK Cloud Assembly.
     *
     * The primary output of this step needs to be the `cdk.out` directory
     * generated by the `cdk synth` command.
     *
     * If you use a `ShellStep` here and you don't configure an output directory,
     * the output directory will automatically be assumed to be `cdk.out`.
     *
     * @experimental
     */
    readonly synth: IFileSetProducer;
}
/**
 * (experimental) A generic CDK Pipelines pipeline.
 *
 * Different deployment systems will provide subclasses of `Pipeline` that generate
 * the deployment infrastructure necessary to deploy CDK apps, specific to that system.
 *
 * This library comes with the `CodePipeline` class, which uses AWS CodePipeline
 * to deploy CDK apps.
 *
 * The actual pipeline infrastructure is constructed (by invoking the engine)
 * when `buildPipeline()` is called, or when `app.synth()` is called (whichever
 * happens first).
 *
 * @experimental
 */
export declare abstract class PipelineBase extends Construct {
    /**
     * (experimental) The build step that produces the CDK Cloud Assembly.
     *
     * @experimental
     */
    readonly synth: IFileSetProducer;
    /**
     * (experimental) The waves in this pipeline.
     *
     * @experimental
     */
    readonly waves: Wave[];
    /**
     * (experimental) The FileSet tha contains the cloud assembly.
     *
     * This is the primary output of the synth step.
     *
     * @experimental
     */
    readonly cloudAssemblyFileSet: FileSet;
    private built;
    /**
     * @experimental
     */
    constructor(scope: Construct, id: string, props: PipelineBaseProps);
    /**
     * (experimental) Deploy a single Stage by itself.
     *
     * Add a Stage to the pipeline, to be deployed in sequence with other
     * Stages added to the pipeline. All Stacks in the stage will be deployed
     * in an order automatically determined by their relative dependencies.
     *
     * @experimental
     */
    addStage(stage: Stage, options?: StageOptions): import("../blueprint").StageDeployment;
    /**
     * (experimental) Add a Wave to the pipeline, for deploying multiple Stages in parallel.
     *
     * Use the return object of this method to deploy multiple stages in parallel.
     *
     * Example:
     *
     * ```ts
     * declare const pipeline: pipelines.CodePipeline;
     *
     * const wave = pipeline.addWave('MyWave');
     * wave.addStage(new MyApplicationStage(this, 'Stage1'));
     * wave.addStage(new MyApplicationStage(this, 'Stage2'));
     * ```
     *
     * @experimental
     */
    addWave(id: string, options?: WaveOptions): Wave;
    /**
     * (experimental) Send the current pipeline definition to the engine, and construct the pipeline.
     *
     * It is not possible to modify the pipeline after calling this method.
     *
     * @experimental
     */
    buildPipeline(): void;
    /**
     * (experimental) Implemented by subclasses to do the actual pipeline construction.
     *
     * @experimental
     */
    protected abstract doBuildPipeline(): void;
    /**
     * Automatically call 'build()' just before synthesis if the user hasn't explicitly called it yet
     */
    private buildJustInTime;
}
