mirror of
https://github.com/anchore/syft.git
synced 2026-02-12 10:36:45 +01:00
* add convert command Signed-off-by: Jonas Galvão Xavier <jonas.agx@gmail.com> * mvp Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * fix hanging bug Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * validate SBOM formats for conversion Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * move convert cmd to new structure Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * remove bin Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * drop event loop from convert cmd extract SBOM type from document namespace Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * validate SPDX in tests Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * documenting convert cmd Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * support output format=file.json notation Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * test convertible formats Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * fix typo Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * clean up Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * more clean up and docs Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * feedback changes Signed-off-by: Jonas Galvão Xavier <jonasx@anchore.com> * nit Signed-off-by: Jonas Xavier <jonasx@anchore.com> * feedback changes Signed-off-by: Jonas Xavier <jonasx@anchore.com> * re-use more code Signed-off-by: Jonas Xavier <jonasx@anchore.com> * undo encode-decode cycle test Signed-off-by: Jonas Xavier <jonasx@anchore.com> * remove unnecessary test constraint Signed-off-by: Jonas Xavier <jonasx@anchore.com> * fix readme Signed-off-by: Jonas Xavier <jonasx@anchore.com> * try verbose Signed-off-by: Jonas Xavier <jonasx@anchore.com> * cleaner README and no table conversion Signed-off-by: Jonas Xavier <jonasx@anchore.com> * simpler conversion Signed-off-by: Jonas Xavier <jonasx@anchore.com> * feedback changes and cleanup Signed-off-by: Jonas Xavier <jonasx@anchore.com> * nit space fix Signed-off-by: Jonas Xavier <jonasx@anchore.com> * use defer Signed-off-by: Jonas Xavier <jonasx@anchore.com> * feedback changes Signed-off-by: Jonas Xavier <jonasx@anchore.com> Co-authored-by: Keith Zantow <kzantow@gmail.com>
63 lines
1.7 KiB
Go
63 lines
1.7 KiB
Go
package options
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/anchore/syft/internal/formats/table"
|
|
"github.com/anchore/syft/syft"
|
|
"github.com/anchore/syft/syft/sbom"
|
|
"github.com/hashicorp/go-multierror"
|
|
)
|
|
|
|
// makeWriter creates a sbom.Writer for output or returns an error. this will either return a valid writer
|
|
// or an error but neither both and if there is no error, sbom.Writer.Close() should be called
|
|
func MakeWriter(outputs []string, defaultFile string) (sbom.Writer, error) {
|
|
outputOptions, err := parseOutputs(outputs, defaultFile)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
writer, err := sbom.NewWriter(outputOptions...)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return writer, nil
|
|
}
|
|
|
|
// parseOptions utility to parse command-line option strings and retain the existing behavior of default format and file
|
|
func parseOutputs(outputs []string, defaultFile string) (out []sbom.WriterOption, errs error) {
|
|
// always should have one option -- we generally get the default of "table", but just make sure
|
|
if len(outputs) == 0 {
|
|
outputs = append(outputs, string(table.ID))
|
|
}
|
|
|
|
for _, name := range outputs {
|
|
name = strings.TrimSpace(name)
|
|
|
|
// split to at most two parts for <format>=<file>
|
|
parts := strings.SplitN(name, "=", 2)
|
|
|
|
// the format name is the first part
|
|
name = parts[0]
|
|
|
|
// default to the --file or empty string if not specified
|
|
file := defaultFile
|
|
|
|
// If a file is specified as part of the output formatName, use that
|
|
if len(parts) > 1 {
|
|
file = parts[1]
|
|
}
|
|
|
|
format := syft.FormatByName(name)
|
|
if format == nil {
|
|
errs = multierror.Append(errs, fmt.Errorf("bad output format: '%s'", name))
|
|
continue
|
|
}
|
|
|
|
out = append(out, sbom.NewWriterOption(format, file))
|
|
}
|
|
return out, errs
|
|
}
|