1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-10-08 23:02:10 +02:00
Files
sap-jenkins-library/pkg/python/bom.go
2025-09-23 09:59:21 +02:00

50 lines
1.2 KiB
Go

package python
import (
"fmt"
"path/filepath"
"github.com/SAP/jenkins-library/pkg/log"
)
const (
BOMFilename = "bom-pip.xml"
)
func CreateBOM(
executeFn func(executable string, params ...string) error,
existsFn func(path string) (bool, error),
virtualEnv string,
requirementsFile string,
cycloneDxVersion string,
cycloneDxSchemaVersion string,
) error {
if exists, _ := existsFn(requirementsFile); exists {
if err := InstallRequirements(executeFn, virtualEnv, requirementsFile); err != nil {
return err
}
} else {
log.Entry().Warnf("unable to find requirements.txt file at %s , continuing SBOM generation without requirements.txt", requirementsFile)
}
if err := InstallCycloneDX(executeFn, virtualEnv, cycloneDxVersion); err != nil {
return err
}
cycloneDxBinary := "cyclonedx-py"
if len(virtualEnv) > 0 {
cycloneDxBinary = filepath.Join(virtualEnv, "bin", cycloneDxBinary)
}
log.Entry().Debug("creating BOM")
if err := executeFn(cycloneDxBinary,
"env",
"--output-file", BOMFilename,
"--output-format", "XML",
"--spec-version", cycloneDxSchemaVersion,
); err != nil {
return fmt.Errorf("failed to create BOM: %w", err)
}
return nil
}