mirror of
https://github.com/astral-sh/ruff-action.git
synced 2026-09-19 10:51:30 +00:00
iarna/toml is unmaintained. Replaced by smol-toml which is maintained and has the same api
47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import * as fs from "node:fs";
|
|
import * as core from "@actions/core";
|
|
import * as toml from "smol-toml";
|
|
|
|
export function getRuffVersionFromPyproject(
|
|
filePath: string,
|
|
): string | undefined {
|
|
if (!fs.existsSync(filePath)) {
|
|
core.warning(`Could not find file: ${filePath}`);
|
|
return undefined;
|
|
}
|
|
const pyprojectContent = fs.readFileSync(filePath, "utf-8");
|
|
let pyproject:
|
|
| {
|
|
project?: { dependencies?: string[] };
|
|
"dependency-groups"?: { dev?: string[] };
|
|
}
|
|
| undefined;
|
|
try {
|
|
pyproject = toml.parse(pyprojectContent);
|
|
} catch (err) {
|
|
const message = (err as Error).message;
|
|
core.warning(`Error while parsing ${filePath}: ${message}`);
|
|
return undefined;
|
|
}
|
|
|
|
const dependencies: string[] = pyproject?.project?.dependencies || [];
|
|
const devDependencies: string[] = pyproject?.["dependency-groups"]?.dev || [];
|
|
|
|
const ruffVersionDefinition =
|
|
dependencies.find((dep: string) => dep.startsWith("ruff")) ||
|
|
devDependencies.find((dep: string) => dep.startsWith("ruff"));
|
|
|
|
if (ruffVersionDefinition) {
|
|
const ruffVersion = ruffVersionDefinition
|
|
.match(/^ruff([^A-Z0-9._-]+.*)$/)?.[1]
|
|
.trim();
|
|
if (ruffVersion?.startsWith("==")) {
|
|
return ruffVersion.slice(2);
|
|
}
|
|
core.info(`Found ruff version in pyproject.toml: ${ruffVersion}`);
|
|
return ruffVersion;
|
|
}
|
|
|
|
return undefined;
|
|
}
|