Skip to content

Dependency automation and a PR template - #24

Merged
guarzo merged 4 commits into
mainfrom
tooling-deps
Aug 3, 2026
Merged

Dependency automation and a PR template#24
guarzo merged 4 commits into
mainfrom
tooling-deps

Conversation

@guarzo

@guarzo guarzo commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Stage 4. Two files, both in .github/. No source changes.

Dependabot, not Renovate

Renovate is the more capable tool — dependency dashboard, automerge, lockfile maintenance, scheduling windows. None of that pays for itself here:

  • 25 dependencies, one collaborator. Renovate's power shows up at a scale this repo is nowhere near.
  • It costs a trust decision. Renovate means installing a third-party GitHub App with write access to the repo, or self-hosting a runner. Dependabot is already part of GitHub — no new supply-chain surface for a repo that handles EVE SSO refresh tokens and a Discord bot token.
  • Grouping is no longer the differentiator. It was Renovate's main edge until Dependabot shipped groups in 2023, which is what this config uses.

If dependency PRs later become a real time sink, the next step is automerge for patch updates — reachable from Dependabot with a small workflow using dependabot/fetch-metadata and gh pr merge --auto. Not built here; it is a trust decision about CI, not a config detail.

How the grouping is shaped

Dependabot assigns a dependency to the first group whose patterns match, so specific groups are ordered before the catch-all. Verified by simulating the rules against the actual dependency list:

Group Members
react react, react-dom, @types/react, @types/react-dom
drizzle drizzle-orm, drizzle-kit
linting eslint, @eslint/js, typescript-eslint, eslint-config-prettier, @next/eslint-plugin-next, prettier
testing vitest, @playwright/test, msw
types @types/node, @types/pg
minor-and-patch jose, next, pg, pg-boss, tsx, typescript, zod — minor/patch only
(no group) majors of jose, next, pg, pg-boss, tsx, typescript, zod → individual PRs

The intent: things that must move together do, tooling churn batches into one CI run, and the changes worth reading a changelog for arrive alone. A zod major gets its own PR because zod schemas are this app's config source of truth; a Next major because it drags React with it.

Actions are one group — they're all first-party actions/* and bump majors in step.

Security updates are unaffected. applies-to defaults to version-updates, so advisories still arrive as individual PRs immediately rather than waiting for Monday.

Two deliberate omissions

package-ecosystem: docker. The Dockerfile pins the floating tag node:22-alpine, not a digest, so the only PR Dependabot could ever raise is a major tag change to node:24-alpine — editing the Dockerfile alone. scripts/check-node-version.sh requires Dockerfile, .nvmrc and engines to agree, so that PR fails CI by construction and can never merge as-is. Automating one third of a four-file change is noise.

@types/node majors are ignored, for the same invariant. Types ahead of the runtime are the dangerous direction: npm run typecheck passes on APIs Node 22 does not have, and the failure moves to execution. Minors and patches still flow.

No CODEOWNERS

Plainly: it does not earn its keep here. guarzo is the only collaborator, so a CODEOWNERS file would assign every review to the one person who already gets it. It only changes behaviour when paired with "Require review from Code Owners" branch protection — and on a single-owner repo that blocks every PR permanently, since you cannot approve your own. Worth revisiting the day a second maintainer appears.

The PR template does earn its keep

Not as a checklist of commands — CI runs typecheck, lint, format, build, unit and e2e on every PR, and the checks tab is more trustworthy than a ticked box. It asks for the three things CI structurally cannot know:

  • hand-run verification, quoted rather than described
  • deploy ordering — this repo has a real trap here: SYNC_MODE and other secrets must be set before the deploy that reads them, and drizzle migrations run as release_command
  • unprompted findings

Verification

prettier --check clean on both files · repo-wide format:check clean · lint 0 errors, 4 pre-existing no-img-element warnings · actionlint clean · YAML parses and the group rules were simulated against package.json to confirm the table above.

dependabot.yml is validated by GitHub on push, not locally — the Insights → Dependency graph → Dependabot tab will show a parse error if one exists.

Summary by CodeRabbit

  • Chores

    • Added automated weekly dependency update management for npm packages and GitHub Actions.
    • Added grouping and limits to help organize dependency update pull requests.
  • Documentation

    • Added a pull request template covering change rationale, verification, deployment sequencing, and additional considerations.

Dependabot over Renovate: 25 dependencies and one maintainer do not justify
installing a third-party GitHub App with write access. Dependabot's grouping
covers the need with no added trust surface and no infrastructure.

Grouping is ordered first-match-wins so that things which must move together
do (React + its types, drizzle-orm + drizzle-kit), tooling churn batches into
one CI run, and MAJORS of the runtime dependencies — next, zod, pg, pg-boss,
jose, tsx, typescript — match no group and so arrive as individual PRs. Steady
state is roughly one to three PRs a week rather than twenty.

`applies-to` is left unset, so this governs version updates only: security
updates stay ungrouped and immediate.

@types/node majors are ignored. They track Node majors, which this repo pins
in three files that scripts/check-node-version.sh forces to agree; types ahead
of the runtime pass typecheck and fail at execution instead.

The docker ecosystem is deliberately absent — reasoning in the file.

The PR template asks only for what CI cannot check: hand-run verification,
deploy ordering (secrets before the deploy, migration safety), and unprompted
findings. No CODEOWNERS: see the PR description.
@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 30 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 15c773d9-bfd5-47db-ae67-763cccee3a64

📥 Commits

Reviewing files that changed from the base of the PR and between 1177d42 and 08adea1.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (8)
  • .github/dependabot.yml
  • .github/pull_request_template.md
  • .npmrc
  • .nvmrc
  • Dockerfile
  • README.md
  • docs/ops.md
  • package.json
📝 Walkthrough

Walkthrough

The pull request adds weekly Dependabot configuration for npm and GitHub Actions. It also adds a pull request template with contributor guidance, verification details, deployment notes, and reviewer flags.

Changes

Dependency update automation

Layer / File(s) Summary
Dependabot update rules
.github/dependabot.yml
Dependabot now checks npm and GitHub Actions weekly. The configuration groups updates, limits open pull requests, ignores major @types/node updates, and excludes Docker updates.

Pull request process

Layer / File(s) Summary
Pull request template
.github/pull_request_template.md
The template adds sections for change details, manual checks, deployment notes, and reviewer flags.

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

Possibly related PRs

Poem

A rabbit checks the weekly queue,
Groups each update neatly too.
A pull request gets fields to fill,
For checks, deploys, and reviewer will.
Hop, commit, and merge with care!

🚥 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 summarizes both primary changes: Dependabot dependency automation and a pull request template.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 tooling-deps
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch tooling-deps

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

@coderabbitai coderabbitai 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.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/pull_request_template.md:
- Line 27: Update the fly.toml change bullet in the pull request template to use
the grammatically correct article “a” instead of “an,” without changing the rest
of the wording.
- Around line 11-17: Update the verification-output guidance in the pull request
template to explicitly require contributors to redact secrets, credentials,
tokens, cookies, and personal data before quoting live-service or manual-test
output. Preserve the existing instruction to provide actual quoted output and
allow “Nothing beyond CI” for routine changes.
- Around line 1-7: Add a level-one heading before the opening HTML comment in
the pull request template, using a concise title such as “Pull request,” so it
becomes the document’s first content heading and precedes “## What changed and
why.”
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 984a3c1a-8480-4e0d-9271-e31a1844b4d1

📥 Commits

Reviewing files that changed from the base of the PR and between 0968c99 and 1177d42.

📒 Files selected for processing (2)
  • .github/dependabot.yml
  • .github/pull_request_template.md

Comment thread .github/pull_request_template.md
Comment thread .github/pull_request_template.md
deploy that reads it, not with it)
* a generated drizzle migration, and whether it is safe to run against live
data while the old code is still serving
* an fly.toml change: process groups, checks, sizing, release_command

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Correct the article before fly.toml.

Change an fly.toml change to a fly.toml change.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/pull_request_template.md at line 27, Update the fly.toml change
bullet in the pull request template to use the grammatically correct article “a”
instead of “an,” without changing the rest of the wording.

Node 22 entered Maintenance LTS on 2025-10-21; 24 is the current Active
LTS line (maintenance 2026-10-20, end-of-life 2028-04-30). Production
should run Active LTS, so all three pins that
scripts/check-node-version.sh forces to agree move together:
Dockerfile (both stages), .nvmrc, and package.json engines. @types/node
moves to ^24 in the same commit so the types match the runtime rather
than describing APIs it does not have.

The Node 22.9 --env-file-if-exists rationale is preserved in .npmrc,
the Dockerfile, and docs/ops.md — the floor is now well above it, but
that is still why engine-strict is load-bearing for the release
command.

Also corrects the two hard-coded majors in the dependabot.yml comments
added by the preceding commit, which is why this is stacked on
tooling-deps.
guarzo and others added 2 commits August 3, 2026 17:33
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@guarzo
guarzo merged commit 7260791 into main Aug 3, 2026
4 checks passed
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.

1 participant