deps: four action majors + denoland/deno 2.9.5 #23

Merged
julian merged 3 commits from deps/actions-majors-and-deno-2.9.5 into main 2026-08-11 09:20:36 +02:00
Owner

Resolves the six weekly dep-check issues in one pass.

Actions (all major bumps — breaking changes read, none apply)

Action From To Breaking change Why it doesn't bite
actions/checkout v6 v7.0.1 Blocks fork-PR checkout for pull_request_target/workflow_run Neither trigger used; both workflows already gate to same-repo PRs
docker/login-action v3 v4.6.0 node24 runtime, ESM Runner already executes checkout v6 (node24) — runtime proven
docker/setup-buildx-action v3 v4.2.0 node24, ESM, "remove deprecated inputs/outputs" Used with no inputs at all
docker/build-push-action v6 v7.3.0 node24, ESM, removes DOCKER_BUILD_NO_SUMMARY/DOCKER_BUILD_EXPORT_RETENTION_DAYS env vars, legacy export-build tool Env vars never set; every input used (context/file/push/tags/build-args/cache-from/cache-to) survives in v7

SHAs resolved from the code.forgejo.org mirrors — the scheme was validated by reproducing the existing pin (v6 mirror tag = the currently pinned SHA). Tag comments now name the exact release the SHA points at.

Deno image 2.5.6 → 2.9.5 (build stage + bin- COPY)

Same major line, but 2.9.5 ships TypeScript 6.0.3 (vs 5.9.2), so the whole CI surface was run against this checkout with a real 2.9.5 binary:

  • deno install --frozen — lockfile survives, no re-resolution
  • deno fmt --check — clean (the HTML/CSS/SVG exclusion in deno.json already anticipated the 2.5.6/2.9.x formatter divergence)
  • deno lint — clean
  • deno task check — clean under TS 6.0.3
  • deno task build — clean (Vite 7 pin unaffected)
  • deno task test — same result as 2.5.6: 299 pass, the same 4 Windows-only failures (git-patch/unix-path tests) on both versions, so no 2.9.5 regression
  • tools/dep-check --dry-run — parses every new pin, reports all six current

Digests are the multi-arch index digests from Docker Hub; the method reproduces the existing 2.5.6 pins exactly. CI's toolchain follows automatically — .forgejo/deno.sh reads the image from the Dockerfile FROM line.

What CI on this PR actually covers

Worth stating precisely rather than leaving to be assumed. verify runs actions/checkout and deno task ci, so of the four action bumps this PR proves exactly one on the real (Linux) toolchain, plus the whole Deno 2.9.5 surface.

The other three — login-action, setup-buildx-action, build-push-action — live in build, gated on github.event_name == 'push' && github.ref == 'refs/heads/main'. They first execute on the merge commit, in the job that ends in the SSH deploy. The blast radius is bounded: all three run before the deploy steps, so a failure there aborts the job and production keeps serving the image it already has. It is a rollback of a not-yet-deployed build, not a broken deploy — but the first real execution is post-merge, and the local verification above is what stands in for it.

Follow-ups from review

  • Tag-comment convention: docs/dependencies.md taught @<sha> # v6 and its re-pinning recipe grepped v6, which nothing in the tree would match after this merge. It now teaches the exact release and says what that does and does not buy — the check sees a patch bump either way (compare treats a missing component as zero); what the exact release adds is that the comment still identifies which commit is pinned once the major tag moves.
  • The deno.json fmt-exclusion comment explained itself in terms of the 2.5.6 pin this PR removes. Restated as the general cross-version instability, with the note that the exclusion is still load-bearing on the version pinned today rather than inherited.
  • The dry run's one non-green line (opsdeck rig-base: registry answered HTTP 401) is unrelated to these bumps — a locally built dev-rig image that dep-check resolves against Docker Hub. Split out as #25.

Closes #13
Closes #14
Closes #15
Closes #16
Closes #17
Closes #18

🤖 Generated with Claude Code

Resolves the six weekly dep-check issues in one pass. ## Actions (all major bumps — breaking changes read, none apply) | Action | From | To | Breaking change | Why it doesn't bite | |---|---|---|---|---| | actions/checkout | v6 | v7.0.1 | Blocks fork-PR checkout for `pull_request_target`/`workflow_run` | Neither trigger used; both workflows already gate to same-repo PRs | | docker/login-action | v3 | v4.6.0 | node24 runtime, ESM | Runner already executes checkout v6 (node24) — runtime proven | | docker/setup-buildx-action | v3 | v4.2.0 | node24, ESM, "remove deprecated inputs/outputs" | Used with no inputs at all | | docker/build-push-action | v6 | v7.3.0 | node24, ESM, removes `DOCKER_BUILD_NO_SUMMARY`/`DOCKER_BUILD_EXPORT_RETENTION_DAYS` env vars, legacy export-build tool | Env vars never set; every input used (`context`/`file`/`push`/`tags`/`build-args`/`cache-from`/`cache-to`) survives in v7 | SHAs resolved from the code.forgejo.org mirrors — the scheme was validated by reproducing the existing pin (`v6` mirror tag = the currently pinned SHA). Tag comments now name the exact release the SHA points at. ## Deno image 2.5.6 → 2.9.5 (build stage + `bin-` COPY) Same major line, but 2.9.5 ships TypeScript 6.0.3 (vs 5.9.2), so the whole CI surface was run against this checkout with a real 2.9.5 binary: - `deno install --frozen` — lockfile survives, no re-resolution - `deno fmt --check` — clean (the HTML/CSS/SVG exclusion in deno.json already anticipated the 2.5.6/2.9.x formatter divergence) - `deno lint` — clean - `deno task check` — clean under TS 6.0.3 - `deno task build` — clean (Vite 7 pin unaffected) - `deno task test` — same result as 2.5.6: 299 pass, the same 4 Windows-only failures (git-patch/unix-path tests) on both versions, so no 2.9.5 regression - `tools/dep-check --dry-run` — parses every new pin, reports all six current Digests are the multi-arch index digests from Docker Hub; the method reproduces the existing 2.5.6 pins exactly. CI's toolchain follows automatically — `.forgejo/deno.sh` reads the image from the Dockerfile `FROM` line. ## What CI on this PR actually covers Worth stating precisely rather than leaving to be assumed. `verify` runs `actions/checkout` and `deno task ci`, so of the four action bumps this PR proves exactly one on the real (Linux) toolchain, plus the whole Deno 2.9.5 surface. The other three — login-action, setup-buildx-action, build-push-action — live in `build`, gated on `github.event_name == 'push' && github.ref == 'refs/heads/main'`. They first execute on the merge commit, in the job that ends in the SSH deploy. The blast radius is bounded: all three run before the deploy steps, so a failure there aborts the job and production keeps serving the image it already has. It is a rollback of a not-yet-deployed build, not a broken deploy — but the first real execution is post-merge, and the local verification above is what stands in for it. ## Follow-ups from review - Tag-comment convention: `docs/dependencies.md` taught `@<sha> # v6` and its re-pinning recipe grepped `v6`, which nothing in the tree would match after this merge. It now teaches the exact release and says what that does and does not buy — the check sees a patch bump either way (`compare` treats a missing component as zero); what the exact release adds is that the comment still identifies which commit is pinned once the major tag moves. - The `deno.json` fmt-exclusion comment explained itself in terms of the 2.5.6 pin this PR removes. Restated as the general cross-version instability, with the note that the exclusion is still load-bearing on the version pinned today rather than inherited. - The dry run's one non-green line (`opsdeck rig-base: registry answered HTTP 401`) is unrelated to these bumps — a locally built dev-rig image that dep-check resolves against Docker Hub. Split out as #25. Closes #13 Closes #14 Closes #15 Closes #16 Closes #17 Closes #18 🤖 Generated with [Claude Code](https://claude.com/claude-code)
All four move a major. The breaking changes were read and none of them
touch this repository:

- actions/checkout v7: blocks fork-PR checkout for pull_request_target
  and workflow_run triggers. Neither trigger is used here, and both
  workflows already gate to same-repository pull requests.
- docker/login-action v4, setup-buildx-action v4, build-push-action v7:
  node24 runtime + ESM. The runner already executes checkout v6 (node24),
  so the runtime is proven on cth-ubuntu-latest. Every input used here
  (registry/username/password; context/file/push/tags/build-args/
  cache-from/cache-to) survives; the removed build-push env vars
  (DOCKER_BUILD_NO_SUMMARY, DOCKER_BUILD_EXPORT_RETENTION_DAYS) were
  never set, and setup-buildx is used with no inputs at all.

SHAs resolved from the code.forgejo.org mirrors, same scheme as the
existing pins (v6 tag on the mirror matches the old pinned SHA). The
tag comments name the exact release now rather than the floating major,
which is what the pin actually points at.

Closes #13
Closes #16
Closes #17
Closes #18

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
deps(image): denoland/deno 2.5.6 -> 2.9.5 (build stage and bin COPY)
All checks were successful
Build and Deploy / verify (pull_request) Successful in 54s
Build and Deploy / build (pull_request) Has been skipped
Dependency Check / dependencies (pull_request) Successful in 1m11s
0eabe16ee7
Same major line. Digests are the multi-arch index digests from Docker
Hub, fetched the same way the old pins verify (the 2.5.6 tags reproduce
the pinned digests exactly).

Verified with a real 2.9.5 binary against this checkout: deno install
--frozen (lockfile survives), deno fmt --check, deno lint, deno task
check (2.9.5 ships TypeScript 6.0.3 - clean), deno task build, and the
test suite, which shows the same 4 pre-existing Windows-only failures
under 2.5.6 and 2.9.5 (git-patch and unix-path tests; 299 pass on both).
tools/dep-check --dry-run parses all new pins and reports them current.

CI's toolchain follows automatically: .forgejo/deno.sh reads the image
from this Dockerfile's FROM line. The deno.json fmt exclusion comment is
updated to match the new pin; the HTML/CSS/SVG exclusion stays, that
instability is between versions generally, not specific to 2.5.6.

Closes #14
Closes #15

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
thisilike approved these changes 2026-08-11 08:16:19 +02:00
thisilike left a comment

Approved. Every claim in the description was re-derived independently rather than taken on trust, and all of them hold.

What was verified, and how

Action SHAs. All four resolve to the tags the comments name on code.forgejo.org — the host the runner actually resolves uses: against:

Action Pinned SHA Mirror tag
actions/checkout 3d3c42e5 v7.0.1
docker/login-action dbcb8138 v4.6.0
docker/setup-buildx-action bb05f3f5 v4.2.0
docker/build-push-action 53b7df96 v7.3.0

checkout v7.0.1 is the same SHA on github.com, so the mirror is a true mirror and not a rebuild. The old pins reproduce as well (login-action v3 = c94ce9fb), which is the validation the description claims. All four are the newest tag on the mirror, and tools/dep-check --dry-run agrees: six pins, all up to date.

Image digests. b429777c and 0d1262fa are the multi-arch index digests Docker Hub reports for 2.9.5 and bin-2.9.5; 2.9.5 is the newest tag on that line.

Breaking changes. The release notes match the table item for item. checkout v7 is PR #2454, "block checking out fork pr for pull_request_target and workflow_run" — neither trigger appears in either workflow, and both already gate to same-repository pull requests. The three Docker actions are node24 + ESM, plus the removed envs and deprecated inputs. The node24 argument checks out from the other side too: the previously pinned checkout SHA already declares using: node24, so the runtime is proven rather than assumed. Every input used here still exists in the v7.3.0 and v4.6.0 action.yml, and DOCKER_BUILD_NO_SUMMARY / DOCKER_BUILD_EXPORT_RETENTION_DAYS appear nowhere in the tree.

Toolchain. Re-run against this checkout on 2.9.4 (same TypeScript 6.0.3 as 2.9.5): deno install --frozen clean with deno.lock untouched, fmt --check clean, lint clean, task check clean, 303 passed / 0 failed — which is the described 299 plus exactly the 4 that fail only on Windows per #20.

Then docker/Dockerfile was built end to end. The build stage runs install --frozen, task build and task check under the real 2.9.5 image and passes, and the bin-2.9.5 binary executes on the pinned bookworm-slim digest. That last one is the check worth naming: a bin- bump can raise the glibc floor and break only at runtime, in the stage the type checker never sees. It does not here — the runtime image reports deno 2.9.5.

The fmt exclusion. Keeping it is correct, and it is still load-bearing rather than inherited: remove the exclude and 2.9.4 rewrites favicon.svg. Under 2.5.6 all three files differ, index.html on precisely the <!doctype> / <!DOCTYPE> split the comment describes.

Bookkeeping. #13/#16/#17/#18 are the action issues and #14/#15 the image issues; the commits close the right ones.

Nits — none blocking

  1. docs/dependencies.md was not moved with the convention. This PR deliberately changes tag comments from the floating major to the exact release, which is the better scheme. But the document that defines the convention still teaches @<sha> # v6 (lines 125, 146, 172), and its re-pinning recipe greps select(.name == "v6") (line 179). After this merges the repository contains zero pins written that way, so the doc describes a style nothing uses.

  2. "The verify job on this PR is the remaining proof" claims more than it delivers. verify runs checkout and deno task ci. login-action, setup-buildx-action and build-push-action all live in build, which is gated on github.event_name == 'push' && github.ref == 'refs/heads/main' — so three of the four action bumps first execute on the merge commit, inside the job that ends in the SSH deploy. The blast radius is small and worth stating rather than glossing: a failure there aborts before the deploy step, so production keeps running the old image. Better to say the coverage stops at checkout than to let the sentence imply otherwise.

  3. The deno.json comment has become archaeology. It now explains the exclusion in terms of a pin the repository no longer has, so it needs rewriting at every bump — and the commit message argues the opposite, that the instability "is between versions generally, not specific to 2.5.6". Stating the general instability, without a version pair, would match the reasoning and stop the comment from rotting.

Unrelated to this PR, noted because it is the one non-green line in the dry run: opsdeck rig-base: registry answered HTTP 401. docker/dev-rig/Dockerfile builds FROM opsdeck:rig-base, a locally built image that dep-check tries to resolve against Docker Hub. It arrived with #10 and belongs in its own issue.

Approved. Every claim in the description was re-derived independently rather than taken on trust, and all of them hold. ## What was verified, and how **Action SHAs.** All four resolve to the tags the comments name on `code.forgejo.org` — the host the runner actually resolves `uses:` against: | Action | Pinned SHA | Mirror tag | |---|---|---| | actions/checkout | `3d3c42e5` | v7.0.1 | | docker/login-action | `dbcb8138` | v4.6.0 | | docker/setup-buildx-action | `bb05f3f5` | v4.2.0 | | docker/build-push-action | `53b7df96` | v7.3.0 | checkout v7.0.1 is the same SHA on github.com, so the mirror is a true mirror and not a rebuild. The old pins reproduce as well (login-action v3 = `c94ce9fb`), which is the validation the description claims. All four are the newest tag on the mirror, and `tools/dep-check --dry-run` agrees: six pins, all up to date. **Image digests.** `b429777c` and `0d1262fa` are the multi-arch index digests Docker Hub reports for `2.9.5` and `bin-2.9.5`; 2.9.5 is the newest tag on that line. **Breaking changes.** The release notes match the table item for item. checkout v7 is PR #2454, "block checking out fork pr for pull_request_target and workflow_run" — neither trigger appears in either workflow, and both already gate to same-repository pull requests. The three Docker actions are node24 + ESM, plus the removed envs and deprecated inputs. The node24 argument checks out from the other side too: the *previously* pinned checkout SHA already declares `using: node24`, so the runtime is proven rather than assumed. Every input used here still exists in the v7.3.0 and v4.6.0 `action.yml`, and `DOCKER_BUILD_NO_SUMMARY` / `DOCKER_BUILD_EXPORT_RETENTION_DAYS` appear nowhere in the tree. **Toolchain.** Re-run against this checkout on 2.9.4 (same TypeScript 6.0.3 as 2.9.5): `deno install --frozen` clean with `deno.lock` untouched, `fmt --check` clean, `lint` clean, `task check` clean, 303 passed / 0 failed — which is the described 299 plus exactly the 4 that fail only on Windows per #20. Then `docker/Dockerfile` was built end to end. The build stage runs `install --frozen`, `task build` and `task check` under the real 2.9.5 image and passes, and the `bin-2.9.5` binary executes on the pinned `bookworm-slim` digest. That last one is the check worth naming: a `bin-` bump can raise the glibc floor and break only at runtime, in the stage the type checker never sees. It does not here — the runtime image reports `deno 2.9.5`. **The fmt exclusion.** Keeping it is correct, and it is still load-bearing rather than inherited: remove the exclude and 2.9.4 rewrites `favicon.svg`. Under 2.5.6 all three files differ, `index.html` on precisely the `<!doctype>` / `<!DOCTYPE>` split the comment describes. **Bookkeeping.** #13/#16/#17/#18 are the action issues and #14/#15 the image issues; the commits close the right ones. ## Nits — none blocking 1. **`docs/dependencies.md` was not moved with the convention.** This PR deliberately changes tag comments from the floating major to the exact release, which is the better scheme. But the document that defines the convention still teaches `@<sha> # v6` (lines 125, 146, 172), and its re-pinning recipe greps `select(.name == "v6")` (line 179). After this merges the repository contains zero pins written that way, so the doc describes a style nothing uses. 2. **"The verify job on this PR is the remaining proof" claims more than it delivers.** `verify` runs checkout and `deno task ci`. login-action, setup-buildx-action and build-push-action all live in `build`, which is gated on `github.event_name == 'push' && github.ref == 'refs/heads/main'` — so three of the four action bumps first execute on the merge commit, inside the job that ends in the SSH deploy. The blast radius is small and worth stating rather than glossing: a failure there aborts before the deploy step, so production keeps running the old image. Better to say the coverage stops at checkout than to let the sentence imply otherwise. 3. **The `deno.json` comment has become archaeology.** It now explains the exclusion in terms of a pin the repository no longer has, so it needs rewriting at every bump — and the commit message argues the opposite, that the instability "is between versions generally, not specific to 2.5.6". Stating the general instability, without a version pair, would match the reasoning and stop the comment from rotting. Unrelated to this PR, noted because it is the one non-green line in the dry run: `opsdeck rig-base: registry answered HTTP 401`. `docker/dev-rig/Dockerfile` builds `FROM opsdeck:rig-base`, a locally built image that dep-check tries to resolve against Docker Hub. It arrived with #10 and belongs in its own issue.
docs: pin comments name the exact release, not the floating major
All checks were successful
Build and Deploy / verify (pull_request) Successful in 53s
Build and Deploy / build (pull_request) Has been skipped
Dependency Check / dependencies (pull_request) Successful in 1m10s
5da820e76e
Review of #23 caught the convention change landing without the document
that teaches it. dependencies.md still wrote `@<sha> # v6` and its
re-pinning recipe grepped `select(.name == "v6")`, so once this branch
merges the repository contains zero pins written the way the doc
describes.

The doc now teaches the exact release and says why: a major tag is itself
a movable pointer, so `# v7` stops recording which commit is pinned the
moment the maintainer repoints it, while `# v7.0.1` stays checkable
against the SHA the curl recipe returns. What it does not claim is better
detection — `compare` treats a missing component as zero, so a `# v7` pin
is still told about v7.0.2. The gain is identification. The `2.5.6`
examples move to `2.9.5` with the pins.

The deno.json fmt exclusion comment explained itself in terms of the
2.5.6 pin this branch removes, so it would need rewriting at every
toolchain bump — and the commit message argued the opposite, that the
instability is between versions generally. It now states that, without a
version pair, and records that the exclusion is still load-bearing on the
version pinned today rather than inherited.
julian merged commit 1feb69b235 into main 2026-08-11 09:20:36 +02:00
julian deleted branch deps/actions-majors-and-deno-2.9.5 2026-08-11 09:20:36 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
OpsDeck/core!23
No description provided.