mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-12 10:55:20 +02:00
a2815c4567
* fix(whitesourceExecuteScan): properly handle policy violations * update files * update formatting Co-authored-by: Sven Merk <33895725+nevskrem@users.noreply.github.com>
94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
package reporting
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"text/template"
|
|
"time"
|
|
|
|
"github.com/SAP/jenkins-library/pkg/orchestrator"
|
|
|
|
"golang.org/x/text/cases"
|
|
"golang.org/x/text/language"
|
|
)
|
|
|
|
type PolicyViolationReport struct {
|
|
ArtifactID string
|
|
Branch string
|
|
CommitID string
|
|
Description string
|
|
DirectDependency string
|
|
Footer string
|
|
Group string
|
|
PackageURL string
|
|
PipelineName string
|
|
PipelineLink string
|
|
Version string
|
|
}
|
|
|
|
const policyViolationMdTemplate string = `# Policy Violation - {{ .PackageURL }}
|
|
|
|
## Description
|
|
|
|
{{ .Description }}
|
|
|
|
## Context
|
|
|
|
{{if .PipelineLink -}}
|
|
### Pipeline
|
|
|
|
Pipeline run: [{{ .PipelineName }}]({{ .PipelineLink }})
|
|
{{- end}}
|
|
|
|
### Detected in
|
|
|
|
{{if .Branch}}**Branch:** {{ .Branch }}{{- end}}
|
|
{{if .CommitID}}**CommitId:** {{ .CommitID }}{{- end}}
|
|
{{if .DirectDependency}}**Dependency:** {{if (eq .DirectDependency "true")}}direct{{ else }}indirect{{ end }}{{- end}}
|
|
{{if .ArtifactID}}**ArtifactId:** {{ .ArtifactID }}{{- end}}
|
|
{{if .Group}}**Group:** {{ .Group }}{{- end}}
|
|
{{if .Version}}**Version:** {{ .Version }}{{- end}}
|
|
{{if .PackageURL}}**Package URL:** {{ .PackageURL }}{{- end}}
|
|
|
|
---
|
|
|
|
{{.Footer}}
|
|
`
|
|
|
|
func (p *PolicyViolationReport) ToMarkdown() ([]byte, error) {
|
|
funcMap := template.FuncMap{
|
|
"date": func(t time.Time) string {
|
|
return t.Format("2006-01-02")
|
|
},
|
|
"title": func(s string) string {
|
|
caser := cases.Title(language.AmericanEnglish)
|
|
return caser.String(s)
|
|
},
|
|
}
|
|
|
|
// only fill with orchestrator information if orchestrator can be identified properly
|
|
if provider, err := orchestrator.NewOrchestratorSpecificConfigProvider(); err == nil {
|
|
// only add information if not yet provided
|
|
if len(p.CommitID) == 0 {
|
|
p.CommitID = provider.GetCommit()
|
|
}
|
|
if len(p.PipelineLink) == 0 {
|
|
p.PipelineLink = provider.GetJobURL()
|
|
p.PipelineName = provider.GetJobName()
|
|
}
|
|
}
|
|
|
|
md := []byte{}
|
|
tmpl, err := template.New("report").Funcs(funcMap).Parse(policyViolationMdTemplate)
|
|
if err != nil {
|
|
return md, fmt.Errorf("failed to create markdown issue template: %w", err)
|
|
}
|
|
buf := new(bytes.Buffer)
|
|
err = tmpl.Execute(buf, p)
|
|
if err != nil {
|
|
return md, fmt.Errorf("failed to execute markdown issue template: %w", err)
|
|
}
|
|
md = buf.Bytes()
|
|
return md, nil
|
|
}
|