internal/buildbinary: refactor FindAndBuild ouptut
Changes FindAndBuild binaries to output a slice of binary info instead
of a map. This makes adding more information about the binaries easier
at no cost (all operations over the previous output were simply
iterating over map keys).
Change-Id: I40ad8931dd1ed7f1005499482444b662aea2d28f
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/518356
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Maceo Thompson <maceothompson@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/cmd/govulncheck_compare/govulncheck_compare.go b/cmd/govulncheck_compare/govulncheck_compare.go
index 5516e6b..52214c5 100644
--- a/cmd/govulncheck_compare/govulncheck_compare.go
+++ b/cmd/govulncheck_compare/govulncheck_compare.go
@@ -20,7 +20,6 @@
"io"
"os"
- "golang.org/x/exp/slices"
"golang.org/x/pkgsite-metrics/internal/buildbinary"
"golang.org/x/pkgsite-metrics/internal/govulncheck"
)
@@ -51,40 +50,32 @@
FindingsForMod: make(map[string]*govulncheck.ComparePair),
}
- binaryPaths, err := buildbinary.FindAndBuildBinaries(modulePath)
+ binaries, err := buildbinary.FindAndBuildBinaries(modulePath)
if err != nil {
fail(err)
return
}
- defer removeBinaries(binaryPaths)
+ defer removeBinaries(binaries)
- // Sort binaryPath keys so that range is deterministic
- keys := make([]string, 0, len(binaryPaths))
- for k := range binaryPaths {
- keys = append(keys, k)
- }
- slices.Sort(keys)
-
- for _, binaryPath := range keys {
- importPath := binaryPaths[binaryPath]
+ for _, binary := range binaries {
pair := govulncheck.ComparePair{
BinaryResults: govulncheck.SandboxResponse{Stats: govulncheck.ScanStats{}},
SourceResults: govulncheck.SandboxResponse{Stats: govulncheck.ScanStats{}},
}
- pair.SourceResults.Findings, err = govulncheck.RunGovulncheckCmd(govulncheckPath, govulncheck.FlagSource, importPath, modulePath, vulndbPath, &pair.SourceResults.Stats)
+ pair.SourceResults.Findings, err = govulncheck.RunGovulncheckCmd(govulncheckPath, govulncheck.FlagSource, binary.ImportPath, modulePath, vulndbPath, &pair.SourceResults.Stats)
if err != nil {
fail(err)
return
}
- pair.BinaryResults.Findings, err = govulncheck.RunGovulncheckCmd(govulncheckPath, govulncheck.FlagBinary, binaryPath, modulePath, vulndbPath, &pair.BinaryResults.Stats)
+ pair.BinaryResults.Findings, err = govulncheck.RunGovulncheckCmd(govulncheckPath, govulncheck.FlagBinary, binary.BinaryPath, modulePath, vulndbPath, &pair.BinaryResults.Stats)
if err != nil {
fail(err)
return
}
- response.FindingsForMod[importPath] = &pair
+ response.FindingsForMod[binary.ImportPath] = &pair
}
b, err := json.MarshalIndent(response, "", "\t")
@@ -97,8 +88,8 @@
fmt.Println()
}
-func removeBinaries(binaryPaths map[string]string) {
- for path := range binaryPaths {
- os.Remove(path)
+func removeBinaries(binaryPaths []*buildbinary.BinaryInfo) {
+ for _, bin := range binaryPaths {
+ os.Remove(bin.BinaryPath)
}
}
diff --git a/internal/buildbinary/bin.go b/internal/buildbinary/bin.go
index 47ab1a4..892c232 100644
--- a/internal/buildbinary/bin.go
+++ b/internal/buildbinary/bin.go
@@ -13,24 +13,28 @@
"golang.org/x/pkgsite-metrics/internal/derrors"
)
-// TODO: Consider making struct if we want to pass successful binaries & still
-// be aware if building others failed for some reason.
+type BinaryInfo struct {
+ BinaryPath string
+ ImportPath string
+}
// FindAndBuildBinaries finds and builds all possible binaries from a given module.
-func FindAndBuildBinaries(modulePath string) (binaries map[string]string, err error) {
+func FindAndBuildBinaries(modulePath string) (binaries []*BinaryInfo, err error) {
defer derrors.Wrap(&err, "FindAndBuildBinaries")
buildTargets, err := findBinaries(modulePath)
if err != nil {
return nil, err
}
- binaries = make(map[string]string)
for i, target := range buildTargets {
path, err := runBuild(modulePath, target, i)
if err != nil {
return nil, err
}
- binaries[path] = target
+ binaries = append(binaries, &BinaryInfo{
+ BinaryPath: path,
+ ImportPath: target,
+ })
}
return binaries, nil
}