Skip to content

ci(api-docs/rust,cpp): bump the last two stale template pins - #136

Merged
WomB0ComB0 merged 1 commit into
mainfrom
ci/api-docs-rust-cpp-pins
Sep 22, 2026
Merged

WomB0ComB0 merged 1 commit into
mainfrom
ci/api-docs-rust-cpp-pins

Conversation

@WomB0ComB0

@WomB0ComB0 WomB0ComB0 commented Sep 22, 2026

Copy link
Copy Markdown
Member

What

Bumps the three stale action pins in each of the two remaining api-docs
templates — api-docs.rust.yml and api-docs.cpp.yml. Pins only; no other
line in either file changes.

Action Was Now Occurrences per file
actions/checkout de0fac2e… v6.0.2 3d3c42e5… v7.0.1 2
peter-evans/create-pull-request 271a8d03… v7.0.8 5f6978fa… v8.1.1 1

This finishes what #134 (typescript) and #135 (python) started. Built on
current main, with both merged.

Why these templates rot

Dependabot's github-actions ecosystem only scans .github/workflows/ and
.github/actions/. This repo's dependabot.yml declares directory: / with
patterns: ["*"], which reads as "everything" but does not widen that scan —
automation/source-repo-templates/ is invisible to it. The templates have
therefore never received a bump PR.

The consumers do get Dependabot, and have been drifting forward weekly. Live
pins on each consumer's default branch today:

repo template checkout create-pull-request
npm typescript v7.0.1 v8.1.1
pypi python v7.0.1 v8.1.1
crates rust v7.0.1 v8.1.1
vcpkg cpp v7.0.1 v8.1.1
dotnet-sdk dotnet v6.0.2 v7.0.8

The same split shows inside this repo: lychee.yml runs checkout v7.0.1 and
changelog-sync.yml runs v7.0.0 + create-pull-request v8.1.1, while the
templates sitting a few directories away named v6.0.2 and v7.0.8. Same repo,
same Dependabot config, opposite freshness.

That matters because automation/sync-templates.sh does a wholesale
cp "$template_path" "$target_workflow" — it replaces the consumer's file
rather than merging into it. Running the sync before this PR would have walked
crates and vcpkg back a major on both actions.

Divergence audit (before bumping)

Each template was diffed against the live .github/workflows/api-docs.yml on
its consumer's default branch, taken from the mapping in sync-templates.sh
(rust → crates@master, cpp → vcpkg@main).

Both diffs were exactly three hunks, all of them pin lines. No
downstream-only logic of any kind — no security mitigation, no bug fix, no
comment carrying rationale. Nothing to rescue upstream, and nothing the blind
cp would have destroyed beyond the pins themselves.

This is a genuinely different result from #134 and #135, and the reason is
structural rather than luck: those templates call setup-bun and setup-uv,
cache-populating actions, which is what made no-cache: true necessary
downstream. The rust and cpp templates call no caching action at all — their
only uses: steps are the two checkouts and create-pull-request. The one
occurrence of the word "cache" in either file is a comment about the runner's
tool cache, identical on both sides. So the cache-poisoning class that
produced the downstream fixes in npm and pypi has no surface here.

After the bump, diff between each template and its consumer's live workflow
is empty — byte-identical. The next sync is a no-op for both repos.

Major-version review

Both bumps cross a major, so the input surface of each was parsed out of
action.yml at the new pinned SHA and checked against what the templates
actually pass. Both templates pass identical input sets.

actions/checkout v6.0.2 → v7.0.1. The templates pass 5 of the 21
inputs v7.0.1 declares
ref, persist-credentials (source checkout);
repository, path, token, persist-credentials (docs checkout). All five
are declared in v7.0.1. No input or output was removed across the major; one
was added (allow-unsafe-pr-checkout, default false).

That new input is the whole of v7.0.0's breaking change: it blocks checking out
fork PR code under pull_request_target and workflow_run. Neither template
uses either trigger — both are workflow_dispatch + push: tags — so the gate
does not engage. The rest of v7.0.0 is an ESM/dependency refresh.

peter-evans/create-pull-request v7.0.8 → v8.1.1. The templates pass
12 of the 24 inputs v8.1.1 declaresadd-paths, author, base,
body, branch, commit-message, committer, delete-branch, labels,
path, title, token. All 12 are declared in v8.1.1.

The action.yml diff between the two SHAs is a single line: using: node20
using: node24. Identical input names, identical outputs, no default
changed. v8.0.0's release notes name one requirement — Actions Runner v2.327.1
or later, and only for self-hosted runners. Both templates are
runs-on: ubuntu-latest. Neither template consumes any output of these steps
(no step id: is set anywhere in either file), so the unchanged output set is
belt-and-braces.

Evidence from the consumers

crates and vcpkg have each run this exact workflow green on 2026-07-27, at
checkout v7.0.0 and create-pull-request v8.1.1. So v8.1.1 is proven in
production for both. The checkout v7.0.1 patch landed the day after
(crates 2026-07-28, vcpkg 2026-07-31) and has not had a workflow run
yet on either repo — stated plainly rather than implied. It is the SHA all four
Dependabot-managed consumers carry today, and lychee.yml in this repo already
runs it.

Verification

  • Every SHA re-resolved with git ls-remote --tags against the upstream repo,
    in both directions, old and new. All four agree with their version comments —
    no repeat of the mismatch class fixed in fix(dotnet-docs): scan all .csproj candidates for a real version #56. All four tags are lightweight,
    so the listed SHA is the commit SHA, not a tag object.
  • v7.0.1 and v8.1.1 confirmed to be the newest releases on each action —
    checkout's tag list ends at v7.0.1, create-pull-request's at v8.1.1.
  • actionlint exits 0 on both edited files and on all five templates,
    with shellcheck integration active.

Follow-ups, not in this PR

  1. The rot is not fixed, only the symptom. The template directory still
    gets no automated updates and will drift again. ci(api-docs/ts): bring npm's cache-poisoning fix upstream, reconcile the rest #134 raised this; it remains
    the right structural fix.
  2. dotnet-sdk has no .github/dependabot.yml at all (404). That is why
    it alone among the consumers is still on v6.0.2/v7.0.8, and why the dotnet
    template's stale pins have not caused a visible regression — both sides are
    equally stale. The dotnet template is separately ahead of its consumer by
    the whole of fix(api-docs/dotnet): read package versions from MSBuild, not a csproj regex #133, which has not been synced down.
  3. The copyright header decision from ci(api-docs/ts): bring npm's cache-poisoning fix upstream, reconcile the rest #134 is still open. It does not
    affect these two files: neither carries a copyright header.

Test plan

  • Both templates diffed against their consumers' live workflows; pin lines
    confirmed as the only divergence
  • All four SHAs re-resolved via git ls-remote --tags; tag objects ruled out
  • checkout v6 → v7 input surface parsed from action.yml at the new SHA
  • create-pull-request v7 → v8 input surface parsed the same way, plus the
    full action.yml diff read
  • Triggers checked against v7's pull_request_target/workflow_run gate
  • actionlint clean on both edited files and all five templates
  • Post-edit diff against both consumers is empty
  • Sync to crates and vcpkg and confirm the next release-tag run is green

Summary by CodeRabbit

  • Chores
    • Updated the automation used to generate C++ and Rust API documentation.
    • Improved the reliability of source and documentation repository checkouts.
    • Updated the process that opens documentation update pull requests.

The rust and cpp api-docs templates still pinned actions/checkout v6.0.2
and peter-evans/create-pull-request v7.0.8. Their consumers (crates,
vcpkg) have been on v7.0.1 and v8.1.1 since Dependabot bumped them in
June and July. sync-templates.sh does a wholesale `cp` of the template
over the consumer's workflow, so a sync today would have walked both
repos back a major on both actions.

The templates live in automation/source-repo-templates/, outside
.github/workflows/ — the only path Dependabot's github-actions ecosystem
scans — so they get no bump PRs while consumers drift forward weekly.

Pins only. Diffed against both consumers' live workflows first: the pin
lines were the sole divergence, so there was no downstream-only logic to
rescue, unlike the npm and pypi cache-poisoning mitigations recovered in
PRs 134 and 135. Both templates are now byte-identical to the file each
consumer runs.
@github-actions github-actions Bot added the area:content MDX/MD documentation content label Sep 22, 2026
@coderabbitai

coderabbitai Bot commented Sep 22, 2026

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 6e0bba77-0ccb-4365-be61-8667297e41d9

📥 Commits

Reviewing files that changed from the base of the PR and between c453e44 and dddd7ca.

📒 Files selected for processing (2)
  • automation/source-repo-templates/api-docs.cpp.yml
  • automation/source-repo-templates/api-docs.rust.yml

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

Both API documentation workflow templates update pinned versions of actions/checkout and peter-evans/create-pull-request. Workflow logic remains unchanged.

Changes

API documentation workflow action updates

Layer / File(s) Summary
Checkout action pins
automation/source-repo-templates/api-docs.cpp.yml, automation/source-repo-templates/api-docs.rust.yml
The source-repository and documentation-repository checkout steps now use actions/checkout v7.0.1.
Pull request action pins
automation/source-repo-templates/api-docs.cpp.yml, automation/source-repo-templates/api-docs.rust.yml
The documentation pull request steps now use peter-evans/create-pull-request v8.1.1.

Priority: ⬇️ Low

Estimated code review effort: 1 (Trivial) | ~5 minutes

Change: Other

Merge Risk: ⚪ Minimal · up to dddd7

The documentation templates receive updated action pins without changing workflow behavior; no merge-blocking risk remains.

🚥 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 identifies the Rust and C++ API documentation templates and the action pin updates. It accurately summarizes the main change.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
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)
  • Commit to this branch
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@WomB0ComB0
WomB0ComB0 merged commit b018e2b into main Sep 22, 2026
23 checks passed
@WomB0ComB0
WomB0ComB0 deleted the ci/api-docs-rust-cpp-pins branch September 22, 2026 11:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:content MDX/MD documentation content

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant