Commit 273b5687 authored by Kirill Smelkov's avatar Kirill Smelkov

golang: Fix it to keep per-workspace bits inside go.work/

And not globally inside slapuser $HOME (which is go builtin default).

`go env` output: before:

    (go.work) slapuser34@vifibcloud-rapidspace-hosting-007:~/srv/runner$ go env
    GO111MODULE=""
    GOARCH="amd64"
    GOBIN=""
    GOCACHE="/srv/slapgrid/slappart34/.cache/go-build"
    GOENV="/srv/slapgrid/slappart34/.config/go/env"
    GOEXE=""
    GOFLAGS=""
    GOHOSTARCH="amd64"
    GOHOSTOS="linux"
    GOINSECURE=""
    GONOPROXY=""
    GONOSUMDB=""
    GOOS="linux"
    GOPATH="/srv/slapgrid/slappart34/srv/runner/software/09b17891535725b7c44e64fb2e856ebe/go.work"
    GOPRIVATE=""
    GOPROXY="https://proxy.golang.org,direct"
    GOROOT="/srv/slapgrid/slappart34/srv/runner/shared/golang1.14/da4c5c8222d5573da4d0e547cfc1793e"
    GOSUMDB="sum.golang.org"
    GOTMPDIR=""
    GOTOOLDIR="/srv/slapgrid/slappart34/srv/runner/shared/golang1.14/da4c5c8222d5573da4d0e547cfc1793e/pkg/tool/linux_amd64"
    GCCGO="gccgo"
    AR="ar"
    CC="gcc"
    CXX="g++"
    CGO_ENABLED="1"
    GOMOD=""
    CGO_CFLAGS="-g -O2"
    CGO_CPPFLAGS=""
    CGO_CXXFLAGS="-g -O2"
    CGO_FFLAGS="-g -O2"
    CGO_LDFLAGS="-g -O2"
    PKG_CONFIG="pkg-config"
    GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build196479275=/tmp/go-build -gno-record-gcc-switches"

after:

    (go.work) slapuser34@vifibcloud-rapidspace-hosting-007:~/srv/runner$ go env
    GO111MODULE=""
    GOARCH="amd64"
    GOBIN=""
    GOCACHE="/srv/slapgrid/slappart34/srv/runner/software/09b17891535725b7c44e64fb2e856ebe/go.work/cache"
    GOENV="/srv/slapgrid/slappart34/srv/runner/software/09b17891535725b7c44e64fb2e856ebe/go.work/goenv"
    GOEXE=""
    GOFLAGS=""
    GOHOSTARCH="amd64"
    GOHOSTOS="linux"
    GOINSECURE=""
    GONOPROXY=""
    GONOSUMDB=""
    GOOS="linux"
    GOPATH="/srv/slapgrid/slappart34/srv/runner/software/09b17891535725b7c44e64fb2e856ebe/go.work"
    GOPRIVATE=""
    GOPROXY="https://proxy.golang.org,direct"
    GOROOT="/srv/slapgrid/slappart34/srv/runner/shared/golang1.14/da4c5c8222d5573da4d0e547cfc1793e"
    GOSUMDB="sum.golang.org"
    GOTMPDIR=""
    GOTOOLDIR="/srv/slapgrid/slappart34/srv/runner/shared/golang1.14/da4c5c8222d5573da4d0e547cfc1793e/pkg/tool/linux_amd64"
    GCCGO="gccgo"
    AR="ar"
    CC="gcc"
    CXX="g++"
    CGO_ENABLED="1"
    GOMOD=""
    CGO_CFLAGS="-g -O2"
    CGO_CPPFLAGS=""
    CGO_CXXFLAGS="-g -O2"
    CGO_FFLAGS="-g -O2"
    CGO_LDFLAGS="-g -O2"
    PKG_CONFIG="pkg-config"
    GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build233719895=/tmp/go-build -gno-record-gcc-switches"

i.e. we change $GOCACHE and $GOENV to be per-workspace:

    --- a/goenv.before
    +++ b/goenv.after
    @@ -1,8 +1,8 @@
     GO111MODULE=""
     GOARCH="amd64"
     GOBIN=""
    -GOCACHE="/srv/slapgrid/slappart34/.cache/go-build"
    -GOENV="/srv/slapgrid/slappart34/.config/go/env"
    +GOCACHE="/srv/slapgrid/slappart34/srv/runner/software/09b17891535725b7c44e64fb2e856ebe/go.work/cache"
    +GOENV="/srv/slapgrid/slappart34/srv/runner/software/09b17891535725b7c44e64fb2e856ebe/go.work/goenv"
     GOEXE=""
     GOFLAGS=""
     GOHOSTARCH="amd64"

Explanation:

- Starting from Go1.10 the go command maintains cache for built packages, test results, etc:

  https://golang.org/doc/go1.10#build

  while this cache tries to remember by which go version and in which
  environment a package was built, and reusing the cached entry only when it is
  indeed correct to do so, by keeping this cache in a shared place - not per go
  workspace - we expose it to interactions with other go installments, which,
  due to e.g. software bugs might misbehave.

  -> keeping the build cache inside go workspace makes things more safe.

- Starting from Go1.13 the go command allows to keep its configuration and environment inside a file:

  https://golang.org/doc/go1.13#go-env-w
  https://go.googlesource.com/proposal/+/master/design/30411-env.md

  The default location for such file is per-user, which can bring
  misinteraction among several go workspace installments and wrt system go
  installment.

  -> move this configuration file into inside go workspace.

/reviewed-by: TrustMe
parent e9a0095f
Pipeline #11547 failed with stage