/
githubmirror
/
trivy
Обзор
Документация
Войти
/
githubmirror
/
trivy
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
pkg/report/writer.go
139 строк
4 KB
DmitriyLewen
fix(report): set correct sarif ROOTPATH uri when scanning a git repository (#10366)
12 мар 2026, 08:22
Не верифицирован
12 мар 2026, 08:22
e5da6de
Код
Авторство
О чём код?
package report import ( "context" "io" "strings" "github.com/hashicorp/go-multierror" "golang.org/x/xerrors" cr "github.com/aquasecurity/trivy/pkg/compliance/report" "github.com/aquasecurity/trivy/pkg/extension" ftypes "github.com/aquasecurity/trivy/pkg/fanal/types" "github.com/aquasecurity/trivy/pkg/flag" "github.com/aquasecurity/trivy/pkg/log" "github.com/aquasecurity/trivy/pkg/report/cyclonedx" "github.com/aquasecurity/trivy/pkg/report/github" "github.com/aquasecurity/trivy/pkg/report/predicate" "github.com/aquasecurity/trivy/pkg/report/spdx" "github.com/aquasecurity/trivy/pkg/report/table" "github.com/aquasecurity/trivy/pkg/types" ) const ( SchemaVersion = 2 ) // Write writes the result to output, format as passed in argument func Write(ctx context.Context, report types.Report, option flag.Options) (err error) { // Call pre-report hooks if err := extension.PreReport(ctx, &report, option); err != nil { return xerrors.Errorf("pre report error: %w", err) } output, cleanup, err := option.OutputWriter(ctx) if err != nil { return xerrors.Errorf("failed to create a file: %w", err) } defer func() { if cerr := cleanup(); cerr != nil { err = multierror.Append(err, cerr) } }() // Compliance report if option.Compliance.Spec.ID != "" { return complianceWrite(ctx, report, option, output) } var writer Writer switch option.Format { case types.FormatTable: writer = table.NewWriter(table.Options{ Scanners: option.Scanners, Output: output, Severities: option.Severities, Tree: option.DependencyTree, ShowSuppressed: option.ShowSuppressed, IncludeNonFailures: option.IncludeNonFailures, Trace: option.RegoOptions.Trace, RenderCause: option.RenderCause, LicenseRiskThreshold: option.LicenseRiskThreshold, IgnoredLicenses: option.IgnoredLicenses, TableModes: option.TableModes, }) case types.FormatJSON: writer = &JSONWriter{ Output: output, ListAllPkgs: option.ListAllPkgs, ShowSuppressed: option.ShowSuppressed, } case types.FormatGitHub: writer = &github.Writer{ Output: output, Version: option.AppVersion, } case types.FormatCycloneDX: // TODO: support xml format option with cyclonedx writer writer = cyclonedx.NewWriter(output, option.AppVersion) case types.FormatSPDX, types.FormatSPDXJSON: writer = spdx.NewWriter(output, option.AppVersion, option.Format) case types.FormatTemplate: // We keep `sarif.tpl` template working for backward compatibility for a while. if strings.HasPrefix(option.Template, "@") && strings.HasSuffix(option.Template, "sarif.tpl") { log.Warn("Using `--template sarif.tpl` is deprecated. Please migrate to `--format sarif`. See https://github.com/aquasecurity/trivy/discussions/1571") writer = &SarifWriter{ Output: output, Version: option.AppVersion, } break } if writer, err = NewTemplateWriter(output, option.Template, option.AppVersion); err != nil { return xerrors.Errorf("failed to initialize template writer: %w", err) } case types.FormatSarif: target := "" if report.ArtifactType == ftypes.TypeFilesystem || report.ArtifactType == ftypes.TypeRepository { target = option.Target } writer = &SarifWriter{ Output: output, Version: option.AppVersion, Target: target, } case types.FormatCosignVuln: writer = predicate.NewVulnWriter(output, option.AppVersion) default: return xerrors.Errorf("unknown format: %v", option.Format) } if err = writer.Write(ctx, report); err != nil { return xerrors.Errorf("failed to write results: %w", err) } // Call post-report hooks if err := extension.PostReport(ctx, &report, option); err != nil { return xerrors.Errorf("post report error: %w", err) } return nil } func complianceWrite(ctx context.Context, report types.Report, opt flag.Options, output io.Writer) error { complianceReport, err := cr.BuildComplianceReport([]types.Results{report.Results}, opt.Compliance) if err != nil { return xerrors.Errorf("compliance report build error: %w", err) } return cr.Write(ctx, complianceReport, cr.Option{ Format: opt.Format, Report: opt.ReportFormat, Output: output, Severities: opt.Severities, }) } // Writer defines the result write operation type Writer interface { Write(context.Context, types.Report) error }