Turborepo의 출력이 GitHub Actions와 같은 CI 환경에서 자동으로 Task별 그룹화 됩니다. (--log-order option)

JUNG MINU·2025년 8월 25일
0
post-thumbnail

요구사항

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 로깅 개선을 통해

  • Azure Pipelines
  • TeamCity
  • Travis 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 '✖')
profile
감각있는 프론트엔드 개발자 정민우입니다.

0개의 댓글