setup-dotnet/src/dotnet-utils.ts

52 lines
1.2 KiB
TypeScript

import * as exec from '@actions/exec';
export const listSdks = async () => {
const {stdout, exitCode} = await exec
.getExecOutput('dotnet', ['--list-sdks'], {
ignoreReturnCode: true
})
.catch(() => ({stdout: '', exitCode: 1}));
if (exitCode) {
return [];
}
return (
stdout
.trim()
.split('\n')
.map(versionInfo => versionInfo.trim())
.map(versionInfo => versionInfo.split(' ')[0])
// reverses output so newer versions are first
.reverse()
);
};
/**
* Function that matches string like that
* '3.1', '3.1.x', '3', '3.x', '6.0.4xx' to
* correct version number like '3.1.201', '3.1.201', '3.1.201', '3.1.201', '6.0.402'
*/
export const findMatchingVersion = (
versionPattern: string,
versions: string[]
): string | undefined => {
if (!versionPattern || versionPattern === 'x' || versionPattern === '*') {
return versions.at(0);
}
const versionArray = versionPattern.split('.');
if (versionArray.length < 3) {
versionArray.push(...Array(3 - versionArray.length).fill('x'));
}
const normalizedVersion = versionArray.join('.');
const versionRegex = new RegExp(
`^${normalizedVersion.replace(/x/g, '\\d+')}`
);
return versions.find(v => versionRegex.test(v));
};