fix(deps): consolidate dependabot uv ecosystem to single workspace root#1756
Conversation
There was a problem hiding this comment.
Pull request overview
Stabilizes Dependabot-driven Python (uv) dependency updates by ensuring the root workspace lockfile stays in sync with workspace manifest changes, reducing CI failures when uv sync --locked runs in downstream builds.
Changes:
- Add a guarded
pull_request_targetworkflow to regenerate and commitpython/uv.lockfor eligible Dependabot PRs. - Update Dependabot config to group related root-workspace uv dependency families (OpenTelemetry and Google AI) into single PRs.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| .github/workflows/refresh-python-workspace-lock.yml | New workflow that validates PR file shape, runs uv lock, and pushes refreshed python/uv.lock back to Dependabot branches. |
| .github/dependabot.yml | Adds uv grouping rules for OpenTelemetry and Google AI dependencies; clarifies grouping behavior for minor/patch updates. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
339d78a to
8b9e21a
Compare
|
@EItanya Some improvements to dependabot to avoid stale PR's |
The previous configuration listed every uv workspace member as its own `directories:` entry. Dependabot would then open separate PRs for each member's pyproject.toml without refreshing the root python/uv.lock, causing CI to fail later when Docker runs `uv sync --locked`. In a uv workspace, only the workspace root owns the lockfile; members have a pyproject.toml only. Dependabot's native uv ecosystem already discovers members through the root pyproject.toml's [tool.uv.workspace] section, so a single `directory: /python` entry covers all members and updates the root lockfile in the same PR. Also adopt orthogonal Dependabot improvements: - Group OpenTelemetry and Google AI dependency families so lockstep Python updates land in a single PR instead of fragmenting. - Add `applies-to: version-updates` to the python groups so security updates remain ungrouped. - Ignore semver-major /ui npm updates so known-breaking major frontend bumps stop opening standalone PRs; minor/patch still flow. Signed-off-by: Jaison Paul <paul.jaison@gmail.com>
8b9e21a to
8a6a136
Compare
|
@EItanya — reworked per your feedback. Dropped the GitHub Actions handoff entirely. The root cause was the PR is now a one-file diff ( |
Previous run hit a transient Alpine mirror failure (`xz-5.8.3-r1: temporary error`) during `apk add` in the `golang-adk-full` build step, unrelated to this PR's diff. Signed-off-by: Jaison Paul <paul.jaison@gmail.com>
Summary
directories:list underpackage-ecosystem: uvwith a single/pythonentry so Dependabot uses the root[tool.uv.workspace]to discover members and refreshespython/uv.lockin the same PRapplies-to: version-updatesto the Python groups so security updates remain ungrouped/uinpm bumps so known-breaking major frontend upgrades stop opening standalone PRsWhy
Dependabot was opening separate PRs for each workspace member's
pyproject.tomlwithout refreshing the rootpython/uv.lock. Those PRs then failed CI when Docker runsuv sync --locked.In a
uvworkspace the lockfile lives only at the workspace root; members have only apyproject.toml. Dependabot's nativeuvecosystem already discovers workspace members through the root[tool.uv.workspace]section, so a singledirectory: /pythonentry covers every member and updates the root lockfile alongside any member manifest in the same PR — no separate workflow or write-back step needed.This replaces the earlier approach in this PR which used a
pull_request_targetworkflow to runuv lockand push back to Dependabot's branch. @EItanya flagged that handoff as undesirable; this approach removes it entirely (and removes the new workflow file) while keeping the orthogonal grouping and ignore improvements.Verification
ruby -e 'require "yaml"; YAML.load_file(".github/dependabot.yml")'(parses cleanly)pyproject.tomlandpython/uv.lockupdated together.