Skip to content

Commit 5223a44

Browse files
committed
Use metrics to display runner statuses instead of status field for EphemeralRunnerSet and AutoscalingRunnerSet
1 parent 2ee6b3b commit 5223a44

18 files changed

Lines changed: 776 additions & 270 deletions

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

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,7 @@ import (
3636
// +kubebuilder:subresource:status
3737
// +kubebuilder:printcolumn:JSONPath=".spec.minRunners",name=Minimum Runners,type=integer
3838
// +kubebuilder:printcolumn:JSONPath=".spec.maxRunners",name=Maximum Runners,type=integer
39-
// +kubebuilder:printcolumn:JSONPath=".status.currentRunners",name=Current Runners,type=integer
4039
// +kubebuilder:printcolumn:JSONPath=".status.phase",name=Phase,type=string
41-
// +kubebuilder:printcolumn:JSONPath=".status.pendingEphemeralRunners",name=Pending Runners,type=integer
42-
// +kubebuilder:printcolumn:JSONPath=".status.runningEphemeralRunners",name=Running Runners,type=integer
43-
// +kubebuilder:printcolumn:JSONPath=".status.finishedEphemeralRunners",name=Finished Runners,type=integer
44-
// +kubebuilder:printcolumn:JSONPath=".status.deletingEphemeralRunners",name=Deleting Runners,type=integer
4540

4641
// AutoscalingRunnerSet is the Schema for the autoscalingrunnersets API
4742
type AutoscalingRunnerSet struct {
@@ -314,20 +309,8 @@ type HistogramMetric struct {
314309

315310
// AutoscalingRunnerSetStatus defines the observed state of AutoscalingRunnerSet
316311
type AutoscalingRunnerSetStatus struct {
317-
// +optional
318-
CurrentRunners int `json:"currentRunners"`
319-
320312
// +optional
321313
Phase AutoscalingRunnerSetPhase `json:"phase"`
322-
323-
// EphemeralRunner counts separated by the stage ephemeral runners are in, taken from the EphemeralRunnerSet
324-
325-
// +optional
326-
PendingEphemeralRunners int `json:"pendingEphemeralRunners"`
327-
// +optional
328-
RunningEphemeralRunners int `json:"runningEphemeralRunners"`
329-
// +optional
330-
FailedEphemeralRunners int `json:"failedEphemeralRunners"`
331314
}
332315

333316
type AutoscalingRunnerSetPhase string

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

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,6 @@ type EphemeralRunnerSetSpec struct {
3737

3838
// EphemeralRunnerSetStatus defines the observed state of EphemeralRunnerSet
3939
type EphemeralRunnerSetStatus struct {
40-
// CurrentReplicas is the number of currently running EphemeralRunner resources being managed by this EphemeralRunnerSet.
41-
CurrentReplicas int `json:"currentReplicas"`
42-
// +optional
43-
PendingEphemeralRunners int `json:"pendingEphemeralRunners"`
44-
// +optional
45-
RunningEphemeralRunners int `json:"runningEphemeralRunners"`
46-
// +optional
47-
FailedEphemeralRunners int `json:"failedEphemeralRunners"`
4840
// +optional
4941
Phase EphemeralRunnerSetPhase `json:"phase"`
5042
}
@@ -62,11 +54,6 @@ const (
6254
// +kubebuilder:object:root=true
6355
// +kubebuilder:subresource:status
6456
// +kubebuilder:printcolumn:JSONPath=".spec.replicas",name="DesiredReplicas",type="integer"
65-
// +kubebuilder:printcolumn:JSONPath=".status.currentReplicas", name="CurrentReplicas",type="integer"
66-
// +kubebuilder:printcolumn:JSONPath=".status.pendingEphemeralRunners",name=Pending Runners,type=integer
67-
// +kubebuilder:printcolumn:JSONPath=".status.runningEphemeralRunners",name=Running Runners,type=integer
68-
// +kubebuilder:printcolumn:JSONPath=".status.finishedEphemeralRunners",name=Finished Runners,type=integer
69-
// +kubebuilder:printcolumn:JSONPath=".status.deletingEphemeralRunners",name=Deleting Runners,type=integer
7057
// +kubebuilder:printcolumn:JSONPath=".status.phase",name=Phase,type=string
7158

7259
// EphemeralRunnerSet is the Schema for the ephemeralrunnersets API

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

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,9 @@ spec:
2121
- jsonPath: .spec.maxRunners
2222
name: Maximum Runners
2323
type: integer
24-
- jsonPath: .status.currentRunners
25-
name: Current Runners
26-
type: integer
2724
- jsonPath: .status.phase
2825
name: Phase
2926
type: string
30-
- jsonPath: .status.pendingEphemeralRunners
31-
name: Pending Runners
32-
type: integer
33-
- jsonPath: .status.runningEphemeralRunners
34-
name: Running Runners
35-
type: integer
36-
- jsonPath: .status.finishedEphemeralRunners
37-
name: Finished Runners
38-
type: integer
39-
- jsonPath: .status.deletingEphemeralRunners
40-
name: Deleting Runners
41-
type: integer
4227
name: v1alpha1
4328
schema:
4429
openAPIV3Schema:
@@ -16543,16 +16528,8 @@ spec:
1654316528
status:
1654416529
description: AutoscalingRunnerSetStatus defines the observed state of AutoscalingRunnerSet
1654516530
properties:
16546-
currentRunners:
16547-
type: integer
16548-
failedEphemeralRunners:
16549-
type: integer
16550-
pendingEphemeralRunners:
16551-
type: integer
1655216531
phase:
1655316532
type: string
16554-
runningEphemeralRunners:
16555-
type: integer
1655616533
type: object
1655716534
type: object
1655816535
served: true

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

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,6 @@ spec:
1818
- jsonPath: .spec.replicas
1919
name: DesiredReplicas
2020
type: integer
21-
- jsonPath: .status.currentReplicas
22-
name: CurrentReplicas
23-
type: integer
24-
- jsonPath: .status.pendingEphemeralRunners
25-
name: Pending Runners
26-
type: integer
27-
- jsonPath: .status.runningEphemeralRunners
28-
name: Running Runners
29-
type: integer
30-
- jsonPath: .status.finishedEphemeralRunners
31-
name: Finished Runners
32-
type: integer
33-
- jsonPath: .status.deletingEphemeralRunners
34-
name: Deleting Runners
35-
type: integer
3621
- jsonPath: .status.phase
3722
name: Phase
3823
type: string
@@ -8316,20 +8301,9 @@ spec:
83168301
status:
83178302
description: EphemeralRunnerSetStatus defines the observed state of EphemeralRunnerSet
83188303
properties:
8319-
currentReplicas:
8320-
description: CurrentReplicas is the number of currently running EphemeralRunner resources being managed by this EphemeralRunnerSet.
8321-
type: integer
8322-
failedEphemeralRunners:
8323-
type: integer
8324-
pendingEphemeralRunners:
8325-
type: integer
83268304
phase:
83278305
description: EphemeralRunnerSetPhase is the phase of the ephemeral runner set resource
83288306
type: string
8329-
runningEphemeralRunners:
8330-
type: integer
8331-
required:
8332-
- currentReplicas
83338307
type: object
83348308
type: object
83358309
served: true

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

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,9 @@ spec:
2121
- jsonPath: .spec.maxRunners
2222
name: Maximum Runners
2323
type: integer
24-
- jsonPath: .status.currentRunners
25-
name: Current Runners
26-
type: integer
2724
- jsonPath: .status.phase
2825
name: Phase
2926
type: string
30-
- jsonPath: .status.pendingEphemeralRunners
31-
name: Pending Runners
32-
type: integer
33-
- jsonPath: .status.runningEphemeralRunners
34-
name: Running Runners
35-
type: integer
36-
- jsonPath: .status.finishedEphemeralRunners
37-
name: Finished Runners
38-
type: integer
39-
- jsonPath: .status.deletingEphemeralRunners
40-
name: Deleting Runners
41-
type: integer
4227
name: v1alpha1
4328
schema:
4429
openAPIV3Schema:
@@ -16543,16 +16528,8 @@ spec:
1654316528
status:
1654416529
description: AutoscalingRunnerSetStatus defines the observed state of AutoscalingRunnerSet
1654516530
properties:
16546-
currentRunners:
16547-
type: integer
16548-
failedEphemeralRunners:
16549-
type: integer
16550-
pendingEphemeralRunners:
16551-
type: integer
1655216531
phase:
1655316532
type: string
16554-
runningEphemeralRunners:
16555-
type: integer
1655616533
type: object
1655716534
type: object
1655816535
served: true

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

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,6 @@ spec:
1818
- jsonPath: .spec.replicas
1919
name: DesiredReplicas
2020
type: integer
21-
- jsonPath: .status.currentReplicas
22-
name: CurrentReplicas
23-
type: integer
24-
- jsonPath: .status.pendingEphemeralRunners
25-
name: Pending Runners
26-
type: integer
27-
- jsonPath: .status.runningEphemeralRunners
28-
name: Running Runners
29-
type: integer
30-
- jsonPath: .status.finishedEphemeralRunners
31-
name: Finished Runners
32-
type: integer
33-
- jsonPath: .status.deletingEphemeralRunners
34-
name: Deleting Runners
35-
type: integer
3621
- jsonPath: .status.phase
3722
name: Phase
3823
type: string
@@ -8316,20 +8301,9 @@ spec:
83168301
status:
83178302
description: EphemeralRunnerSetStatus defines the observed state of EphemeralRunnerSet
83188303
properties:
8319-
currentReplicas:
8320-
description: CurrentReplicas is the number of currently running EphemeralRunner resources being managed by this EphemeralRunnerSet.
8321-
type: integer
8322-
failedEphemeralRunners:
8323-
type: integer
8324-
pendingEphemeralRunners:
8325-
type: integer
83268304
phase:
83278305
description: EphemeralRunnerSetPhase is the phase of the ephemeral runner set resource
83288306
type: string
8329-
runningEphemeralRunners:
8330-
type: integer
8331-
required:
8332-
- currentReplicas
83338307
type: object
83348308
type: object
83358309
served: true

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

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,9 @@ spec:
2121
- jsonPath: .spec.maxRunners
2222
name: Maximum Runners
2323
type: integer
24-
- jsonPath: .status.currentRunners
25-
name: Current Runners
26-
type: integer
2724
- jsonPath: .status.phase
2825
name: Phase
2926
type: string
30-
- jsonPath: .status.pendingEphemeralRunners
31-
name: Pending Runners
32-
type: integer
33-
- jsonPath: .status.runningEphemeralRunners
34-
name: Running Runners
35-
type: integer
36-
- jsonPath: .status.finishedEphemeralRunners
37-
name: Finished Runners
38-
type: integer
39-
- jsonPath: .status.deletingEphemeralRunners
40-
name: Deleting Runners
41-
type: integer
4227
name: v1alpha1
4328
schema:
4429
openAPIV3Schema:
@@ -16543,16 +16528,8 @@ spec:
1654316528
status:
1654416529
description: AutoscalingRunnerSetStatus defines the observed state of AutoscalingRunnerSet
1654516530
properties:
16546-
currentRunners:
16547-
type: integer
16548-
failedEphemeralRunners:
16549-
type: integer
16550-
pendingEphemeralRunners:
16551-
type: integer
1655216531
phase:
1655316532
type: string
16554-
runningEphemeralRunners:
16555-
type: integer
1655616533
type: object
1655716534
type: object
1655816535
served: true

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

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,6 @@ spec:
1818
- jsonPath: .spec.replicas
1919
name: DesiredReplicas
2020
type: integer
21-
- jsonPath: .status.currentReplicas
22-
name: CurrentReplicas
23-
type: integer
24-
- jsonPath: .status.pendingEphemeralRunners
25-
name: Pending Runners
26-
type: integer
27-
- jsonPath: .status.runningEphemeralRunners
28-
name: Running Runners
29-
type: integer
30-
- jsonPath: .status.finishedEphemeralRunners
31-
name: Finished Runners
32-
type: integer
33-
- jsonPath: .status.deletingEphemeralRunners
34-
name: Deleting Runners
35-
type: integer
3621
- jsonPath: .status.phase
3722
name: Phase
3823
type: string
@@ -8316,20 +8301,9 @@ spec:
83168301
status:
83178302
description: EphemeralRunnerSetStatus defines the observed state of EphemeralRunnerSet
83188303
properties:
8319-
currentReplicas:
8320-
description: CurrentReplicas is the number of currently running EphemeralRunner resources being managed by this EphemeralRunnerSet.
8321-
type: integer
8322-
failedEphemeralRunners:
8323-
type: integer
8324-
pendingEphemeralRunners:
8325-
type: integer
83268304
phase:
83278305
description: EphemeralRunnerSetPhase is the phase of the ephemeral runner set resource
83288306
type: string
8329-
runningEphemeralRunners:
8330-
type: integer
8331-
required:
8332-
- currentReplicas
83338307
type: object
83348308
type: object
83358309
served: true

controllers/actions.github.com/autoscalingrunnerset_controller.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,19 @@ func (r *AutoscalingRunnerSetReconciler) Reconcile(ctx context.Context, req ctrl
295295
// When runners are actively processing jobs, defer the spec update:
296296
// delete the listener to stop accepting new jobs, but leave the ERS
297297
// (and its running pods) untouched until all jobs have drained.
298-
if ephemeralRunnerSet.Status.RunningEphemeralRunners+ephemeralRunnerSet.Status.PendingEphemeralRunners > 0 {
298+
var ephemeralRunnerList v1alpha1.EphemeralRunnerList
299+
if err := r.List(ctx, &ephemeralRunnerList,
300+
client.InNamespace(ephemeralRunnerSet.Namespace),
301+
client.MatchingFields{resourceOwnerKey: ephemeralRunnerSet.Name},
302+
); err != nil {
303+
log.Error(err, "Failed to list ephemeral runners")
304+
return ctrl.Result{}, err
305+
}
306+
307+
buckets := AggregateEphemeralRunnerLifecycle(ephemeralRunnerList.Items)
308+
activeRunners := buckets.Pending + buckets.Running
309+
310+
if activeRunners > 0 {
299311
log.Info("Ephemeral runner set spec changed but runners are still active; deleting listener to stop new jobs")
300312
if _, err := r.cleanupListener(ctx, &autoscalingRunnerSet, log); err != nil {
301313
log.Error(err, "Failed to clean up listener while waiting for runners to drain")
@@ -433,23 +445,13 @@ func (r *AutoscalingRunnerSetReconciler) cleanUpResources(ctx context.Context, a
433445

434446
// Update the status of autoscaling runner set if necessary
435447
func (r *AutoscalingRunnerSetReconciler) updateStatus(ctx context.Context, autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet, ephemeralRunnerSet *v1alpha1.EphemeralRunnerSet, phase v1alpha1.AutoscalingRunnerSetPhase, log logr.Logger) error {
436-
countDiff := ephemeralRunnerSet != nil && ephemeralRunnerSet.Status.CurrentReplicas != autoscalingRunnerSet.Status.CurrentRunners
437448
phaseDiff := phase != autoscalingRunnerSet.Status.Phase
438-
if !countDiff && !phaseDiff {
449+
if !phaseDiff {
439450
return nil
440451
}
441452

442453
original := autoscalingRunnerSet.DeepCopy()
443-
if phaseDiff {
444-
autoscalingRunnerSet.Status.Phase = phase
445-
}
446-
447-
if countDiff && ephemeralRunnerSet != nil {
448-
autoscalingRunnerSet.Status.CurrentRunners = ephemeralRunnerSet.Status.CurrentReplicas
449-
autoscalingRunnerSet.Status.PendingEphemeralRunners = ephemeralRunnerSet.Status.PendingEphemeralRunners
450-
autoscalingRunnerSet.Status.RunningEphemeralRunners = ephemeralRunnerSet.Status.RunningEphemeralRunners
451-
autoscalingRunnerSet.Status.FailedEphemeralRunners = ephemeralRunnerSet.Status.FailedEphemeralRunners
452-
}
454+
autoscalingRunnerSet.Status.Phase = phase
453455

454456
if err := r.Status().Patch(ctx, autoscalingRunnerSet, client.MergeFrom(original)); err != nil {
455457
log.Error(err, "Failed to patch autoscaling runner set status")

0 commit comments

Comments
 (0)