Skip to content

Commit 9bc1c9e

Browse files
Shutdown the scaleset when runner is deprecated (#4404)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
1 parent 40595d8 commit 9bc1c9e

18 files changed

+409
-178
lines changed

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

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ type AutoscalingRunnerSetStatus struct {
315315
CurrentRunners int `json:"currentRunners"`
316316

317317
// +optional
318-
State string `json:"state"`
318+
Phase AutoscalingRunnerSetPhase `json:"phase"`
319319

320320
// EphemeralRunner counts separated by the stage ephemeral runners are in, taken from the EphemeralRunnerSet
321321

@@ -327,6 +327,30 @@ type AutoscalingRunnerSetStatus struct {
327327
FailedEphemeralRunners int `json:"failedEphemeralRunners"`
328328
}
329329

330+
type AutoscalingRunnerSetPhase string
331+
332+
const (
333+
// AutoscalingRunnerSetPhasePending phase means that the listener is not
334+
// yet started
335+
AutoscalingRunnerSetPhasePending AutoscalingRunnerSetPhase = "Pending"
336+
AutoscalingRunnerSetPhaseRunning AutoscalingRunnerSetPhase = "Running"
337+
AutoscalingRunnerSetPhaseOutdated AutoscalingRunnerSetPhase = "Outdated"
338+
)
339+
340+
func (ars *AutoscalingRunnerSet) Hash() string {
341+
type data struct {
342+
Spec *AutoscalingRunnerSetSpec
343+
Labels map[string]string
344+
}
345+
346+
d := &data{
347+
Spec: ars.Spec.DeepCopy(),
348+
Labels: ars.Labels,
349+
}
350+
351+
return hash.ComputeTemplateHash(d)
352+
}
353+
330354
func (ars *AutoscalingRunnerSet) ListenerSpecHash() string {
331355
arsSpec := ars.Spec.DeepCopy()
332356
spec := arsSpec

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

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ type EphemeralRunner struct {
4848
}
4949

5050
func (er *EphemeralRunner) IsDone() bool {
51-
return er.Status.Phase == corev1.PodSucceeded || er.Status.Phase == corev1.PodFailed
51+
return er.Status.Phase == EphemeralRunnerPhaseSucceeded || er.Status.Phase == EphemeralRunnerPhaseFailed || er.Status.Phase == EphemeralRunnerPhaseOutdated
5252
}
5353

5454
func (er *EphemeralRunner) HasJob() bool {
@@ -143,22 +143,22 @@ type EphemeralRunnerStatus struct {
143143
// The PodSucceded phase should be set only when confirmed that EphemeralRunner
144144
// actually executed the job and has been removed from the service.
145145
// +optional
146-
Phase corev1.PodPhase `json:"phase,omitempty"`
146+
Phase EphemeralRunnerPhase `json:"phase,omitempty"`
147147
// +optional
148148
Reason string `json:"reason,omitempty"`
149149
// +optional
150150
Message string `json:"message,omitempty"`
151151

152152
// +optional
153-
RunnerId int `json:"runnerId,omitempty"`
153+
RunnerID int `json:"runnerId,omitempty"`
154154
// +optional
155155
RunnerName string `json:"runnerName,omitempty"`
156156

157157
// +optional
158158
Failures map[string]metav1.Time `json:"failures,omitempty"`
159159

160160
// +optional
161-
JobRequestId int64 `json:"jobRequestId,omitempty"`
161+
JobRequestID int64 `json:"jobRequestId,omitempty"`
162162

163163
// +optional
164164
JobID string `json:"jobId,omitempty"`
@@ -170,12 +170,33 @@ type EphemeralRunnerStatus struct {
170170
JobWorkflowRef string `json:"jobWorkflowRef,omitempty"`
171171

172172
// +optional
173-
WorkflowRunId int64 `json:"workflowRunId,omitempty"`
173+
WorkflowRunID int64 `json:"workflowRunId,omitempty"`
174174

175175
// +optional
176176
JobDisplayName string `json:"jobDisplayName,omitempty"`
177177
}
178178

179+
// EphemeralRunnerPhase is the phase of the ephemeral runner.
180+
// It must be a superset of the pod phase.
181+
type EphemeralRunnerPhase string
182+
183+
const (
184+
// EphemeralRunnerPhasePending is a phase set when the ephemeral runner is
185+
// being provisioned and is not yet online.
186+
EphemeralRunnerPhasePending EphemeralRunnerPhase = "Pending"
187+
// EphemeralRunnerPhaseRunning is a phase set when the ephemeral runner is online and
188+
// waiting for a job to execute.
189+
EphemeralRunnerPhaseRunning EphemeralRunnerPhase = "Running"
190+
// EphemeralRunnerPhaseSucceeded is a phase set when the ephemeral runner
191+
// successfully executed the job and has been removed from the service.
192+
EphemeralRunnerPhaseSucceeded EphemeralRunnerPhase = "Succeeded"
193+
// EphemeralRunnerPhaseFailed is a phase set when the ephemeral runner
194+
// fails with unrecoverable failure.
195+
EphemeralRunnerPhaseFailed EphemeralRunnerPhase = "Failed"
196+
// EphemeralRunnerPhaseOutdated is a special phase that indicates the runner is outdated and should be upgraded.
197+
EphemeralRunnerPhaseOutdated EphemeralRunnerPhase = "Outdated"
198+
)
199+
179200
func (s *EphemeralRunnerStatus) LastFailure() metav1.Time {
180201
var maxTime metav1.Time
181202
if len(s.Failures) == 0 {

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,20 @@ type EphemeralRunnerSetStatus struct {
4242
RunningEphemeralRunners int `json:"runningEphemeralRunners"`
4343
// +optional
4444
FailedEphemeralRunners int `json:"failedEphemeralRunners"`
45+
// +optional
46+
Phase EphemeralRunnerSetPhase `json:"phase"`
4547
}
4648

49+
// EphemeralRunnerSetPhase is the phase of the ephemeral runner set resource
50+
type EphemeralRunnerSetPhase string
51+
52+
const (
53+
EphemeralRunnerSetPhaseRunning EphemeralRunnerSetPhase = "Running"
54+
// EphemeralRunnerSetPhaseOutdated is set when at least one ephemeral runner
55+
// contains the outdated phase
56+
EphemeralRunnerSetPhaseOutdated EphemeralRunnerSetPhase = "Outdated"
57+
)
58+
4759
// +kubebuilder:object:root=true
4860
// +kubebuilder:subresource:status
4961
// +kubebuilder:printcolumn:JSONPath=".spec.replicas",name="DesiredReplicas",type="integer"

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16547,10 +16547,10 @@ spec:
1654716547
type: integer
1654816548
pendingEphemeralRunners:
1654916549
type: integer
16550+
phase:
16551+
type: string
1655016552
runningEphemeralRunners:
1655116553
type: integer
16552-
state:
16553-
type: string
1655416554
type: object
1655516555
type: object
1655616556
served: true

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8318,6 +8318,9 @@ spec:
83188318
type: integer
83198319
pendingEphemeralRunners:
83208320
type: integer
8321+
phase:
8322+
description: EphemeralRunnerSetPhase is the phase of the ephemeral runner set resource
8323+
type: string
83218324
runningEphemeralRunners:
83228325
type: integer
83238326
required:

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16547,10 +16547,10 @@ spec:
1654716547
type: integer
1654816548
pendingEphemeralRunners:
1654916549
type: integer
16550+
phase:
16551+
type: string
1655016552
runningEphemeralRunners:
1655116553
type: integer
16552-
state:
16553-
type: string
1655416554
type: object
1655516555
type: object
1655616556
served: true

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8318,6 +8318,9 @@ spec:
83188318
type: integer
83198319
pendingEphemeralRunners:
83208320
type: integer
8321+
phase:
8322+
description: EphemeralRunnerSetPhase is the phase of the ephemeral runner set resource
8323+
type: string
83218324
runningEphemeralRunners:
83228325
type: integer
83238326
required:

cmd/ghalistener/scaler/scaler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,10 @@ func (w *Scaler) HandleJobStarted(ctx context.Context, jobInfo *scaleset.JobStar
110110
patch, err := json.Marshal(
111111
&v1alpha1.EphemeralRunner{
112112
Status: v1alpha1.EphemeralRunnerStatus{
113-
JobRequestId: jobInfo.RunnerRequestID,
113+
JobRequestID: jobInfo.RunnerRequestID,
114114
JobRepositoryName: fmt.Sprintf("%s/%s", jobInfo.OwnerName, jobInfo.RepositoryName),
115115
JobID: jobInfo.JobID,
116-
WorkflowRunId: jobInfo.WorkflowRunID,
116+
WorkflowRunID: jobInfo.WorkflowRunID,
117117
JobWorkflowRef: jobInfo.JobWorkflowRef,
118118
JobDisplayName: jobInfo.JobDisplayName,
119119
},

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16547,10 +16547,10 @@ spec:
1654716547
type: integer
1654816548
pendingEphemeralRunners:
1654916549
type: integer
16550+
phase:
16551+
type: string
1655016552
runningEphemeralRunners:
1655116553
type: integer
16552-
state:
16553-
type: string
1655416554
type: object
1655516555
type: object
1655616556
served: true

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8318,6 +8318,9 @@ spec:
83188318
type: integer
83198319
pendingEphemeralRunners:
83208320
type: integer
8321+
phase:
8322+
description: EphemeralRunnerSetPhase is the phase of the ephemeral runner set resource
8323+
type: string
83218324
runningEphemeralRunners:
83228325
type: integer
83238326
required:

0 commit comments

Comments
 (0)