mirror of
https://github.com/actions/actions-runner-controller.git
synced 2026-04-01 04:24:48 +08:00
Shutdown the scaleset when runner is deprecated (#4404)
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -315,7 +315,7 @@ type AutoscalingRunnerSetStatus struct {
|
||||
CurrentRunners int `json:"currentRunners"`
|
||||
|
||||
// +optional
|
||||
State string `json:"state"`
|
||||
Phase AutoscalingRunnerSetPhase `json:"phase"`
|
||||
|
||||
// EphemeralRunner counts separated by the stage ephemeral runners are in, taken from the EphemeralRunnerSet
|
||||
|
||||
@@ -327,6 +327,30 @@ type AutoscalingRunnerSetStatus struct {
|
||||
FailedEphemeralRunners int `json:"failedEphemeralRunners"`
|
||||
}
|
||||
|
||||
type AutoscalingRunnerSetPhase string
|
||||
|
||||
const (
|
||||
// AutoscalingRunnerSetPhasePending phase means that the listener is not
|
||||
// yet started
|
||||
AutoscalingRunnerSetPhasePending AutoscalingRunnerSetPhase = "Pending"
|
||||
AutoscalingRunnerSetPhaseRunning AutoscalingRunnerSetPhase = "Running"
|
||||
AutoscalingRunnerSetPhaseOutdated AutoscalingRunnerSetPhase = "Outdated"
|
||||
)
|
||||
|
||||
func (ars *AutoscalingRunnerSet) Hash() string {
|
||||
type data struct {
|
||||
Spec *AutoscalingRunnerSetSpec
|
||||
Labels map[string]string
|
||||
}
|
||||
|
||||
d := &data{
|
||||
Spec: ars.Spec.DeepCopy(),
|
||||
Labels: ars.Labels,
|
||||
}
|
||||
|
||||
return hash.ComputeTemplateHash(d)
|
||||
}
|
||||
|
||||
func (ars *AutoscalingRunnerSet) ListenerSpecHash() string {
|
||||
arsSpec := ars.Spec.DeepCopy()
|
||||
spec := arsSpec
|
||||
|
||||
@@ -48,7 +48,7 @@ type EphemeralRunner struct {
|
||||
}
|
||||
|
||||
func (er *EphemeralRunner) IsDone() bool {
|
||||
return er.Status.Phase == corev1.PodSucceeded || er.Status.Phase == corev1.PodFailed
|
||||
return er.Status.Phase == EphemeralRunnerPhaseSucceeded || er.Status.Phase == EphemeralRunnerPhaseFailed || er.Status.Phase == EphemeralRunnerPhaseOutdated
|
||||
}
|
||||
|
||||
func (er *EphemeralRunner) HasJob() bool {
|
||||
@@ -143,14 +143,14 @@ type EphemeralRunnerStatus struct {
|
||||
// The PodSucceded phase should be set only when confirmed that EphemeralRunner
|
||||
// actually executed the job and has been removed from the service.
|
||||
// +optional
|
||||
Phase corev1.PodPhase `json:"phase,omitempty"`
|
||||
Phase EphemeralRunnerPhase `json:"phase,omitempty"`
|
||||
// +optional
|
||||
Reason string `json:"reason,omitempty"`
|
||||
// +optional
|
||||
Message string `json:"message,omitempty"`
|
||||
|
||||
// +optional
|
||||
RunnerId int `json:"runnerId,omitempty"`
|
||||
RunnerID int `json:"runnerId,omitempty"`
|
||||
// +optional
|
||||
RunnerName string `json:"runnerName,omitempty"`
|
||||
|
||||
@@ -158,7 +158,7 @@ type EphemeralRunnerStatus struct {
|
||||
Failures map[string]metav1.Time `json:"failures,omitempty"`
|
||||
|
||||
// +optional
|
||||
JobRequestId int64 `json:"jobRequestId,omitempty"`
|
||||
JobRequestID int64 `json:"jobRequestId,omitempty"`
|
||||
|
||||
// +optional
|
||||
JobID string `json:"jobId,omitempty"`
|
||||
@@ -170,12 +170,33 @@ type EphemeralRunnerStatus struct {
|
||||
JobWorkflowRef string `json:"jobWorkflowRef,omitempty"`
|
||||
|
||||
// +optional
|
||||
WorkflowRunId int64 `json:"workflowRunId,omitempty"`
|
||||
WorkflowRunID int64 `json:"workflowRunId,omitempty"`
|
||||
|
||||
// +optional
|
||||
JobDisplayName string `json:"jobDisplayName,omitempty"`
|
||||
}
|
||||
|
||||
// EphemeralRunnerPhase is the phase of the ephemeral runner.
|
||||
// It must be a superset of the pod phase.
|
||||
type EphemeralRunnerPhase string
|
||||
|
||||
const (
|
||||
// EphemeralRunnerPhasePending is a phase set when the ephemeral runner is
|
||||
// being provisioned and is not yet online.
|
||||
EphemeralRunnerPhasePending EphemeralRunnerPhase = "Pending"
|
||||
// EphemeralRunnerPhaseRunning is a phase set when the ephemeral runner is online and
|
||||
// waiting for a job to execute.
|
||||
EphemeralRunnerPhaseRunning EphemeralRunnerPhase = "Running"
|
||||
// EphemeralRunnerPhaseSucceeded is a phase set when the ephemeral runner
|
||||
// successfully executed the job and has been removed from the service.
|
||||
EphemeralRunnerPhaseSucceeded EphemeralRunnerPhase = "Succeeded"
|
||||
// EphemeralRunnerPhaseFailed is a phase set when the ephemeral runner
|
||||
// fails with unrecoverable failure.
|
||||
EphemeralRunnerPhaseFailed EphemeralRunnerPhase = "Failed"
|
||||
// EphemeralRunnerPhaseOutdated is a special phase that indicates the runner is outdated and should be upgraded.
|
||||
EphemeralRunnerPhaseOutdated EphemeralRunnerPhase = "Outdated"
|
||||
)
|
||||
|
||||
func (s *EphemeralRunnerStatus) LastFailure() metav1.Time {
|
||||
var maxTime metav1.Time
|
||||
if len(s.Failures) == 0 {
|
||||
|
||||
@@ -42,8 +42,20 @@ type EphemeralRunnerSetStatus struct {
|
||||
RunningEphemeralRunners int `json:"runningEphemeralRunners"`
|
||||
// +optional
|
||||
FailedEphemeralRunners int `json:"failedEphemeralRunners"`
|
||||
// +optional
|
||||
Phase EphemeralRunnerSetPhase `json:"phase"`
|
||||
}
|
||||
|
||||
// EphemeralRunnerSetPhase is the phase of the ephemeral runner set resource
|
||||
type EphemeralRunnerSetPhase string
|
||||
|
||||
const (
|
||||
EphemeralRunnerSetPhaseRunning EphemeralRunnerSetPhase = "Running"
|
||||
// EphemeralRunnerSetPhaseOutdated is set when at least one ephemeral runner
|
||||
// contains the outdated phase
|
||||
EphemeralRunnerSetPhaseOutdated EphemeralRunnerSetPhase = "Outdated"
|
||||
)
|
||||
|
||||
// +kubebuilder:object:root=true
|
||||
// +kubebuilder:subresource:status
|
||||
// +kubebuilder:printcolumn:JSONPath=".spec.replicas",name="DesiredReplicas",type="integer"
|
||||
|
||||
Reference in New Issue
Block a user