uber-go/mock

ERROR: cannot find module providing package go.uber.org/mock/mockgen/model: import lookup disabled by -mod=vendor

nebiros opened this issue ยท 9 comments

Actual behavior
Moving from golang/mock I got this error when running the mockgen command and using reflection:

mockgen -build_flags=-mod=vendor -destination=internal/testing/mock/mock_dynamodbiface.go -package=mock github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface DynamoDBAPI
prog.go:12:2: cannot find module providing package go.uber.org/mock/mockgen/model: import lookup disabled by -mod=vendor
prog.go:12:2: cannot find module providing package go.uber.org/mock/mockgen/model: import lookup disabled by -mod=vendor
build flag -mod=vendor only valid when using modules
2023/09/11 16:50:04 Loading input failed: exit status 1

Expected behavior
This doesn't happen with golang/mock module

To Reproduce

  1. go install go.uber.org/mock/mockgen@latest
  2. mockgen -build_flags=-mod=vendor -destination=internal/testing/mock/mock_dynamodbiface.go -package=mock github.com/aws/aws-sdk-go/service/dynamodb/dynamodbiface DynamoDBAPI

Additional Information

  • gomock mode (reflect or source): reflect
  • gomock version or git ref: v0.2.0
  • golang version: go version go1.21.1 darwin/arm64

Triage Notes for the Maintainers

I ran into this same issue today ๐Ÿž ๐Ÿ‘

ash2k commented

I'm getting similar errors without -mod=vendor. This started with v0.3.0.

It cannot find one of the application packages:

prog.go:14:2: no required module provides package gitlab.com/gitlab-org/cluster-integration/gitlab-agent/v16/cmd/agentk/agentkapp: go.mod file not found in current directory or any parent directory; see 'go help modules'
prog.go:12:2: no required module provides package go.uber.org/mock/mockgen/model: go.mod file not found in current directory or any parent directory; see 'go help modules'
2023/09/21 03:52:18 Loading input failed: exit status 1
exit status 1
ash2k commented

I think it was a somewhat unrelated issue. I tried upgrading 0.2.0 -> 0.3.0 and at the same time adding -typed. It doesn't work this way, at least didn't work for me. I upgraded to 0.3.0 first and then now added -typed. Haven't finished fixing the tests, but mock generation succeeded. Sorry for the noise.

The same problem that ash2k encountered also happens to me. This occurs when both v0.2.0 and v0.3.0 are installed in the same environment. The problem can be solved by uninstalling either one of these versions.

Switching to source mode instead of reflect mode resolved this for me. I ultimately had to switch to source mode anyways as I'm using generics in my interfaces now that v0.3.0 has been released.

If you are using reflect mode, just make sure that you have installed the same version of this package as the one defined in your go.mod.

Make sure the mockgen version you installed is the same one in your go.mod

I'm having this issue and the mockgen version is the same between the binary and our go.mod yet it keeps on failing. It works fine under macOS but on our containers it fails consistently.
We are on v0.2.0 and cannot upgrade until #104 is fixed as it would cause massive churn in source control since we use an absolute path when specifying the output option, and everyone has a different home directory.

It turns out that, one of the reasons, this fails is that on laptop we had copies of gomock_reflect_.... folders, and we had one accidentally added to source control a while back. Deleting the unwanted gomock_reflect_.... folder from source control removed the only go file that imported "go.uber.org/mock/mockgen/model" and then breaking our pipelines. Our fix was to add a test/mockgen_compat/main.go file that does nothing else but importing "go.uber.org/mock/mockgen/model" and the pipelines are happy again.

See golang/mock#494 (comment)