Community코딩 & 개발github.com

GillMacedo/explaining-go-dependency-bumps

Go 모듈 의존성 버전 변경 사유를 두 리비전(깃 참조 또는 두 디렉토리) 사이에서 설명합니다. 빌드 목록에서 올라가거나 추가되거나 내려가거나 제거된 각 모듈에 대해 새 버전을 요구한 의존성과 그 체인을 go.mod까지 추적하며, go 지시문을 올리게 만든 의존성을 나열합니다. Dependabot 또는 Renovate의 Go 모듈 풀 리퀘스트를 검토할 때, go get 또는 go mod tidy가 요청보다 더 많은 모듈을 변경했을 때, go.mod의 go 줄이 올라갔을 때 사용하세요.

explaining-go-dependency-bumps란 무엇인가요?

이 스킬은 Go 모듈 프로젝트에서 두 리비전(예: 풀 리퀘스트의 베이스와 새 브랜치) 간의 의존성 버전 변경을 분석하고 설명합니다. 주로 Dependabot이나 Renovate의 자동 업데이트 PR을 검토할 때, 예상치 못한 추가 의존성 변경의 원인을 파악하는 데 유용합니다. `--expect` 플래그로 의도된 변경을 지정하면, 그 외의 모든 변경에 대해 경고(WARN)를 표시하여 리뷰어가 집중해야 할 부분을 명확히 해줍니다. 내부적으로 `go mod graph`와 `go list -m` 명령어를 실행하며, Git 저장소에서 파일을 추출하여 비교하므로 작업 트리의 변경 사항이 새 리비전으로 간주됩니다. CLI 도구와 Claude Code 같은 AI 에이전트 환경에서 모두 사용할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/GillMacedo/whybumped/tree/HEAD/plugin/skills/explaining-go-dependency-bumps

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

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는 알 수 없음으로 처리하고, 통과로 간주하지 않으며, 사용자에게 오류를 표시하세요.

보고서

  1. go-raised가 있으면 먼저 시작하세요: 이전 및 새로운 go 줄, 새 버전이 필요한 의존성과 그 의존성이 그래프에 들어온 경로. go.mod가 어떤 의존성보다 더 높은 go 버전을 요구한다면 그렇게 말하세요.
  2. 모듈 변경 사항을 "pulled in through" 줄별로 그룹화하세요: go.mod가 요구하는 각 루트 모듈에 대해, 해당 모듈이 올리거나 추가한 내용을 나열하세요. 이것들은 해당 업그레이드의 부수 효과입니다.
  3. requested 변경 사항은 go.mod만이 요청한 버전입니다. // indirect 모듈이 어떤 의존성도 필요로 하지 않는 수준보다 올라간 경우, 수동 또는 go get -u에 의해 올라갔으며, 사용자가 더 작은 변경을 원한다면 필요한 버전에 머물 수 있다고 말하세요.
  4. lowered 및 removed 변경 사항은 어떤 요구자가 예전 버전을 필요로 했는지와 해당 요구자가 어떻게 되었는지 설명합니다. 내려간 모듈은 빌드에서 다운그레이드된 것이므로; 분명히 언급하세요.
  5. requirement-dropped는 go.mod에서 한 줄이 사라졌지만 빌드가 다른 모듈을 통해 동일한 버전을 유지하는 경우입니다. go mod tidy는 어떤 패키지도 해당 모듈을 필요로 하지 않을 때 이 작업을 수행합니다. 사용자가 tidy를 실행하지 않았다면 go.mod가 손상되지 않았는지 확인하세요.
  6. 선택되지 않은 버전을 통한 체인은 실제입니다: 최소 버전 선택에서 그래프의 모든 버전 요구 사항이 계산되며, 더 새로운 버전에 밀린 경우도 포함됩니다.
  7. 사용자가 요청하지 않는 한 go.mod를 편집하지 마세요. 변경 범위를 줄이려면 일반적으로 루트 모듈에 대해서만 go get module@version을 실행한 다음 go mod tidy를 실행하고 도구를 다시 실행하세요.

관련 스킬