mirror of
https://github.com/anchore/syft.git
synced 2026-11-04 00:16:38 +01:00
- Resolves #2974 - add detailed instructions re: updating schemas (a necessary task when a new CycloneDX spec version becomes available). - The DefaultVersion constant has been updated to "1.6" -- it's not clear to me how this is used at this time (it may be redundant given other code), but effectively unless a specific spec version is configured, `syft` will emit the "most recent" spec version available for cyclonedx. Users who wish to pin back to a "older" specVersion (e.g. to preserve compatibilty with utilities that have not yet bumped to latest) can either set this in a syft config file or pass a name@spec_version pair to the output flag (e.g. `-o cyclonedx-json@1.5=some-1.5-spec-bom.cdx.json`) - Regenerate relevant .golden files (there seems to be a way to do this via flags, but I couldn't quite figure out the right set to pass correctly, esp. since (as a relative go novice) I found it difficult to run just a single test file. I ended up "brute-forcing it" by changing the *updateSnapshot val to "true" and running it in Goland. A brief comment giving an example of regenerating fixtures usage would be helpful. Signed-off-by: Rajan Agaskar <ragaskar@gmail.com>
40 lines
846 B
Go
40 lines
846 B
Go
package cyclonedxutil
|
|
|
|
import (
|
|
"io"
|
|
|
|
"github.com/CycloneDX/cyclonedx-go"
|
|
|
|
"github.com/anchore/syft/syft/format/common/cyclonedxhelpers"
|
|
"github.com/anchore/syft/syft/sbom"
|
|
)
|
|
|
|
const DefaultVersion = "1.6"
|
|
|
|
type Encoder struct {
|
|
version cyclonedx.SpecVersion
|
|
format cyclonedx.BOMFileFormat
|
|
pretty bool
|
|
}
|
|
|
|
func NewEncoder(version string, format cyclonedx.BOMFileFormat, pretty bool) (Encoder, error) {
|
|
specVersion, err := SpecVersionFromString(version)
|
|
if err != nil {
|
|
return Encoder{}, err
|
|
}
|
|
return Encoder{
|
|
version: specVersion,
|
|
format: format,
|
|
pretty: pretty,
|
|
}, nil
|
|
}
|
|
|
|
func (e Encoder) Encode(writer io.Writer, s sbom.SBOM) error {
|
|
bom := cyclonedxhelpers.ToFormatModel(s)
|
|
enc := cyclonedx.NewBOMEncoder(writer, e.format)
|
|
enc.SetPretty(e.pretty)
|
|
enc.SetEscapeHTML(false)
|
|
|
|
return enc.EncodeVersion(bom, e.version)
|
|
}
|