mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
fix: allow template for syft convert (#1521)
This commit is contained in:
parent
8c91605541
commit
ba55963104
@ -11,9 +11,9 @@ import (
|
|||||||
"github.com/anchore/syft/syft"
|
"github.com/anchore/syft/syft"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Run(ctx context.Context, app *config.Application, args []string) error {
|
func Run(_ context.Context, app *config.Application, args []string) error {
|
||||||
log.Warn("convert is an experimental feature, run `syft convert -h` for help")
|
log.Warn("convert is an experimental feature, run `syft convert -h` for help")
|
||||||
writer, err := options.MakeWriter(app.Outputs, app.File, "")
|
writer, err := options.MakeWriter(app.Outputs, app.File, app.OutputTemplatePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -30,7 +30,9 @@ func Run(ctx context.Context, app *config.Application, args []string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to open SBOM file: %w", err)
|
return fmt.Errorf("failed to open SBOM file: %w", err)
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer func() {
|
||||||
|
_ = f.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
sbom, _, err := syft.Decode(f)
|
sbom, _, err := syft.Decode(f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package cli
|
package cli
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
@ -9,13 +10,8 @@ import (
|
|||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
type conversion struct {
|
|
||||||
To string
|
|
||||||
From string
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConvertCmdFlags(t *testing.T) {
|
func TestConvertCmdFlags(t *testing.T) {
|
||||||
commonAssertions := []traitAssertion{
|
assertions := []traitAssertion{
|
||||||
func(tb testing.TB, stdout, _ string, _ int) {
|
func(tb testing.TB, stdout, _ string, _ int) {
|
||||||
tb.Helper()
|
tb.Helper()
|
||||||
if len(stdout) < 1000 {
|
if len(stdout) < 1000 {
|
||||||
@ -26,35 +22,29 @@ func TestConvertCmdFlags(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
to string
|
||||||
conversions []conversion
|
from string
|
||||||
|
template string
|
||||||
env map[string]string
|
env map[string]string
|
||||||
assertions []traitAssertion
|
|
||||||
}{
|
}{
|
||||||
{
|
{to: "syft-json", from: "spdx-json"},
|
||||||
name: "syft-format convertable to spdx-json",
|
{to: "syft-json", from: "cyclonedx-json"},
|
||||||
conversions: []conversion{
|
{to: "spdx-json", from: "syft-json"},
|
||||||
{To: "syft-json", From: "spdx-json"},
|
{to: "template", from: "syft-json", template: "test-fixtures/csv.template"},
|
||||||
{To: "syft-json", From: "cyclonedx-json"},
|
{to: "spdx-json", from: "cyclonedx-json"},
|
||||||
{To: "spdx-json", From: "syft-json"},
|
{to: "cyclonedx-json", from: "syft-json"},
|
||||||
{To: "spdx-json", From: "cyclonedx-json"},
|
{to: "cyclonedx-json", from: "spdx-json"},
|
||||||
{To: "cyclonedx-json", From: "syft-json"},
|
|
||||||
{To: "cyclonedx-json", From: "spdx-json"},
|
|
||||||
},
|
|
||||||
assertions: commonAssertions,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(fmt.Sprintf("from %s to %s", test.from, test.to), func(t *testing.T) {
|
||||||
for _, c := range test.conversions {
|
sbomArgs := []string{"dir:./test-fixtures/image-pkg-coverage", "-o", test.from}
|
||||||
sbomArgs := []string{"dir:./test-fixtures/image-pkg-coverage", "-o", c.From}
|
|
||||||
cmd, stdout, stderr := runSyft(t, test.env, sbomArgs...)
|
cmd, stdout, stderr := runSyft(t, test.env, sbomArgs...)
|
||||||
if cmd.ProcessState.ExitCode() != 0 {
|
if cmd.ProcessState.ExitCode() != 0 {
|
||||||
t.Fatalf("failure executing syft creating an sbom")
|
|
||||||
t.Log("STDOUT:\n", stdout)
|
t.Log("STDOUT:\n", stdout)
|
||||||
t.Log("STDERR:\n", stderr)
|
t.Log("STDERR:\n", stderr)
|
||||||
t.Log("COMMAND:", strings.Join(cmd.Args, " "))
|
t.Log("COMMAND:", strings.Join(cmd.Args, " "))
|
||||||
|
t.Fatalf("failure executing syft creating an sbom")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,9 +52,12 @@ func TestConvertCmdFlags(t *testing.T) {
|
|||||||
sbomFile := filepath.Join(tempDir, "sbom.json")
|
sbomFile := filepath.Join(tempDir, "sbom.json")
|
||||||
require.NoError(t, os.WriteFile(sbomFile, []byte(stdout), 0666))
|
require.NoError(t, os.WriteFile(sbomFile, []byte(stdout), 0666))
|
||||||
|
|
||||||
convertArgs := []string{"convert", sbomFile, "-o", c.To}
|
convertArgs := []string{"convert", sbomFile, "-o", test.to}
|
||||||
|
if test.template != "" {
|
||||||
|
convertArgs = append(convertArgs, "--template", test.template)
|
||||||
|
}
|
||||||
cmd, stdout, stderr = runSyft(t, test.env, convertArgs...)
|
cmd, stdout, stderr = runSyft(t, test.env, convertArgs...)
|
||||||
for _, traitFn := range test.assertions {
|
for _, traitFn := range assertions {
|
||||||
traitFn(t, stdout, stderr, cmd.ProcessState.ExitCode())
|
traitFn(t, stdout, stderr, cmd.ProcessState.ExitCode())
|
||||||
}
|
}
|
||||||
if t.Failed() {
|
if t.Failed() {
|
||||||
@ -72,7 +65,6 @@ func TestConvertCmdFlags(t *testing.T) {
|
|||||||
t.Log("STDERR:\n", stderr)
|
t.Log("STDERR:\n", stderr)
|
||||||
t.Log("COMMAND:", strings.Join(cmd.Args, " "))
|
t.Log("COMMAND:", strings.Join(cmd.Args, " "))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user