Skip to content

ci: drop the uv ecosystem from dependabot.yml, it can't work here - #197

Merged
Sergey-Zeltyn merged 3 commits into
mainfrom
ci/dependabot-drop-uv-ecosystem
Sep 8, 2026
Merged

Sergey-Zeltyn merged 3 commits into
mainfrom
ci/dependabot-drop-uv-ecosystem

Conversation

@haroldship

@haroldship haroldship commented Sep 2, 2026

Copy link
Copy Markdown
Collaborator

Problem

Follow-up to #192. `pyproject.toml` declares `cuga` as an editable path dependency at `../cuga-agent` — deliberately outside this repo, since cuga-eval is designed to always integration-test against cuga-agent's live `main` rather than a pinned version (the same reason CI checks it out as a sibling before every `uv sync`).

Dependabot requires path-based dependencies to resolve inside the scanned repo's own source tree. Verified live in this repo (via "Check for updates" in the Dependabot tab): every `uv` ecosystem run fails immediately with "Dependabot couldn't fetch all your path-based dependencies. The affected dependencies were `cuga` at /pyproject.toml." — before it can even look at the other, normal PyPI packages in the same `uv.lock`. This is a known, unresolved upstream limitation (dependabot-core#8428, #12945, #13872 are the same failure class for path/workspace sources outside the repo), not something an `ignore:` rule or similar config can route around.

We never actually wanted Dependabot to version-bump `cuga` itself — it has no pinned version to bump, it always tracks `main`. The real cost is collateral: because `uv.lock` is one unified resolution graph, the unreachable `cuga` source blocks Dependabot from producing updates for any of the other Python packages too.

Nesting `cuga-agent` inside this repo (e.g. a git submodule) would satisfy Dependabot, but pins to one commit instead of tracking `main`, defeating the actual point of this repo — not worth trading away.

Change

Drop the `uv` `package-ecosystem` entry from `.github/dependabot.yml`, with an inline comment explaining why. The `github-actions` entry is unaffected and already proven working — 3 real PRs landed from it (#194, #195, #196), correctly left for manual review since they're major bumps.

`pip-audit` (CI's `security` job + the weekly `dependency-audit.yml`, both already live on `main`) remains the vulnerability-detection backstop for Python deps. Version bumps for them stay manual, same as before this whole effort — just with working CVE detection now instead of a check that blocked unrelated PRs.

What Dependabot still checks after this change

Still active? Notes
`github-actions` version updates ✅ Yes Weekly, patch/minor grouped, unaffected by this PR. Already proven working (#194#196).
Dependabot alerts (Security tab visibility for known CVEs) ✅ Yes Driven by GitHub's dependency-graph scan of `pyproject.toml`/`uv.lock`, independent of `dependabot.yml`'s `updates:` list. Not affected by removing the `uv` entry.
Dependabot security updates (auto-PRs for a specific known-CVE dependency) ⚠️ Attempted, likely still fails for Python This is a separate, repo-wide toggle (already enabled) that works even with no `dependabot.yml` entry for an ecosystem — so GitHub will still try to open a fix PR for a vulnerable Python package when an alert fires. But it shares the same underlying resolver as version updates, so it will most likely hit the identical "couldn't fetch path-based dependencies" failure. Untested here since it requires a live CVE alert to fire rather than an on-demand check — flagging as a known open question, not a settled fact.
`pip-audit` in CI's `security` job ✅ Yes Every PR/push, unaffected — this is what actually replaced the blocking-unrelated-PRs behavior in #192.
`pip-audit` in `dependency-audit.yml` (weekly scheduled sweep) ✅ Yes Runs cleanly today (verified with a real `workflow_dispatch` run); unaffected by this change since it doesn't use Dependabot's resolver at all.
Dependabot version updates for Python packages (aiohttp, langchain, docling, etc.) ❌ No This is what's actually being dropped here. Version bumps for these stay manual — same as before this whole effort, just now backed by working CVE detection (the row above) instead of a check that blocked unrelated PRs.

Verification

  • Confirmed the failure live via the Dependabot tab's "Check for updates," not just from the dependabot-core issues — two consecutive runs, both erroring identically, "No PRs affected."
  • `github-actions` ecosystem confirmed still functioning normally after this change (no changes made to that entry beyond a comment clarifying the 08:00 schedule offset, which previously lived on the now-removed `uv` block).

Summary by CodeRabbit

  • Chores
    • Updated dependency automation to continue managing GitHub Actions updates.
    • Python dependency updates are now handled through existing vulnerability auditing instead of Dependabot.
    • Python dependency pull requests are no longer automatically approved or merged.

pyproject.toml declares cuga as an editable path dependency at
../cuga-agent, deliberately outside this repo, so cuga-eval always
integration-tests against cuga-agent's live main rather than a pinned
version. Dependabot requires path-based dependencies to resolve inside
the scanned repo's own source tree, so every uv ecosystem run fails
outright ("Dependabot couldn't fetch all your path-based dependencies")
before it can look at any of the other, normal PyPI packages in the same
lockfile. Confirmed via dependabot-core#8428, #12945, #13872: this is a
known, unresolved upstream limitation for path/workspace sources outside
the repo, not a config gap - no ignore: rule or similar works around it.

Nesting cuga-agent inside this repo (e.g. a git submodule) would satisfy
Dependabot but pins to one commit instead of tracking main, defeating
the point of this repo, so not worth it just for Dependabot's sake.

pip-audit (CI's security job + the weekly dependency-audit.yml, both
already live) remains the vulnerability-detection backstop for Python
deps; version bumps for them stay manual, same as before this effort.
The github-actions ecosystem is unaffected and already proven working
(#194-#196).
@coderabbitai

coderabbitai Bot commented Sep 2, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: 20a9b7f7-9d6c-4565-9d43-65e3d758d8a3

📥 Commits

Reviewing files that changed from the base of the PR and between a20597d and 8e86781.

📒 Files selected for processing (1)
  • .github/workflows/dependabot-automerge.yml

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The Dependabot configuration removes the failing uv ecosystem entry, documents the external editable dependency limitation, and identifies existing Python audit backstops. Automatic merging now applies only to grouped GitHub Actions patch-minor updates.

Changes

Dependabot maintenance

Layer / File(s) Summary
Dependency audit configuration
.github/dependabot.yml
The unusable uv entry was replaced with a comment about the external cuga editable dependency. The comment identifies pip-audit and dependency-audit.yml as Python vulnerability backstops. The GitHub Actions comment documents the 08:00 schedule and its separation from the 06:00 dependency audit.
Automatic merge policy
.github/workflows/dependabot-automerge.yml
The auto-merge condition no longer includes the python-patch-minor group.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 04581

The change disables unusable Python Dependabot updates and prevents obsolete Python update groups from auto-merging, while retaining GitHub Actions dependency automation.

Suggested reviewers: sergey-zeltyn

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: removing the nonfunctional uv ecosystem from Dependabot because it cannot work with the repository's external editable dependency.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/dependabot-drop-uv-ecosystem

Comment @coderabbitai help to get the list of available commands.

@Sergey-Zeltyn

Copy link
Copy Markdown
Collaborator

Review

Verified independently of the description: the post-change .github/dependabot.yml parses as valid Dependabot v2 with one well-formed entry; the schedule comment is accurate (github-actions at Monday 08:00 UTC, dependency-audit.yml at cron: '0 6 * * 1'); pip-audit still runs in both ci.yml's security job and the weekly sweep, so the stated backstop is real; and a repo-wide grep for references to the removed entry turned up one dependant, below.

The premise holds and is unusually well-evidenced — the failure was confirmed live via the Dependabot tab rather than inferred from the upstream issues, and the submodule alternative is considered and correctly rejected on the grounds that pinning a commit defeats the point of the repo. Flagging the security-updates question as untested rather than settled is also the right call, since it can't be confirmed without a live alert firing. No correctness problems in the diff itself.

Finding: the auto-merge allowlist still names the deleted group — .github/workflows/dependabot-automerge.yml:61

The grep above turned up one workflow that does depend on the removed entry. The auto-merge gate still allowlists python-patch-minor, currently live on main:

(needs.metadata.outputs.update-type == '' && (needs.metadata.outputs.dependency-group == 'python-patch-minor' || needs.metadata.outputs.dependency-group == 'github-actions-patch-minor'))

Once this merges that clause can never match, and its comment — "our own patch/minor-only groups (dependabot.yml)" — is no longer true. The dead branch is harmless on its own; the risk is that whoever later restores a uv entry under a different group name reads the clause as still-wired and doesn't realise it needs updating.

Not a blocker either way — the clause is inert. Worth either folding the one-line deletion in here, since the two files were added together in #192, or tracking it as a follow-up so the pair doesn't drift.

Drive-by, unrelated to this PR

While grepping I noticed dependency-audit.yml points the reader at a path that doesn't exist:

... any --ignore-vuln flags added to one need to be added to all three, see .ai/why/ for prior incidents.

There is no .ai/ directory on main (nor in cuga-agent). Pre-existing from #192, so out of scope here — but it sits on the sync instruction that matters most if anyone ever does add --ignore-vuln, which is exactly when they'd go looking. Worth a follow-up to either create the file or drop the pointer.

@Sergey-Zeltyn Sergey-Zeltyn left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

See comments above. Both are non-blocking, decide what you want to do and then I"ll approve unless new issues arise

That group no longer exists in dependabot.yml since the uv ecosystem
entry was removed, so the clause could never match.
@haroldship

Copy link
Copy Markdown
Collaborator Author

Finding: the auto-merge allowlist still names the deleted group — .github/workflows/dependabot-automerge.yml:61

...Not a blocker either way — the clause is inert. Worth either folding the one-line deletion in here, since the two files were added together in #192, or tracking it as a follow-up so the pair doesn't drift.

Folded in — 8e86781 drops the python-patch-minor disjunct from the auto-merge if:, leaving only github-actions-patch-minor, which is the only group dependabot.yml still defines.

Drive-by, unrelated to this PR

...There is no .ai/ directory on main... Pre-existing from #192, out of scope here...

Agreed this is out of scope for this PR — leaving it as a follow-up rather than scope-creeping the fix in here.

@Sergey-Zeltyn
Sergey-Zeltyn merged commit 4f28d93 into main Sep 8, 2026
6 checks passed
@Sergey-Zeltyn
Sergey-Zeltyn deleted the ci/dependabot-drop-uv-ecosystem branch September 8, 2026 12:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants