Skip to content
41 changes: 9 additions & 32 deletions src/installer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import * as core from '@actions/core';
import * as exec from '@actions/exec';
import * as io from '@actions/io';
import * as hc from '@actions/http-client';
import {chmodSync} from 'fs';
import path from 'path';
import os from 'os';
Expand Down Expand Up @@ -72,7 +71,15 @@ 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 since they won't get new releases
Comment thread
akoeplinger marked this conversation as resolved.
Outdated
this.resolvedArgument.value =
major == '1'
? '1.1'
: major == '2'
? '2.2'
: major == '3'
? '3.1'
: `${major}.0`;
Comment thread
akoeplinger marked this conversation as resolved.
Outdated
Comment thread
akoeplinger marked this conversation as resolved.
Outdated
Comment thread
akoeplinger marked this conversation as resolved.
Outdated
} 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';
Expand All @@ -95,36 +102,6 @@ export class DotnetVersionResolver {
}
return this.resolvedArgument;
}

private async getLatestByMajorTag(majorTag: string): Promise<string> {
const httpClient = new hc.HttpClient('actions/setup-dotnet', [], {
allowRetries: true,
maxRetries: 3
});

const response = await httpClient.getJson<any>(
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';
}

export class DotnetInstallScript {
Expand Down
Loading