@@ -9213,7 +9213,13 @@ cat <<EOF > $BUILDKIT_SCAN_DESTINATION/spdx.json
92139213{
92149214 "_type": "https://in-toto.io/Statement/v0.1",
92159215 "predicateType": "https://spdx.dev/Document",
9216- "predicate": {"name": "fallback"}
9216+ "predicate": {
9217+ "name": "fallback",
9218+ "extraParams": {
9219+ "ARG1": "$BUILDKIT_SCAN_ARG1",
9220+ "ARG2": "$BUILDKIT_SCAN_ARG2"
9221+ }
9222+ }
92179223}
92189224EOF
92199225`
@@ -9436,6 +9442,74 @@ EOF
94369442 require .Equal (t , "https://in-toto.io/Statement/v0.1" , attest .Type )
94379443 require .Equal (t , intoto .PredicateSPDX , attest .PredicateType )
94389444 require .Subset (t , attest .Predicate , map [string ]interface {}{"name" : "frontend" })
9445+
9446+ // test configuring the scanner (simple)
9447+ target = registry + "/buildkit/testsbom4:latest"
9448+ _ , err = c .Build (sb .Context (), SolveOpt {
9449+ FrontendAttrs : map [string ]string {
9450+ "attest:sbom" : "generator=" + scannerTarget + ",ARG1=foo,ARG2=bar" ,
9451+ },
9452+ Exports : []ExportEntry {
9453+ {
9454+ Type : ExporterImage ,
9455+ Attrs : map [string ]string {
9456+ "name" : target ,
9457+ "push" : "true" ,
9458+ },
9459+ },
9460+ },
9461+ }, "" , makeTargetFrontend (false ), nil )
9462+ require .NoError (t , err )
9463+
9464+ desc , provider , err = contentutil .ProviderFromRef (target )
9465+ require .NoError (t , err )
9466+
9467+ imgs , err = testutil .ReadImages (sb .Context (), provider , desc )
9468+ require .NoError (t , err )
9469+ require .Equal (t , 2 , len (imgs .Images ))
9470+
9471+ att = imgs .Find ("unknown/unknown" )
9472+ attest = intoto.Statement {}
9473+ require .NoError (t , json .Unmarshal (att .LayersRaw [0 ], & attest ))
9474+ require .Equal (t , "https://in-toto.io/Statement/v0.1" , attest .Type )
9475+ require .Equal (t , intoto .PredicateSPDX , attest .PredicateType )
9476+ require .Subset (t , attest .Predicate , map [string ]interface {}{
9477+ "extraParams" : map [string ]interface {}{"ARG1" : "foo" , "ARG2" : "bar" },
9478+ })
9479+
9480+ // test configuring the scanner (complex)
9481+ target = registry + "/buildkit/testsbom4:latest"
9482+ _ , err = c .Build (sb .Context (), SolveOpt {
9483+ FrontendAttrs : map [string ]string {
9484+ "attest:sbom" : "\" generator=" + scannerTarget + "\" ,\" ARG1=foo\" ,\" ARG2=hello,world\" " ,
9485+ },
9486+ Exports : []ExportEntry {
9487+ {
9488+ Type : ExporterImage ,
9489+ Attrs : map [string ]string {
9490+ "name" : target ,
9491+ "push" : "true" ,
9492+ },
9493+ },
9494+ },
9495+ }, "" , makeTargetFrontend (false ), nil )
9496+ require .NoError (t , err )
9497+
9498+ desc , provider , err = contentutil .ProviderFromRef (target )
9499+ require .NoError (t , err )
9500+
9501+ imgs , err = testutil .ReadImages (sb .Context (), provider , desc )
9502+ require .NoError (t , err )
9503+ require .Equal (t , 2 , len (imgs .Images ))
9504+
9505+ att = imgs .Find ("unknown/unknown" )
9506+ attest = intoto.Statement {}
9507+ require .NoError (t , json .Unmarshal (att .LayersRaw [0 ], & attest ))
9508+ require .Equal (t , "https://in-toto.io/Statement/v0.1" , attest .Type )
9509+ require .Equal (t , intoto .PredicateSPDX , attest .PredicateType )
9510+ require .Subset (t , attest .Predicate , map [string ]interface {}{
9511+ "extraParams" : map [string ]interface {}{"ARG1" : "foo" , "ARG2" : "hello,world" },
9512+ })
94399513}
94409514
94419515func testSBOMScanSingleRef (t * testing.T , sb integration.Sandbox ) {
0 commit comments