Skip to content

Switch app-image Renovate to auto-merge, harden PR gates, auto-generate CHANGELOG#44

Merged
wnstfy merged 1 commit into
mainfrom
chore/hands-off-renovate-and-harden-gates
May 21, 2026
Merged

Switch app-image Renovate to auto-merge, harden PR gates, auto-generate CHANGELOG#44
wnstfy merged 1 commit into
mainfrom
chore/hands-off-renovate-and-harden-gates

Conversation

@wnstfy

@wnstfy wnstfy commented May 21, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Renovate: application-image PRs auto-merge for patch/minor/digest/pinDigest. Majors still gated (last-rule precedence). Add minimumReleaseAge: 3 days + lower prConcurrentLimit to 5.
  • CVE gate: pass --fail-on high so net-new CRITICAL/HIGH CVEs fail the required scan check → blocks merge.
  • Misconfig scan: re-emit Trivy exit code → visible red X on findings. Still informational at branch-protection (job name is misconfig, not in required_status_checks).
  • Weekly release: auto-generate CHANGELOG section from GH's release-notes API; commit on detached HEAD before tagging. Tag carries the up-to-date CHANGELOG; main's CHANGELOG.md stays stale by design (avoids needing a branch-protection bypass for the bot).

Trade-off

main's CHANGELOG.md will drift from the latest release after each weekly cron. The release tarball — what consumers actually download — always has the current file. Anyone browsing the repo on GitHub sees the last manually-touched version. Optional follow-up: update README.md:232 to point at the Releases page as the canonical "current notes" source.

Test plan

  • jq empty renovate.json — parses
  • yamllint + actionlint on all three edited workflows — clean
  • trivy config on current tree — exit 0 (misconfig-blocking won't auto-fail Renovate PRs)
  • CHANGELOG insertion dry-run against actual CHANGELOG.md — produces correct output (new dated entry slots between intro and existing sections)
  • CI scan check passes on this PR (no compose changes → CVE-gate early-exits)
  • CI misconfig check passes (current tree is clean)
  • Weekly cron fires next Tuesday and produces a valid signed release with the auto-generated CHANGELOG entry (will verify after first cron run)

@wnstfy
wnstfy enabled auto-merge (squash) May 21, 2026 16:17
@github-actions

github-actions Bot commented May 21, 2026

Copy link
Copy Markdown
Contributor

Trivy misconfiguration findings (HIGH + CRITICAL)

✅ No HIGH or CRITICAL misconfigurations detected.

@github-actions

Copy link
Copy Markdown
Contributor

CVE delta

Net change

Severity Added Removed Net
Critical 2 0 +2
High 37 0 +37
Medium 206 0 +206
Low 118 0 +118

Changed images: 14 of 30

Per-image detail

docker.io-mariadb-11.8.7

  • Added: C:1 H:11 M:40 L:7
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2025-68121 (CRITICAL) — stdlib
      • CVE-2025-61726 (HIGH) — stdlib
      • CVE-2025-61729 (HIGH) — stdlib
      • CVE-2026-25679 (HIGH) — stdlib
      • CVE-2026-32280 (HIGH) — stdlib
      • CVE-2026-32281 (HIGH) — stdlib
      • CVE-2026-32283 (HIGH) — stdlib
      • CVE-2026-33811 (HIGH) — stdlib
      • ...and 51 more

freshrss-freshrss-1.29.0-alpine

  • Added: C:0 H:7 M:9 L:2
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-6473 (HIGH) — libpq
      • CVE-2026-6475 (HIGH) — libpq
      • CVE-2026-6476 (HIGH) — libpq
      • CVE-2026-6477 (HIGH) — libpq
      • CVE-2026-6479 (HIGH) — libpq
      • CVE-2026-6637 (HIGH) — libpq
      • CVE-2026-6638 (HIGH) — libpq
      • CVE-2025-14017 (MEDIUM) — libcurl
      • ...and 10 more

ghcr.io-stoatchat-api-v0.12.1

  • Added: C:0 H:0 M:7 L:12
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-0915 (MEDIUM) — libc6
      • CVE-2026-4046 (MEDIUM) — libc6
      • CVE-2026-4437 (MEDIUM) — libc6
      • CVE-2026-5435 (MEDIUM) — libc6
      • CVE-2026-5450 (MEDIUM) — libc6
      • CVE-2026-5928 (MEDIUM) — libc6
      • CVE-2026-6238 (MEDIUM) — libc6
      • CVE-2010-4756 (LOW) — libc6
      • ...and 11 more

ghcr.io-stoatchat-crond-v0.12.1

  • Added: C:0 H:0 M:7 L:12
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-0915 (MEDIUM) — libc6
      • CVE-2026-4046 (MEDIUM) — libc6
      • CVE-2026-4437 (MEDIUM) — libc6
      • CVE-2026-5435 (MEDIUM) — libc6
      • CVE-2026-5450 (MEDIUM) — libc6
      • CVE-2026-5928 (MEDIUM) — libc6
      • CVE-2026-6238 (MEDIUM) — libc6
      • CVE-2010-4756 (LOW) — libc6
      • ...and 11 more

ghcr.io-stoatchat-events-v0.12.1

  • Added: C:0 H:0 M:7 L:12
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-0915 (MEDIUM) — libc6
      • CVE-2026-4046 (MEDIUM) — libc6
      • CVE-2026-4437 (MEDIUM) — libc6
      • CVE-2026-5435 (MEDIUM) — libc6
      • CVE-2026-5450 (MEDIUM) — libc6
      • CVE-2026-5928 (MEDIUM) — libc6
      • CVE-2026-6238 (MEDIUM) — libc6
      • CVE-2010-4756 (LOW) — libc6
      • ...and 11 more

ghcr.io-stoatchat-file-server-v0.12.1

  • Added: C:0 H:0 M:7 L:12
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-0915 (MEDIUM) — libc6
      • CVE-2026-4046 (MEDIUM) — libc6
      • CVE-2026-4437 (MEDIUM) — libc6
      • CVE-2026-5435 (MEDIUM) — libc6
      • CVE-2026-5450 (MEDIUM) — libc6
      • CVE-2026-5928 (MEDIUM) — libc6
      • CVE-2026-6238 (MEDIUM) — libc6
      • CVE-2010-4756 (LOW) — libc6
      • ...and 11 more

ghcr.io-stoatchat-gifbox-v0.12.1

  • Added: C:0 H:0 M:7 L:12
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-0915 (MEDIUM) — libc6
      • CVE-2026-4046 (MEDIUM) — libc6
      • CVE-2026-4437 (MEDIUM) — libc6
      • CVE-2026-5435 (MEDIUM) — libc6
      • CVE-2026-5450 (MEDIUM) — libc6
      • CVE-2026-5928 (MEDIUM) — libc6
      • CVE-2026-6238 (MEDIUM) — libc6
      • CVE-2010-4756 (LOW) — libc6
      • ...and 11 more

ghcr.io-stoatchat-proxy-v0.12.1

  • Added: C:0 H:0 M:7 L:12
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-0915 (MEDIUM) — libc6
      • CVE-2026-4046 (MEDIUM) — libc6
      • CVE-2026-4437 (MEDIUM) — libc6
      • CVE-2026-5435 (MEDIUM) — libc6
      • CVE-2026-5450 (MEDIUM) — libc6
      • CVE-2026-5928 (MEDIUM) — libc6
      • CVE-2026-6238 (MEDIUM) — libc6
      • CVE-2010-4756 (LOW) — libc6
      • ...and 11 more

ghcr.io-stoatchat-pushd-v0.12.1

  • Added: C:0 H:0 M:7 L:12
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-0915 (MEDIUM) — libc6
      • CVE-2026-4046 (MEDIUM) — libc6
      • CVE-2026-4437 (MEDIUM) — libc6
      • CVE-2026-5435 (MEDIUM) — libc6
      • CVE-2026-5450 (MEDIUM) — libc6
      • CVE-2026-5928 (MEDIUM) — libc6
      • CVE-2026-6238 (MEDIUM) — libc6
      • CVE-2010-4756 (LOW) — libc6
      • ...and 11 more

ghcr.io-stoatchat-voice-ingress-v0.12.1

  • Added: C:0 H:0 M:7 L:12
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-0915 (MEDIUM) — libc6
      • CVE-2026-4046 (MEDIUM) — libc6
      • CVE-2026-4437 (MEDIUM) — libc6
      • CVE-2026-5435 (MEDIUM) — libc6
      • CVE-2026-5450 (MEDIUM) — libc6
      • CVE-2026-5928 (MEDIUM) — libc6
      • CVE-2026-6238 (MEDIUM) — libc6
      • CVE-2010-4756 (LOW) — libc6
      • ...and 11 more

lscr.io-linuxserver-jellyfin-10.11.8

  • Added: C:0 H:0 M:30 L:7
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2023-37769 (MEDIUM) — libpixman-1-0
      • CVE-2025-10911 (MEDIUM) — libxslt1.1
      • CVE-2025-2173 (MEDIUM) — libzvbi-common
      • CVE-2025-2174 (MEDIUM) — libzvbi-common
      • CVE-2025-2175 (MEDIUM) — libzvbi-common
      • CVE-2025-2176 (MEDIUM) — libzvbi-common
      • CVE-2025-2177 (MEDIUM) — libzvbi-common
      • CVE-2025-25467 (MEDIUM) — libx264-164
      • ...and 29 more

mongo-8.0.23

  • Added: C:1 H:11 M:42 L:4
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2025-68121 (CRITICAL) — stdlib
      • CVE-2025-61726 (HIGH) — stdlib
      • CVE-2025-61729 (HIGH) — stdlib
      • CVE-2026-25679 (HIGH) — stdlib
      • CVE-2026-32280 (HIGH) — stdlib
      • CVE-2026-32281 (HIGH) — stdlib
      • CVE-2026-32283 (HIGH) — stdlib
      • CVE-2026-33811 (HIGH) — stdlib
      • ...and 50 more

n8nio-runners-2.21.4

  • Added: C:0 H:8 M:7 L:0
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2026-33811 (HIGH) — stdlib
      • CVE-2026-33814 (HIGH) — stdlib
      • CVE-2026-39820 (HIGH) — stdlib
      • CVE-2026-39836 (HIGH) — stdlib
      • CVE-2026-42499 (HIGH) — stdlib
      • CVE-2026-44431 (HIGH) — urllib3
      • CVE-2026-44432 (HIGH) — urllib3
      • CVE-2026-45134 (HIGH) — langsmith
      • ...and 7 more

rabbitmq-4.2.6

  • Added: C:0 H:0 M:22 L:2
  • Removed: C:0 H:0 M:0 L:0
    • [NEW]:
      • CVE-2025-45582 (MEDIUM) — tar
      • CVE-2026-2219 (MEDIUM) — dpkg
      • CVE-2026-27456 (MEDIUM) — bsdutils
      • CVE-2026-33845 (MEDIUM) — libgnutls30t64
      • CVE-2026-33846 (MEDIUM) — libgnutls30t64
      • CVE-2026-3832 (MEDIUM) — libgnutls30t64
      • CVE-2026-3833 (MEDIUM) — libgnutls30t64
      • CVE-2026-4046 (MEDIUM) — libc-bin
      • ...and 16 more

…generate CHANGELOG

renovate.json: application images now auto-merge for patch/minor/digest/pinDigest
(matching the existing infrastructure-image rule). Last-rule precedence keeps
`major` bumps gated and labelled `breaking`. Add `minimumReleaseAge: 3 days`
at root so upstream regressions surface before PRs land here; lower
`prConcurrentLimit` from 10 to 5 to limit flood risk.

pr-cve-gate.yml: pass `--fail-on high` to cve-delta.py so any net new CRITICAL
or HIGH CVE makes the workflow's `scan` job exit 2. Since `scan` is the
existing required-status-check on main, this immediately blocks the merge of
any PR that introduces a CVE regression. Sticky comment still posts via
`if: always() && hashFiles('delta.md') != ''`.

pr-misconfig-scan.yml: re-emit Trivy's exit code in a final step so
HIGH/CRITICAL IaC misconfigurations fail the workflow visibly. The job name
remains `misconfig` (not `scan`), so this is currently informational at the
branch-protection layer — add `misconfig` to required_status_checks.contexts
to make it enforce.

weekly-release.yml: between tag-decision and tag-push, build a CHANGELOG
entry from `gh api releases/generate-notes`, prepend it to the CHANGELOG read
from the previous tag (so entries accumulate tag-to-tag), and commit on a
detached HEAD before tagging. Only the tag is pushed — main's CHANGELOG.md
stays at its last manually-touched state, but every release tarball
(`git archive HEAD` at the tag) contains the up-to-date file. Avoids
requiring a branch-protection bypass for the bot.
@wnstfy
wnstfy force-pushed the chore/hands-off-renovate-and-harden-gates branch from 9ab1664 to 35dca9a Compare May 21, 2026 16:21
@wnstfy
wnstfy merged commit 6bdb2ba into main May 21, 2026
4 checks passed
wnstfy added a commit that referenced this pull request May 23, 2026
PR #44 made the weekly-release workflow auto-generate the CHANGELOG.md
entry into each release tag's commit, not into main. The in-tree
CHANGELOG.md (what `git clone` shows) is therefore frozen at the last
manually-touched state, while the Releases page and each release
tarball's CHANGELOG.md carry the current state.

The README sentence at line 232 pointed at the in-tree CHANGELOG.md
as the canonical source, which is now misleading for anyone browsing
the repo on GitHub. Updated to lead with the Releases page link, with
the in-tarball CHANGELOG.md mentioned as the per-release snapshot.
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