mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 16:33:21 +01:00
feat: retain go package info when no module declared (#1632)
Signed-off-by: Weston Steimel <weston.steimel@anchore.com>
This commit is contained in:
parent
f1169e56fc
commit
bcc0751a40
@ -179,12 +179,23 @@ func getBuildSettings(settings []debug.BuildSetting) map[string]string {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func createMainModuleFromPath(path string) (mod debug.Module) {
|
||||||
|
mod.Path = path
|
||||||
|
mod.Version = devel
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func buildGoPkgInfo(location source.Location, mod *debug.BuildInfo, arch string) []pkg.Package {
|
func buildGoPkgInfo(location source.Location, mod *debug.BuildInfo, arch string) []pkg.Package {
|
||||||
var pkgs []pkg.Package
|
var pkgs []pkg.Package
|
||||||
if mod == nil {
|
if mod == nil {
|
||||||
return pkgs
|
return pkgs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var empty debug.Module
|
||||||
|
if mod.Main == empty && mod.Path != "" {
|
||||||
|
mod.Main = createMainModuleFromPath(mod.Path)
|
||||||
|
}
|
||||||
|
|
||||||
for _, dep := range mod.Deps {
|
for _, dep := range mod.Deps {
|
||||||
if dep == nil {
|
if dep == nil {
|
||||||
continue
|
continue
|
||||||
@ -195,9 +206,6 @@ func buildGoPkgInfo(location source.Location, mod *debug.BuildInfo, arch string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE(jonasagx): this use happened originally while creating unit tests. It might never
|
|
||||||
// happen in the wild, but I kept it as a safeguard against empty modules.
|
|
||||||
var empty debug.Module
|
|
||||||
if mod.Main == empty {
|
if mod.Main == empty {
|
||||||
return pkgs
|
return pkgs
|
||||||
}
|
}
|
||||||
|
|||||||
@ -242,6 +242,48 @@ func TestBuildGoPkgInfo(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "parse a mod with path but no main module",
|
||||||
|
arch: archDetails,
|
||||||
|
mod: &debug.BuildInfo{
|
||||||
|
GoVersion: goCompiledVersion,
|
||||||
|
Settings: []debug.BuildSetting{
|
||||||
|
{Key: "GOARCH", Value: archDetails},
|
||||||
|
{Key: "GOOS", Value: "darwin"},
|
||||||
|
{Key: "GOAMD64", Value: "v1"},
|
||||||
|
},
|
||||||
|
Path: "github.com/a/b/c",
|
||||||
|
},
|
||||||
|
expected: []pkg.Package{
|
||||||
|
{
|
||||||
|
Name: "github.com/a/b/c",
|
||||||
|
Version: "(devel)",
|
||||||
|
PURL: "pkg:golang/github.com/a/b/c@(devel)",
|
||||||
|
Language: pkg.Go,
|
||||||
|
Type: pkg.GoModulePkg,
|
||||||
|
Locations: source.NewLocationSet(
|
||||||
|
source.Location{
|
||||||
|
Coordinates: source.Coordinates{
|
||||||
|
RealPath: "/a-path",
|
||||||
|
FileSystemID: "layer-id",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
MetadataType: pkg.GolangBinMetadataType,
|
||||||
|
Metadata: pkg.GolangBinMetadata{
|
||||||
|
GoCompiledVersion: goCompiledVersion,
|
||||||
|
Architecture: archDetails,
|
||||||
|
H1Digest: "",
|
||||||
|
BuildSettings: map[string]string{
|
||||||
|
"GOAMD64": "v1",
|
||||||
|
"GOARCH": "amd64",
|
||||||
|
"GOOS": "darwin",
|
||||||
|
},
|
||||||
|
MainModule: "github.com/a/b/c",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "parse a mod without packages",
|
name: "parse a mod without packages",
|
||||||
arch: archDetails,
|
arch: archDetails,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user