This commit is contained in:
Daniel Bowring 2024-10-22 13:55:08 +05:45 committed by GitHub
commit 9b0321d058
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 69 additions and 16 deletions

View File

@ -129,6 +129,30 @@ describe('Version from file test', () => {
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersion]);
}
);
it.each([getVersionInputFromTomlFile, getVersionInputFromFile])(
'Version from mise .mise.toml test',
async _fn => {
await io.mkdirP(tempDir);
const pythonVersionFileName = '.mise.toml';
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
const pythonVersion = '3.7.0';
const pythonVersionFileContent = `[tools]\npython = "${pythonVersion}"`;
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersion]);
}
);
it.each([getVersionInputFromTomlFile, getVersionInputFromFile])(
'Version from mise verbose .mise.toml test',
async _fn => {
await io.mkdirP(tempDir);
const pythonVersionFileName = '.mise.toml';
const pythonVersionFilePath = path.join(tempDir, pythonVersionFileName);
const pythonVersion = '3.7.0';
const pythonVersionFileContent = `[tools]\npython = { version="${pythonVersion}", virtualenv=".venv" }`;
fs.writeFileSync(pythonVersionFilePath, pythonVersionFileContent);
expect(_fn(pythonVersionFilePath)).toEqual([pythonVersion]);
}
);
it.each([getVersionInputFromTomlFile, getVersionInputFromFile])(
'Version undefined',
async _fn => {

27
dist/setup/index.js vendored
View File

@ -92094,6 +92094,9 @@ function getOSInfo() {
});
}
exports.getOSInfo = getOSInfo;
function isString(value) {
return typeof value === 'string' || value instanceof String;
}
/**
* Extract a value from an object by following the keys path provided.
* If the value is present, it is returned. Otherwise undefined is returned.
@ -92104,9 +92107,12 @@ function extractValue(obj, keys) {
if (keys.length > 1 && value !== undefined) {
return extractValue(value, keys.slice(1));
}
else {
else if (isString(value)) {
return value;
}
else {
return;
}
}
else {
return;
@ -92126,19 +92132,26 @@ function getVersionInputFromTomlFile(versionFile) {
// Normalize the line endings in the pyprojectFile
pyprojectFile = pyprojectFile.replace(/\r\n/g, '\n');
const pyprojectConfig = toml.parse(pyprojectFile);
let keys = [];
let keyPaths = [];
if ('project' in pyprojectConfig) {
// standard project metadata (PEP 621)
keys = ['project', 'requires-python'];
keyPaths = [['project', 'requires-python']];
}
else {
keyPaths = [
// python poetry
keys = ['tool', 'poetry', 'dependencies', 'python'];
['tool', 'poetry', 'dependencies', 'python'],
// mise
['tools', 'python'],
['tools', 'python', 'version']
];
}
const versions = [];
const version = extractValue(pyprojectConfig, keys);
if (version !== undefined) {
versions.push(version);
for (const keys of keyPaths) {
const value = extractValue(pyprojectConfig, keys);
if (value !== undefined) {
versions.push(value);
}
}
core.info(`Extracted ${versions} from ${versionFile}`);
const rawVersions = Array.from(versions, version => version.split(',').join(' '));

View File

@ -202,6 +202,10 @@ export async function getOSInfo() {
}
}
function isString(value: unknown): value is string {
return typeof value === 'string' || value instanceof String;
}
/**
* Extract a value from an object by following the keys path provided.
* If the value is present, it is returned. Otherwise undefined is returned.
@ -211,8 +215,10 @@ function extractValue(obj: any, keys: string[]): string | undefined {
const value = obj[keys[0]];
if (keys.length > 1 && value !== undefined) {
return extractValue(value, keys.slice(1));
} else {
} else if (isString(value)) {
return value;
} else {
return;
}
} else {
return;
@ -235,19 +241,29 @@ export function getVersionInputFromTomlFile(versionFile: string): string[] {
pyprojectFile = pyprojectFile.replace(/\r\n/g, '\n');
const pyprojectConfig = toml.parse(pyprojectFile);
let keys = [];
let keyPaths = [];
if ('project' in pyprojectConfig) {
// standard project metadata (PEP 621)
keys = ['project', 'requires-python'];
keyPaths = [['project', 'requires-python']];
} else {
keyPaths = [
// python poetry
keys = ['tool', 'poetry', 'dependencies', 'python'];
['tool', 'poetry', 'dependencies', 'python'],
// mise
['tools', 'python'],
['tools', 'python', 'version']
];
}
const versions = [];
const version = extractValue(pyprojectConfig, keys);
if (version !== undefined) {
versions.push(version);
for (const keys of keyPaths) {
const value = extractValue(pyprojectConfig, keys);
if (value !== undefined) {
versions.push(value);
}
}
core.info(`Extracted ${versions} from ${versionFile}`);