From f1970f5ca30a3ba974274132e05c4bb012faac74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20K=C3=B6plinger?= Date: Mon, 11 May 2026 19:11:45 +0200 Subject: [PATCH] Don't download releases-index.json to resolve major version (#560) * Don't download releases-index.json to resolving major version Starting with .NET 5 the minor version is always zero. The earlier releases don't get new versions anymore so we can hardcode the minor version instead of downloading releases-index.json to do the lookup. * Remove unused variable * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Commit dist/setup/index.js * Refresh after copilot commits --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- dist/setup/index.js | 34 ++++++++++++++++------------------ src/installer.ts | 44 ++++++++++++++++---------------------------- 2 files changed, 32 insertions(+), 46 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index c58f527..ac2cc6c 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -78768,7 +78768,22 @@ class DotnetVersionResolver { this.resolvedArgument.value = `${major}.${minor}`; } else if (this.isNumericTag(major)) { - this.resolvedArgument.value = await this.getLatestByMajorTag(major); + // Starting with .NET 5, the minor version is always zero. + // Hardcode the earlier versions because they will not get new releases. + switch (major) { + case '1': + this.resolvedArgument.value = '1.1'; + break; + case '2': + this.resolvedArgument.value = '2.2'; + break; + case '3': + this.resolvedArgument.value = '3.1'; + break; + default: + this.resolvedArgument.value = `${major}.0`; + break; + } } else { // If "dotnet-version" is specified as *, x or X resolve latest version of .NET explicitly from LTS channel. The version argument will default to "latest" by install-dotnet script. @@ -78832,23 +78847,6 @@ class DotnetVersionResolver { } return releasesInfo[0]['channel-version']; } - async getLatestByMajorTag(majorTag) { - const httpClient = new hc.HttpClient('actions/setup-dotnet', [], { - allowRetries: true, - maxRetries: 3 - }); - const response = await httpClient.getJson(DotnetVersionResolver.DotnetCoreIndexUrl); - const result = response.result || {}; - const releasesInfo = result['releases-index']; - const releaseInfo = releasesInfo.find(info => { - const sdkParts = info['channel-version'].split('.'); - return sdkParts[0] === majorTag; - }); - if (!releaseInfo) { - throw new Error(`Could not find info for version with major tag: "${majorTag}" at ${DotnetVersionResolver.DotnetCoreIndexUrl}`); - } - return releaseInfo['channel-version']; - } static DotnetCoreIndexUrl = 'https://builds.dotnet.microsoft.com/dotnet/release-metadata/releases-index.json'; } exports.DotnetVersionResolver = DotnetVersionResolver; diff --git a/src/installer.ts b/src/installer.ts index 2402316..85a2d82 100644 --- a/src/installer.ts +++ b/src/installer.ts @@ -125,7 +125,22 @@ export class DotnetVersionResolver { } else if (this.isNumericTag(major) && this.isNumericTag(minor)) { this.resolvedArgument.value = `${major}.${minor}`; } else if (this.isNumericTag(major)) { - this.resolvedArgument.value = await this.getLatestByMajorTag(major); + // Starting with .NET 5, the minor version is always zero. + // Hardcode the earlier versions because they will not get new releases. + switch (major) { + case '1': + this.resolvedArgument.value = '1.1'; + break; + case '2': + this.resolvedArgument.value = '2.2'; + break; + case '3': + this.resolvedArgument.value = '3.1'; + break; + default: + this.resolvedArgument.value = `${major}.0`; + break; + } } else { // If "dotnet-version" is specified as *, x or X resolve latest version of .NET explicitly from LTS channel. The version argument will default to "latest" by install-dotnet script. this.resolvedArgument.value = 'LTS'; @@ -207,33 +222,6 @@ export class DotnetVersionResolver { return releasesInfo[0]['channel-version']; } - private async getLatestByMajorTag(majorTag: string): Promise { - const httpClient = new hc.HttpClient('actions/setup-dotnet', [], { - allowRetries: true, - maxRetries: 3 - }); - - const response = await httpClient.getJson( - DotnetVersionResolver.DotnetCoreIndexUrl - ); - - const result = response.result || {}; - const releasesInfo: any[] = result['releases-index']; - - const releaseInfo = releasesInfo.find(info => { - const sdkParts: string[] = info['channel-version'].split('.'); - return sdkParts[0] === majorTag; - }); - - if (!releaseInfo) { - throw new Error( - `Could not find info for version with major tag: "${majorTag}" at ${DotnetVersionResolver.DotnetCoreIndexUrl}` - ); - } - - return releaseInfo['channel-version']; - } - static DotnetCoreIndexUrl = 'https://builds.dotnet.microsoft.com/dotnet/release-metadata/releases-index.json'; }