Run go mod tidy -e if go.mod exists

This commit is contained in:
Owen Mansel-Chan
2022-05-03 14:57:13 +01:00
parent a8eeef6ef8
commit 22ccbbaae8

View File

@@ -2,7 +2,6 @@ package main
import (
"fmt"
"golang.org/x/mod/semver"
"io/ioutil"
"log"
"net/url"
@@ -13,6 +12,8 @@ import (
"runtime"
"strings"
"golang.org/x/mod/semver"
"github.com/github/codeql-go/extractor/autobuilder"
"github.com/github/codeql-go/extractor/util"
)
@@ -289,6 +290,77 @@ func main() {
}
}
if depMode == GoGetWithModules {
// stat go.mod and go.sum
var beforeGoModFileInfo, beforeGoSumFileInfo os.FileInfo
beforeGoMod, beforeGoModerr := os.Open("go.mod")
if beforeGoModerr == nil {
var beforeGoModStatErr error
beforeGoModFileInfo, beforeGoModStatErr = beforeGoMod.Stat()
if beforeGoModStatErr != nil {
log.Println("Failed to stat go.mod before running `go mod tidy -e`")
}
} else {
log.Println("Failed to read go.mod before running `go mod tidy -e`")
}
beforeGoMod.Close()
beforeGoSum, beforeGoSumErr := os.Open("go.sum")
if beforeGoSumErr == nil {
var beforeGoSumStatErr error
beforeGoSumFileInfo, beforeGoSumStatErr = beforeGoSum.Stat()
if beforeGoSumStatErr != nil {
log.Println("Failed to stat go.sum before running `go mod tidy -e`")
}
}
// don't print a warning if beforeGoSumErr != nil as it may be that the
// file doesn't exist
beforeGoSum.Close()
// run `go mod tidy -e`
res := util.RunCmd(exec.Command("go", "mod", "tidy", "-e"))
if !res {
log.Println("Failed to run `go mod tidy -e`")
} else {
if beforeGoModFileInfo != nil {
afterGoMod, afterGoModErr := os.Open("go.mod")
if afterGoModErr != nil {
log.Println("Failed to read go.mod after running `go mod tidy -e`")
} else {
afterGoModFileInfo, afterGoModStatErr := afterGoMod.Stat()
if afterGoModStatErr != nil {
log.Println("Failed to stat go.mod after running `go mod tidy -e`")
} else {
if afterGoModFileInfo.ModTime().After(beforeGoModFileInfo.ModTime()) {
// if go.mod has been changed then notify the user
log.Println("We have run `go mod tidy -e` and it altered go.mod. You may wish to check these changes into version control. ")
}
}
}
afterGoMod.Close()
}
afterGoSum, afterGoSumErr := os.Open("go.sum")
if afterGoSumErr != nil {
log.Println("Failed to read go.sum after running `go mod tidy -e`")
} else {
afterGoSumFileInfo, afterGoSumStatErr := afterGoSum.Stat()
if afterGoSumStatErr != nil {
log.Println("Failed to stat go.sum after running `go mod tidy -e`")
} else {
if beforeGoSumErr != nil || afterGoSumFileInfo.ModTime().After(beforeGoSumFileInfo.ModTime()) {
// if go.sum has been changed then notify the user
log.Println("We have run `go mod tidy -e` and it altered go.sum. You may wish to check these changes into version control. ")
}
}
}
afterGoSum.Close()
}
}
// if `LGTM_INDEX_NEED_GOPATH` is set, it overrides the value for `needGopath` inferred above
if needGopathOverride := os.Getenv("LGTM_INDEX_NEED_GOPATH"); needGopathOverride != "" {
inLGTM = true