Fix path resolution

Looking for vswhere in the PATH was never triggered and had some bugs (like failing unconditionally if the code path was executed).
This commit is contained in:
Heath Stewart 2020-04-21 16:27:45 -07:00
parent 0ddbddf06e
commit 9499ca8787
2 changed files with 27 additions and 16 deletions

16
dist/index.js vendored
View File

@ -977,8 +977,7 @@ const path = __importStar(__webpack_require__(622));
const io = __importStar(__webpack_require__(1));
const IS_WINDOWS = process.platform === 'win32';
const VS_VERSION = core.getInput('vs-version') || 'latest';
const VSWHERE_PATH = core.getInput('vswhere-path') ||
path.join(process.env['ProgramFiles(x86)'], 'Microsoft Visual Studio\\Installer');
const VSWHERE_PATH = core.getInput('vswhere-path');
// if a specific version of VS is requested
let VSWHERE_EXEC = '-products * -requires Microsoft.Component.MSBuild -property installationPath -latest ';
if (VS_VERSION !== 'latest') {
@ -1007,12 +1006,17 @@ function run() {
vswhereToolExe = path.join(vsWhereInPath, 'vswhere.exe');
}
catch (_a) {
// wasn't found because which threw
}
finally {
core.setFailed('setup-msbuild requires the path to where vswhere.exe exists');
// check for VS-installed path
const vsWhereInInstallerPath = path.join(process.env['ProgramFiles(x86)'], 'Microsoft Visual Studio\\Installer\\vswhere.exe');
if (fs.existsSync(vsWhereInInstallerPath)) {
vswhereToolExe = vsWhereInInstallerPath;
}
}
}
if (!fs.existsSync(vswhereToolExe)) {
core.setFailed('setup-msbuild requires the path to where vswhere.exe exists');
return;
}
core.debug(`Full tool exe: ${vswhereToolExe}`);
let foundToolPath = '';
const options = {};

View File

@ -7,12 +7,7 @@ import {ExecOptions} from '@actions/exec/lib/interfaces'
const IS_WINDOWS = process.platform === 'win32'
const VS_VERSION = core.getInput('vs-version') || 'latest'
const VSWHERE_PATH =
core.getInput('vswhere-path') ||
path.join(
process.env['ProgramFiles(x86)'] as string,
'Microsoft Visual Studio\\Installer'
)
const VSWHERE_PATH = core.getInput('vswhere-path')
// if a specific version of VS is requested
let VSWHERE_EXEC = '-products * -requires Microsoft.Component.MSBuild -property installationPath -latest '
@ -43,14 +38,26 @@ async function run(): Promise<void> {
core.debug(`Found tool in PATH: ${vsWhereInPath}`)
vswhereToolExe = path.join(vsWhereInPath, 'vswhere.exe')
} catch {
// wasn't found because which threw
} finally {
core.setFailed(
'setup-msbuild requires the path to where vswhere.exe exists'
// check for VS-installed path
const vsWhereInInstallerPath = path.join(
process.env['ProgramFiles(x86)'] as string,
'Microsoft Visual Studio\\Installer\\vswhere.exe'
)
if (fs.existsSync(vsWhereInInstallerPath)) {
vswhereToolExe = vsWhereInInstallerPath
}
}
}
if (!fs.existsSync(vswhereToolExe)) {
core.setFailed(
'setup-msbuild requires the path to where vswhere.exe exists'
)
return
}
core.debug(`Full tool exe: ${vswhereToolExe}`)
let foundToolPath = ''