Go 의존성 범프 설명하기
번들된 도구는 Go 1.22 이상, 그리고 --base 사용 시 git이 필요합니다. 각 리비전에서 go mod graph와 go list -m -mod=readonly -json all을 실행하며, GOWORK=off로 설정합니다. 이 명령들은 모듈과 그 의존성의 go.mod 파일을 읽기만 하고, 코드를 빌드하거나 실행하지 않으며, go.mod나 go.sum을 변경하지 않습니다.
1. 두 리비전 선택하기
- 풀 리퀘스트에서 이전 버전은 병합 기준(merge base)입니다:
git merge-base origin/main HEAD. 사용자가 요청하지 않는 한 브랜치 이름만 사용하지 마세요. --base REF는git archive로 해당 커밋의go.mod와go.sum파일을 읽으므로, 작업 트리의 커밋되지 않은 변경 사항이 새 버전이 됩니다. 두 체크아웃을 비교하려면--old DIR --new DIR을 사용하세요.- 모듈 루트(
go.mod가 있는 디렉토리)에서 실행하거나,--new MODULE_DIR을 전달하세요. 여러 모듈이 있는 저장소에서는go.mod가 변경된 각 모듈에 대해 한 번씩 실행하세요.
2. 실행하기
go run "${CLAUDE_PLUGIN_ROOT}/scripts/whybumped.go" --base "$(git merge-base origin/main HEAD)" --new MODULE_DIR
- 풀 리퀘스트가 의도한 변경 사항을 명시하는 경우(예: Dependabot 제목 "Bump google.golang.org/grpc from 1.63.2 to 1.67.1"),
--expect google.golang.org/[email protected]을 전달하세요. 그러면 이외의 모든 변경 사항(go.mod가 자체적으로 올린 모듈 포함)이 WARN으로 표시됩니다. - 결과를 파싱하려면
--format json을 추가하세요. - 의존성은 모듈 캐시에 있거나 환경의 모듈 프록시에서 다운로드 가능해야 합니다. 사용자가 요청하지 않는 한
GOPROXY,GOFLAGS또는GONOSUMDB를 변경하지 마세요.
종료 코드
0은 WARN이 없음을 의미합니다(또는 --fail-on never). 1은 하나 이상의 WARN이 있음을 의미합니다. 2는 결과를 신뢰할 수 없음을 의미합니다: 한쪽의 go.mod가 없거나, 비어 있거나, 잘렸거나, go.mod 형식이 아니거나, go 지시문이 없는 경우; go mod graph 또는 go list -m이 실패한 경우(주로 go.sum 항목 누락, 알 수 없는 버전 또는 네트워크 없음); 두 결과가 일치하지 않는 경우; 두 리비전이 다른 모듈인 경우; 한쪽에 의존성이 전혀 없는 경우; 또는 --base 참조가 존재하지 않는 경우. 2는 알 수 없음으로 처리하고, 통과로 간주하지 않으며, 사용자에게 오류를 표시하세요.
보고서
go-raised가 있으면 먼저 시작하세요: 이전 및 새로운 go 줄, 새 버전이 필요한 의존성과 그 의존성이 그래프에 들어온 경로. go.mod가 어떤 의존성보다 더 높은 go 버전을 요구한다면 그렇게 말하세요.- 모듈 변경 사항을 "pulled in through" 줄별로 그룹화하세요:
go.mod가 요구하는 각 루트 모듈에 대해, 해당 모듈이 올리거나 추가한 내용을 나열하세요. 이것들은 해당 업그레이드의 부수 효과입니다. requested변경 사항은go.mod만이 요청한 버전입니다.// indirect모듈이 어떤 의존성도 필요로 하지 않는 수준보다 올라간 경우, 수동 또는go get -u에 의해 올라갔으며, 사용자가 더 작은 변경을 원한다면 필요한 버전에 머물 수 있다고 말하세요.lowered및removed변경 사항은 어떤 요구자가 예전 버전을 필요로 했는지와 해당 요구자가 어떻게 되었는지 설명합니다. 내려간 모듈은 빌드에서 다운그레이드된 것이므로; 분명히 언급하세요.requirement-dropped는 go.mod에서 한 줄이 사라졌지만 빌드가 다른 모듈을 통해 동일한 버전을 유지하는 경우입니다.go mod tidy는 어떤 패키지도 해당 모듈을 필요로 하지 않을 때 이 작업을 수행합니다. 사용자가 tidy를 실행하지 않았다면 go.mod가 손상되지 않았는지 확인하세요.- 선택되지 않은 버전을 통한 체인은 실제입니다: 최소 버전 선택에서 그래프의 모든 버전 요구 사항이 계산되며, 더 새로운 버전에 밀린 경우도 포함됩니다.
- 사용자가 요청하지 않는 한
go.mod를 편집하지 마세요. 변경 범위를 줄이려면 일반적으로 루트 모듈에 대해서만go get module@version을 실행한 다음go mod tidy를 실행하고 도구를 다시 실행하세요.