mirror of
https://github.com/astral-sh/ruff-action.git
synced 2026-08-08 02:07:02 +00:00
feat: support uv.lock as version-file (#379)
Adds `uv.lock` as a supported `version-file` format, alongside the existing `pyproject.toml` and `requirements.txt`. A `uv.lock` pins the exact resolved ruff version, so reading it gives a reproducible install that matches the project's lockfile — the single source of truth — instead of the lower-bound / range typically declared in `pyproject.toml`. The parser reads the `[[package]]` entry whose `name` is `ruff` and returns its `version`. If ruff is absent or the file cannot be parsed, the action warns and falls back to `latest` (same behaviour as the other formats). Validation: - `npm run all` — tsc typecheck clean, biome clean, dist rebuilt, jest 65/65 pass - Added unit tests (`__tests__/version/file-parser.test.ts`) + a `uv.lock` fixture - Added an integration job (`test-default-version-from-uv-lock`) that runs the action against the fixture and asserts ruff 0.9.5 is installed closes #375
This commit is contained in:
@@ -9,9 +9,11 @@ jest.unstable_mockModule("@actions/core", () => ({
|
||||
warning,
|
||||
}));
|
||||
|
||||
const { findRuffVersionInSpec, getRuffVersionFromFile } = await import(
|
||||
"../../src/version/file-parser"
|
||||
);
|
||||
const {
|
||||
findRuffVersionInSpec,
|
||||
getRuffVersionFromFile,
|
||||
getRuffVersionFromUvLockContent,
|
||||
} = await import("../../src/version/file-parser");
|
||||
|
||||
describe("file-parser", () => {
|
||||
beforeEach(() => {
|
||||
@@ -124,5 +126,26 @@ describe("file-parser", () => {
|
||||
);
|
||||
expect(result).toBe("~0.8.2");
|
||||
});
|
||||
|
||||
it("reads the version from uv.lock", () => {
|
||||
const result = getRuffVersionFromFile("__tests__/fixtures/uv.lock");
|
||||
expect(result).toBe("0.9.5");
|
||||
});
|
||||
});
|
||||
|
||||
describe("getRuffVersionFromUvLockContent", () => {
|
||||
it("extracts the ruff version from uv.lock content", () => {
|
||||
const result = getRuffVersionFromUvLockContent(
|
||||
'[[package]]\nname = "other"\nversion = "1.0.0"\n\n[[package]]\nname = "ruff"\nversion = "0.9.5"\n',
|
||||
);
|
||||
expect(result).toBe("0.9.5");
|
||||
});
|
||||
|
||||
it("returns undefined when ruff is not in uv.lock", () => {
|
||||
const result = getRuffVersionFromUvLockContent(
|
||||
'[[package]]\nname = "other"\nversion = "1.0.0"\n',
|
||||
);
|
||||
expect(result).toBeUndefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user