import * as cxapi from "../../../cx-api";
import { AssetType } from './asset-type';
import { Step } from './step';
/**
 * (experimental) Properties for a `StackDeployment`.
 *
 * @experimental
 */
export interface StackDeploymentProps {
    /**
     * (experimental) Artifact ID for this stack.
     *
     * @experimental
     */
    readonly stackArtifactId: string;
    /**
     * (experimental) Construct path for this stack.
     *
     * @experimental
     */
    readonly constructPath: string;
    /**
     * (experimental) Name for this stack.
     *
     * @experimental
     */
    readonly stackName: string;
    /**
     * (experimental) Region where the stack should be deployed.
     *
     * @default - Pipeline region
     * @experimental
     */
    readonly region?: string;
    /**
     * (experimental) Account where the stack should be deployed.
     *
     * @default - Pipeline account
     * @experimental
     */
    readonly account?: string;
    /**
     * (experimental) Role to assume before deploying this stack.
     *
     * @default - Don't assume any role
     * @experimental
     */
    readonly assumeRoleArn?: string;
    /**
     * (experimental) Execution role to pass to CloudFormation.
     *
     * @default - No execution role
     * @experimental
     */
    readonly executionRoleArn?: string;
    /**
     * (experimental) Tags to apply to the stack.
     *
     * @default - No tags
     * @experimental
     */
    readonly tags?: Record<string, string>;
    /**
     * (experimental) Template path on disk to cloud assembly (cdk.out).
     *
     * @experimental
     */
    readonly absoluteTemplatePath: string;
    /**
     * (experimental) Assets referenced by this stack.
     *
     * @default - No assets
     * @experimental
     */
    readonly assets?: StackAsset[];
    /**
     * (experimental) The S3 URL which points to the template asset location in the publishing bucket.
     *
     * @default - Stack template is not published
     * @experimental
     */
    readonly templateS3Uri?: string;
}
/**
 * (experimental) Deployment of a single Stack.
 *
 * You don't need to instantiate this class -- it will
 * be automatically instantiated as necessary when you
 * add a `Stage` to a pipeline.
 *
 * @experimental
 */
export declare class StackDeployment {
    /**
     * (experimental) Build a `StackDeployment` from a Stack Artifact in a Cloud Assembly.
     *
     * @experimental
     */
    static fromArtifact(stackArtifact: cxapi.CloudFormationStackArtifact): StackDeployment;
    /**
     * (experimental) Artifact ID for this stack.
     *
     * @experimental
     */
    readonly stackArtifactId: string;
    /**
     * (experimental) Construct path for this stack.
     *
     * @experimental
     */
    readonly constructPath: string;
    /**
     * (experimental) Name for this stack.
     *
     * @experimental
     */
    readonly stackName: string;
    /**
     * (experimental) Region where the stack should be deployed.
     *
     * @default - Pipeline region
     * @experimental
     */
    readonly region?: string;
    /**
     * (experimental) Account where the stack should be deployed.
     *
     * @default - Pipeline account
     * @experimental
     */
    readonly account?: string;
    /**
     * (experimental) Role to assume before deploying this stack.
     *
     * @default - Don't assume any role
     * @experimental
     */
    readonly assumeRoleArn?: string;
    /**
     * (experimental) Execution role to pass to CloudFormation.
     *
     * @default - No execution role
     * @experimental
     */
    readonly executionRoleArn?: string;
    /**
     * (experimental) Tags to apply to the stack.
     *
     * @experimental
     */
    readonly tags: Record<string, string>;
    /**
     * (experimental) Assets referenced by this stack.
     *
     * @experimental
     */
    readonly assets: StackAsset[];
    /**
     * (experimental) Other stacks this stack depends on.
     *
     * @experimental
     */
    readonly stackDependencies: StackDeployment[];
    /**
     * (experimental) The asset that represents the CloudFormation template for this stack.
     *
     * @experimental
     */
    readonly templateAsset?: StackAsset;
    /**
     * (experimental) The S3 URL which points to the template asset location in the publishing bucket.
     *
     * This is `undefined` if the stack template is not published. Use the
     * `DefaultStackSynthesizer` to ensure it is.
     *
     * @experimental
     * @example
     *
     * https://bucket.s3.amazonaws.com/object/key
     */
    readonly templateUrl?: string;
    /**
     * (experimental) Template path on disk to CloudAssembly.
     *
     * @experimental
     */
    readonly absoluteTemplatePath: string;
    /**
     * (experimental) Steps that take place before stack is prepared.
     *
     * If your pipeline engine disables 'prepareStep', then this will happen before stack deploys
     *
     * @experimental
     */
    readonly pre: Step[];
    /**
     * (experimental) Steps that take place after stack is prepared but before stack deploys.
     *
     * Your pipeline engine may not disable `prepareStep`.
     *
     * @experimental
     */
    readonly changeSet: Step[];
    /**
     * (experimental) Steps to execute after stack deploys.
     *
     * @experimental
     */
    readonly post: Step[];
    private constructor();
    /**
     * (experimental) Add a dependency on another stack.
     *
     * @experimental
     */
    addStackDependency(stackDeployment: StackDeployment): void;
    /**
     * (experimental) Adds steps to each phase of the stack.
     *
     * @param pre steps executed before stack.prepare.
     * @param changeSet steps executed after stack.prepare and before stack.deploy.
     * @param post steps executed after stack.deploy.
     * @experimental
     */
    addStackSteps(pre: Step[], changeSet: Step[], post: Step[]): void;
}
/**
 * (experimental) An asset used by a Stack.
 *
 * @experimental
 */
export interface StackAsset {
    /**
     * (experimental) Absolute asset manifest path.
     *
     * This needs to be made relative at a later point in time, but when this
     * information is parsed we don't know about the root cloud assembly yet.
     *
     * @experimental
     */
    readonly assetManifestPath: string;
    /**
     * (experimental) Asset identifier.
     *
     * @experimental
     */
    readonly assetId: string;
    /**
     * (experimental) Asset selector to pass to `cdk-assets`.
     *
     * @experimental
     */
    readonly assetSelector: string;
    /**
     * (experimental) Type of asset to publish.
     *
     * @experimental
     */
    readonly assetType: AssetType;
    /**
     * (experimental) Role ARN to assume to publish.
     *
     * @default - No need to assume any role
     * @experimental
     */
    readonly assetPublishingRoleArn?: string;
    /**
     * (experimental) Does this asset represent the CloudFormation template for the stack.
     *
     * @default false
     * @experimental
     */
    readonly isTemplate: boolean;
}
