# Check that files and their imports are not included in 'go list' output # when they are excluded by build constraints. # Linux and cgo files should be included when building in that configuration. env GOOS=linux env GOARCH=amd64 env CGO_ENABLED=1 go list -f '{{range .GoFiles}}{{.}} {{end}}' stdout '^cgotag.go empty.go suffix_linux.go tag.go $' go list -f '{{range .CgoFiles}}{{.}} {{end}}' stdout '^cgoimport.go $' go list -f '{{range .Imports}}{{.}} {{end}}' stdout '^C cgoimport cgotag suffix tag $' # Disabling cgo should exclude cgo files and their imports. env CGO_ENABLED=0 go list -f '{{range .GoFiles}}{{.}} {{end}}' stdout 'empty.go suffix_linux.go tag.go' go list -f '{{range .CgoFiles}}{{.}} {{end}}' ! stdout . go list -f '{{range .Imports}}{{.}} {{end}}' stdout '^suffix tag $' # Changing OS should exclude linux sources. env GOOS=darwin go list -f '{{range .GoFiles}}{{.}} {{end}}' stdout '^empty.go $' go list -f '{{range .Imports}}{{.}} {{end}}' stdout '^$' # Enabling a tag should include files that require it. go list -tags=extra -f '{{range .GoFiles}}{{.}} {{end}}' stdout '^empty.go extra.go $' go list -tags=extra -f '{{range .Imports}}{{.}} {{end}}' stdout '^extra $' # Packages that require a tag should not be listed unless the tag is on. ! go list ./tagonly go list -tags=extra ./tagonly stdout m/tagonly -- go.mod -- module m go 1.13 -- empty.go -- package p -- extra.go -- // +build extra package p import _ "extra" -- suffix_linux.go -- package p import _ "suffix" -- tag.go -- // +build linux package p import _ "tag" -- cgotag.go -- // +build cgo package p import _ "cgotag" -- cgoimport.go -- package p import "C" import _ "cgoimport" -- tagonly/tagonly.go -- // +build extra package tagonly