

GitHub Actions에서 Monorepo의 모든 App, Package의 Lint 에러 개수를 센 다음, 모든 Lint Problems의 총 합, 그리고 각 App과 Package별 Problems 개수를 Slack Bot으로 전송한다.
pnpx turbo lint 명령어를 통해 Monorepo의 Lint 검사를 실행하고, 각 Task에서 출력된 결과를 합산하여 Slack Bot으로 보낼 예정이었습니다.
Lint는 오류 발생 시 로컬 환경에서 아래와 같은 메시지를 출력하며 작동이 중단되는데요,
...
app-1:lint: ✖ 3 problems (2 errors, 1 warning)
app-1:lint: 2 errors and 0 warnings potentially fixable with the `--fix` option.
...
app-2:lint: ✖ 3 problems (2 errors, 1 warning)
app-2:lint: 2 errors and 0 warnings potentially fixable with the `--fix` option.
에러가 발생할 때에도 모든 Task를 끝까지 실행하기 위해 다음과 같은 명령어를 추가할 수 있습니다.
pnpx turbo lint --continue
그러면 grep -E '✖' 커맨드로 모든 App과 Package의 Lint 검사 결과를 grep하여 어떤 Task의 결과로 몇 건의 Lint 문제가 발생했는지 알 수 있겠지요.
하지만 Git Action 환경에서 turbo 명령어를 이용해 출력되는 결과물은 자동적으로 아래와 같이 각 Task별로 그룹화 되어 출력됩니다.
▶ app-1:lint
...
✖ 3 problems (2 errors, 1 warning)
2 errors and 0 warnings potentially fixable with the `--fix` option.
▶ app-2:lint
...
✖ 3 problems (2 errors, 1 warning)
2 errors and 0 warnings potentially fixable with the `--fix` option.
이 내용은 Turborepo 블로그에 2024년 개재된 1.13버전 릴리즈 노트(링크)를 통해 확인할 수 있는데요,
CI 로깅 개선을 통해
와 함께 GitHub Actions도 로그 출력 그룹화가 지원이 된다는 내용입니다.
따라서 로컬 환경에서처럼 해당 린트 오류의 결과가 어떤 앱의 오류 결과인지를 grep -E '✖' 만으로는 알 수 없게 되지요.
강제로 그룹화를 해제해 출력하는 방법이 있습니다. turbo run 커맨드의 --log-order 옵션은 로그가 어떤 방식으로 정렬될 것인지를 설정할 수 있는데요,
stream 옵션은 모든 Task의 로그 출력을 그룹화 없이 출력하며,
...
app:lint: ✖ 3 problems (2 errors, 1 warning)
app:lint: 2 errors and 0 warnings potentially fixable with the `--fix` option.
grouped 옵션은 로그 출력을 각 Task별로 그룹화하여 출력합니다.
▶ app:lint
...
✖ 3 problems (2 errors, 1 warning)
2 errors and 0 warnings potentially fixable with the `--fix` option.
기본값은 auto이며, CI 환경에서는 기본적으로 grouped 옵션으로 실행됩니다.
따라서 GitHub Actions에서 아래와 같은 명령어로 실행하면 로컬 환경과 동일하게 로그 출력 결과를 Task 정보와 함께 grep 할 수 있습니다.
LINT_OUTPUT=$(pnpx turbo lint --continue --log-order=stream 2>&1)
LINT_RESULTS=$(echo "$LINT_OUTPUT" | grep -E '✖')