import type { BaseDeployOptions } from './private/deploy-options';
import type { Tag } from '../../api/tags';
export type DeploymentMethod = DirectDeploymentMethod | ChangeSetDeploymentMethod;
export interface DirectDeploymentMethod {
    /**
     * Use stack APIs to the deploy stack changes
     */
    readonly method: 'direct';
}
export interface ChangeSetDeploymentMethod {
    /**
     * Use change-set APIS to deploy a stack changes
     */
    readonly method: 'change-set';
    /**
     * Whether to execute the changeset or leave it in review.
     *
     * @default true
     */
    readonly execute?: boolean;
    /**
     * Optional name to use for the CloudFormation change set.
     * If not provided, a name will be generated automatically.
     */
    readonly changeSetName?: string;
}
/**
 * When to build assets
 */
export declare enum AssetBuildTime {
    /**
     * Build all assets before deploying the first stack
     *
     * This is intended for expensive Docker image builds; so that if the Docker image build
     * fails, no stacks are unnecessarily deployed (with the attendant wait time).
     */
    ALL_BEFORE_DEPLOY = "all-before-deploy",
    /**
     * Build assets just-in-time, before publishing
     */
    JUST_IN_TIME = "just-in-time"
}
export declare enum HotswapMode {
    /**
     * Will fall back to CloudFormation when a non-hotswappable change is detected
     */
    FALL_BACK = "fall-back",
    /**
     * Will not fall back to CloudFormation when a non-hotswappable change is detected
     */
    HOTSWAP_ONLY = "hotswap-only",
    /**
     * Will not attempt to hotswap anything and instead go straight to CloudFormation
     */
    FULL_DEPLOYMENT = "full-deployment"
}
export declare class StackParameters {
    /**
     * Use only existing parameters on the stack.
     */
    static onlyExisting(): StackParameters;
    /**
     * Use exactly these parameters and remove any other existing parameters from the stack.
     */
    static exactly(params: {
        [name: string]: string | undefined;
    }): StackParameters;
    /**
     * Define additional parameters for the stack, while keeping existing parameters for unspecified values.
     */
    static withExisting(params: {
        [name: string]: string | undefined;
    }): StackParameters;
    readonly parameters: Map<string, string | undefined>;
    readonly keepExistingParameters: boolean;
    private constructor();
}
export interface DeployOptions extends BaseDeployOptions {
    /**
     * ARNs of SNS topics that CloudFormation will notify with stack related events
     */
    readonly notificationArns?: string[];
    /**
     * Tags to pass to CloudFormation for deployment
     */
    readonly tags?: Tag[];
    /**
     * Stack parameters for CloudFormation used at deploy time
     * @default StackParameters.onlyExisting()
     */
    readonly parameters?: StackParameters;
    /**
     * Path to file where stack outputs will be written after a successful deploy as JSON
     * @default - Outputs are not written to any file
     */
    readonly outputsFile?: string;
    /**
     * Build/publish assets for a single stack in parallel
     *
     * Independent of whether stacks are being done in parallel or no.
     *
     * @default true
     */
    readonly assetParallelism?: boolean;
    /**
     * When to build assets
     *
     * The default is the Docker-friendly default.
     *
     * @default AssetBuildTime.ALL_BEFORE_DEPLOY
     */
    readonly assetBuildTime?: AssetBuildTime;
    /**
     * Represents configuration property overrides for hotswap deployments.
     * Currently only supported by ECS.
     *
     * @default - no overrides
     */
    readonly hotswapProperties?: HotswapProperties;
}
/**
 * Property overrides for ECS hotswaps
 */
export interface EcsHotswapProperties {
    /**
     * The lower limit on the number of your service's tasks that must remain
     * in the RUNNING state during a deployment, as a percentage of the desiredCount.
     */
    readonly minimumHealthyPercent: number;
    /**
     * The upper limit on the number of your service's tasks that are allowed
     * in the RUNNING or PENDING state during a deployment, as a percentage of the desiredCount.
     */
    readonly maximumHealthyPercent: number;
}
/**
 * Property overrides for hotswap deployments.
 */
export interface HotswapProperties {
    /**
     * ECS specific hotswap property overrides
     */
    readonly ecs: EcsHotswapProperties;
}
