From efeedaa0ba8cfc5b80dc86a498a6ae0179bd25c7 Mon Sep 17 00:00:00 2001 From: Jason Couture Date: Fri, 12 Jan 2024 20:56:47 -0500 Subject: [PATCH] Explicity set installation path Github actions tool guidelines, is to use the worker tool cache, instead of system-wide install path. --- dist/setup/index.js | 24 +++++++++++++++++++++--- src/installer.ts | 34 +++++++++++++++++++++++++++++----- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index 6070fed..14fa070 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -93164,6 +93164,13 @@ class DotnetInstallScript { this.scriptArguments.push(...args); return this; } + useInstallPath(installPath) { + if (installPath == null) { + installPath = DotnetInstallDir.dirPath; + } + this.useArguments(utils_1.IS_WINDOWS ? '-Install-Dir' : '--install-dir', installPath); + return this; + } useVersion(dotnetVersion, quality) { if (dotnetVersion.type) { this.useArguments(dotnetVersion.type, dotnetVersion.value); @@ -93189,6 +93196,15 @@ class DotnetInstallScript { } exports.DotnetInstallScript = DotnetInstallScript; class DotnetInstallDir { + static getInstallDirectory() { + if (process.env['DOTNET_INSTALL_DIR'] != null) { + return process.env['DOTNET_INSTALL_DIR']; + } + if (process.env['RUNNER_TOOL_CACHE'] != null) { + return path_1.default.join(process.env['RUNNER_TOOL_CACHE'], 'dotnet'); + } + return DotnetInstallDir.default[utils_1.PLATFORM]; + } static convertInstallPathToAbsolute(installDir) { if (path_1.default.isAbsolute(installDir)) return path_1.default.normalize(installDir); @@ -93211,9 +93227,7 @@ DotnetInstallDir.default = { mac: path_1.default.join(process.env['HOME'] + '', '.dotnet'), windows: path_1.default.join(process.env['PROGRAMFILES'] + '', 'dotnet') }; -DotnetInstallDir.dirPath = process.env['DOTNET_INSTALL_DIR'] - ? DotnetInstallDir.convertInstallPathToAbsolute(process.env['DOTNET_INSTALL_DIR']) - : DotnetInstallDir.default[utils_1.PLATFORM]; +DotnetInstallDir.dirPath = DotnetInstallDir.convertInstallPathToAbsolute(DotnetInstallDir.getInstallDirectory()); class DotnetCoreInstaller { constructor(version, quality) { this.version = version; @@ -93234,6 +93248,8 @@ class DotnetCoreInstaller { .useArguments(utils_1.IS_WINDOWS ? '-Runtime' : '--runtime', 'dotnet') // Use latest stable version .useArguments(utils_1.IS_WINDOWS ? '-Channel' : '--channel', 'LTS') + // Explicitly set the install path (see https://github.com/actions/setup-dotnet/issues/360) + .useInstallPath(DotnetInstallDir.dirPath) .execute(); if (runtimeInstallOutput.exitCode) { /** @@ -93251,6 +93267,8 @@ class DotnetCoreInstaller { .useArguments(utils_1.IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files') // Use version provided by user .useVersion(dotnetVersion, this.quality) + // Explicitly set the install path (see https://github.com/actions/setup-dotnet/issues/360) + .useInstallPath(DotnetInstallDir.dirPath) .execute(); if (dotnetInstallOutput.exitCode) { throw new Error(`Failed to install dotnet, exit code: ${dotnetInstallOutput.exitCode}. ${dotnetInstallOutput.stderr}`); diff --git a/src/installer.ts b/src/installer.ts index c71a8c6..59cfff0 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -182,6 +182,17 @@ export class DotnetInstallScript { return this; } + public useInstallPath(installPath: string) { + if (installPath == null) { + installPath = DotnetInstallDir.dirPath; + } + this.useArguments( + IS_WINDOWS ? '-Install-Dir' : '--install-dir', + installPath + ); + return this; + } + public useVersion(dotnetVersion: DotnetVersion, quality?: QualityOptions) { if (dotnetVersion.type) { this.useArguments(dotnetVersion.type, dotnetVersion.value); @@ -222,11 +233,20 @@ export abstract class DotnetInstallDir { windows: path.join(process.env['PROGRAMFILES'] + '', 'dotnet') }; - public static readonly dirPath = process.env['DOTNET_INSTALL_DIR'] - ? DotnetInstallDir.convertInstallPathToAbsolute( - process.env['DOTNET_INSTALL_DIR'] - ) - : DotnetInstallDir.default[PLATFORM]; + private static getInstallDirectory() { + if (process.env['DOTNET_INSTALL_DIR'] != null) { + return process.env['DOTNET_INSTALL_DIR']; + } + if (process.env['RUNNER_TOOL_CACHE'] != null) { + return path.join(process.env['RUNNER_TOOL_CACHE'], 'dotnet'); + } + return DotnetInstallDir.default[PLATFORM]; + } + + public static readonly dirPath = + DotnetInstallDir.convertInstallPathToAbsolute( + DotnetInstallDir.getInstallDirectory() + ); private static convertInstallPathToAbsolute(installDir: string): string { if (path.isAbsolute(installDir)) return path.normalize(installDir); @@ -275,6 +295,8 @@ export class DotnetCoreInstaller { .useArguments(IS_WINDOWS ? '-Runtime' : '--runtime', 'dotnet') // Use latest stable version .useArguments(IS_WINDOWS ? '-Channel' : '--channel', 'LTS') + // Explicitly set the install path (see https://github.com/actions/setup-dotnet/issues/360) + .useInstallPath(DotnetInstallDir.dirPath) .execute(); if (runtimeInstallOutput.exitCode) { @@ -298,6 +320,8 @@ export class DotnetCoreInstaller { ) // Use version provided by user .useVersion(dotnetVersion, this.quality) + // Explicitly set the install path (see https://github.com/actions/setup-dotnet/issues/360) + .useInstallPath(DotnetInstallDir.dirPath) .execute(); if (dotnetInstallOutput.exitCode) {