Skip to content

Commit deb13a1

Browse files
committed
fix: #23915 podman build is not parsing sbom command line arguments
Signed-off-by: Alex Guidi <aguidi@redhat.com>
1 parent 2e40f61 commit deb13a1

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

cmd/podman/common/build.go

+20
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io"
77
"os"
88
"path/filepath"
9+
"slices"
910
"strings"
1011
"syscall"
1112
"time"
@@ -514,6 +515,24 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *Buil
514515
}
515516
}
516517

518+
var sbomScanOptions []buildahDefine.SBOMScanOptions
519+
if c.Flag("sbom").Changed || c.Flag("sbom-scanner-command").Changed || c.Flag("sbom-scanner-image").Changed || c.Flag("sbom-image-output").Changed || c.Flag("sbom-merge-strategy").Changed || c.Flag("sbom-output").Changed || c.Flag("sbom-image-output").Changed || c.Flag("sbom-purl-output").Changed || c.Flag("sbom-image-purl-output").Changed {
520+
sbomScanOption, err := parse.SBOMScanOptions(c)
521+
if err != nil {
522+
return nil, err
523+
}
524+
if !slices.Contains(sbomScanOption.ContextDir, contextDir) {
525+
sbomScanOption.ContextDir = append(sbomScanOption.ContextDir, contextDir)
526+
}
527+
for _, abc := range additionalBuildContext {
528+
if !abc.IsURL && !abc.IsImage {
529+
sbomScanOption.ContextDir = append(sbomScanOption.ContextDir, abc.Value)
530+
}
531+
}
532+
sbomScanOption.PullPolicy = pullPolicy
533+
sbomScanOptions = append(sbomScanOptions, *sbomScanOption)
534+
}
535+
517536
opts := buildahDefine.BuildOptions{
518537
AddCapabilities: flags.CapAdd,
519538
AdditionalTags: tags,
@@ -570,6 +589,7 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *Buil
570589
Runtime: podmanConfig.RuntimePath,
571590
RuntimeArgs: runtimeFlags,
572591
RusageLogFile: flags.RusageLogFile,
592+
SBOMScanOptions: sbomScanOptions,
573593
SignBy: flags.SignBy,
574594
SignaturePolicyPath: flags.SignaturePolicy,
575595
Squash: flags.Squash,

test/e2e/build_test.go

+23
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ package integration
44

55
import (
66
"bytes"
7+
"errors"
78
"fmt"
9+
"io/fs"
810
"os"
911
"os/exec"
1012
"path/filepath"
@@ -972,4 +974,25 @@ RUN ls /dev/test1`, CITEST_IMAGE)
972974
session.WaitWithDefaultTimeout()
973975
Expect(session).Should(ExitWithError(1, `building at STEP "RUN --mount=type=cache,target=/test,z cat /test/world": while running runtime: exit status 1`))
974976
})
977+
It("podman build with sbom flags", func() {
978+
podmanTest.AddImageToRWStore(ALPINE)
979+
980+
podmanTest.PodmanExitCleanly("build", "-t", "sbom-img", "--sbom-output=localsbom.txt", "--sbom-purl-output=localpurl.txt", "--sbom-image-output=/tmp/sbom.txt", "--sbom-image-purl-output=/tmp/purl.txt",
981+
"--sbom-scanner-image=alpine", "--sbom-scanner-command=/bin/sh -c 'echo SCANNED ROOT {ROOTFS} > {OUTPUT}'", "--sbom-scanner-command=/bin/sh -c 'echo SCANNED BUILD CONTEXT {CONTEXT} > {OUTPUT}'",
982+
"--sbom-merge-strategy=cat", "build/basicalpine")
983+
984+
defer os.Remove("./localsbom.txt")
985+
if _, err := os.Stat("./localsbom.txt"); err != nil {
986+
Expect(errors.Is(err, fs.ErrNotExist)).To(BeFalse())
987+
}
988+
989+
defer os.Remove("./localpurl.txt")
990+
if _, err := os.Stat("./localpurl.txt"); err != nil {
991+
Expect(errors.Is(err, fs.ErrNotExist)).To(BeFalse())
992+
}
993+
994+
session := podmanTest.PodmanExitCleanly("run", "--rm", "sbom-img", "ls", "/tmp")
995+
Expect(session.OutputToString()).To(ContainSubstring("purl.txt"))
996+
Expect(session.OutputToString()).To(ContainSubstring("sbom.txt"))
997+
})
975998
})

0 commit comments

Comments
 (0)