Raise the GitHub Actions majors and enable Dependabot - #10
Conversation
Every action in this repository was two or three majors behind: checkout v4 against v7, build-push-action v5 against v7, login-action and setup-buildx-action v3 against v4. Versions resolved from the registry rather than recalled, and pinned to the floating major so patches arrive without a commit. Checked what each major actually breaks, since three of them are on the publishing path: - checkout v7 blocks checking out a fork PR under pull_request_target and workflow_run. Neither trigger exists here. v6 moved credentials to a separate file; nothing here reads them. - build-push-action v7 dropped DOCKER_BUILD_NO_SUMMARY and DOCKER_BUILD_EXPORT_RETENTION_DAYS, neither of which is set. v6 added the build summary, which is a gain: it reports what was built without reading the log. - setup-buildx-action v4 removed deprecated inputs and outputs; the calls here pass none. - All four now default to Node 24 and need runner v2.327.1 or newer. Everything runs on GitHub-hosted runners as of the previous commit, so this is satisfied by construction - it would have been a real constraint against the self-hosted runners that change retired.
The actions here fell two or three majors behind because nothing was watching them. With floating-major pins this raises a PR only when a new major ships - a few times a year - and a 7-day cooldown skips brand-new releases, which is the window in which a compromised version is usually caught and yanked. Only github-actions is tracked. The pip packages in images/*/Dockerfile carry no version constraints at all, so there is nothing to bump until they are pinned, and the framework versions are deliberately manual: they are chosen against Espressif's compatibility matrix, not against newest.
…otes The code-review workflow found six confirmed defects in the bump. build-push-action v6 turned on build-record upload by default, and reading the v7 notes for removed toggles missed that the feature itself arrived a major earlier. On a public repository that means every leg of every push publishes an archive of the full build log and metadata, downloadable by anyone off the run page, against the repo's artifact storage. DOCKER_BUILD_RECORD_UPLOAD: false turns it off. The summary stays - it reports what was built without opening the log and costs no storage. The dependabot.yml comment claimed a cooldown protects against compromised releases. It does not, and saying so was worse than saying nothing: with floating majors, patches and minors arrive with no PR at all, so the cooldown delays only the major bump that already gets human review. Re-pointing an existing @vn tag - the tj-actions/changed-files shape - is not delayed or detected by anything here. Pinning by SHA is what closes that, at the cost of a commit per patch; the comment now says which trade this repository took. It also read as an exhaustive list of what is not tracked while omitting two real gaps: `FROM python:3.11-slim-bookworm` in images/platformio/Dockerfile, which the docker ecosystem would cover, and the linter images pinned inside `run:` blocks, which no ecosystem sees at all. Both are named now, as is the fact that a bump here edits a workflow that is in its own paths filter, so every Dependabot PR costs a full rebuild - which is why the updates are grouped into one PR. The CI examples in all three image READMEs still said actions/checkout@v4 and actions/upload-artifact@v4. Nothing in this repo can catch that: Dependabot reads workflow files, lint.yml lints workflow files, and these are Markdown. Raised to v7, and CLAUDE.md now says they have to move with the workflows.
There was a problem hiding this comment.
🟢 Ready to approve
The action major bumps and Dependabot configuration are consistent across workflows and documentation, and the build-record artifact upload default is explicitly disabled for this public repository.
This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.
Pull request overview
This PR updates this repository’s GitHub Actions dependencies to current major versions and introduces Dependabot configuration to keep action majors from drifting again. It aligns the workflows and documentation examples with the new action majors and explicitly disables build-record artifact uploads introduced by newer docker/build-push-action defaults (important for a public repo).
Changes:
- Bump GitHub Actions used in workflows to newer majors (
actions/checkout@v7,docker/build-push-action@v7,docker/login-action@v4,docker/setup-buildx-action@v4) and addDOCKER_BUILD_RECORD_UPLOAD: falsein build workflows. - Add
.github/dependabot.ymlto trackgithub-actionsupdates on a weekly cadence, grouped into a single PR, with a cooldown. - Update image README CI snippets to match the new major versions (
checkout@v7,upload-artifact@v7), and record the “floating major + Dependabot” rule inCLAUDE.md.
File summaries
| File | Description |
|---|---|
| images/platformio/README.md | Updates GitHub Actions example to checkout@v7 and upload-artifact@v7. |
| images/esp-matter/README.md | Updates GitHub Actions example to checkout@v7 and upload-artifact@v7. |
| images/esp-idf/README.md | Updates GitHub Actions example to checkout@v7 and upload-artifact@v7. |
| CLAUDE.md | Documents the repo convention for floating major pins and Dependabot-driven major bumps. |
| .github/workflows/runner-smoke.yml | Bumps actions/checkout to v7. |
| .github/workflows/platformio.yml | Bumps Docker/checkout actions and disables build-record upload via DOCKER_BUILD_RECORD_UPLOAD: false. |
| .github/workflows/lint.yml | Bumps actions/checkout to v7. |
| .github/workflows/esp-idf.yml | Bumps Docker/checkout actions and disables build-record upload via DOCKER_BUILD_RECORD_UPLOAD: false (applies to esp-idf + esp-matter jobs). |
| .github/dependabot.yml | Adds Dependabot config for grouped weekly github-actions major bumps with cooldown. |
Review details
- Files reviewed: 9/9 changed files
- Comments generated: 0
- Review effort level: Lite
We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.
Every action here was two or three majors behind, because nothing was watching.
actions/checkoutdocker/build-push-actiondocker/login-actiondocker/setup-buildx-actionVersions resolved from the registry rather than recalled, pinned to the floating
major so patches arrive without a commit.
What each major actually breaks
Three of these sit on the publishing path, so this was checked rather than assumed:
pull_request_targetandworkflow_run. Neither trigger exists here. v6 moved credentials to a separatefile; nothing here reads them.
DOCKER_BUILD_NO_SUMMARYandDOCKER_BUILD_EXPORT_RETENTION_DAYS, neither of which was set — but v6 turnedon build-record upload by default, and reading v7's notes for removals missed
a feature that arrived a major earlier. On a public repository that publishes an
archive of the full build log and metadata per leg per push, downloadable by
anyone.
DOCKER_BUILD_RECORD_UPLOAD: falseturns it off; the summary stays,since it reports what was built without opening the log and costs no storage.
pass none.
construction now that everything is GitHub-hosted — it would have been a real
constraint against the self-hosted runners the previous PR retired.
Dependabot
github-actionsonly, weekly, grouped into one PR, 7-day cooldown.The comment in that file is explicit about what the setup does not buy, because
the first draft claimed protection it cannot give: with floating majors, patches
and minors arrive with no PR at all, so the cooldown delays only the major
bump that already gets human review. Re-pointing an existing
@vNtag — thetj-actions/changed-filesshape — is neither delayed nor detected. Pinning bycommit SHA is what closes that, at the cost of a commit per patch; the file now
states which trade was taken instead of implying the question does not exist.
Also named there, so nobody has to re-derive it:
FROM python:3.11-slim-bookwormin
images/platformio/Dockerfile(the docker ecosystem would cover it — aseparate decision), the linter images pinned inside
run:blocks (no ecosystemsees a
docker runargument), and the framework versions, which are chosenagainst Espressif's compatibility matrix rather than against "newest".
One consequence worth stating: a bump here edits a workflow file that sits in its
own
paths:filter, so every Dependabot PR triggers a full rebuild and merging itrepublishes
latestwith a new digest for unchanged image contents. At a fewmajors a year that is acceptable — and it is why the updates are grouped.
README examples
All three image READMEs still documented
actions/checkout@v4andactions/upload-artifact@v4in their CI examples, three majors stale. Nothing inthis repository could catch that: Dependabot reads workflow files,
lint.ymllintsworkflow files, and these are Markdown. Raised to v7, with the rule recorded in
CLAUDE.md.Verification
./scripts/lint.shgreenDOCKER_BUILD_RECORD_UPLOADconfirmed against build-push-action's own README —default
true, and the v5→v7 path crosses itReviewed by
codex-review(xhigh) — no findings. Thecode-reviewworkflow (high) — tendefects, six confirmed, all applied. The two that mattered are above: the
build-record artifacts and a Dependabot comment that promised a guarantee the
configuration does not provide.