Repository navigation
perf(ci): ktlint 를 PR 당 1회로 줄이고 위반을 job summary 로 옮긴다 (closes 1012) [base: develop] - #1034
Merged
Merged
Conversation
lint.yml 의 ktlint job 은 같은 규칙을 두 번 검사했다. ScaCap/action-ktlint (reviewdog)가 PR diff 의 추가된 줄을 12+20초에, ktlintCheck 가 저장소 전체를 72초에 각각 돌아 reviewdog 경로만 job 의 약 30% 였다. 인라인 코멘트의 원래 수요자는 «Actions 로그 수만 줄을 뒤지기 싫은 사람» 인데, 이 저장소 작업자는 전원 에이전트라 로그를 gh run view --log 로 직접 읽는다. 막는 것(ktlintCheck)만 남기고 알려주는 것은 검사를 다시 하지 않는 경로로 옮긴다. - ScaCap/action-ktlint 스텝 제거. ktlint 실행은 Gradle 태스크 하나뿐이다. - ktlint-gradle 이 이미 만드는 checkstyle XML 을 읽어 job summary 에 위반 위치·규칙별 집계를 렌더한다(render-ktlint-summary.mjs). 검사는 재실행하지 않는다. - ktlint 버전 정본이 libs.versions.toml 하나가 된다. 워크플로에 손으로 적던 ktlint_version: "1.8.0" 이 사라져 두 검사가 갈릴 여지가 없다. - @master 미고정 액션 의존이 하나 줄어든다 (#847 대상 축소). Android Lint 는 그대로 둔다. dvdandroid/action-android-lint 는 lintDebug 가 만든 XML 을 재활용할 뿐 검사를 다시 하지 않고, 모듈별 위반이 로그에 묻히던 문제(#279)를 푼다. 실측: - 위반을 심고 ktlintCheck → EXIT=1, summary 가 위반 5건·규칙 3종·파일:라인:칼럼 렌더 - 클린 상태(--rerun-tasks) → EXIT=0, 리포트 77건, "위반 없음" - node --test .github/scripts/*.test.mjs → 74/74 통과 (신규 12건 포함) - actionlint · repository-quality.sh 통과 #875 회귀(삭제로 생긴 파일 단위 위반)는 ktlintCheck 가 저장소 전체를 검사하는 성질이 담당하며, 그 성질을 lint-workflow-policy.test.mjs 가 고정한다. closes #1012
Contributor
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.
lint.yml의 ktlint job 은 같은 규칙을 두 번 검사하고 있었다.Build ScaCap/action-ktlint@masterRun Ktlint(reviewdog)Run full Ktlint check(ktlintCheck)reviewdog 경로가 32초, job 의 약 30% 다.
왜 지금 빼는가
인라인 코멘트의 원래 수요자는 «Actions 로그 수만 줄을 뒤지기 싫은 사람» 이다. 지금 이 저장소는 작업자 전원이 에이전트(Codex·Claude Code)이고, 에이전트는
gh run view --log로 로그를 직접 읽는다 — 인라인 코멘트는 오히려 API 를 한 번 더 호출해야 닿는 곳에 있다.반면 게이트는 그대로 필요하다. 그래서 «막는 것»(
ktlintCheck)은 남기고 «알려주는 것»만 검사를 다시 하지 않는 경로로 옮겼다.변경 — 이슈의 A안
ScaCap/action-ktlint스텝 제거. ktlint 를 실제로 돌리는 자리가 Gradle 태스크 하나가 된다.render-ktlint-summary.mjs). 검사는 재실행하지 않는다 — Android Lint 가lintDebugXML 을 재활용하는 것과 같은 패턴이다.CHECKSTYLE리포터를 추가했다(기존PLAIN유지).libs.versions.toml하나가 된다. 워크플로에 손으로 적던ktlint_version: "1.8.0"이 사라져 두 검사가 갈릴 여지가 없다.job summary 실제 출력
위반이 있을 때:
if: always()라 검사가 실패해도 렌더된다. 위반 100건까지 나열하고 나머지는 건수만 적는다(job summary 1MB 상한).Android Lint 는 대상이 아니다
dvdandroid/action-android-lint는lintDebug가 만든 XML 을 재활용한다. 검사를 다시 하지 않으므로 추가 비용이 거의 없고, 모듈별 위반이 수만 줄 로그에 묻히던 문제(#279)를 푼다. 유지한다.검증
ktlintCheck→ EXIT=1, summary 가 위 표대로 렌더--rerun-tasks) → EXIT=0, 리포트 77건,✅ 위반 없음node --test .github/scripts/*.test.mjs→ 74/74 통과 (신규 12건 포함)actionlint·scripts/repository-quality.sh(16 workflows, 4 shell scripts) 통과#875 회귀 없음
삭제만으로 발생하는 파일 단위 위반을 잡는 것은
ktlintCheck가 저장소 전체를 검사하는 성질이고, reviewdog 를 빼도 그대로다. 그 성질이 사라지지 않도록lint-workflow-policy.test.mjs가 고정한다 — ktlint 실행이 1회일 것,ktlint_version을 워크플로에 적지 않을 것,filter_mode(diff 필터)가 없을 것, summary 스텝이always()일 것, Android Lint 는 XML 재활용을 유지할 것.리뷰어에게
ktlintCheck를 반복 실행하면 삭제한 파일의 위반이 계속 보고될 수 있다. ktlint-gradle 14.2.0 의 up-to-date 오판이며(runKtlintCheckOverMainSourceSet UP-TO-DATE) 이 PR 과 무관하다. CI 는 매 run 이 clean checkout 이라 해당 없고, 로컬에서는--rerun-tasks로 확인된다.Closes #1012