• Kirill Smelkov's avatar
    golang: Fix it to keep per-workspace bits inside go.work/ · 273b5687
    Kirill Smelkov authored
    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
    273b5687
goenv.sh.in 647 Bytes