@@ -9256,7 +9256,13 @@ cat <<EOF > $BUILDKIT_SCAN_DESTINATION/spdx.json
92569256{
92579257 "_type": "https://in-toto.io/Statement/v0.1",
92589258 "predicateType": "https://spdx.dev/Document",
9259- "predicate": {"name": "fallback"}
9259+ "predicate": {
9260+ "name": "fallback",
9261+ "extraParams": {
9262+ "ARG1": "$BUILDKIT_SCAN_ARG1",
9263+ "ARG2": "$BUILDKIT_SCAN_ARG2"
9264+ }
9265+ }
92609266}
92619267EOF
92629268`
@@ -9479,6 +9485,74 @@ EOF
94799485 require .Equal (t , "https://in-toto.io/Statement/v0.1" , attest .Type )
94809486 require .Equal (t , intoto .PredicateSPDX , attest .PredicateType )
94819487 require .Subset (t , attest .Predicate , map [string ]interface {}{"name" : "frontend" })
9488+
9489+ // test configuring the scanner (simple)
9490+ target = registry + "/buildkit/testsbom4:latest"
9491+ _ , err = c .Build (sb .Context (), SolveOpt {
9492+ FrontendAttrs : map [string ]string {
9493+ "attest:sbom" : "generator=" + scannerTarget + ",ARG1=foo,ARG2=bar" ,
9494+ },
9495+ Exports : []ExportEntry {
9496+ {
9497+ Type : ExporterImage ,
9498+ Attrs : map [string ]string {
9499+ "name" : target ,
9500+ "push" : "true" ,
9501+ },
9502+ },
9503+ },
9504+ }, "" , makeTargetFrontend (false ), nil )
9505+ require .NoError (t , err )
9506+
9507+ desc , provider , err = contentutil .ProviderFromRef (target )
9508+ require .NoError (t , err )
9509+
9510+ imgs , err = testutil .ReadImages (sb .Context (), provider , desc )
9511+ require .NoError (t , err )
9512+ require .Equal (t , 2 , len (imgs .Images ))
9513+
9514+ att = imgs .Find ("unknown/unknown" )
9515+ attest = intoto.Statement {}
9516+ require .NoError (t , json .Unmarshal (att .LayersRaw [0 ], & attest ))
9517+ require .Equal (t , "https://in-toto.io/Statement/v0.1" , attest .Type )
9518+ require .Equal (t , intoto .PredicateSPDX , attest .PredicateType )
9519+ require .Subset (t , attest .Predicate , map [string ]interface {}{
9520+ "extraParams" : map [string ]interface {}{"ARG1" : "foo" , "ARG2" : "bar" },
9521+ })
9522+
9523+ // test configuring the scanner (complex)
9524+ target = registry + "/buildkit/testsbom4:latest"
9525+ _ , err = c .Build (sb .Context (), SolveOpt {
9526+ FrontendAttrs : map [string ]string {
9527+ "attest:sbom" : "\" generator=" + scannerTarget + "\" ,\" ARG1=foo\" ,\" ARG2=hello,world\" " ,
9528+ },
9529+ Exports : []ExportEntry {
9530+ {
9531+ Type : ExporterImage ,
9532+ Attrs : map [string ]string {
9533+ "name" : target ,
9534+ "push" : "true" ,
9535+ },
9536+ },
9537+ },
9538+ }, "" , makeTargetFrontend (false ), nil )
9539+ require .NoError (t , err )
9540+
9541+ desc , provider , err = contentutil .ProviderFromRef (target )
9542+ require .NoError (t , err )
9543+
9544+ imgs , err = testutil .ReadImages (sb .Context (), provider , desc )
9545+ require .NoError (t , err )
9546+ require .Equal (t , 2 , len (imgs .Images ))
9547+
9548+ att = imgs .Find ("unknown/unknown" )
9549+ attest = intoto.Statement {}
9550+ require .NoError (t , json .Unmarshal (att .LayersRaw [0 ], & attest ))
9551+ require .Equal (t , "https://in-toto.io/Statement/v0.1" , attest .Type )
9552+ require .Equal (t , intoto .PredicateSPDX , attest .PredicateType )
9553+ require .Subset (t , attest .Predicate , map [string ]interface {}{
9554+ "extraParams" : map [string ]interface {}{"ARG1" : "foo" , "ARG2" : "hello,world" },
9555+ })
94829556}
94839557
94849558func testSBOMScanSingleRef (t * testing.T , sb integration.Sandbox ) {
0 commit comments