update logic of outputting dotnet-version

This commit is contained in:
IvanZosimov 2023-05-16 14:58:18 +02:00
parent e8501859aa
commit fefaa59d2e
3 changed files with 82 additions and 25 deletions

40
dist/index.js vendored
View File

@ -439,7 +439,8 @@ class DotnetCoreInstaller {
const regex = /(?<version>\d+\.\d+\.\d+[a-z0-9._-]*)/gm; const regex = /(?<version>\d+\.\d+\.\d+[a-z0-9._-]*)/gm;
const matchedResult = regex.exec(stdout); const matchedResult = regex.exec(stdout);
if (!matchedResult) { if (!matchedResult) {
throw new Error(`Failed to parse installed by the script version of .NET`); core.warning(`Failed to parse installed by the script version of .NET`);
return null;
} }
return matchedResult.groups.version; return matchedResult.groups.version;
} }
@ -577,13 +578,18 @@ function run() {
if (sourceUrl) { if (sourceUrl) {
auth.configAuthentication(sourceUrl, configFile); auth.configAuthentication(sourceUrl, configFile);
} }
const comparisonRange = globalJsonFileInput // const comparisonRange: string = globalJsonFileInput
? versions[versions.length - 1] // ? versions[versions.length - 1]!
: '*'; // : '*';
const versionToOutput = semver_1.default.maxSatisfying(installedDotnetVersions, comparisonRange, { // const versionToOutput = semver.maxSatisfying(
includePrerelease: true // installedDotnetVersions,
}); // comparisonRange,
core.setOutput('dotnet-version', versionToOutput); // {
// includePrerelease: true
// }
// );
// core.setOutput('dotnet-version', versionToOutput);
outputInstalledVersion(installedDotnetVersions, globalJsonFileInput);
const matchersPath = path_1.default.join(__dirname, '..', '.github'); const matchersPath = path_1.default.join(__dirname, '..', '.github');
core.info(`##[add-matcher]${path_1.default.join(matchersPath, 'csc.json')}`); core.info(`##[add-matcher]${path_1.default.join(matchersPath, 'csc.json')}`);
} }
@ -608,6 +614,24 @@ function getVersionFromGlobalJson(globalJsonPath) {
} }
return version; return version;
} }
function outputInstalledVersion(installedVersions, globalJsonFileInput) {
if (!installedVersions.length) {
core.info(`No .NET version was installed. The 'dotnet-version' output will not be set.`);
}
if (installedVersions.includes(null)) {
core.warning(`Failed to output the installed version of .NET. The 'dotnet-version' output will not be set.`);
return;
}
if (globalJsonFileInput) {
const versionToOutput = installedVersions.at(-1);
core.setOutput('dotnet-version', versionToOutput);
return;
}
const versionToOutput = semver_1.default.maxSatisfying(installedVersions, '*', {
includePrerelease: true
});
core.setOutput('dotnet-version', versionToOutput);
}
run(); run();

View File

@ -197,7 +197,7 @@ export class DotnetCoreInstaller {
} }
} }
public async installDotnet(): Promise<string> { public async installDotnet(): Promise<string | null> {
const windowsDefaultOptions = [ const windowsDefaultOptions = [
'-NoLogo', '-NoLogo',
'-Sta', '-Sta',
@ -271,14 +271,13 @@ export class DotnetCoreInstaller {
return this.parseInstalledVersion(stdout); return this.parseInstalledVersion(stdout);
} }
private parseInstalledVersion(stdout: string): string { private parseInstalledVersion(stdout: string): string | null {
const regex = /(?<version>\d+\.\d+\.\d+[a-z0-9._-]*)/gm; const regex = /(?<version>\d+\.\d+\.\d+[a-z0-9._-]*)/gm;
const matchedResult = regex.exec(stdout); const matchedResult = regex.exec(stdout);
if (!matchedResult) { if (!matchedResult) {
throw new Error( core.warning(`Failed to parse installed by the script version of .NET`);
`Failed to parse installed by the script version of .NET` return null;
);
} }
return matchedResult.groups!.version; return matchedResult.groups!.version;
} }

View File

@ -27,7 +27,7 @@ export async function run() {
// Proxy, auth, (etc) are still set up, even if no version is identified // Proxy, auth, (etc) are still set up, even if no version is identified
// //
const versions = core.getMultilineInput('dotnet-version'); const versions = core.getMultilineInput('dotnet-version');
const installedDotnetVersions: string[] = []; const installedDotnetVersions: (string | null)[] = [];
const globalJsonFileInput = core.getInput('global-json-file'); const globalJsonFileInput = core.getInput('global-json-file');
if (globalJsonFileInput) { if (globalJsonFileInput) {
@ -78,19 +78,20 @@ export async function run() {
auth.configAuthentication(sourceUrl, configFile); auth.configAuthentication(sourceUrl, configFile);
} }
const comparisonRange: string = globalJsonFileInput // const comparisonRange: string = globalJsonFileInput
? versions[versions.length - 1]! // ? versions[versions.length - 1]!
: '*'; // : '*';
const versionToOutput = semver.maxSatisfying( // const versionToOutput = semver.maxSatisfying(
installedDotnetVersions, // installedDotnetVersions,
comparisonRange, // comparisonRange,
{ // {
includePrerelease: true // includePrerelease: true
} // }
); // );
core.setOutput('dotnet-version', versionToOutput); // core.setOutput('dotnet-version', versionToOutput);
outputInstalledVersion(installedDotnetVersions, globalJsonFileInput);
const matchersPath = path.join(__dirname, '..', '.github'); const matchersPath = path.join(__dirname, '..', '.github');
core.info(`##[add-matcher]${path.join(matchersPath, 'csc.json')}`); core.info(`##[add-matcher]${path.join(matchersPath, 'csc.json')}`);
@ -116,4 +117,37 @@ function getVersionFromGlobalJson(globalJsonPath: string): string {
return version; return version;
} }
function outputInstalledVersion(
installedVersions: (string | null)[],
globalJsonFileInput: string
): void {
if (!installedVersions.length) {
core.info(
`No .NET version was installed. The 'dotnet-version' output will not be set.`
);
}
if (installedVersions.includes(null)) {
core.warning(
`Failed to output the installed version of .NET. The 'dotnet-version' output will not be set.`
);
return;
}
if (globalJsonFileInput) {
const versionToOutput = installedVersions.at(-1);
core.setOutput('dotnet-version', versionToOutput);
return;
}
const versionToOutput = semver.maxSatisfying(
installedVersions as string[],
'*',
{
includePrerelease: true
}
);
core.setOutput('dotnet-version', versionToOutput);
}
run(); run();