Hi,
After adding support for go mod in 3.10.1, we are no longer able to build new packages for https://github.com/travis-ci/worker
Snapcraft runs go build -o <out dir>
, which builds main package only if it’s inside the root, but in our case main package is located in another dir ./cmd/travis-worker/main.go
(which is a common pattern for go applications) and the command fails.
Before introducing go mod
support, snapcraft would scan all dirs for main
package and build all of them. Unfortunately, I haven’t found a way to restore the old behaviour.
Possible way to fix is to tell go build
where main package is located (e.g. go build -o <output dir> ./cmd/travis-worker
), or use ./...
pattern (e.g. go build -o <output dir> ./...
), so that compiler will build all main packages in the repo. I think the 2nd option is preferable as it will not require any additional configuration.
I’ve prepared a minimal example where the issue is reproducible:
- Given a go module, where main package is located in
./cli
subdirectory - Clone https://github.com/pavel-d/snaptest
cd snaptest
- Run
snapcraft build --use-lxd --debug
Result:
snapcraft --use-lxd --debug
The LXD provider is offered as a technology preview for early adopters.
The command line interface, container names or lifecycle handling may change in upcoming releases.
Launching a container.
Waiting for container to be ready
......................
status: done
snapd 2.43.3 from Canonical✓ refreshed
Skipping pull snaptest (already ran)
Building snaptest
go build -o /root/parts/snaptest/install/bin
go build: no main packages to build
Failed to run 'go build -o /root/parts/snaptest/install/bin' for 'snaptest': Exited with code 1.
Verify that the part is using the correct parameters and try again.
snapcraft-snaptest # snapcraft --version
snapcraft, version 3.10.1
I’ve sent a PR, please let me know what you think! https://github.com/snapcore/snapcraft/pull/2962