Skip to content

Commit dd766f4

Browse files
authored
chore(policies): show policy evaluations in wf run describe --output json (#1119)
Signed-off-by: Jose I. Paris <[email protected]>
1 parent d997717 commit dd766f4

File tree

7 files changed

+521
-205
lines changed

7 files changed

+521
-205
lines changed

app/cli/internal/action/workflow_run_describe.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ type WorkflowRunAttestationItem struct {
5555
Annotations []*Annotation `json:"annotations,omitempty"`
5656
// Digest in CAS backend
5757
Digest string `json:"digest"`
58+
// Policy violations
59+
PolicyEvaluations map[string]*pb.PolicyEvaluations `json:"policy_evaluations,omitempty"`
5860
}
5961

6062
type Material struct {
@@ -170,12 +172,13 @@ func (action *WorkflowRunDescribe) Run(ctx context.Context, opts *WorkflowRunDes
170172
}
171173

172174
item.Attestation = &WorkflowRunAttestationItem{
173-
Envelope: envelope,
174-
statement: statement,
175-
EnvVars: envVars,
176-
Materials: materials,
177-
Annotations: annotations,
178-
Digest: attestation.DigestInCasBackend,
175+
Envelope: envelope,
176+
statement: statement,
177+
EnvVars: envVars,
178+
Materials: materials,
179+
Annotations: annotations,
180+
Digest: attestation.DigestInCasBackend,
181+
PolicyEvaluations: attestation.PolicyEvaluations,
179182
}
180183

181184
return item, nil

app/controlplane/api/controlplane/v1/response_messages.pb.go

Lines changed: 293 additions & 198 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controlplane/api/controlplane/v1/response_messages.proto

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package controlplane.v1;
2020
import "errors/errors.proto";
2121
import "google/protobuf/timestamp.proto";
2222
import "workflowcontract/v1/crafting_schema.proto";
23+
import "attestation/v1/crafting_state.proto";
2324

2425
option go_package = "github.com/chainloop-dev/chainloop/app/controlplane/api/controlplane/v1;v1";
2526

@@ -82,6 +83,7 @@ message AttestationItem {
8283
repeated EnvVariable env_vars = 4;
8384
repeated Material materials = 5;
8485
map<string, string> annotations = 6;
86+
map<string, PolicyEvaluations> policy_evaluations = 8;
8587

8688
message EnvVariable {
8789
string name = 1;
@@ -107,6 +109,10 @@ message AttestationItem {
107109
}
108110
}
109111

112+
message PolicyEvaluations {
113+
repeated attestation.v1.PolicyEvaluation evaluations = 1;
114+
}
115+
110116
message WorkflowContractItem {
111117
string id = 1;
112118
string name = 2;

app/controlplane/api/gen/frontend/controlplane/v1/response_messages.ts

Lines changed: 193 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controlplane/internal/service/attestation.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/chainloop-dev/chainloop/app/controlplane/internal/usercontext"
2929
"github.com/chainloop-dev/chainloop/app/controlplane/internal/usercontext/attjwtmiddleware"
3030
"github.com/chainloop-dev/chainloop/app/controlplane/pkg/biz"
31+
v1 "github.com/chainloop-dev/chainloop/internal/attestation/crafter/api/attestation/v1"
3132
"github.com/chainloop-dev/chainloop/internal/attestation/renderer/chainloop"
3233
casJWT "github.com/chainloop-dev/chainloop/internal/robotaccount/cas"
3334
"github.com/chainloop-dev/chainloop/pkg/credentials"
@@ -374,9 +375,23 @@ func bizAttestationToPb(att *biz.Attestation) (*cpAPI.AttestationItem, error) {
374375
DigestInCasBackend: att.Digest,
375376
Materials: materials,
376377
Annotations: predicate.GetAnnotations(),
378+
PolicyEvaluations: extractPolicyEvaluations(predicate.GetPolicyEvaluations()),
377379
}, nil
378380
}
379381

382+
// extract policy evaluations in form of a Go map of arrays, into a map of protobuf messages
383+
// (needed to be added to the response message)
384+
func extractPolicyEvaluations(in map[string][]*v1.PolicyEvaluation) map[string]*cpAPI.PolicyEvaluations {
385+
res := make(map[string]*cpAPI.PolicyEvaluations)
386+
for k, v := range in {
387+
res[k] = &cpAPI.PolicyEvaluations{
388+
Evaluations: v,
389+
}
390+
}
391+
392+
return res
393+
}
394+
380395
func extractEnvVariables(in map[string]string) []*cpAPI.AttestationItem_EnvVariable {
381396
res := make([]*cpAPI.AttestationItem_EnvVariable, 0, len(in))
382397
for k, v := range in {

internal/attestation/renderer/chainloop/chainloop.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ type NormalizablePredicate interface {
4040
GetMaterials() []*NormalizedMaterial
4141
GetRunLink() string
4242
GetMetadata() *Metadata
43+
GetPolicyEvaluations() map[string][]*v1.PolicyEvaluation
4344
}
4445

4546
type NormalizedMaterial struct {

internal/attestation/renderer/chainloop/v02.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,10 @@ func (p *ProvenancePredicateV02) GetMaterials() []*NormalizedMaterial {
274274
return res
275275
}
276276

277+
func (p *ProvenancePredicateV02) GetPolicyEvaluations() map[string][]*v1.PolicyEvaluation {
278+
return p.PolicyEvaluations
279+
}
280+
277281
// Translate a ResourceDescriptor to a NormalizedMaterial
278282
func normalizeMaterial(material *intoto.ResourceDescriptor) (*NormalizedMaterial, error) {
279283
m := &NormalizedMaterial{}

0 commit comments

Comments
 (0)