52 lines
1.2 KiB
TypeScript
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));
|
|
};
|