From b121bf5c2557157ceb8ad1edac3413ca8431c5cf Mon Sep 17 00:00:00 2001 From: Matthew DeVenny Date: Wed, 1 Apr 2026 15:11:48 -0700 Subject: [PATCH] #38 add job_run_id Signed-off-by: Matthew DeVenny --- cmd/summary.go | 5 +++ pb/cargowall/v1/cargo_wall_action.pb.go | 53 +++++++++++++++---------- proto/v1/cargo_wall_action.proto | 19 +++++---- 3 files changed, 49 insertions(+), 28 deletions(-) diff --git a/cmd/summary.go b/cmd/summary.go index b2f1c5d..f9c5204 100644 --- a/cmd/summary.go +++ b/cmd/summary.go @@ -49,6 +49,7 @@ type SummaryCmd struct { JobKey string `help:"GitHub Actions job key (github.job)" name:"job-key"` Mode string `help:"CargoWall mode (enforce/audit)"` DefaultAction string `help:"Default action type (allow/deny)" name:"default-action"` + JobRunId uint64 `help:"GitHub Actions job run ID" name:"job-run-id"` JobStatus string `help:"GitHub Actions job status (success/failure/canceled/cancelled/timed_out)" name:"job-status"` output io.Writer // overridable for testing; defaults to os.Stdout @@ -569,6 +570,10 @@ func (c *SummaryCmd) pushToApi(stepEvents []StepEvents, steps []GitHubStep) (str Status: jobStatus, } + if c.JobRunId != 0 { + req.JobRunId = &c.JobRunId + } + // Set timestamps from first/last events if len(allEvents) > 0 { req.StartedAt = timestamppb.New(allEvents[0].Timestamp) diff --git a/pb/cargowall/v1/cargo_wall_action.pb.go b/pb/cargowall/v1/cargo_wall_action.pb.go index 1a63c33..744107a 100644 --- a/pb/cargowall/v1/cargo_wall_action.pb.go +++ b/pb/cargowall/v1/cargo_wall_action.pb.go @@ -361,15 +361,17 @@ func (x *CargoWallActionEvent) GetAutoAllowedType() data.CargoWallAutoAllowedTyp } type CreateCargoWallActionJobRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - JobName string `protobuf:"bytes,1,opt,name=job_name,json=jobName,proto3" json:"job_name,omitempty"` - JobKey string `protobuf:"bytes,2,opt,name=job_key,json=jobKey,proto3" json:"job_key,omitempty"` - Mode data.CargoWallMode `protobuf:"varint,3,opt,name=mode,proto3,enum=grpc.cargowall.v1.CargoWallMode" json:"mode,omitempty"` - DefaultAction data.CargoWallActionType `protobuf:"varint,4,opt,name=default_action,json=defaultAction,proto3,enum=grpc.cargowall.v1.CargoWallActionType" json:"default_action,omitempty"` - Summary *CargoWallActionJobSummary `protobuf:"bytes,5,opt,name=summary,proto3" json:"summary,omitempty"` - StartedAt *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` - CompletedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=completed_at,json=completedAt,proto3" json:"completed_at,omitempty"` - Status data.CargoWallJobStatus `protobuf:"varint,8,opt,name=status,proto3,enum=grpc.cargowall.v1.CargoWallJobStatus" json:"status,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + // optional - will remove optional annotation in subsequent update + JobRunId *uint64 `protobuf:"varint,1,opt,name=job_run_id,json=jobRunId,proto3,oneof" json:"job_run_id,omitempty"` + JobName string `protobuf:"bytes,2,opt,name=job_name,json=jobName,proto3" json:"job_name,omitempty"` + JobKey string `protobuf:"bytes,3,opt,name=job_key,json=jobKey,proto3" json:"job_key,omitempty"` + Mode data.CargoWallMode `protobuf:"varint,4,opt,name=mode,proto3,enum=grpc.cargowall.v1.CargoWallMode" json:"mode,omitempty"` + DefaultAction data.CargoWallActionType `protobuf:"varint,5,opt,name=default_action,json=defaultAction,proto3,enum=grpc.cargowall.v1.CargoWallActionType" json:"default_action,omitempty"` + Summary *CargoWallActionJobSummary `protobuf:"bytes,6,opt,name=summary,proto3" json:"summary,omitempty"` + StartedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` + CompletedAt *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=completed_at,json=completedAt,proto3" json:"completed_at,omitempty"` + Status data.CargoWallJobStatus `protobuf:"varint,9,opt,name=status,proto3,enum=grpc.cargowall.v1.CargoWallJobStatus" json:"status,omitempty"` Steps []*CreateCargoWallActionStep `protobuf:"bytes,100,rep,name=steps,proto3" json:"steps,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -405,6 +407,13 @@ func (*CreateCargoWallActionJobRequest) Descriptor() ([]byte, []int) { return file_cargo_wall_action_proto_rawDescGZIP(), []int{4} } +func (x *CreateCargoWallActionJobRequest) GetJobRunId() uint64 { + if x != nil && x.JobRunId != nil { + return *x.JobRunId + } + return 0 +} + func (x *CreateCargoWallActionJobRequest) GetJobName() string { if x != nil { return x.JobName @@ -652,18 +661,21 @@ const file_cargo_wall_action_proto_rawDesc = "" + "\r_matched_ruleB\n" + "\n" + "\b_processB\x14\n" + - "\x12_auto_allowed_type\"\x9f\x04\n" + - "\x1fCreateCargoWallActionJobRequest\x12\x19\n" + - "\bjob_name\x18\x01 \x01(\tR\ajobName\x12\x17\n" + - "\ajob_key\x18\x02 \x01(\tR\x06jobKey\x124\n" + - "\x04mode\x18\x03 \x01(\x0e2 .grpc.cargowall.v1.CargoWallModeR\x04mode\x12M\n" + - "\x0edefault_action\x18\x04 \x01(\x0e2&.grpc.cargowall.v1.CargoWallActionTypeR\rdefaultAction\x12F\n" + - "\asummary\x18\x05 \x01(\v2,.grpc.cargowall.v1.CargoWallActionJobSummaryR\asummary\x129\n" + + "\x12_auto_allowed_type\"\xd1\x04\n" + + "\x1fCreateCargoWallActionJobRequest\x12!\n" + + "\n" + + "job_run_id\x18\x01 \x01(\x04H\x00R\bjobRunId\x88\x01\x01\x12\x19\n" + + "\bjob_name\x18\x02 \x01(\tR\ajobName\x12\x17\n" + + "\ajob_key\x18\x03 \x01(\tR\x06jobKey\x124\n" + + "\x04mode\x18\x04 \x01(\x0e2 .grpc.cargowall.v1.CargoWallModeR\x04mode\x12M\n" + + "\x0edefault_action\x18\x05 \x01(\x0e2&.grpc.cargowall.v1.CargoWallActionTypeR\rdefaultAction\x12F\n" + + "\asummary\x18\x06 \x01(\v2,.grpc.cargowall.v1.CargoWallActionJobSummaryR\asummary\x129\n" + "\n" + - "started_at\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampR\tstartedAt\x12=\n" + - "\fcompleted_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampR\vcompletedAt\x12=\n" + - "\x06status\x18\b \x01(\x0e2%.grpc.cargowall.v1.CargoWallJobStatusR\x06status\x12B\n" + - "\x05steps\x18d \x03(\v2,.grpc.cargowall.v1.CreateCargoWallActionStepR\x05steps\"\xac\x02\n" + + "started_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampR\tstartedAt\x12=\n" + + "\fcompleted_at\x18\b \x01(\v2\x1a.google.protobuf.TimestampR\vcompletedAt\x12=\n" + + "\x06status\x18\t \x01(\x0e2%.grpc.cargowall.v1.CargoWallJobStatusR\x06status\x12B\n" + + "\x05steps\x18d \x03(\v2,.grpc.cargowall.v1.CreateCargoWallActionStepR\x05stepsB\r\n" + + "\v_job_run_id\"\xac\x02\n" + "\x19CreateCargoWallActionStep\x12\x12\n" + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + "\x06number\x18\x02 \x01(\x05R\x06number\x12>\n" + @@ -749,6 +761,7 @@ func file_cargo_wall_action_proto_init() { file_cargo_wall_action_proto_msgTypes[0].OneofWrappers = []any{} file_cargo_wall_action_proto_msgTypes[2].OneofWrappers = []any{} file_cargo_wall_action_proto_msgTypes[3].OneofWrappers = []any{} + file_cargo_wall_action_proto_msgTypes[4].OneofWrappers = []any{} file_cargo_wall_action_proto_msgTypes[5].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ diff --git a/proto/v1/cargo_wall_action.proto b/proto/v1/cargo_wall_action.proto index c7b3e47..83804f3 100644 --- a/proto/v1/cargo_wall_action.proto +++ b/proto/v1/cargo_wall_action.proto @@ -69,14 +69,17 @@ message CargoWallActionEvent { } message CreateCargoWallActionJobRequest { - string job_name = 1; - string job_key = 2; - CargoWallMode mode = 3; - CargoWallActionType default_action = 4; - CargoWallActionJobSummary summary = 5; - google.protobuf.Timestamp started_at = 6; - google.protobuf.Timestamp completed_at = 7; - CargoWallJobStatus status = 8; + // optional - will remove optional annotation in subsequent update + optional uint64 job_run_id = 1; + string job_name = 2; + string job_key = 3; + CargoWallMode mode = 4; + CargoWallActionType default_action = 5; + CargoWallActionJobSummary summary = 6; + google.protobuf.Timestamp started_at = 7; + google.protobuf.Timestamp completed_at = 8; + CargoWallJobStatus status = 9; + repeated CreateCargoWallActionStep steps = 100; }