From 45c9f236cf9a0c09d11298348f6ed06bd81914c0 Mon Sep 17 00:00:00 2001 From: Ivan <98037481+IvanZosimov@users.noreply.github.com> Date: Tue, 4 Oct 2022 10:22:05 +0200 Subject: [PATCH] Enable ability to change .NET SDK installation directory by `DOTNET_INSTALL_DIR` environment variable (#329) --- README.md | 3 ++- dist/index.js | 27 ++++++++++++++++----------- package-lock.json | 4 ++-- package.json | 2 +- src/installer.ts | 37 +++++++++++++++++-------------------- src/utils.ts | 1 - 6 files changed, 38 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index c802711..382465b 100644 --- a/README.md +++ b/README.md @@ -195,6 +195,7 @@ Some environment variables may be necessary for your particular case or to impro | **Env.variable** | **Description** | **Default value** | | ----------- | ----------- | ----------- | +| DOTNET_INSTALL_DIR |Specifies a directory where .NET SDKs should be installed by the action|*isn't set*| | DOTNET_NOLOGO |Removes logo and telemetry message from first run of dotnet cli|*false*| | DOTNET_CLI_TELEMETRY_OPTOUT |Opt-out of telemetry being sent to Microsoft|*false*| | DOTNET_MULTILEVEL_LOOKUP |Configures whether the global install location is used as a fall-back|*true*| @@ -204,7 +205,7 @@ Some environment variables may be necessary for your particular case or to impro build: runs-on: ubuntu-latest env: - DOTNET_NOLOGO: true + DOTNET_INSTALL_DIR: "path/to/directory" steps: - uses: actions/checkout@main - uses: actions/setup-dotnet@v3 diff --git a/dist/index.js b/dist/index.js index 2176821..59deee9 100644 --- a/dist/index.js +++ b/dist/index.js @@ -333,8 +333,10 @@ class DotnetCoreInstaller { if (process.env['no_proxy'] != null) { scriptArguments.push(`-ProxyBypassList ${process.env['no_proxy']}`); } - scriptArguments.push('-InstallDir', `'${DotnetCoreInstaller.installationDirectoryWindows}'`); - // process.env must be explicitly passed in for DOTNET_INSTALL_DIR to be used + if (!process.env['DOTNET_INSTALL_DIR']) { + process.env['DOTNET_INSTALL_DIR'] = + DotnetCoreInstaller.installationDirectoryWindows; + } scriptPath = (yield io.which('pwsh', false)) || (yield io.which('powershell', true)); scriptArguments = windowsDefaultOptions.concat(scriptArguments); @@ -349,18 +351,22 @@ class DotnetCoreInstaller { if (this.quality) { this.setQuality(dotnetVersion, scriptArguments); } - if (utils_1.IS_LINUX) { - scriptArguments.push('--install-dir', DotnetCoreInstaller.installationDirectoryLinux); - } - if (utils_1.IS_MAC) { - scriptArguments.push('--install-dir', DotnetCoreInstaller.installationDirectoryMac); + if (!process.env['DOTNET_INSTALL_DIR']) { + process.env['DOTNET_INSTALL_DIR'] = utils_1.IS_LINUX + ? DotnetCoreInstaller.installationDirectoryLinux + : DotnetCoreInstaller.installationDirectoryMac; } } - const { exitCode, stdout } = yield exec.getExecOutput(`"${scriptPath}"`, scriptArguments, { ignoreReturnCode: true }); + // process.env must be explicitly passed in for DOTNET_INSTALL_DIR to be used + const getExecOutputOptions = { + ignoreReturnCode: true, + env: process.env + }; + const { exitCode, stdout } = yield exec.getExecOutput(`"${scriptPath}"`, scriptArguments, getExecOutputOptions); if (exitCode) { throw new Error(`Failed to install dotnet ${exitCode}. ${stdout}`); } - return this.outputDotnetVersion(dotnetVersion.value, scriptArguments[scriptArguments.length - 1]); + return this.outputDotnetVersion(dotnetVersion.value, process.env['DOTNET_INSTALL_DIR']); }); } outputDotnetVersion(version, installationPath) { @@ -523,10 +529,9 @@ run(); "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.IS_MAC = exports.IS_LINUX = exports.IS_WINDOWS = void 0; +exports.IS_LINUX = exports.IS_WINDOWS = void 0; exports.IS_WINDOWS = process.platform === 'win32'; exports.IS_LINUX = process.platform === 'linux'; -exports.IS_MAC = process.platform === 'darwin'; /***/ }), diff --git a/package-lock.json b/package-lock.json index 98bc5c5..5459e0f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "setup-dotnet", - "version": "3.0.0", + "version": "3.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "setup-dotnet", - "version": "3.0.0", + "version": "3.0.1", "license": "MIT", "dependencies": { "@actions/core": "^1.9.1", diff --git a/package.json b/package.json index 5838e4d..b58554c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "setup-dotnet", - "version": "3.0.0", + "version": "3.0.1", "private": true, "description": "setup dotnet action", "main": "lib/setup-dotnet.js", diff --git a/src/installer.ts b/src/installer.ts index 041b655..f7730a6 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -7,7 +7,7 @@ import {chmodSync} from 'fs'; import {readdir} from 'fs/promises'; import path from 'path'; import semver from 'semver'; -import {IS_LINUX, IS_WINDOWS, IS_MAC} from './utils'; +import {IS_LINUX, IS_WINDOWS} from './utils'; import {QualityOptions} from './setup-dotnet'; export interface DotnetVersion { @@ -208,11 +208,11 @@ export class DotnetCoreInstaller { scriptArguments.push(`-ProxyBypassList ${process.env['no_proxy']}`); } - scriptArguments.push( - '-InstallDir', - `'${DotnetCoreInstaller.installationDirectoryWindows}'` - ); - // process.env must be explicitly passed in for DOTNET_INSTALL_DIR to be used + if (!process.env['DOTNET_INSTALL_DIR']) { + process.env['DOTNET_INSTALL_DIR'] = + DotnetCoreInstaller.installationDirectoryWindows; + } + scriptPath = (await io.which('pwsh', false)) || (await io.which('powershell', true)); scriptArguments = windowsDefaultOptions.concat(scriptArguments); @@ -229,24 +229,21 @@ export class DotnetCoreInstaller { this.setQuality(dotnetVersion, scriptArguments); } - if (IS_LINUX) { - scriptArguments.push( - '--install-dir', - DotnetCoreInstaller.installationDirectoryLinux - ); - } - - if (IS_MAC) { - scriptArguments.push( - '--install-dir', - DotnetCoreInstaller.installationDirectoryMac - ); + if (!process.env['DOTNET_INSTALL_DIR']) { + process.env['DOTNET_INSTALL_DIR'] = IS_LINUX + ? DotnetCoreInstaller.installationDirectoryLinux + : DotnetCoreInstaller.installationDirectoryMac; } } + // process.env must be explicitly passed in for DOTNET_INSTALL_DIR to be used + const getExecOutputOptions = { + ignoreReturnCode: true, + env: process.env as {string: string} + }; const {exitCode, stdout} = await exec.getExecOutput( `"${scriptPath}"`, scriptArguments, - {ignoreReturnCode: true} + getExecOutputOptions ); if (exitCode) { throw new Error(`Failed to install dotnet ${exitCode}. ${stdout}`); @@ -254,7 +251,7 @@ export class DotnetCoreInstaller { return this.outputDotnetVersion( dotnetVersion.value, - scriptArguments[scriptArguments.length - 1] + process.env['DOTNET_INSTALL_DIR'] ); } diff --git a/src/utils.ts b/src/utils.ts index ff20ee3..77886ce 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,3 +1,2 @@ export const IS_WINDOWS = process.platform === 'win32'; export const IS_LINUX = process.platform === 'linux'; -export const IS_MAC = process.platform === 'darwin';