Skip to content

fix(ci): clear OSV-flagged uv.lock CVEs; rely on native Renovate lockFileMaintenance#1033

Open
JacobPEvans-personal wants to merge 1 commit into
mainfrom
chore/uv-lock-security-automation
Open

fix(ci): clear OSV-flagged uv.lock CVEs; rely on native Renovate lockFileMaintenance#1033
JacobPEvans-personal wants to merge 1 commit into
mainfrom
chore/uv-lock-security-automation

Conversation

@JacobPEvans-personal

@JacobPEvans-personal JacobPEvans-personal commented Jun 26, 2026

Copy link
Copy Markdown
Member

Why these PRs always failed CI

The required OSV Scan gate (ci-gate.yml → osv-scan, if: always(), not in Merge Gate allowed-skips) scans the whole repo on every PR and failed on two fixable transitive vulns in orchestrator/uv.lock:

Package Locked Fix Advisory
langgraph-checkpoint 4.1.0 4.1.1 GHSA-fjqc-hq36-qh5p
langgraph-sdk 0.3.14 0.4.2 GHSA-w39p-vh2g-g8g5

A lock file maintenance PR only touches flake.lock, so it could never clear uv.lock debt → every PR was red.

The simple, native fix

uv lock --upgrade clears the transitive CVEs (mlx stays pinned to 0.31.1 per #751; litellm/langsmith floors hold). Local osv-scannerNo issues found.

Ongoing maintenance is native — no custom script or workflow. Renovate's pep621 manager already runs uv lock --upgrade for lockFileMaintenance (UvProcessor.updateArtifacts when isLockFileMaintenance), i.e. it refreshes uv.lock transitive deps on the existing Mon/Thu schedule with automerge. Those grouped uv-LFM PRs ran historically (e.g. #842) but stopped merging because they failed the old global OSV gate — the differential gate in dryvist/.github#51 unblocks them.

An earlier revision of this PR added a custom uv-lock-upgrade.sh + uv-lock-upgrade.yml + a renovate.json5 disable. That was redundant — it reimplemented native Renovate lockFileMaintenance. All removed (confirmed via Renovate source/docs + Codex). This PR is now just the lockfile fix plus a scheduled drift scan.

What's in this PR

  1. orchestrator/uv.lock + mlx-server/uv.lockuv lock --upgrade (immediate remediation).
  2. .github/workflows/osv-scheduled.yml — weekly full OSV scan of main. This is the safety net for the now-differential PR gate (test: Add Nix module composition validation tests #51): PR-diff scans skip pre-existing debt, so a scheduled full scan is what surfaces anything that accumulates on main. Thin reusable-workflow caller, same pattern as docs/osv-scan.yml.

Validation

  • osv-scanner --config=osv-scanner.toml on both lockfiles → No issues found (only the documented no-fix torch/nltk ignoreUntil entries filtered).
  • actionlint on osv-scheduled.yml → clean. Pre-commit (zizmor, yaml) → passed.
  • pip-audit (Python Security gate) runs authoritatively on Linux CI (can't run locally — macOS ensurepip SIGABRT in its resolver venv).

Companion

dryvist/.github#51 makes the shared _osv-scan.yml PR gate differential (fail only on vulns a PR introduces) while keeping full-scan on push/schedule. That is what lets native Renovate uv-LFM PRs (and any unrelated PR) merge again.

Comment thread .github/workflows/uv-lock-upgrade.yml Fixed

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new bash script, .github/scripts/uv-lock-upgrade.sh, designed to upgrade uv lockfiles to their latest allowed versions to clear transitive PyPI vulnerabilities. Consequently, mlx-server/uv.lock has been updated with several package upgrades. Additionally, Renovate's lockfile maintenance has been disabled for the pep621 manager in renovate.json5 to avoid conflicts with the new upgrade workflow. Feedback on the script suggests improving its robustness and local usability by adding a defensive directory check and conditionally printing GitHub Actions group logs only when running in a CI environment.

Comment thread .github/scripts/uv-lock-upgrade.sh Outdated
@JacobPEvans-personal JacobPEvans-personal force-pushed the chore/uv-lock-security-automation branch from 1a753ca to ec885b8 Compare June 26, 2026 22:50
…FileMaintenance

orchestrator/uv.lock carried fixable transitive CVEs the required OSV gate
flagged on every PR: langgraph-checkpoint 4.1.0->4.1.1 (GHSA-fjqc-hq36-qh5p),
langgraph-sdk 0.3.14->0.4.2 (GHSA-w39p-vh2g-g8g5). `uv lock --upgrade` clears
them; mlx stays pinned to 0.31.1 (#751) and the litellm/langsmith floors hold.
Local osv-scanner: No issues found.

Ongoing maintenance is NATIVE — no custom script/workflow. Renovate's pep621
manager already runs `uv lock --upgrade` for lockFileMaintenance
(UvProcessor.updateArtifacts when isLockFileMaintenance), i.e. it refreshes
uv.lock transitive deps on schedule. Those grouped uv LFM PRs ran historically
(#842) but stopped merging because they failed the old global OSV gate; the
differential gate (dryvist/.github#51) unblocks them. The earlier custom
uv-lock-upgrade.sh + uv-lock-upgrade.yml + renovate.json5 disable are dropped as
redundant reimplementations of that native behavior.

osv-scheduled.yml: weekly full OSV scan of main — the safety net for the now-
differential PR gate, surfacing accumulated/no-fix debt that PR-diff scans skip
(same thin reusable-caller pattern as docs/osv-scan.yml).

Assisted-by: Claude:claude-opus-4-8[1m]
Claude-Session: https://claude.ai/code/session_01CYau7MWswJikoctB9MUgcZ
@JacobPEvans-personal JacobPEvans-personal force-pushed the chore/uv-lock-security-automation branch from 17b1435 to 61d0097 Compare June 28, 2026 20:41
@JacobPEvans-personal JacobPEvans-personal changed the title fix(ci): refresh uv.lock and automate uv lock upgrades to clear OSV gate fix(ci): clear OSV-flagged uv.lock CVEs; rely on native Renovate lockFileMaintenance Jun 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants