Bump a go package version

Bump a go package version


My Problem

간혹 go get 으로 제가 만든 도구를 설치 시 구버전(현재는 2버전대인데, 1버전대가..)이 설치되는 이슈가 있었습니다. 또한 pkg.go.dev에도 구버전이 마지막 릴리즈로 있고 변화가 없던 상태였죠.

1414

별일 아니겠거니 하고 방치하다가 최근에 discussions 통해서 물어봤고, 의미있는 해답을 얻어서 과정을 글로 작성해봅니다. https://github.com/hahwul/dalfox/discussions/178

Semantic Import Versioning

brew 등으로 설치하는 패키지는 실제론 바이너리를 시스템에 설치하는 과정이지만, go get 을 통한 바이너리 설치는 git clone + go install 과 유사한 과정으로 바이너리를 시스템에 설치합니다. 이러한 방식을 사용하기 때문에 결국 릴리즈 버전이 아닌 패키지 버전을 따라가게 되어, v2,v3,v4 등 메이저 버전 업이 발생한 경우 별도로 경로를 통해 버전 분리가 필요했던 겁니다. (그래서 이전 버전을 가져온거구요.. )

https://github.com/golang/go/wiki/Modules#semantic-import-versioning

The last sentence is especially important — if you break compatibility, you should change the import path of your package. With Go 1.11 modules, that advice is formalized into the import compatibility rule:

Bump to v2

Change go.mod

아래와 같이 go.mod에 module path를 수정해줍니다.

기존

module github.com/hahwul/dalfox

변경

module github.com/hahwul/dalfox/v2

이후에 테스트를 위해서 tag를 하나 생성해서 push 하였습니다.

$ git tag v2.3.0-pre.1
$ git push --tags

v2 버전의 해당 태그로 go pkg를 가져와보니 잘 가져와집니다.

$ export GO111MODULE=on go get -u github.com/hahwul/dalfox/v2@v2.3.0-pre.1

그리고 pkg.go.dev.에서 확인해보면 v2로 올라갔습니다 🎉

1415 https://pkg.go.dev/github.com/hahwul/dalfox/v2

Change code with sd

쉬운 일괄 변경을 위해 sd를 사용합시다.

$ brew install sd

기존 패키지 경로를 모두 v2로 바꿔주면, 이후에 코드는 v2를 읽어와서 처리하게 됩니다.

$ sd 'github.com/hahwul/dalfox' 'github.com/hahwul/dalfox/v2' go.* *.go */*.go */*/*.go
$ sd 'github.com/hahwul/dalfox' 'github.com/hahwul/dalfox/v2' */*/*/*.go */*/*/*.go

Release!

테스트용 tag는 삭제하고, 신규 버전으로 릴리즈 태그를 작성하여 push 하였습니다. 이제부터 아래 명령으로 설치 시 v2 를 바라보아서 다수 테스트해본 결과 간헐적으로 구버전이 설치되던 이슈도 해결됬습니다.

$ go get -u github.com/hahwul/dalfox/v2@v2.3.0

References