くりにっき

フルスタックキュアエンジニアです

Go 1.16以降はGitHub版Dependabotを使った方がよさそう

前提

一言でDependabotと言っても実は2種類あります

3rd party版Dependabot

dependabot.com *1

GitHub版Dependabot

docs.github.com

github.blog

どうしてGo.1.16以降はGitHub版Dependabotを使った方がいいのか?

Go 1.16で No automatic changes to go.mod and go.sum が入った関係でmoduleのバージョンアップ時にエラーになることがあるためです。

blog.golang.org

実際に3rd party版DependabotでmoduleのバージョンアップPRを作った場合、下記のようにGo 1.16のみエラーになります

f:id:sue445:20210320073935p:plain

+ make test
go test -count=1 $***TEST_ARGS***
Error: kmsenv.go:8:2: missing go.sum entry for module providing package golang.org/x/oauth2/google (imported by github.com/sue445/gcp-kmsenv); to add:
    go get github.com/sue445/gcp-kmsenv
Error: ../../../go/pkg/mod/google.golang.org/grpc@v1.36.0/internal/channelz/types_linux.go:26:2: missing go.sum entry for module providing package golang.org/x/sys/unix (imported by google.golang.org/grpc/internal/channelz); to add:
    go get google.golang.org/grpc/internal/channelz@v1.36.0
Error: ../../../go/pkg/mod/cloud.google.com/go@v0.79.0/kms/apiv1/key_management_client.go:28:2: missing go.sum entry for module providing package google.golang.org/api/iterator (imported by cloud.google.com/go/kms/apiv1); to add:
    go get cloud.google.com/go/kms/apiv1@v0.79.0
Error: ../../../go/pkg/mod/cloud.google.com/go@v0.79.0/kms/apiv1/doc.go:43:2: missing go.sum entry for module providing package google.golang.org/api/option (imported by github.com/sue445/gcp-kmsenv); to add:
    go get github.com/sue445/gcp-kmsenv
Error: ../../../go/pkg/mod/cloud.google.com/go@v0.79.0/kms/apiv1/key_management_client.go:30:2: missing go.sum entry for module providing package google.golang.org/api/option/internaloption (imported by cloud.google.com/go/kms/apiv1); to add:
    go get cloud.google.com/go/kms/apiv1@v0.79.0
Error: ../../../go/pkg/mod/cloud.google.com/go@v0.79.0/kms/apiv1/key_management_client.go:31:2: missing go.sum entry for module providing package google.golang.org/api/transport/grpc (imported by cloud.google.com/go/kms/apiv1); to add:
    go get cloud.google.com/go/kms/apiv1@v0.79.0
Error: ../../../go/pkg/mod/cloud.google.com/go@v0.79.0/kms/apiv1/iam.go:19:2: missing go.sum entry for module providing package google.golang.org/genproto/googleapis/cloud/kms/v1 (imported by github.com/sue445/gcp-kmsenv); to add:
    go get github.com/sue445/gcp-kmsenv
Error: ../../../go/pkg/mod/cloud.google.com/go@v0.79.0/iam/iam.go:30:2: missing go.sum entry for module providing package google.golang.org/genproto/googleapis/iam/v1 (imported by cloud.google.com/go/iam); to add:
    go get cloud.google.com/go/iam@v0.79.0
Error: ../../../go/pkg/mod/google.golang.org/grpc@v1.36.0/status/status.go:34:2: missing go.sum entry for module providing package google.golang.org/genproto/googleapis/rpc/status (imported by google.golang.org/grpc/status); to add:
    go get google.golang.org/grpc/status@v1.36.0
Error: make: *** [Makefile:10: test] Error 1
Error: Process completed with exit code 2.

https://github.com/sue445/gcp-kmsenv/pull/53/checks?check_run_id=2152006087

対応するためにはmoduleのバージョンアップ時に go getgo mod tidy も一緒にする必要があるのですが、GitHub版DependabotだとPR作成時に自動で go mod tidy を行うためこの問題を回避できます。

github.blog

3rd party版の方は下記issueがクローズされてるのでおそらく実装の見込みは薄いと思います。

github.com

まぁ3rd party版とGitHub版があるならGitHub版を使った方がいいよね...

3rd party版 vs GitHub

GitHub版には automerged_updates が無いのを除けば今の所不満は無いです。(3rd party版の automerged_updates *4 をずっと使ってきたのでこれまで移行するモチベーションがあまりなかった)

*1:区別するために僕が勝手に3rd party版って言ってるので適切な言い方があったら知りたい

*2:https://github.com/sue445/gitpanda/pull/575

*3:https://github.com/sue445/gitpanda/pull/584

*4:https://dependabot.com/docs/config-file/#automerged_updates