Skip to content

Commit

Permalink
Prevent go.mod file pollution with development dependencies (#85)
Browse files Browse the repository at this point in the history
Previously when installing development dependencies through "mage",
the `go.mod` file was updated to include the installed packages since
this the default behavior of the `go get` command when running in
"module" mode.
To prevent the pollution of the project's Go module definition the
"module" mode has been disabled when installing the dev/build packages.
This is a necessary workaround until the Go toolchain is able to install
packages globally without updating the module file when the `go get`
command is run from within the project root directory.

See golang/go#30515 for more details and
proposed solutions that might be added to Go's build tools in future
versions.

Epic GH-33
Resolves GH-82
  • Loading branch information
arcticicestudio authored Oct 12, 2019
1 parent 3bb0b89 commit 278d08e
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions magefile.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ var (
// This is the same tool used by the https://golangci.com service that is also integrated in snowsaw's CI/CD pipeline.
// See https://github.com/golangci/golangci-lint for more details.
lintTool = &buildDependency{
PackageName: "github.com/golangci/golangci-lint/cmd/golangci-lint@v1.17.1",
PackageName: "github.com/golangci/golangci-lint/cmd/golangci-lint",
BinaryName: "golangci-lint",
}

Expand Down Expand Up @@ -474,8 +474,16 @@ func validateBuildDependencies() {
continue
}

env := map[string]string{
// Disable module mode to install development dependencies to prevent to pollute the project module file.
// This is a necessary workaround until the Go toolchain is able to install packages globally without
// updating the module file when the "go get" command is run from within the project root directory.
// See https://github.com/golang/go/issues/30515 for more details or more details and proposed solutions
// that might be added to Go's build tools in future versions.
"GO111MODULE": "off"}

prt.Infof("Installing required build dependency: %s", color.CyanString(bd.PackageName))
if err = sh.Run(goExec, "get", "-u", bd.PackageName); err != nil {
if err = sh.RunWith(env, goExec, "get", "-u", bd.PackageName); err != nil {
prt.Errorf("Failed to install required build dependency %s: %v", color.CyanString(bd.PackageName), err)
prt.Warnf("Please install manually: %s", color.CyanString("go get -u %s", bd.PackageName))
os.Exit(1)
Expand Down

0 comments on commit 278d08e

Please sign in to comment.