ci: replace some third-party actions - #5384
Open
kolyshkin wants to merge 2 commits into
Open
Conversation
kolyshkin
force-pushed
the
validate-commit-simple
branch
from
August 5, 2026 17:51
6c9bcbc to
cebab7b
Compare
Replace two third-party actions (tim-actions/get-pr-commits and tim-actions/commit-message-checker-with-regex) with a plain checkout of the PR head plus a one-line shell check. Checking out the PR head sha (rather than the default merge commit) means git log -N walks exactly the PR commits, and a shallow fetch of the same depth is all we need. The GITHUB_TOKEN permissions are no longer needed either. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
kolyshkin
force-pushed
the
validate-commit-simple
branch
2 times, most recently
from
August 5, 2026 18:16
fde2b12 to
3611c5c
Compare
The lumaxis/shellcheck-problem-matchers action merely ships a JSON file and echoes an ::add-matcher:: command, so do that ourselves. Its matcher only annotated warning and error findings. Two reasons: the severity capture group listed (note|warning|error), while shellcheck severities are error, warning, info and style; and the runner honors only error, warning and notice, skipping any other match (see Runner.Worker/Handlers/OutputManager.cs). As info and style are the bulk of what shellcheck reports, most findings were never annotated. Use a fixed severity instead (any finding fails the job anyway), and keep the severity word as part of the message. Note the same applies to the usual gcc-format matchers, as shellcheck -f gcc reports both info and style as "note", which is not "notice". Verified on a test PR: with no matcher, a file with four shellcheck problems produces no annotations at all; with this one, all four are annotated at the right lines. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Contributor
Author
|
This is part of workflow hardening; PTAL @opencontainers/runc-maintainers |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two independent cleanups in the
validateworkflow, each replacing athird-party action with a few lines in-tree.
1.
commitjob: simplify the subject length checkReplace two third-party actions (
tim-actions/get-pr-commitsandtim-actions/commit-message-checker-with-regex) with a plain checkout of thePR head plus a few lines of shell.
Checking out the PR head sha (rather than the default merge commit) means
git log -Nwalks exactly the PR commits, and a shallow fetch of the samedepth is all we need. The
GITHUB_TOKENpermissions are no longer neededeither.
Two details worth noting for review:
ifis kept at the step level rather than the job level, so that thejob still succeeds (with its steps skipped) for non-PR events. A skipped
job would cascade and skip
all-done.git logoutput is assigned to a variable before grepping it, rather thanpiped. In a pipeline, a
gitfailure is masked:grepexits 1 when itfinds nothing, and that is also what a failing
gitlooks like from theif.set -o pipefaildoes not help, as it returns the rightmostnon-zero status, which is
grep's. With the assignment, agitfailurefails the step via the default
bash -e.Verified on this PR and on a fork:
subject(s);
(and only that one), exiting 1;
workflow_dispatchrun has both steps skipped and the jobconcluding
success, soall-doneis not skipped.2.
shellcheckjob: droplumaxis/shellcheck-problem-matchersThat action does nothing but ship a JSON file and echo an
::add-matcher::command, so we now do that ourselves, with the matcher in
.github/shellcheck-tty.json.Its matcher was also only annotating
warninganderrorfindings, for tworeasons: its severity capture group lists
(note|warning|error), whileshellcheck severities are
error,warning,infoandstyle; and therunner honors only
error,warningandnotice, silently skipping anyother match (
Runner.Worker/Handlers/OutputManager.cs). Asinfoandstyleare the bulk of what shellcheck reports, most findings were neverannotated. Ours uses a fixed severity instead (any finding fails the job
anyway) and keeps the severity word in the message.
Verified on a fork PR, on a file with four shellcheck problems (one
info,one
style, twowarning):exit code 2";
Note that the usual gcc-format matchers have the same problem, as
shellcheck -f gccreports bothinfoandstyleasnote, which is notnotice.🤖 Generated with Claude Code