Uh oh!
There was an error while loading. Please reload this page.
[improvement](github-actions) Reduce redundant GitHub Actions runs and checkouts - #66957
Merged
Merged
Conversation
…d full checkouts in lightweight checks - Drop the issue_comment trigger from license-eyes, checkstyle, clang-format, build-extension and build-thirdparty. Their comment handler required a doris-robot comment on a github-actions[bot] issue, which has never happened, yet every issue comment created a run that exited immediately (~3600 wasted runs per 48h). - Check PR title: validate github.event.pull_request.title inline instead of checking out the repository with recursive submodules. - Dependency License Review: only run when dependency manifests change. - Check Large File: get added files and their sizes via the GitHub API instead of checking out the repository and cloning the lfs-warning action; restrict the push trigger to master. - Label when approved workflow run: inline the get-workflow-origin and label-when-approved-action submodules as gh api calls and drop the repository checkout entirely. Co-Authored-By: Claude <noreply@anthropic.com>
hello-stephen
commented
Aug 19, 2026
ContributorAuthor
Thank you for your contribution to Apache Doris. Please clearly describe your PR:
|
hello-stephen
commented
Aug 19, 2026
ContributorAuthor
skip buildall |
morningman
approved these changes
Aug 19, 2026
Contributor
PR approved by at least one committer and no changes requested. |
Contributor
PR approved by anyone and no changes requested. |
Uh oh!
There was an error while loading. Please reload this page.
12 tasks
hello-stephen pushed a commit
that referenced
this pull request
Sep 3, 2026
…67491) ### What problem does this PR solve? Issue Number: close #xxx Related PR: #66957 (introduced the title-checker regression), #67487 (a PR currently blocked by it) Problem Summary: Two independent bugs in the repository's `.github` tooling, both of which make it easy to get a PR wrong for reasons unrelated to its content. --- #### 1. The PR title checker rejects any hyphen in the type or scope ``` [fix](arrow-flight) ... [feature](inverted-index) ... [improvement](github-actions) ... ``` **88 of the last 1500 commits on master use such a title**, including #66957 itself — the change that introduced the current check. Its own title, `[improvement](github-actions) Reduce redundant GitHub Actions runs and checkouts`, would not pass the checker it added. **Root cause.** #66957 replaced the `deepakputhraya/action-pr-title` action with an inline `grep -qE` and kept the action's regex verbatim, with the comment "Same regex as the previously used ... submodule". But that action is **JavaScript**, where `\-` inside a character class is a valid escape for a literal hyphen. **POSIX ERE has no such escape** — a backslash inside a bracket expression is just a backslash. So ``` [a-zA-Z0-9 \-_] ``` does not mean "letters, digits, space, hyphen, underscore". It makes `\` a member and then reads `-_` as a range endpoint, which leaves the hyphen itself out of the set. Porting the pattern from JS to `grep` silently changed its meaning. The fix puts the literal hyphen last in the bracket expression, which is how POSIX spells it: ```diff -if ! grep -qE '\[([a-zA-Z0-9 \-_])+\]\(([a-zA-Z0-9 \-_])+\)(.*)' <<< "${TITLE}"; then +if ! grep -qE '\[([a-zA-Z0-9 _-])+\]\(([a-zA-Z0-9 _-])+\)(.*)' <<< "${TITLE}"; then ``` A comment now records why the JS form cannot be restored verbatim, so the pattern is not "fixed back" later. #### 2. `.gitignore` ignores `.github` `.gitignore` has had a bare `.github` entry under its `# other` section since 9b5a464 (`[Feature][external catalog/lakesoul] support lakesoul catalog`, #32164) — a change that otherwise has nothing to do with CI and touched only those two `.gitignore` lines, so it looks accidental. The existing files under `.github` survived only because they were already tracked when the entry was added; `.gitignore` does not affect tracked files. The entry therefore has no useful effect today, and two harmful ones: * Any **new** file under `.github` — a workflow, an action, `CODEOWNERS`, an issue template — is silently ignored. `git status` does not list it and `git add` refuses it without `-f`, so it is easy to open a PR that is missing it. * Even for a **tracked** file, `git add .github/workflows/foo.yml` prints `The following paths are ignored by one of your .gitignore files` and exits non-zero, which breaks `git add ... && git commit ...` in scripts. This happened while preparing this very PR. ``` $ git check-ignore -v --no-index .github/workflows/new-thing.yml .gitignore:155:.github .github/workflows/new-thing.yml ```
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 freeto 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.
Background
The GitHub Actions queue for apache/doris has been heavily congested (recent 48h sample: 11180+ runs, ~53 concurrent slots demanded vs 25 available, median queue wait 73 min, max 41.7h). Most of the load comes from runs that do no useful work. This PR removes the redundant triggers and the expensive checkouts behind them, without changing what any check verifies.
Changes
1. Drop the unused
issue_commenttriggers (5 workflows)license-eyes.yml,checkstyle.yaml,clang-format.yml,build-extension.yml,build-thirdparty.ymlall listen to every issue comment, then exit at a job-levelifunless the comment matches a three-way handshake (adoris-robotcomment on agithub-actions[bot]-created issue). That handshake has never happened (0 matching runs in 30 days, 0 matching issues in search history), yet ~3600 runs per 48h were created and immediately exited. Theworkflow_dispatchtrigger remains for manual re-runs.2. Check PR title: validate inline, no checkout
title-checker.ymlchecked out the whole repository (with recursive submodules, ~15 min/run) just to testgithub.event.pull_request.titleagainst a regex. The check now reads the title from the event payload and posts the same failure comment, ~40s per run.3. Dependency License Review: only run when manifests change
third_party_review.ymladdson.pull_request.pathscovering the dependency manifests scanned by dependency-review-action (thirdparty/**,env.sh,build.sh,**/pom.xml,**/go.mod,**/go.sum,**/Gemfile,**/requirements*.txt,**/package.json, lock files, etc.). PRs that don't touch dependencies no longer run this check.4. Check Large File: GitHub API instead of double checkout
lfs-warning.ymlchecked out the repository (recursive submodules) and then cloned the externalppremk/lfs-warningaction, ~17 min/run for a 1MB file-size check. It now fetches the added files via the pulls/commits API and measures sizes viaraw_urlContent-Length, ~30s per run. Thepushtrigger is narrowed tomaster(PRs are already covered bypull_request_target, which also removed the double-checking of in-repo branch PRs). One intentional behavior change: a direct master push with an oversized file now fails the check instead of being ignored.5. Label when approved workflow run: inline the submodule actions, no checkout
approve-label.ymlchecked out the repository (recursive submodules) to load theget-workflow-originandlabel-when-approved-actionsubmodules. Both are thin API wrappers and are now inlined asgh apicalls with identical semantics (latest review per reviewer wins;reviewed= any approval, add-only;approved= committer approval, added/removed; CHANGES_REQUESTED vetoes). ~14 min/run → ~30s/run.Expected effect
🤖 Generated with Claude Code