Split per-type registration points into per-type files (#150)
Parallel package-type PRs conflict because every type edits the same shared lines (README tables, provider.go, server.go imports, the package type list, UI maps, the e2e caching table). A new type now only adds files.
- move per-type README sections into docs/<type>/{remote,local,virtual}.md
- split provider.go capability and metadata types into cap_*.go and metadata_*.go
- import providers via internal/provider/all, one file per type
- declare each package type in package_type_<type>.go, registered via init()
- split the e2e caching cases and UI colours/snippets into per-type files
Reviewed-on: #150
Co-authored-by: unkin-agent <unkin-agent@unkin.net>
Co-committed-by: unkin-agent <unkin-agent@unkin.net>
This commit was merged in pull request #150.
This commit is contained in:
@@ -4,42 +4,10 @@ import "fmt"
|
||||
|
||||
type PackageType string
|
||||
|
||||
const (
|
||||
PackageGeneric PackageType = "generic"
|
||||
PackageDocker PackageType = "docker"
|
||||
PackageHelm PackageType = "helm"
|
||||
PackagePyPI PackageType = "pypi"
|
||||
PackageNPM PackageType = "npm"
|
||||
PackageRPM PackageType = "rpm"
|
||||
PackageDeb PackageType = "deb"
|
||||
PackageAlpine PackageType = "alpine"
|
||||
PackagePuppet PackageType = "puppet"
|
||||
PackageTerraform PackageType = "terraform"
|
||||
PackageGoProxy PackageType = "goproxy"
|
||||
PackageCargo PackageType = "cargo"
|
||||
PackageNuGet PackageType = "nuget"
|
||||
PackageGitHubRPM PackageType = "github_rpm"
|
||||
PackageGitHubDeb PackageType = "github_deb"
|
||||
PackageGitHubAlpine PackageType = "github_alpine"
|
||||
)
|
||||
var validPackageTypes = map[PackageType]bool{}
|
||||
|
||||
var validPackageTypes = map[PackageType]bool{
|
||||
PackageGeneric: true,
|
||||
PackageDocker: true,
|
||||
PackageHelm: true,
|
||||
PackagePyPI: true,
|
||||
PackageNPM: true,
|
||||
PackageRPM: true,
|
||||
PackageDeb: true,
|
||||
PackageAlpine: true,
|
||||
PackagePuppet: true,
|
||||
PackageTerraform: true,
|
||||
PackageGoProxy: true,
|
||||
PackageCargo: true,
|
||||
PackageNuGet: true,
|
||||
PackageGitHubRPM: true,
|
||||
PackageGitHubDeb: true,
|
||||
PackageGitHubAlpine: true,
|
||||
func registerPackageType(p PackageType) {
|
||||
validPackageTypes[p] = true
|
||||
}
|
||||
|
||||
func (p PackageType) Valid() bool {
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageAlpine PackageType = "alpine"
|
||||
|
||||
func init() { registerPackageType(PackageAlpine) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageCargo PackageType = "cargo"
|
||||
|
||||
func init() { registerPackageType(PackageCargo) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageDeb PackageType = "deb"
|
||||
|
||||
func init() { registerPackageType(PackageDeb) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageDocker PackageType = "docker"
|
||||
|
||||
func init() { registerPackageType(PackageDocker) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageGeneric PackageType = "generic"
|
||||
|
||||
func init() { registerPackageType(PackageGeneric) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageGitHubAlpine PackageType = "github_alpine"
|
||||
|
||||
func init() { registerPackageType(PackageGitHubAlpine) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageGitHubDeb PackageType = "github_deb"
|
||||
|
||||
func init() { registerPackageType(PackageGitHubDeb) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageGitHubRPM PackageType = "github_rpm"
|
||||
|
||||
func init() { registerPackageType(PackageGitHubRPM) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageGoProxy PackageType = "goproxy"
|
||||
|
||||
func init() { registerPackageType(PackageGoProxy) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageHelm PackageType = "helm"
|
||||
|
||||
func init() { registerPackageType(PackageHelm) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageNPM PackageType = "npm"
|
||||
|
||||
func init() { registerPackageType(PackageNPM) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageNuGet PackageType = "nuget"
|
||||
|
||||
func init() { registerPackageType(PackageNuGet) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackagePuppet PackageType = "puppet"
|
||||
|
||||
func init() { registerPackageType(PackagePuppet) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackagePyPI PackageType = "pypi"
|
||||
|
||||
func init() { registerPackageType(PackagePyPI) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageRPM PackageType = "rpm"
|
||||
|
||||
func init() { registerPackageType(PackageRPM) }
|
||||
@@ -0,0 +1,5 @@
|
||||
package models
|
||||
|
||||
const PackageTerraform PackageType = "terraform"
|
||||
|
||||
func init() { registerPackageType(PackageTerraform) }
|
||||
@@ -1,33 +1,54 @@
|
||||
package models_test
|
||||
|
||||
import (
|
||||
"go/ast"
|
||||
"go/parser"
|
||||
"go/token"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.unkin.net/unkin/artifactapi/pkg/models"
|
||||
)
|
||||
|
||||
// TestPackageTypeValid parses every package_type_<type>.go and asserts the
|
||||
// const it declares is registered, so a type file missing its init() fails.
|
||||
func TestPackageTypeValid(t *testing.T) {
|
||||
valid := []models.PackageType{
|
||||
models.PackageGeneric,
|
||||
models.PackageDocker,
|
||||
models.PackageHelm,
|
||||
models.PackagePyPI,
|
||||
models.PackageNPM,
|
||||
models.PackageRPM,
|
||||
models.PackageAlpine,
|
||||
models.PackagePuppet,
|
||||
models.PackageTerraform,
|
||||
models.PackageGoProxy,
|
||||
models.PackageCargo,
|
||||
models.PackageNuGet,
|
||||
models.PackageGitHubRPM,
|
||||
models.PackageGitHubDeb,
|
||||
models.PackageGitHubAlpine,
|
||||
files, err := filepath.Glob("package_type_*.go")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, pt := range valid {
|
||||
if !pt.Valid() {
|
||||
t.Errorf("expected %q to be valid", pt)
|
||||
seen := 0
|
||||
for _, f := range files {
|
||||
if strings.HasSuffix(f, "_test.go") {
|
||||
continue
|
||||
}
|
||||
file, err := parser.ParseFile(token.NewFileSet(), f, nil, 0)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, decl := range file.Decls {
|
||||
gd, ok := decl.(*ast.GenDecl)
|
||||
if !ok || gd.Tok != token.CONST {
|
||||
continue
|
||||
}
|
||||
for _, spec := range gd.Specs {
|
||||
for _, v := range spec.(*ast.ValueSpec).Values {
|
||||
lit := v.(*ast.BasicLit)
|
||||
pt := models.PackageType(strings.Trim(lit.Value, `"`))
|
||||
if !pt.Valid() {
|
||||
t.Errorf("%s: %q is not registered", f, pt)
|
||||
}
|
||||
if want := "package_type_" + pt.String() + ".go"; f != want {
|
||||
t.Errorf("%s declares %q, want it in %s", f, pt, want)
|
||||
}
|
||||
seen++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if seen == 0 {
|
||||
t.Fatal("found no package types")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user