From 29eb4b7ae55e354c2e648eefd3f7d6ef09951990 Mon Sep 17 00:00:00 2001 From: John Olheiser Date: Sun, 31 May 2020 18:38:55 +0000 Subject: [PATCH] Add migrations check (#5) Update README Signed-off-by: jolheiser Add copyright Signed-off-by: jolheiser Add migrations check Signed-off-by: jolheiser Co-authored-by: jolheiser Reviewed-on: https://gitea.com/gitea/gitea-vet/pulls/5 Reviewed-by: Lunny Xiao --- README.md | 11 +++++---- checks/imports.go | 2 +- checks/license.go | 2 +- checks/migrations.go | 59 ++++++++++++++++++++++++++++++++++++++++++++ main.go | 1 + 5 files changed, 68 insertions(+), 7 deletions(-) create mode 100644 checks/migrations.go diff --git a/README.md b/README.md index d311c04..5d3d097 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # gitea-vet -[![Build Status](https://drone.gitea.com/api/badges/jolheiser/gitea-vet/status.svg)](https://drone.gitea.com/jolheiser/gitea-vet) +[![Build Status](https://drone.gitea.com/api/badges/gitea/gitea-vet/status.svg)](https://drone.gitea.com/gitea/gitea-vet) `go vet` tool for Gitea -| Analyzer | Description | -|----------|---------------------------------------------------------------------| -| Imports | Checks for import sorting. stdlib->code.gitea.io->other | -| License | Checks file headers for some form of `Copyright...YYYY...Gitea/Gogs`| +| Analyzer | Description | +|------------|-----------------------------------------------------------------------------| +| Imports | Checks for import sorting. stdlib->code.gitea.io->other | +| License | Checks file headers for some form of `Copyright...YYYY...Gitea/Gogs` | +| Migrations | Checks for black-listed packages in `code.gitea.io/gitea/models/migrations` | diff --git a/checks/imports.go b/checks/imports.go index 9716e5f..15563c8 100644 --- a/checks/imports.go +++ b/checks/imports.go @@ -12,7 +12,7 @@ import ( var Imports = &analysis.Analyzer{ Name: "imports", - Doc: "check for import order.", + Doc: "check for import order", Run: runImports, } diff --git a/checks/license.go b/checks/license.go index 83f9e3c..a3ae047 100644 --- a/checks/license.go +++ b/checks/license.go @@ -19,7 +19,7 @@ var ( var License = &analysis.Analyzer{ Name: "license", - Doc: "check for a copyright header.", + Doc: "check for a copyright header", Run: runLicense, } diff --git a/checks/migrations.go b/checks/migrations.go new file mode 100644 index 0000000..fae3fa6 --- /dev/null +++ b/checks/migrations.go @@ -0,0 +1,59 @@ +// Copyright 2020 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package checks + +import ( + "errors" + "os/exec" + "strings" + + "golang.org/x/tools/go/analysis" +) + +var Migrations = &analysis.Analyzer{ + Name: "migrations", + Doc: "check migrations for black-listed packages.", + Run: checkMigrations, +} + +var migrationBlacklist = []string{ + "code.gitea.io/gitea/models", + "code.gitea.io/gitea/modules/structs", +} + +func checkMigrations(pass *analysis.Pass) (interface{}, error) { + if !strings.EqualFold(pass.Pkg.Path(), "code.gitea.io/gitea/models/migrations") { + return nil, nil + } + + if _, err := exec.LookPath("go"); err != nil { + return nil, errors.New("go was not found in the PATH") + } + + depsCmd := exec.Command("go", "list", "-f", `{{join .Deps "\n"}}`, "code.gitea.io/gitea/models/migrations") + depsOut, err := depsCmd.Output() + if err != nil { + return nil, err + } + + deps := strings.Split(string(depsOut), "\n") + for _, dep := range deps { + if stringInSlice(dep, migrationBlacklist) { + pass.Reportf(0, "code.gitea.io/gitea/models/migrations cannot depend on the following packages: %s", migrationBlacklist) + return nil, nil + } + } + + return nil, nil +} + +func stringInSlice(needle string, haystack []string) bool { + for _, h := range haystack { + if strings.EqualFold(needle, h) { + return true + } + } + return false +} diff --git a/main.go b/main.go index 4a77e64..089f89c 100644 --- a/main.go +++ b/main.go @@ -14,5 +14,6 @@ func main() { unitchecker.Main( checks.Imports, checks.License, + checks.Migrations, ) }