# test that we used all necessary dependencies [linux] exec bash runtime-related-tested.sh env GOPRIVATE=* garble build -- runtime-related.sh -- for GOOS in linux darwin windows; do skip="|macos" if [[ $GOOS == "darwin" ]]; then skip="" fi GOOS=$GOOS go list -deps $(sed -rn 's@//go:linkname .* ([^.]*)\.[^.]*@\1@p' $(go env GOROOT)/src/runtime/*.go | grep -vE '^main|^runtime\.|js'$skip) runtime || exit 1 done | sort -u -- runtime-related-tested.sh -- # get all runtime-related deps related=$(bash runtime-related.sh) || exit 1 # get all tested deps tested=$(for GOOS in linux darwin windows; do GOOS=$GOOS go list -deps || exit 1; done | sort -u) # remove all tested deps from the runtime-related deps output=$(echo "$related" | grep -Fvx -e "$tested") # output should be empty if all runtime-related deps are tested [[ -z "$output" ]] || (echo "$output" && exit 1) -- go.mod -- module test/main go 1.17 -- main.go -- package main import ( "net/http/pprof" "os/signal" "plugin" "runtime/debug" "runtime/metrics" "text/tabwriter" ) // This program imports all runtime-related dependencies (proven by runtime-related-tested.sh) func main() { _ = tabwriter.AlignRight signal.Ignore() _ = plugin.Plugin{} _ = pprof.Handler("") _ = debug.GCStats{} metrics.All() }