mirror of
https://github.com/anchore/syft.git
synced 2026-10-31 06:26:30 +01:00
* add support to upload results to enterprise Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add package sbom upload Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add dockerfile support Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add manifest, index, and dockerfile import functions Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * schema version to json output + enhance json schema generation Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * modify package SBOM shape to be entire syft document + add etui updates Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add import image config and manifest support Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * add config options for import to enterprise Signed-off-by: Alex Goodman <alex.goodman@anchore.com> * incorporate final stereoscope and client-go deps Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
53 lines
1.8 KiB
Go
53 lines
1.8 KiB
Go
package json
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/anchore/syft/internal"
|
|
"github.com/anchore/syft/internal/version"
|
|
"github.com/anchore/syft/syft/distro"
|
|
"github.com/anchore/syft/syft/pkg"
|
|
"github.com/anchore/syft/syft/source"
|
|
)
|
|
|
|
// Document represents the syft cataloging findings as a JSON document
|
|
type Document struct {
|
|
Artifacts []Package `json:"artifacts"` // Artifacts is the list of packages discovered and placed into the catalog
|
|
Source Source `json:"source"` // Source represents the original object that was cataloged
|
|
Distro Distribution `json:"distro"` // Distro represents the Linux distribution that was detected from the source
|
|
Descriptor Descriptor `json:"descriptor"` // Descriptor is a block containing self-describing information about syft
|
|
Schema Schema `json:"schema"` // Schema is a block reserved for defining the version for the shape of this JSON document and where to find the schema document to validate the shape
|
|
}
|
|
|
|
// NewDocument creates and populates a new JSON document struct from the given cataloging results.
|
|
func NewDocument(catalog *pkg.Catalog, srcMetadata source.Metadata, d *distro.Distro) (Document, error) {
|
|
src, err := NewSource(srcMetadata)
|
|
if err != nil {
|
|
return Document{}, nil
|
|
}
|
|
|
|
doc := Document{
|
|
Artifacts: make([]Package, 0),
|
|
Source: src,
|
|
Distro: NewDistribution(d),
|
|
Descriptor: Descriptor{
|
|
Name: internal.ApplicationName,
|
|
Version: version.FromBuild().Version,
|
|
},
|
|
Schema: Schema{
|
|
Version: internal.JSONSchemaVersion,
|
|
URL: fmt.Sprintf("https://raw.githubusercontent.com/anchore/syft/main/schema/json/schema-%s.json", internal.JSONSchemaVersion),
|
|
},
|
|
}
|
|
|
|
for _, p := range catalog.Sorted() {
|
|
art, err := NewPackage(p)
|
|
if err != nil {
|
|
return Document{}, err
|
|
}
|
|
doc.Artifacts = append(doc.Artifacts, art)
|
|
}
|
|
|
|
return doc, nil
|
|
}
|