Skip to content

Commit 088e2a3

Browse files
authored
Remove ephemeral runner when exit code != 0 and is patched with the job (#4239)
1 parent 2035e13 commit 088e2a3

File tree

11 files changed

+186
-74
lines changed

11 files changed

+186
-74
lines changed

apis/actions.github.com/v1alpha1/ephemeralrunner_types.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const EphemeralRunnerContainerName = "runner"
3434
// +kubebuilder:printcolumn:JSONPath=".status.jobWorkflowRef",name=JobWorkflowRef,type=string
3535
// +kubebuilder:printcolumn:JSONPath=".status.workflowRunId",name=WorkflowRunId,type=number
3636
// +kubebuilder:printcolumn:JSONPath=".status.jobDisplayName",name=JobDisplayName,type=string
37+
// +kubebuilder:printcolumn:JSONPath=".status.jobId",name=JobId,type=string
3738
// +kubebuilder:printcolumn:JSONPath=".status.message",name=Message,type=string
3839
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
3940

@@ -50,6 +51,10 @@ func (er *EphemeralRunner) IsDone() bool {
5051
return er.Status.Phase == corev1.PodSucceeded || er.Status.Phase == corev1.PodFailed
5152
}
5253

54+
func (er *EphemeralRunner) HasJob() bool {
55+
return len(er.Status.JobID) > 0
56+
}
57+
5358
func (er *EphemeralRunner) HasContainerHookConfigured() bool {
5459
for i := range er.Spec.Spec.Containers {
5560
if er.Spec.Spec.Containers[i].Name != EphemeralRunnerContainerName {
@@ -152,6 +157,9 @@ type EphemeralRunnerStatus struct {
152157
// +optional
153158
JobRequestId int64 `json:"jobRequestId,omitempty"`
154159

160+
// +optional
161+
JobID string `json:"jobId,omitempty"`
162+
155163
// +optional
156164
JobRepositoryName string `json:"jobRepositoryName,omitempty"`
157165

charts/gha-runner-scale-set-controller/crds/actions.github.com_ephemeralrunners.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ spec:
3636
- jsonPath: .status.jobDisplayName
3737
name: JobDisplayName
3838
type: string
39+
- jsonPath: .status.jobId
40+
name: JobId
41+
type: string
3942
- jsonPath: .status.message
4043
name: Message
4144
type: string
@@ -7846,6 +7849,8 @@ spec:
78467849
type: object
78477850
jobDisplayName:
78487851
type: string
7852+
jobId:
7853+
type: string
78497854
jobRepositoryName:
78507855
type: string
78517856
jobRequestId:

cmd/ghalistener/listener/listener.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ func (l *Listener) parseMessage(ctx context.Context, msg *actions.RunnerScaleSet
361361
return nil, fmt.Errorf("failed to decode job available: %w", err)
362362
}
363363

364-
l.logger.Info("Job available message received", "jobId", jobAvailable.RunnerRequestId)
364+
l.logger.Info("Job available message received", "jobId", jobAvailable.JobID)
365365
parsedMsg.jobsAvailable = append(parsedMsg.jobsAvailable, &jobAvailable)
366366

367367
case messageTypeJobAssigned:
@@ -370,14 +370,14 @@ func (l *Listener) parseMessage(ctx context.Context, msg *actions.RunnerScaleSet
370370
return nil, fmt.Errorf("failed to decode job assigned: %w", err)
371371
}
372372

373-
l.logger.Info("Job assigned message received", "jobId", jobAssigned.RunnerRequestId)
373+
l.logger.Info("Job assigned message received", "jobId", jobAssigned.JobID)
374374

375375
case messageTypeJobStarted:
376376
var jobStarted actions.JobStarted
377377
if err := json.Unmarshal(msg, &jobStarted); err != nil {
378378
return nil, fmt.Errorf("could not decode job started message. %w", err)
379379
}
380-
l.logger.Info("Job started message received.", "RequestId", jobStarted.RunnerRequestId, "RunnerId", jobStarted.RunnerId)
380+
l.logger.Info("Job started message received.", "JobID", jobStarted.JobID, "RunnerId", jobStarted.RunnerID)
381381
parsedMsg.jobsStarted = append(parsedMsg.jobsStarted, &jobStarted)
382382

383383
case messageTypeJobCompleted:
@@ -386,7 +386,13 @@ func (l *Listener) parseMessage(ctx context.Context, msg *actions.RunnerScaleSet
386386
return nil, fmt.Errorf("failed to decode job completed: %w", err)
387387
}
388388

389-
l.logger.Info("Job completed message received.", "RequestId", jobCompleted.RunnerRequestId, "Result", jobCompleted.Result, "RunnerId", jobCompleted.RunnerId, "RunnerName", jobCompleted.RunnerName)
389+
l.logger.Info(
390+
"Job completed message received.",
391+
"JobID", jobCompleted.JobID,
392+
"Result", jobCompleted.Result,
393+
"RunnerId", jobCompleted.RunnerId,
394+
"RunnerName", jobCompleted.RunnerName,
395+
)
390396
parsedMsg.jobsCompleted = append(parsedMsg.jobsCompleted, &jobCompleted)
391397

392398
default:
@@ -400,7 +406,7 @@ func (l *Listener) parseMessage(ctx context.Context, msg *actions.RunnerScaleSet
400406
func (l *Listener) acquireAvailableJobs(ctx context.Context, jobsAvailable []*actions.JobAvailable) ([]int64, error) {
401407
ids := make([]int64, 0, len(jobsAvailable))
402408
for _, job := range jobsAvailable {
403-
ids = append(ids, job.RunnerRequestId)
409+
ids = append(ids, job.RunnerRequestID)
404410
}
405411

406412
l.logger.Info("Acquiring jobs", "count", len(ids), "requestIds", fmt.Sprint(ids))

cmd/ghalistener/listener/listener_test.go

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -627,17 +627,17 @@ func TestListener_acquireAvailableJobs(t *testing.T) {
627627
availableJobs := []*actions.JobAvailable{
628628
{
629629
JobMessageBase: actions.JobMessageBase{
630-
RunnerRequestId: 1,
630+
RunnerRequestID: 1,
631631
},
632632
},
633633
{
634634
JobMessageBase: actions.JobMessageBase{
635-
RunnerRequestId: 2,
635+
RunnerRequestID: 2,
636636
},
637637
},
638638
{
639639
JobMessageBase: actions.JobMessageBase{
640-
RunnerRequestId: 3,
640+
RunnerRequestID: 3,
641641
},
642642
},
643643
}
@@ -678,17 +678,17 @@ func TestListener_acquireAvailableJobs(t *testing.T) {
678678
availableJobs := []*actions.JobAvailable{
679679
{
680680
JobMessageBase: actions.JobMessageBase{
681-
RunnerRequestId: 1,
681+
RunnerRequestID: 1,
682682
},
683683
},
684684
{
685685
JobMessageBase: actions.JobMessageBase{
686-
RunnerRequestId: 2,
686+
RunnerRequestID: 2,
687687
},
688688
},
689689
{
690690
JobMessageBase: actions.JobMessageBase{
691-
RunnerRequestId: 3,
691+
RunnerRequestID: 3,
692692
},
693693
},
694694
}
@@ -724,17 +724,17 @@ func TestListener_acquireAvailableJobs(t *testing.T) {
724724
availableJobs := []*actions.JobAvailable{
725725
{
726726
JobMessageBase: actions.JobMessageBase{
727-
RunnerRequestId: 1,
727+
RunnerRequestID: 1,
728728
},
729729
},
730730
{
731731
JobMessageBase: actions.JobMessageBase{
732-
RunnerRequestId: 2,
732+
RunnerRequestID: 2,
733733
},
734734
},
735735
{
736736
JobMessageBase: actions.JobMessageBase{
737-
RunnerRequestId: 3,
737+
RunnerRequestID: 3,
738738
},
739739
},
740740
}
@@ -809,17 +809,17 @@ func TestListener_acquireAvailableJobs(t *testing.T) {
809809
availableJobs := []*actions.JobAvailable{
810810
{
811811
JobMessageBase: actions.JobMessageBase{
812-
RunnerRequestId: 1,
812+
RunnerRequestID: 1,
813813
},
814814
},
815815
{
816816
JobMessageBase: actions.JobMessageBase{
817-
RunnerRequestId: 2,
817+
RunnerRequestID: 2,
818818
},
819819
},
820820
{
821821
JobMessageBase: actions.JobMessageBase{
822-
RunnerRequestId: 3,
822+
RunnerRequestID: 3,
823823
},
824824
},
825825
}
@@ -881,7 +881,7 @@ func TestListener_parseMessage(t *testing.T) {
881881
JobMessageType: actions.JobMessageType{
882882
MessageType: messageTypeJobAvailable,
883883
},
884-
RunnerRequestId: 1,
884+
RunnerRequestID: 1,
885885
},
886886
},
887887
{
@@ -890,7 +890,7 @@ func TestListener_parseMessage(t *testing.T) {
890890
JobMessageType: actions.JobMessageType{
891891
MessageType: messageTypeJobAvailable,
892892
},
893-
RunnerRequestId: 2,
893+
RunnerRequestID: 2,
894894
},
895895
},
896896
}
@@ -904,15 +904,15 @@ func TestListener_parseMessage(t *testing.T) {
904904
JobMessageType: actions.JobMessageType{
905905
MessageType: messageTypeJobAssigned,
906906
},
907-
RunnerRequestId: 3,
907+
RunnerRequestID: 3,
908908
},
909909
},
910910
{
911911
JobMessageBase: actions.JobMessageBase{
912912
JobMessageType: actions.JobMessageType{
913913
MessageType: messageTypeJobAssigned,
914914
},
915-
RunnerRequestId: 4,
915+
RunnerRequestID: 4,
916916
},
917917
},
918918
}
@@ -926,9 +926,9 @@ func TestListener_parseMessage(t *testing.T) {
926926
JobMessageType: actions.JobMessageType{
927927
MessageType: messageTypeJobStarted,
928928
},
929-
RunnerRequestId: 5,
929+
RunnerRequestID: 5,
930930
},
931-
RunnerId: 2,
931+
RunnerID: 2,
932932
RunnerName: "runner2",
933933
},
934934
}
@@ -942,7 +942,7 @@ func TestListener_parseMessage(t *testing.T) {
942942
JobMessageType: actions.JobMessageType{
943943
MessageType: messageTypeJobCompleted,
944944
},
945-
RunnerRequestId: 6,
945+
RunnerRequestID: 6,
946946
},
947947
Result: "success",
948948
RunnerId: 1,

cmd/ghalistener/listener/metrics_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,9 @@ func TestHandleMessageMetrics(t *testing.T) {
123123
JobMessageType: actions.JobMessageType{
124124
MessageType: messageTypeJobStarted,
125125
},
126-
RunnerRequestId: 8,
126+
RunnerRequestID: 8,
127127
},
128-
RunnerId: 3,
128+
RunnerID: 3,
129129
RunnerName: "runner3",
130130
},
131131
}
@@ -139,7 +139,7 @@ func TestHandleMessageMetrics(t *testing.T) {
139139
JobMessageType: actions.JobMessageType{
140140
MessageType: messageTypeJobCompleted,
141141
},
142-
RunnerRequestId: 6,
142+
RunnerRequestID: 6,
143143
},
144144
Result: "success",
145145
RunnerId: 1,
@@ -150,7 +150,7 @@ func TestHandleMessageMetrics(t *testing.T) {
150150
JobMessageType: actions.JobMessageType{
151151
MessageType: messageTypeJobCompleted,
152152
},
153-
RunnerRequestId: 7,
153+
RunnerRequestID: 7,
154154
},
155155
Result: "success",
156156
RunnerId: 2,

cmd/ghalistener/worker/worker.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,11 @@ func (w *Worker) HandleJobStarted(ctx context.Context, jobInfo *actions.JobStart
100100
"runnerName", jobInfo.RunnerName,
101101
"ownerName", jobInfo.OwnerName,
102102
"repoName", jobInfo.RepositoryName,
103+
"jobId", jobInfo.JobID,
103104
"workflowRef", jobInfo.JobWorkflowRef,
104-
"workflowRunId", jobInfo.WorkflowRunId,
105+
"workflowRunId", jobInfo.WorkflowRunID,
105106
"jobDisplayName", jobInfo.JobDisplayName,
106-
"requestId", jobInfo.RunnerRequestId)
107+
"requestId", jobInfo.RunnerRequestID)
107108

108109
original, err := json.Marshal(&v1alpha1.EphemeralRunner{})
109110
if err != nil {
@@ -113,9 +114,10 @@ func (w *Worker) HandleJobStarted(ctx context.Context, jobInfo *actions.JobStart
113114
patch, err := json.Marshal(
114115
&v1alpha1.EphemeralRunner{
115116
Status: v1alpha1.EphemeralRunnerStatus{
116-
JobRequestId: jobInfo.RunnerRequestId,
117+
JobRequestId: jobInfo.RunnerRequestID,
117118
JobRepositoryName: fmt.Sprintf("%s/%s", jobInfo.OwnerName, jobInfo.RepositoryName),
118-
WorkflowRunId: jobInfo.WorkflowRunId,
119+
JobID: jobInfo.JobID,
120+
WorkflowRunId: jobInfo.WorkflowRunID,
119121
JobWorkflowRef: jobInfo.JobWorkflowRef,
120122
JobDisplayName: jobInfo.JobDisplayName,
121123
},

config/crd/bases/actions.github.com_ephemeralrunners.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ spec:
3636
- jsonPath: .status.jobDisplayName
3737
name: JobDisplayName
3838
type: string
39+
- jsonPath: .status.jobId
40+
name: JobId
41+
type: string
3942
- jsonPath: .status.message
4043
name: Message
4144
type: string
@@ -7846,6 +7849,8 @@ spec:
78467849
type: object
78477850
jobDisplayName:
78487851
type: string
7852+
jobId:
7853+
type: string
78497854
jobRepositoryName:
78507855
type: string
78517856
jobRequestId:

0 commit comments

Comments
 (0)