114 lines
3.2 KiB
Go
114 lines
3.2 KiB
Go
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 == "bou.ke/monkey" {
|
|
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
|
|
}
|