Skip to content

fix(ci): skip docs-only changes for clusterfuzzlite and container-image - #793

Closed
seonghobae wants to merge 5 commits into
developfrom
chore/paths-ignore-fix
Closed

fix(ci): skip docs-only changes for clusterfuzzlite and container-image#793
seonghobae wants to merge 5 commits into
developfrom
chore/paths-ignore-fix

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 3, 2026

Copy link
Copy Markdown
Collaborator

What

Narrows two expensive, non-required workflows on documentation-only pull requests:

  • .github/workflows/clusterfuzzlite.yml
  • .github/workflows/container-image.yml

Each pull_request.paths-ignore now covers docs/**, manual/**, and **.md. manual/** is required because the product manual contains non-Markdown assets as well as Markdown; filtering only **.md still sent image/other manual-only PRs through ClusterFuzzLite and multi-architecture image builds.

The container image workflow retains its push.tags: ['v*'] release trigger without paths-ignore; tag-release behavior is unchanged.

tests/test_ci_path_filter_contract.py now inspects the pull_request event block structurally rather than searching the whole YAML text, and requires the exact documentation-only filter set independently for both workflows.

TDD / repair trace

  • reviewer finding: non-Markdown manual/ assets still triggered both expensive workflows, and the regression test could pass if filter strings moved under the wrong event;
  • RED contract commit 9e8bbe744542e5816f21f28130990c659eb8e424: required docs/**, manual/**, and **.md specifically under pull_request; the then-current workflow definitions lacked manual/**;
  • production repair b09ac9e9069215455d15a93236a196c254f09ffa: ClusterFuzzLite caller;
  • production repair a1910e652f9fcf28116175c7bda62af2b1fec296: container-image caller and current exact head.

Safety / acceptance

  • Neither fuzz, image, nor image-nvidia is a required branch-protection check on develop.
  • Any pull request containing at least one path outside docs/**, manual/**, and **.md still triggers the relevant workflow.
  • Tag releases and manual workflow_dispatch remain unaffected.
  • Merge requires terminal exact-head GREEN and resolved review threads on a1910e652f9fcf28116175c7bda62af2b1fec296 (or a verified descendant). Queued/pending/startup-failed evidence is not success.

Reference: GitHub Actions workflow syntax for paths/paths-ignore: https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#onpushpull_requestpull_request_targetpathspaths-ignore

Org-wide audit found these workflows had no paths-ignore filter, triggering full CI on every push/PR including docs-only changes and adding to org Actions queue congestion.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Approval pending

CodeRabbit has no unresolved comments, but it has not reviewed the latest commit.

Use the checkbox below to review the latest commit. CodeRabbit will approve the changes if it finds no blocking issues.

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

두 GitHub Actions 워크플로우가 문서 전용 pull request를 실행하지 않도록 경로 필터를 추가했습니다. 새 테스트는 Markdown 패턴과 컨테이너 태그 릴리스 조건을 검증합니다.

Changes

CI 경로 필터링

Layer / File(s) Summary
pull request 경로 필터 설정
.github/workflows/clusterfuzzlite.yml, .github/workflows/container-image.yml
두 워크플로우의 pull_request 트리거가 docs/****.md 경로를 제외합니다.
경로 필터 계약 검증
tests/test_ci_path_filter_contract.py
두 워크플로우가 중첩 깊이의 Markdown 경로를 제외하고 루트 전용 *.md 패턴을 사용하지 않는지 검증합니다. 컨테이너 이미지의 push: 트리거에는 paths-ignore:가 없고 v* 태그 조건이 있는지 검증합니다.

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: 🔵 Low · up to d978f

This change skips the ClusterFuzzLite and container-image workflows for documentation-only pull requests. The intended filters are present, but the accompanying test does not reliably verify their placement and complete path set, so a small follow-up is needed to keep this CI behavior protected.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 1 files. (2 skipped: 2 …
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.
Title check ✅ Passed 제목은 문서 전용 변경으로 clusterfuzzlitecontainer-image 워크플로를 건너뛰는 핵심 변경을 정확하고 간결하게 설명합니다.
Description check ✅ Passed 설명은 변경 내용, 영향 범위, 테스트 계약, 안전성 조건을 구체적으로 설명합니다. 템플릿의 Git Flow targetVerification 섹션 제목과 검증 체크박스는 포함하지 않았지만, 주요 정보는 대부분 제공됩니다.
Full details: Docstring Coverage

Explanation

Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 1 files. (2 skipped: 2 unsupported.)

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/paths-ignore-fix

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.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

This report is out of date. Scroll down for Devin Review's latest report on this PR.

Devin Review found 3 potential issues.

Devin Review

Comment thread .github/workflows/clusterfuzzlite.yml Outdated
Comment thread .github/workflows/container-image.yml Outdated
Comment thread .github/workflows/container-image.yml Outdated
devin-ai-integration[bot]

This comment was marked as resolved.

coderabbitai[bot]

This comment was marked as resolved.

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 new potential issues.

Devin Review

Comment on lines +5 to +8
paths-ignore:
- "docs/**"
- "manual/**"
- "**.md"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 대규모 혼합 PR의 검증 누락

변경 파일이 300개를 넘고 코드가 비교 목록 밖이면, paths-ignore컨테이너 필터는 워크플로를 건너뜁니다. 코드 변경이 퍼징과 컨테이너 빌드 없이 통과합니다.

Prompt for agents
GitHub Actions의 pull_request 경로 필터는 생성된 변경 파일 목록 중 처음 300개만 평가합니다. .github/workflows/clusterfuzzlite.yml과 .github/workflows/container-image.yml의 paths-ignore 때문에, 앞쪽 300개가 docs/**, manual/** 또는 **.md이고 코드 파일이 그 뒤에 있는 대규모 혼합 PR은 두 검증을 실행하지 않습니다. 워크플로 자체는 모든 PR에서 시작하되 전체 변경 집합을 확인하는 사전 작업으로 문서 전용 여부를 판정하고, 비용이 큰 작업만 조건부로 실행하는 방식 등 300파일 제한을 받지 않는 구조로 바꾸십시오. 두 워크플로에 동일한 동작을 적용하고 대규모 혼합 변경 회귀 사례를 검증하십시오.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +28 to +40
def _paths_ignore(block: list[str]) -> set[str]:
"""Read the ``paths-ignore`` list from one event block without quote coupling."""
try:
start = block.index(" paths-ignore:")
except ValueError as exc:
raise AssertionError("event is missing paths-ignore") from exc

entries: set[str] = set()
for line in block[start + 1 :]:
if not line.startswith(" - "):
break
entries.add(line.removeprefix(" - ").strip().strip("'\""))
return entries

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 실제 YAML 의미 검증 누락

_paths_ignore는 첫 문자열 블록만 읽습니다. 중복 키가 생기면 테스트는 통과해도 GitHub는 다른 최종 필터를 적용할 수 있습니다.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Comment on lines +5 to +8
paths-ignore:
- "docs/**"
- "manual/**"
- "**.md"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 Info: 문서 자산의 빌드 영향 없음

Docker 이미지는 선택된 프로젝트 파일만 복사하고, 퍼저는 애플리케이션 소스만 패키징합니다. 일반적인 문서 전용 변경은 두 산출물에 영향을 주지 않습니다.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

@seonghobae

Copy link
Copy Markdown
Collaborator Author

docs-only ClusterFuzzLite/container 경로 필터와 관련 회귀 검증은 #784 exact head 3ba1add4088e7e328feda5f277c9a2e98327de9e에 완전히 승계됐고, 같은 PR 단위 concurrency까지 함께 보강했습니다.

@seonghobae seonghobae closed this Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant