Skip to content

chore: add dependabot.yml (pip / github-actions / docker)#21

Merged
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
chore/dependabot-config-v2
Apr 26, 2026
Merged

chore: add dependabot.yml (pip / github-actions / docker)#21
cmeans-claude-dev[bot] merged 1 commit into
mainfrom
chore/dependabot-config-v2

Conversation

@cmeans-claude-dev

Copy link
Copy Markdown
Contributor

Replaces #18. Original PR closed due to a CreateEvent leak under the v1 bot-push design (the first push of chore/dependabot-config was attributed to cmeans instead of the bot, which would block merge under require_last_push_approval once cmeans approves). The v2 design that prevents this class of leak landed in cmeans/claude-dev#4; this replacement branch was created under v2 so the CreateEvent actor is cmeans-claude-dev[bot]. Branch contents identical (same commit cherry-picked).


Summary

Replaces the GitHub starter skeleton with a real Dependabot config tailored to this repo. Tracks weekly version updates across the three ecosystems present in tree:

  • pip at /pyproject.toml + uv.lock (PyYAML, pypinfo, and the dev extras: pytest, pytest-cov, ruff, mypy, types-PyYAML).
  • github-actions at / — workflow files under .github/workflows/ (CI matrix, publish workflows, label automation).
  • docker at /deploy/docker — Dockerfile base image for the optional containerized deployment shape.

Schedule is weekly, Monday 06:00 America/Chicago — keeps PR volume manageable for a solo project. Each ecosystem groups its updates into a single weekly PR (instead of one PR per dep) to keep notification noise down.

Labels (dependencies plus a per-ecosystem qualifier) are applied only if those labels already exist; Dependabot does not auto-create labels. The label-automation workflows continue to drive the QA-flow labels separately.

CHANGELOG entry omitted — repo infrastructure, not a user-visible product change (consistent with how PR #17's community-health files are landing).

Test plan

  • After merge, Dependabot should post an "Initial setup" PR within ~10 min (or on the next Monday at 06:00 CT) — verify it lands and runs the normal CI matrix.
  • Confirm Settings → Code security and analysis → Dependabot shows version updates as enabled.
  • Confirm the three ecosystems are recognized — visit Insights → Dependency graph → Dependabot and check each shows last-updated timestamps.
  • First-week PRs apply the configured labels (or, if any of dependencies/python/github-actions/docker aren't yet defined, the missing labels are silently skipped — this is expected and not a regression).
  • Generated commit messages start with chore(deps) prefix.

@github-actions github-actions Bot added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA Ready for QA Dev work complete — QA can begin review and removed Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA labels Apr 26, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@cmeans cmeans added QA Active QA is actively reviewing; Dev should not push changes and removed Ready for QA Dev work complete — QA can begin review labels Apr 26, 2026

@cmeans cmeans left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

QA round 1 (v2 branch) — clean

Tree-equality check: git diff chore/dependabot-config chore/dependabot-config-v2-qa is empty. v2 is bit-identical to v1 head e76896e; only the CreateEvent attribution differs.

Static verification on head 955ac5c:

Check Result
YAML parses (yaml.safe_load) OK — version: 2, three ecosystems
Ecosystem coverage complete — no other manifests in tree (requirements.txt/Pipfile/package.json/etc.) and no composite actions under .github/actions/
pip directory / pyproject.toml + uv.lock present
github-actions directory / .github/workflows/ has 6 files (ci, pr-labels, pr-labels-ci, publish, test-publish, qa-gate)
docker directory /deploy/docker Dockerfile present (two FROM python:3.13-slim stages — same image, one weekly PR even without an explicit groups: block, so the omission is fine)
Schedule (all 3 ecosystems) weekly Monday 06:00 America/Chicago — matches PR body
commit-message.prefix chore(deps) on all three — matches PR body item 5
groups: "*" on pip + github-actions will fold per-ecosystem updates into one weekly PR each, as advertised
CI on PR head all SUCCESS (test 3.11/3.12/3.13, lint, typecheck, on-push, qa-approved)

Label state on the repo (verified via gh label list): dependencies ✅ exists; python, github-actions, docker ❌ missing. Dependabot will silently skip the missing per-ecosystem qualifiers — exactly the behavior the PR body and test-plan item 4 explicitly call "expected and not a regression." Not a finding; just confirming the runtime state matches the documented assumption. Creating the three remaining labels is already on the maintainer's repo-setup follow-up list.

Test-plan checkboxes: all five items are post-merge runtime checks (Dependabot PR generation, Insights/Dependency-graph rendering, first-week PR labels, generated commit messages). None are tickable pre-merge — leaving all five unchecked for the maintainer.

No findings. Transitioning label to Ready for QA Signoff.

@cmeans

cmeans commented Apr 26, 2026

Copy link
Copy Markdown
Owner

Applying Ready for QA Signoff — see review above. Static verification all green on 955ac5c, v2 tree-identical to v1 e76896e, no findings. All five test-plan items are post-merge runtime checks for the maintainer.

@cmeans cmeans added Ready for QA Signoff QA passed — ready for maintainer final review and merge and removed QA Active QA is actively reviewing; Dev should not push changes labels Apr 26, 2026

@cmeans cmeans left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

LGTM

@cmeans cmeans added QA Approved Manual QA testing completed and passed and removed Ready for QA Signoff QA passed — ready for maintainer final review and merge labels Apr 26, 2026
Tracks weekly updates across the three ecosystems this repo touches:

- pip: runtime + dev deps in pyproject.toml (also picks up uv.lock so
  the version bumps stay reproducible). Covers PyYAML, pypinfo, and
  the dev extras (pytest, pytest-cov, ruff, mypy, types-PyYAML).
- github-actions: workflow files under .github/workflows/ (CI matrix,
  publish workflows, label automation).
- docker: deploy/docker/Dockerfile base image.

Schedule is weekly (Monday 06:00 America/Chicago) to keep PR volume
manageable for a solo project. Each ecosystem groups its updates into
a single PR per week (instead of one PR per dep) so notification
noise stays low. Labels (dependencies + per-ecosystem qualifier) are
applied only if they already exist on the repo; Dependabot does not
auto-create labels.

CHANGELOG entry omitted — repo infrastructure, not user-visible.
@cmeans-claude-dev cmeans-claude-dev Bot force-pushed the chore/dependabot-config-v2 branch from 955ac5c to 145a2b0 Compare April 26, 2026 18:24
@github-actions github-actions Bot added Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA Ready for QA Dev work complete — QA can begin review and removed QA Approved Manual QA testing completed and passed Awaiting CI Dev complete, waiting for CI/Codecov to pass before QA labels Apr 26, 2026
@cmeans-claude-dev cmeans-claude-dev Bot merged commit 7ed7ca5 into main Apr 26, 2026
10 checks passed
@cmeans-claude-dev cmeans-claude-dev Bot deleted the chore/dependabot-config-v2 branch April 26, 2026 18:25
cmeans-claude-dev Bot added a commit to cmeans/mcp-synology that referenced this pull request Apr 26, 2026
Adds .github/dependabot.yml so Dependabot can open weekly version-
update PRs for outdated dependencies.

Two ecosystems tracked:
- pip: runtime + [dev] + [vdsm] extras from pyproject.toml; uv.lock
  at the repo root keeps Dependabot's lockfile bumps reproducible.
- github-actions: every workflow file under .github/workflows/ (ci,
  vdsm, publish, test-publish, qa-gate, pr-labels, pr-labels-ci,
  dependabot-changelog) plus the local composite action at
  .github/actions/install-mcp-publisher.

Schedule weekly Monday 06:00 America/Chicago, single grouped PR per
ecosystem. Labels `dependencies` + ecosystem-tag (`python` /
`github-actions`) — all three labels created on the repo so
Dependabot doesn't silently skip them.

Commit subjects render as `chore(deps): bump <pkg>` via
`prefix: "chore"` + `include: "scope"` (Dependabot auto-appends the
(deps) scope; specifying chore(deps) explicitly in the prefix would
double it to chore(deps)(deps), which is the bug we caught in QA
round 3 — same misconfig is still live on cmeans/pypi-winnow-downloads
and worth fixing there as a follow-up).

No `docker` ecosystem because mcp-synology has no Dockerfile.

Repo-side switches (Dependabot alerts, security updates, secret
scanning, private vulnerability reporting) are already on; this PR
fills in the version-update config that the GitHub-side switches
don't cover. Once merged, Dependabot version-update PRs benefit
from the auto-CHANGELOG workflow shipped in #58.

Pattern ported from cmeans/pypi-winnow-downloads#21 with the
doubled-scope commit-prefix bug fixed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
cmeans-claude-dev Bot added a commit that referenced this pull request Apr 27, 2026
Three mechanical edits:

- pyproject.toml: version "0.1.0" -> "0.1.1"
- CHANGELOG.md: insert `## [0.1.1] - 2026-04-26` directly under
  the (still empty) `## [Unreleased]` header so all 12 PRs'
  worth of bullets that have been accumulating since v0.1.0
  ship are now categorized under the 0.1.1 release. Updated
  the link refs at the bottom: [Unreleased] now compares from
  v0.1.1, and a new [0.1.1] entry compares v0.1.0...v0.1.1.
- uv.lock: refreshed by `uv lock` so the locked
  pypi-winnow-downloads version (0.1.1) matches pyproject.toml.

What ships in v0.1.1 (highlights — full changelog under
## [0.1.1]):

Library fixes (operator-visible):
- collector: _write_health OSError no longer escapes
  per-package isolation. Disk-full / perm errors now produce
  structured `winnow-collect: ...; health file write failed:
  [Errno 28] No space left on device` exit instead of a raw
  traceback. Closes #32.
- collector: stale_threshold_days is now actually consulted —
  the "warn if previous run is older than N days" feature
  documented in config.example.yaml since v0.1.0 finally
  fires. Log-only per the documented v1 contract; degrades
  silently on first-run / unreadable / malformed / future-
  timestamped previous _health.json. Closes #33.

Documentation:
- README acknowledgments / license / BigQuery dataset link
  refresh (PR #15)
- README shields.io URL canonicalization (PR #27, closes #16)
- deploy/README.md Tailscale Funnel as alternative HTTPS
  exposure (PR #22)
- deploy/README.md "Pick an approach" table updated to
  reflect the new Caddy logging shape (in PR #30)

CI / project infrastructure (no PyPI consumer impact, but
hardens future releases):
- Community health files: CONTRIBUTING / CoC / SECURITY /
  issue templates (PR #20)
- .github/dependabot.yml across pip + github-actions + docker
  ecosystems (PR #21)
- Dependabot PR hygiene cascade from cmeans/mcp-synology:
  PULL_REQUEST_TEMPLATE.md + auto-CHANGELOG workflow (App-
  token authenticated so required CI re-fires on the bot's
  HEAD SHA) + dependabot.yml prefix fix (PR #25). Validated
  end-to-end via the first two real Dependabot bumps PR #23
  (codecov-action 5->6) and PR #24 (python 3.13-slim ->
  3.14-slim).
- deploy-smoke CI job that builds the Dockerfile, smokes the
  entrypoint, validates compose+Caddyfile against caddy:2
  (PR #29, closes #7). Promoted to required status check on
  the main-protection ruleset 2026-04-26 22:43 (issue #31
  closed via operator action).
- deploy/caddy/Caddyfile.example gains global error logger +
  per-site access logger with built-in lumberjack rotation,
  documents the validate-as-root gotcha (PR #30). Live CT 112
  deployment fixed in the same change.
- 100% coverage on src/ via real tests (no `# pragma: no
  cover`), with `fail_under = 100` gate in pyproject.toml so
  future regressions trip CI (PR #38, closes #37).

Verified locally: 71/71 pytest pass, ruff/format/mypy clean,
coverage gate green at 100.00%.

After this merges:
1. Tag the squash-merge commit as v0.1.1 and push the tag —
   publish.yml fires and uploads to PyPI via the existing
   trusted-publisher OIDC flow.
2. Update the live CT 112 deployment to install
   pypi-winnow-downloads==0.1.1 from PyPI (currently runs a
   wheel built from main, but pinning to the released
   version keeps deploy reproducible).
3. Close any post-release follow-ups Chris wants tracked.

Co-authored-by: cmeans-claude-dev[bot] <272174644+cmeans-claude-dev[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Ready for QA Dev work complete — QA can begin review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants