You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
perf(ci): ktlint 를 PR 당 두 번 검사 — reviewdog 경로 32초·버전 이원화 정리 #1012
reviewdog 경로가 32초, job 전체의 약 30% 이고 ktlint 실행 자체가 이중이다. 44개 PR 을 한 번에 갱신하면 약 23분이 여기 쓰인다.
왜 지금 다시 보는가
인라인 코멘트의 원래 수요자는 "Actions 로그 수만 줄을 뒤지기 싫은 사람" 이다. 현재 이 저장소는 작업자 전원이 에이전트(Codex·Claude Code)를 쓰고, 에이전트는 gh run view --log 로 로그를 직접 읽는다 — 인라인 코멘트는 오히려 API 를 한 번 더 호출해야 닿는 곳에 있다.
반면 게이트는 그대로 필요하다. 에이전트도 틀린다 (2026-08-24 세션에서 git add 누락으로 컴파일 불가 상태가 push 됐고, pre-commit 훅은 staged 스냅샷만 보므로 통과했다. 막은 건 CI 였다).
"막는 것"(ktlintCheck)과 "알려주는 것"(reviewdog)을 나눠 보면 앞은 필수, 뒤는 비용 대비 가치가 역전됐다.
부수 문제
ktlint 버전이 이원화돼 있다. ScaCap/action-ktlint 가 자체 ktlint 를 내려받으므로 ktlint_version: "1.8.0" 을 libs.versions.toml 과 손으로 맞추는 중이다. 표류하면 두 검사 결과가 갈린다.
✅ 실패 위치 확인 수단 — A안(제거)을 택했으므로 인라인 코멘트는 없어졌고, 대신 job summary 에 규칙별 집계 + 파일:라인:칼럼 목록을 렌더한다. 검사를 다시 하지 않고 ktlint-gradle 이 이미 만드는 checkstyle XML 을 읽는다.
부수 발견 — 로컬 전용 함정
ktlintCheck 는 파일을 지워도 UP-TO-DATE 로 옛 위반을 계속 보고한다 (ktlint-gradle 14.2.0). probe 파일 삭제 후에도 runKtlintCheckOverMainSourceSet UP-TO-DATE 로 넘어가며 리포트가 stale 인 채 EXIT=1 이었고, --no-configuration-cache 로도 안 풀리고 --rerun-tasks 라야 실제 소스셋을 다시 읽었다. CI 는 매 run clean checkout 이라 해당 없다. 로컬에서 «지웠는데 안 사라지는 위반» 을 보면 코드가 아니라 태스크 상태를 먼저 의심할 것.
Activity
OnlyReadOneBook commentedon Aug 24, 2026
PR #1034 로 머지됐다. 완료 조건인 소요 수치를 남긴다.
ktlint job 소요 (
Check Code Quality (Ktlint))ktlintCheck이중 검사)ktlintCheck단독)약 29초(15%) 감소. 이슈가 예상한 reviewdog 경로 비용(액션 빌드 12초 + 검사 20초 = 32초)과 부합한다. 표본이 변경 후 1건이라, develop 기준 run 이 더 쌓이면 갱신한다.
완료 조건 대조
lint-workflow-policy.test.mjs가run:줄의ktlintCheck를 정확히 1건으로 강제한다.libs.versions.toml하나다 — 워크플로의ktlint_version: "1.8.0"이 사라졌고, 정책 테스트가ktlint_version재등장을 막는다.ktlintCheck --continue)가 그대로이고filter_mode(diff 필터) 부재를 정책 테스트가 고정한다. 위반을 심으면 EXIT=1 로 막히는 것도 실측했다.ScaCap/action-ktlint@master의존 제거 — Actions 참조 SHA 고정 · secret scanning · push protection 적용 #847 의 SHA 고정 대상이 하나 줄었다.파일:라인:칼럼목록을 렌더한다. 검사를 다시 하지 않고 ktlint-gradle 이 이미 만드는 checkstyle XML 을 읽는다.부수 발견 — 로컬 전용 함정
ktlintCheck는 파일을 지워도 UP-TO-DATE 로 옛 위반을 계속 보고한다 (ktlint-gradle 14.2.0). probe 파일 삭제 후에도runKtlintCheckOverMainSourceSet UP-TO-DATE로 넘어가며 리포트가 stale 인 채 EXIT=1 이었고,--no-configuration-cache로도 안 풀리고--rerun-tasks라야 실제 소스셋을 다시 읽었다. CI 는 매 run clean checkout 이라 해당 없다. 로컬에서 «지웠는데 안 사라지는 위반» 을 보면 코드가 아니라 태스크 상태를 먼저 의심할 것.