import { Logger } from '@flxbl-io/sfp-logger';
import { Stage } from '../Stage';
import SfpPackage from '../../core/package/SfpPackage';
import { PostDeployHook } from './PostDeployHook';
import { PreDeployHook } from './PreDeployHook';
export declare enum DeploymentMode {
    NORMAL = 0,
    SOURCEPACKAGES = 1,
    SOURCEPACKAGES_PUSH = 2
}
export interface DeployProps {
    targetUsername: string;
    artifactDir: string;
    deploymentMode: DeploymentMode;
    isTestsToBeTriggered: boolean;
    skipIfPackageInstalled: boolean;
    logsGroupSymbol?: string[];
    waitTime: number;
    tags?: any;
    logger?: Logger;
    currentStage?: Stage;
    baselineOrg?: string;
    isDryRun?: boolean;
    isRetryOnFailure?: boolean;
    promotePackagesBeforeDeploymentToOrg?: string;
    devhubUserName?: string;
    disableArtifactCommit?: boolean;
    selectiveComponentDeployment?: boolean;
    maxRetryCount?: number;
    releaseConfigPath?: string;
    filterByProvidedArtifacts?: string[];
    impactedPackagesAsPerBranch?: Map<string, string[]>;
}
export default class DeployImpl {
    private props;
    private _postDeployHook;
    private _preDeployHook;
    private targetOrg;
    constructor(props: DeployProps);
    set postDeployHook(hook: PostDeployHook);
    set preDeployHook(hook: PreDeployHook);
    exec(): Promise<DeploymentResult>;
    private filterSfPPackagesBasedOnReleaseConfig;
    private filterSfPPackagesBasedOnArtifacts;
    private generateSfpPackageFromArtifacts;
    private promotePackagesBeforeInstallation;
    private displayRetryHeader;
    private displayHeader;
    private displayTestInfoHeader;
    private printArtifactVersionsWhenSkipped;
    private printArtifactVersions;
    private filterByPackagesInstalledInTheOrg;
    /**
     * Returns map of package name to package info
     * @param artifacts
     */
    private getPackagesToPackageInfo;
    /**
     * Decider for which package installation type to run
     */
    private installPackage;
    /**
     * Checks if package should be installed to target username
     * @param packageDescriptor
     */
    private isSkipDeployment;
    private isOptimizedDeploymentForSourcePackage;
    /**
     * Returns the packages in the project config that have an artifact
     */
    private getPackagesToDeploy;
}
export interface PackageInfo {
    sourceDirectory: string;
    sfpPackage: SfpPackage;
    versionInstalledInOrg?: string;
    isPackageInstalled?: boolean;
}
export interface DeploymentResult {
    scheduled: number;
    queue: any[];
    packagesToPackageInfo: {
        [p: string]: PackageInfo;
    };
    deployed: PackageInfo[];
    failed: PackageInfo[];
    error: any;
}
