uber-go / mock

GoMock is a mocking framework for the Go programming language.
Apache License 2.0
2.33k stars 121 forks source link

macOS mockgen terminated by signal SIGKILL when built with swiftlang-6.0.0.3.300 clang-1600.0.20.10 toolchain #185

Open samdeane opened 5 months ago

samdeane commented 5 months ago

Actual behavior

bash-3.2$ go install go.uber.org/mock/mockgen@v0.3.0
bash-3.2$ mockgen --version
Killed: 9

Expected behavior

bash-3.2$ go install go.uber.org/mock/mockgen@v0.3.0
bash-3.2$ mockgen --version
v0.3.0

To Reproduce

Installing mockgen on macOS using go install go.uber.org/mock/mockgen@v0.3.0, with the swift/clang toolchain set to the one that ships with Xcode 16.0.0-Beta (swift-driver version: 1.109.2 Apple Swift version 6.0 (swiftlang-6.0.0.3.300 clang-1600.0.20.10)) results in an executable that is killed when executed.

Switching back to the Xcode 15.4 toolchain (swift-driver version: 1.90.11.1 Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)), and re-installing mockgen, is sufficient to fix it.

Additional Information

go version go1.21.4 darwin/arm64

Triage Notes for the Maintainers

samdeane commented 5 months ago

I realise that this is likely a toolchain issue outside of your control. The main purpose of this report is as a breadcrumb for anyone else seeing the same behaviour!

jpotterm commented 1 month ago

I ran into this error due to an invalid code signature. You can check if the signature is valid with codesign -v bin/mockgen (no output means valid). If it is invalid, a workaround is to re-sign it with codesign -f -s - bin/mockgen.

ylhan commented 1 month ago

I ran into this error due to an invalid code signature. You can check if the signature is valid with codesign -v bin/mockgen (no output means valid). If it is invalid, a workaround is to re-sign it with codesign -f -s - bin/mockgen.

This fixed it for me but why is the code signature invalid? I re-install mockgen following the official instructions in the README.

jpotterm commented 1 month ago

Another workaround that works for me is to set CGO_ENABLED=0. For example:

CGO_ENABLED=0 go install go.uber.org/mock/mockgen@latest
bap2pecs commented 1 month ago

If it is invalid, a workaround is to re-sign it with codesign -f -s - bin/mockgen.

$ codesign -v $(which mockgen)                                                                                                                                   [11:29:32]
/Users/<username>/go/bin/mockgen: invalid signature (code or signature have been modified)
In architecture: arm64

$ codesign -f -s $(which mockgen)                                                                                                                                [11:29:46]
error: The specified item could not be found in the keychain.

I got this error but the way @jpotterm mentioned worked for me

$ CGO_ENABLED=0 go install go.uber.org/mock/mockgen@latest
$ mockgen -version                                                                                                                                               [11:30:26]
v0.4.0