summaryrefslogtreecommitdiff
path: root/finalGoSumCheck.go
diff options
context:
space:
mode:
Diffstat (limited to 'finalGoSumCheck.go')
-rw-r--r--finalGoSumCheck.go109
1 files changed, 109 insertions, 0 deletions
diff --git a/finalGoSumCheck.go b/finalGoSumCheck.go
new file mode 100644
index 0000000..7bdddd8
--- /dev/null
+++ b/finalGoSumCheck.go
@@ -0,0 +1,109 @@
+package forgepb
+
+import (
+ "strings"
+
+ "go.wit.com/lib/protobuf/gitpb"
+ "go.wit.com/log"
+)
+
+// this is a final check to make sure, before pushing
+// a golang repo, that the go.sum file has the correct
+// and current version of every package
+//
+// it re-scans the go.sum file. DOES NOT MODIFY ANYTHING
+// this is the last thing to run to double check everything
+// before 'git tag' or git push --tags
+func (f *Forge) FinalGoDepsCheckOk(check *gitpb.Repo) bool {
+ var good bool = true
+ if check == nil {
+ log.Info("boo, check == nil")
+ return false
+ }
+ if ! check.Exists("go.mod") {
+ log.Info("go.mod is missing in", check.GoPath)
+ return false
+ }
+
+ // clear out the protobuf and rescan from the file
+ check.GoDeps = nil
+ if ok, _ := check.IsPrimitive(); ok {
+ return true
+ }
+ if ok, err := check.ParseGoSum(); !ok {
+ log.Info("FinalGoDepsCheckOk() error", err)
+ return false
+ }
+
+ if check.GoDepsLen() == 0 {
+ // this is a primitive
+ check.GoPrimitive = true
+ return true
+ }
+
+ log.Printf("current repo %s go dependancy count: %d", check.GetGoPath(), check.GoDepsLen())
+ deps := check.GoDeps.SortByGoPath()
+ for deps.Scan() {
+ depRepo := deps.Next()
+ found := f.Repos.FindByGoPath(depRepo.GetGoPath())
+ if found == nil {
+ if f.checkOverride(depRepo.GetGoPath()) {
+ // skip this gopath because it's probably broken forever
+ continue
+ }
+ log.Info("not found:", depRepo.GetGoPath())
+ good = false
+ continue
+ }
+ // log.Info("found dep", depRepo.GetGoPath())
+ if depRepo.GetVersion() != found.GetTargetVersion() {
+ check := f.Repos.FindByGoPath(depRepo.GoPath)
+ if f.IsReadOnly(check) {
+ log.Printf("%-48s ok error .%s. vs .%s. (ignoring read-only repo)", depRepo.GetGoPath(), depRepo.GetVersion(), found.GetTargetVersion())
+ } else {
+ if f.checkOverride(depRepo.GetGoPath()) {
+ log.Printf("%-48s ok error .%s. vs .%s. (forge.checkOverride())", depRepo.GetGoPath(), depRepo.GetVersion(), found.GetTargetVersion())
+ // skip this gopath because it's probably broken forever
+ continue
+ } else {
+ log.Printf("%-48s error %10s vs %10s", depRepo.GetGoPath(), depRepo.GetVersion(), found.GetTargetVersion())
+ good = false
+ }
+ }
+ }
+ }
+ return good
+}
+
+func (f *Forge) checkOverride(gopath string) bool {
+ if gopath == "cloud.google.com/go" {
+ log.Info("checkOverride() is ignoring", gopath)
+ return true
+ }
+ if gopath == "github.com/posener/complete/v2" {
+ log.Info("checkOverride() is ignoring", gopath)
+ return true
+ }
+ if strings.HasPrefix(gopath, "github.com/go-gl") {
+ log.Info("checkOverride() is ignoring", gopath)
+ return true
+ }
+ if strings.HasPrefix(gopath, "google.golang.org") {
+ log.Info("checkOverride() is ignoring", gopath)
+ return true
+ }
+ if strings.HasPrefix(gopath, "go.opencensus.io") {
+ log.Info("checkOverride() is ignoring", gopath)
+ return true
+ }
+ if strings.HasPrefix(gopath, "github.com/nicksnyder/go-i18n") {
+ log.Info("checkOverride() is ignoring", gopath)
+ return true
+ }
+ // fuckit for now. just blacklist github.com
+ if strings.HasPrefix(gopath, "github.com/") {
+ log.Info("checkOverride() is ignoring", gopath)
+ return true
+ }
+ return false
+}