diff --git a/dist/setup/index.js b/dist/setup/index.js index 0fed9c1..8783c48 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -71385,14 +71385,39 @@ class DotnetCoreInstaller { return __awaiter(this, void 0, void 0, function* () { const versionResolver = new DotnetVersionResolver(this.version); const dotnetVersion = yield versionResolver.createDotnetVersion(); - const installScript = new DotnetInstallScript() + /** + * Install dotnet runitme first in order to get + * the latest stable version of dotnet CLI + */ + const runtimeInstallOutput = yield new DotnetInstallScript() + // If dotnet CLI is already installed - avoid overwriting it .useArguments(utils_1.IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files') - .useVersion(dotnetVersion, this.quality); - const { exitCode, stderr, stdout } = yield installScript.execute(); - if (exitCode) { - throw new Error(`Failed to install dotnet, exit code: ${exitCode}. ${stderr}`); + // Install only runtime + CLI + .useArguments(utils_1.IS_WINDOWS ? '-Runtime' : '--runtime', 'dotnet') + // Use latest stable version + .useArguments(utils_1.IS_WINDOWS ? '-Channel' : '--channel', 'LTS') + .execute(); + if (runtimeInstallOutput.exitCode) { + /** + * dotnetInstallScript will install CLI and runtime even if previous script haven't succeded, + * so at this point it's too early to throw an error + */ + core.warning(`Failed to install dotnet runtime + cli, exit code: ${runtimeInstallOutput.exitCode}. ${runtimeInstallOutput.stderr}`); } - return this.parseInstalledVersion(stdout); + /** + * Install dotnet over the latest version of + * dotnet CLI + */ + const dotnetInstallOutput = yield new DotnetInstallScript() + // Don't overwrite CLI because it should be already installed + .useArguments(utils_1.IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files') + // Use version provided by user + .useVersion(dotnetVersion, this.quality) + .execute(); + if (dotnetInstallOutput.exitCode) { + throw new Error(`Failed to install dotnet, exit code: ${dotnetInstallOutput.exitCode}. ${dotnetInstallOutput.stderr}`); + } + return this.parseInstalledVersion(dotnetInstallOutput.stdout); }); } parseInstalledVersion(stdout) { diff --git a/src/installer.ts b/src/installer.ts index 4d61e5d..4900afa 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -259,21 +259,51 @@ export class DotnetCoreInstaller { const versionResolver = new DotnetVersionResolver(this.version); const dotnetVersion = await versionResolver.createDotnetVersion(); - const installScript = new DotnetInstallScript() + /** + * Install dotnet runitme first in order to get + * the latest stable version of dotnet CLI + */ + const runtimeInstallOutput = await new DotnetInstallScript() + // If dotnet CLI is already installed - avoid overwriting it .useArguments( IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files' ) - .useVersion(dotnetVersion, this.quality); + // Install only runtime + CLI + .useArguments(IS_WINDOWS ? '-Runtime' : '--runtime', 'dotnet') + // Use latest stable version + .useArguments(IS_WINDOWS ? '-Channel' : '--channel', 'LTS') + .execute(); - const {exitCode, stderr, stdout} = await installScript.execute(); - - if (exitCode) { - throw new Error( - `Failed to install dotnet, exit code: ${exitCode}. ${stderr}` + if (runtimeInstallOutput.exitCode) { + /** + * dotnetInstallScript will install CLI and runtime even if previous script haven't succeded, + * so at this point it's too early to throw an error + */ + core.warning( + `Failed to install dotnet runtime + cli, exit code: ${runtimeInstallOutput.exitCode}. ${runtimeInstallOutput.stderr}` ); } - return this.parseInstalledVersion(stdout); + /** + * Install dotnet over the latest version of + * dotnet CLI + */ + const dotnetInstallOutput = await new DotnetInstallScript() + // Don't overwrite CLI because it should be already installed + .useArguments( + IS_WINDOWS ? '-SkipNonVersionedFiles' : '--skip-non-versioned-files' + ) + // Use version provided by user + .useVersion(dotnetVersion, this.quality) + .execute(); + + if (dotnetInstallOutput.exitCode) { + throw new Error( + `Failed to install dotnet, exit code: ${dotnetInstallOutput.exitCode}. ${dotnetInstallOutput.stderr}` + ); + } + + return this.parseInstalledVersion(dotnetInstallOutput.stdout); } private parseInstalledVersion(stdout: string): string | null {