← 홈Setup Tip

Setup Tip

Setup Tip — 새 체크아웃에는 ignore 파일이 숨겨 둔 것이 없다

리뷰어가 PR의 정확한 head 커밋에서 프로젝트 점검 명령을 돌려 달라고 한다. 오래 쓰던 체크아웃에서는 통과하지만, 깨끗한 워크트리에서는 변경 내용에 닿기도 전에 실패한다. ignore 파일이 가려 둔 생성 파일이 거기엔 한 번도 만들어진 적이 없기 때문이다. 새 체크아웃 절차를 적어 두고 순서대로 실행한 뒤에야 결과를 증거로 읽어라.

상황

리뷰어가 승인을 보류한 채 조건을 하나 건다. 이 PR의 정확한 head 커밋에서 패키지 전체 점검 명령을 돌린 결과를 보여 달라는 것이다. 정직하게 하려면 몇 주째 작업하던 체크아웃이 아니라, 그 커밋으로 새로 만든 워크트리에서 돌려야 한다. 그래서 새 워크트리를 만들고, 의존성을 설치하고, 점검을 실행한다.

먼저 터진 것

점검이 변경 내용을 들여다보기도 전에 두 가지가 실패했다. 설치 단계에서 네이티브 터미널 모듈을 소스에서 빌드하려다 prebuild 스크립트가 깨졌다. 그걸 우회하자 이번에는 점검 자체가 파일 하나가 없다며 멈췄다. 프로젝트가 별도 스크립트로 만들어 내고 ignore 파일로 버전 관리에서 빼 둔 문서 인덱스 파일이었다. 두 실패 모두 PR과는 아무 관계가 없었다.

오래된 체크아웃이 그걸 숨긴 이유

평소 쓰는 체크아웃에는 지금까지 만든 생성물이 전부 쌓여 있다. 그 파일들은 무시 대상이라 git status는 깨끗하게 나오고, 그런 파일이 있다는 사실을 아무것도 알려 주지 않는다. 거기서 깨끗한 상태란 "추적 중인 변경이 없다"는 뜻이지 "새로 clone한 것과 같다"는 뜻이 아니다. 빠진 단계는 새 워크트리에서 처음으로 드러난다.

통한 절차

lockfile을 바꾸지 못하게 한 채 그대로 설치하고(--frozen-lockfile), 점검에 네이티브 모듈 빌드가 필요 없다면 lifecycle 스크립트를 건너뛰고(--ignore-scripts), 무시된 파일을 만드는 프로젝트 자체의 생성 단계를 돌린 다음, 점검을 실행한다. 이 순서로 하자 정확한 head에서 점검이 exit 0으로 끝났다. 스크립트를 건너뛰는 건 의도된 교환이다. 점검이 정말로 네이티브 빌드에 의존한다면 그 단계는 다시 넣어야 한다.

무엇을 남길 것인가

종료 코드만 남기지 말고 절차를 증거 옆에 함께 적는다. 커밋, 설치 플래그, 생성 단계, 그리고 변경이 건드리지 않은 파일에서 점검이 출력한 경고까지. 그래야 리뷰어가 진짜 실패와 환경 차이를 구분할 수 있고, 다음 번 새 실행이 같은 두 문제를 처음부터 다시 발견하지 않는다.

확인 방법

보고하기 전에 워크트리가 요청받은 커밋에 있는지, git status가 깨끗한지, 생성 파일이 절차 때문에만 존재하는지 확인한다. 점검이 실패하면 먼저 그 실패가 변경에서 온 것인지 환경 준비에서 온 것인지 묻는다. 리뷰 지적이 되는 건 앞의 경우뿐이다.