Go 1.13 has unleashed go.mod hell!


(Ray Johnson) #1

The new validation done in go modules has meant nearly 40 repos of ours no longer build when upgrading to go 1.13.

One big reason that has hit us so hard we would often “go get” a branch of a library. We then tested the repo and the library together. If it all worked we merged both repos to master. But because of that we had a lot of go.mod requires that looked like this:

github.com/lindenlab/extraction-utils-go v1.5.31-0.20190618185548-e3d481dc345c

1.13 hates those!

But I can “fix” them like this: (but we will have to do this A LOT)

replace github.com/lindenlab/extraction-utils-go v1.5.31-0.20190618185548-e3d481dc345c => github.com/lindenlab/extraction-utils-go v1.5.31

Worse we have some cases of circular dependancies. Since I had discovered some of these I knew they would bite us in the ■■■ some day. Well 1.13 is that day!

For example. I get errors like this:

go: github.com/lindenlab/extraction-pii@v1.6.83 requires
	github.com/lindenlab/extraction-accounts-customer@v1.12.16 requires
	github.com/lindenlab/extraction-pii@v1.6.47-0.20190711153349-32a570cf78d3 requires
	github.com/golangci/golangci-lint@v1.16.0 requires
	github.com/go-critic/go-critic@v0.0.0-20181204210945-1df300866540: invalid pseudo-version: does not match version-control timestamp (2019-05-26T07:48:19Z)
go: github.com/lindenlab/extraction-pii@v1.6.83 requires
	github.com/lindenlab/extraction-accounts-customer@v1.12.16 requires
	github.com/lindenlab/extraction-pii@v1.6.47-0.20190711153349-32a570cf78d3 requires
	github.com/golangci/golangci-lint@v1.16.0 requires
	github.com/go-critic/go-critic@v0.0.0-20181204210945-1df300866540: invalid pseudo-version: does not match version-control timestamp (2019-05-26T07:48:19Z)

What is crazy is we actually do not have a dependency on github.com/golangci/golangci-lint and never did! (I think a developer installed it from a repo and then never ran go mod tidy.)

But because it is deep down in circular dependancies I have yet to find the right set of replace commands to fix this one.

Does anyone know if there is a way to turn off the verification go.mod now does?

The messed up thing is you can’t even DO a go get to try to start fixing the dependancies because go get then complains and bails out!

Any advice would be welcome!