I have the same issue here. Running tests on a linux (ubuntu based).
It only happens when a use the flag coverpkg. I have managed to "solve" it on an very bad way, creating an empty test file in packages that don't have tests (removed the files paths) ``` open /tmp/go-build2070237917/b334/covmeta.ce414c14907a52c0962d732a8a53fd8b6639b1f9a004b9c6e110921165bab8c3: no such file or directory open /tmp/go-build2070237917/b335/covmeta.41db8a5854133f388ac5e1dae6628818f4bfb391b0fed738b0e33c2fa26dd79b: no such file or directory ... ... .... ``` Em quinta-feira, 8 de fevereiro de 2024 às 16:41:18 UTC-3, Martin Schallnahs escreveu: > Hey Brian, > > dont get me wrong! > > My usual setup is Continuous Integration Pipeline running in Linux VMs > which, in case of my golang projects, start fresh golang docker container > images from DockerHub. > In case of this problem I used golang:1.22.0-alpine3.19 and golang:1.22.0 > (debian basd). > For both I have the problem I describe. > I just wanted to show, that its not a Docker problem and used my local > Windows machine do prove that. > > I grabbed my Macbook Pro (Intel), installed freshly Golang 1.22.0 and run > the mentioned go test command on the reproducer, and for me here the > problem also gets triggered. > As you explained I use the corrected reproducer, with the Test not > failing, and have "go 1.22.0" in the go.mod. > > > $ go version > go version go1.22.0 darwin/amd64 > > $ go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... > -covermode count > example.com/m: open > /var/folders/dm/k73ydgtx15l7dzwc3qk_wmhc0000gn/T/go-build3097649140/b002/covmeta.f6e4431d5ec1fd71f02b3ce4e56eb691a86525173d917007425576a7d9db7c72: > > no such file or directory > > === RUN TestHelloer > --- PASS: TestHelloer (0.00s) > PASS > coverage: 100.0% of statements in ./internal/... > ok example.com/m/internal 0.261s coverage: 100.0% of statements in > ./internal/… > > > Bit confusing, that it works for you though. > On Thursday, February 8, 2024 at 6:11:15 PM UTC+1 Brian Candler wrote: > >> $ go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... >> -covermode count || echo "flaky:$?" >> example.com/m: open >> /tmp/go-build2233205084/b002/covmeta.f6e4431d5ec1fd71f02b3ce4e56eb691a86525173d917007425576a7d9db7c72: >> >> no such file or directory >> >> C:\dev\git\golang-test-cover>go test -v ./... -coverprofile=coverage.out >> -coverpkg=./internal/... -covermode count >> example.com/m: open >> C:\Users\A1524415\AppData\Local\Temp\go-build2423189316\b002\covmeta.f6e4431d5ec1fd71f02b3ce4e56eb691a86525173d917007425576a7d9db7c72: >> >> The system cannot find the file specified. >> >> Those look like the underlying errors causing the exit code 1. But it >> works fine for me under both Linux and macOS, as long as I have "go 1.22.0" >> in go.mod. Maybe someone who knows more about Windows can help? >> >> On Thursday 8 February 2024 at 17:03:18 UTC Martin Schallnahs wrote: >> >>> Hi Brian, >>> >>> thanks for checking out, yes that I wanted also to write you. >>> We need it currently in our CI as some dependency scanner tool does not >>> work with the "go X.Y.Z." syntax, but I tried, and for my problem it did >>> not was the cause. >>> >>> >>> > If a test fails, I would expect it to terminate with an error (exit >>> code 1 in this case). >>> >>> See my second mail, the test case should not fail, it was kinda a typo >>> (tried to shorten the reproducer to much in my first mail). >>> >>> > If I run your reproducer locally (not in Docker) with the modified >>> TestHelloer, it works fine(*) and gives me an exit code of 0 >>> >>> Yes, when I run it with golang 1.21.7 it works fine as well, as my >>> problem statement is about golang 1.22.0. >>> >>> > Therefore, if your problem only occurs when using Docker, then you >>> should provide a docker-based reproducer (including the Dockerfile) >>> >>> Happens locally as well. And in my original setup it was using a fresh >>> docker container from golang (in an CI/GitLab pipeline) and did this: >>> >>> $ go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... >>> -covermode count || echo "flaky:$?" >>> example.com/m: open >>> /tmp/go-build2233205084/b002/covmeta.f6e4431d5ec1fd71f02b3ce4e56eb691a86525173d917007425576a7d9db7c72: >>> >>> no such file or directory >>> >>> === RUN TestHelloer >>> --- PASS: TestHelloer (0.00s) >>> PASS >>> coverage: 100.0% of statements in ./internal/... >>> ok example.com/m/internal 0.004s coverage: 100.0% of statements in >>> ./internal/... >>> flaky:1 >>> $ go tool cover -html=coverage.out -o coverage.html >>> $ go tool cover -func=coverage.out >>> example.com/m/internal/helloer.go:3: Helloer 100.0% >>> total: (statements) 100.0% >>> >>> >>> But I just tried it locally (Windows) and there it happens as well: >>> >>> C:\dev\git\golang-test-cover>go test -v ./... -coverprofile=coverage.out >>> -coverpkg=./internal/... -covermode count >>> example.com/m: open >>> C:\Users\A1524415\AppData\Local\Temp\go-build2423189316\b002\covmeta.f6e4431d5ec1fd71f02b3ce4e56eb691a86525173d917007425576a7d9db7c72: >>> >>> The system cannot find the file specified. >>> >>> === RUN TestHelloer >>> --- PASS: TestHelloer (0.00s) >>> PASS >>> coverage: 100.0% of statements in ./internal/... >>> ok example.com/m/internal 15.260s coverage: 100.0% of statements >>> in ./internal/... >>> >>> >>> So for now I checked it on: >>> - windows >>> - debian (via docker container) >>> - alpine (via docker container) >>> >>> All with 1.22.0. >>> >>> > since you say that the coverage file is created, and presumably you >>> would have noticed the "toolchain not available" error message. In any >>> case, you're using a base image with go 1.22.0. >>> >>> Exactly. >>> As seen in the output above, further commands (go tool cover) using the >>> coverage.out work fine. >>> >>> On Thursday 8 February 2024 at 10:46:44 UTC+1 Brian Candler wrote: >>> >>>> I found the solution to the "toolchain not available" problem: put "go >>>> 1.22.0" instead of "go 1.22" in go.mod. Clues picked up from #62278 >>>> <https://github.com/golang/go/issues/62278>. >>>> >>>> It's confusing for people who've been using go for a while though, when >>>> go.mod used to contain "go X.Y" and it was invalid to put "go X.Y.Z". Now >>>> that appears to have swapped around >>>> <https://github.com/golang/go/issues/62278#issuecomment-1698829945>. >>>> >>>> On Thursday 8 February 2024 at 08:30:25 UTC Brian Candler wrote: >>>> >>>>> Is it a bug or exepected behaviour? >>>>> >>>>> >>>>> If a test fails, I would expect it to terminate with an error (exit >>>>> code 1 in this case). >>>>> >>>>> If I run your reproducer locally (not in Docker) with the modified >>>>> TestHelloer, it works fine(*) and gives me an exit code of 0: >>>>> >>>>> % go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... >>>>> -covermode count >>>>> ? example.com/m [no test files] >>>>> === RUN TestHelloer >>>>> --- PASS: TestHelloer (0.00s) >>>>> PASS >>>>> >>>>> coverage: 100.0% of statements in ./internal/... >>>>> ok example.com/m/internal 0.135s coverage: 100.0% of statements in >>>>> ./internal/... >>>>> % echo $? >>>>> 0 >>>>> >>>>> Therefore, if your problem only occurs when using Docker, then you >>>>> should provide a docker-based reproducer (including the Dockerfile) >>>>> >>>>> (*) However, I had to change the go.mod file to say version 1.21. If >>>>> it says 1.22, I get an error. >>>>> >>>>> Under Linux (go1.21.7): >>>>> >>>>> $ go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... >>>>> -covermode count >>>>> go: downloading go1.22 (linux/amd64) >>>>> go: download go1.22 for linux/amd64: toolchain not available >>>>> >>>>> Under macOS (go1.21.6): >>>>> >>>>> % go test -v ./... -coverprofile=coverage.out -coverpkg=./internal/... >>>>> -covermode count >>>>> go: downloading go1.22 (darwin/arm64) >>>>> go: download go1.22 for darwin/arm64: toolchain not available >>>>> >>>>> I don't *think* this is the same problem as you're seeing, since you >>>>> say that the coverage file is created, and presumably you would have >>>>> noticed the "toolchain not available" error message. In any case, you're >>>>> using a base image with go 1.22.0. >>>>> >>>> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/af944ed8-34fe-4d28-8a0e-f786b3974e99n%40googlegroups.com.