private static async _getSqlPackageExecutablePath()

in src/AzureSqlActionHelper.ts [142:186]


    private static async _getSqlPackageExecutablePath(): Promise<string> {
        core.debug('Getting location of SqlPackage');
        let sqlPackageVersions: ISqlPackageInstall[] = [];

        let sqlPackagePathInstalledWithDotnetTool = await this._getSqlPackageExeInstalledDotnetTool();
        if (sqlPackagePathInstalledWithDotnetTool === undefined || sqlPackagePathInstalledWithDotnetTool.sqlPackagePath === '') {
            core.debug('SqlPackage installed with dotnet tool not found on machine.');
        } else {
            sqlPackageVersions.push(sqlPackagePathInstalledWithDotnetTool);
        }

        let sqlPackagePathInstalledWithSSMS = await this._getSqlPackageInstalledWithSSMS();
        if (sqlPackagePathInstalledWithSSMS === undefined || sqlPackagePathInstalledWithSSMS.sqlPackagePath === '') {
            core.debug('SqlPackage installed with SSMS not found on machine.');
        } else {
            sqlPackageVersions.push(sqlPackagePathInstalledWithSSMS);
        }

        let sqlPackagePathInstalledWithDacMsi = await this._getSqlPackageInstalledWithDacMsi();
        if (sqlPackagePathInstalledWithDacMsi === undefined || sqlPackagePathInstalledWithDacMsi.sqlPackagePath === '') {
            core.debug('SqlPackage installed with DacFramework MSI not found on machine.');
        } else {
            sqlPackageVersions.push(sqlPackagePathInstalledWithDacMsi);
        }

        let sqlPackagePathInstalledWithSSDT = await this._getSqlPackageInstalledWithSSDT();
        if (sqlPackagePathInstalledWithSSDT === undefined || sqlPackagePathInstalledWithSSDT.sqlPackagePath === '') {
            core.debug('SqlPackage installed with SSDT not found on machine.');
        } else {
            sqlPackageVersions.push(sqlPackagePathInstalledWithSSDT);
        }

        // sort the versions in ascending order, remove max version from the end
        sqlPackageVersions.sort((sqlPackage1, sqlPackage2) => {
            return semver.compareBuild(sqlPackage2.sqlPackageVersion, sqlPackage1.sqlPackageVersion);
        });
        let maximumVersion = sqlPackageVersions.pop();

        if (maximumVersion === undefined || maximumVersion.sqlPackagePath === '') {
            throw new Error('Unable to find the location of SqlPackage');
        }

        core.debug(`SqlPackage ${maximumVersion.sqlPackageVersion} selected at location: ${maximumVersion.sqlPackagePath}`);
        return maximumVersion.sqlPackagePath;
    }