Skip to content

Commit 402e402

Browse files
authored
Merge pull request moby#3428 from tonistiigi/provenance-fixes
Provenance attestation fixes
2 parents 7bbd7ed + ad85ce7 commit 402e402

File tree

4 files changed

+14
-19
lines changed

4 files changed

+14
-19
lines changed

frontend/dockerfile/dockerfile_provenance_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ RUN echo "ok" > /foo
198198

199199
require.False(t, pred.Metadata.Completeness.Materials)
200200
require.False(t, pred.Metadata.Reproducible)
201-
require.False(t, pred.Metadata.Completeness.Hermetic)
201+
require.False(t, pred.Metadata.Hermetic)
202202

203203
if mode == "max" || mode == "" {
204204
require.Equal(t, 2, len(pred.Metadata.BuildKitMetadata.Layers))
@@ -347,8 +347,8 @@ COPY myapp.Dockerfile /
347347
require.Equal(t, 0, len(pred.Invocation.Parameters.Locals))
348348

349349
require.True(t, pred.Metadata.Completeness.Materials)
350-
require.True(t, pred.Metadata.Completeness.Hermetic)
351350
require.True(t, pred.Metadata.Completeness.Environment)
351+
require.True(t, pred.Metadata.Hermetic)
352352

353353
if isClient {
354354
require.False(t, pred.Metadata.Completeness.Parameters)

solver/llbsolver/proc/provenance.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ func ProvenanceProcessor(attrs map[string]string) llbsolver.Processor {
4242
return nil, err
4343
}
4444

45+
filename := "provenance.json"
46+
if v, ok := attrs["filename"]; ok {
47+
filename = v
48+
}
49+
4550
res.AddAttestation(p.ID, llbsolver.Attestation{
4651
Kind: gatewaypb.AttestationKindInToto,
4752
Metadata: map[string][]byte{
@@ -51,7 +56,7 @@ func ProvenanceProcessor(attrs map[string]string) llbsolver.Processor {
5156
InToto: result.InTotoAttestation{
5257
PredicateType: slsa02.PredicateSLSAProvenance,
5358
},
54-
Path: "provenance.json",
59+
Path: filename,
5560
ContentFunc: func() ([]byte, error) {
5661
pr, err := pc.Predicate()
5762
if err != nil {

solver/llbsolver/provenance/buildconfig.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,6 @@ func toBuildSteps(def *pb.Definition) ([]BuildStep, map[digest.Digest]int, error
141141
if err != nil {
142142
return nil, nil, err
143143
}
144-
for i := 0; i < len(dgsts)/2; i++ {
145-
j := len(dgsts) - 1 - i
146-
dgsts[i], dgsts[j] = dgsts[j], dgsts[i]
147-
}
148-
149144
indexes := map[digest.Digest]int{}
150145
for i, dgst := range dgsts {
151146
indexes[dgst] = i
@@ -179,7 +174,6 @@ func walkDigests(dgsts []digest.Digest, ops map[digest.Digest]*pb.Op, dgst diges
179174
if op == nil {
180175
return nil, errors.Errorf("invalid nil input %v", dgst)
181176
}
182-
dgsts = append(dgsts, dgst)
183177
visited[dgst] = struct{}{}
184178
for _, inp := range op.Inputs {
185179
var err error
@@ -188,5 +182,6 @@ func walkDigests(dgsts []digest.Digest, ops map[digest.Digest]*pb.Op, dgst diges
188182
return nil, err
189183
}
190184
}
185+
dgsts = append(dgsts, dgst)
191186
return dgsts, nil
192187
}

solver/llbsolver/provenance/predicate.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,8 @@ type Environment struct {
4444

4545
type ProvenanceMetadata struct {
4646
slsa02.ProvenanceMetadata
47-
Completeness ProvenanceComplete `json:"completeness"`
48-
BuildKitMetadata BuildKitMetadata `json:"https://mobyproject.org/buildkit@v1#metadata,omitempty"`
49-
}
50-
51-
type ProvenanceComplete struct {
52-
slsa02.ProvenanceComplete
53-
Hermetic bool `json:"https://mobyproject.org/buildkit@v1#hermetic,omitempty"`
47+
BuildKitMetadata BuildKitMetadata `json:"https://mobyproject.org/buildkit@v1#metadata,omitempty"`
48+
Hermetic bool `json:"https://mobyproject.org/buildkit@v1#hermetic,omitempty"`
5449
}
5550

5651
type BuildKitMetadata struct {
@@ -211,14 +206,14 @@ func NewPredicate(c *Capture) (*ProvenancePredicate, error) {
211206
Materials: materials,
212207
},
213208
Metadata: &ProvenanceMetadata{
214-
Completeness: ProvenanceComplete{
215-
ProvenanceComplete: slsa02.ProvenanceComplete{
209+
ProvenanceMetadata: slsa02.ProvenanceMetadata{
210+
Completeness: slsa02.ProvenanceComplete{
216211
Parameters: c.Frontend != "",
217212
Environment: true,
218213
Materials: !incompleteMaterials,
219214
},
220-
Hermetic: !incompleteMaterials && !c.NetworkAccess,
221215
},
216+
Hermetic: !incompleteMaterials && !c.NetworkAccess,
222217
},
223218
}
224219

0 commit comments

Comments
 (0)