--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.19.0 name: horizontalrunnerautoscalers.actions.summerwind.dev spec: group: actions.summerwind.dev names: kind: HorizontalRunnerAutoscaler listKind: HorizontalRunnerAutoscalerList plural: horizontalrunnerautoscalers shortNames: - hra singular: horizontalrunnerautoscaler scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .spec.minReplicas name: Min type: number - jsonPath: .spec.maxReplicas name: Max type: number - jsonPath: .status.desiredReplicas name: Desired type: number - jsonPath: .status.scheduledOverridesSummary name: Schedule type: string name: v1alpha1 schema: openAPIV3Schema: description: HorizontalRunnerAutoscaler is the Schema for the horizontalrunnerautoscaler API properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: HorizontalRunnerAutoscalerSpec defines the desired state of HorizontalRunnerAutoscaler properties: capacityReservations: items: description: |- CapacityReservation specifies the number of replicas temporarily added to the scale target until ExpirationTime. properties: effectiveTime: format: date-time type: string expirationTime: format: date-time type: string name: type: string replicas: type: integer type: object type: array githubAPICredentialsFrom: properties: secretRef: properties: name: type: string required: - name type: object type: object maxReplicas: description: MaxReplicas is the maximum number of replicas the deployment is allowed to scale type: integer metrics: description: Metrics is the collection of various metric targets to calculate desired number of runners items: properties: repositoryNames: description: |- RepositoryNames is the list of repository names to be used for calculating the metric. For example, a repository name is the REPO part of `github.com/USER/REPO`. items: type: string type: array scaleDownAdjustment: description: |- ScaleDownAdjustment is the number of runners removed on scale-down. You can only specify either ScaleDownFactor or ScaleDownAdjustment. type: integer scaleDownFactor: description: |- ScaleDownFactor is the multiplicative factor applied to the current number of runners used to determine how many pods should be removed. type: string scaleDownThreshold: description: |- ScaleDownThreshold is the percentage of busy runners less than which will trigger the hpa to scale the runners down. type: string scaleUpAdjustment: description: |- ScaleUpAdjustment is the number of runners added on scale-up. You can only specify either ScaleUpFactor or ScaleUpAdjustment. type: integer scaleUpFactor: description: |- ScaleUpFactor is the multiplicative factor applied to the current number of runners used to determine how many pods should be added. type: string scaleUpThreshold: description: |- ScaleUpThreshold is the percentage of busy runners greater than which will trigger the hpa to scale runners up. type: string type: description: |- Type is the type of metric to be used for autoscaling. It can be TotalNumberOfQueuedAndInProgressWorkflowRuns or PercentageRunnersBusy. type: string type: object type: array minReplicas: description: MinReplicas is the minimum number of replicas the deployment is allowed to scale type: integer scaleDownDelaySecondsAfterScaleOut: description: |- ScaleDownDelaySecondsAfterScaleUp is the approximate delay for a scale down followed by a scale up Used to prevent flapping (down->up->down->... loop) type: integer scaleTargetRef: description: ScaleTargetRef is the reference to scaled resource like RunnerDeployment properties: kind: description: Kind is the type of resource being referenced enum: - RunnerDeployment - RunnerSet type: string name: description: Name is the name of resource being referenced type: string type: object scaleUpTriggers: description: |- ScaleUpTriggers is an experimental feature to increase the desired replicas by 1 on each webhook requested received by the webhookBasedAutoscaler. This feature requires you to also enable and deploy the webhookBasedAutoscaler onto your cluster. Note that the added runners remain until the next sync period at least, and they may or may not be used by GitHub Actions depending on the timing. They are intended to be used to gain "resource slack" immediately after you receive a webhook from GitHub, so that you can loosely expect MinReplicas runners to be always available. items: properties: amount: type: integer duration: type: string githubEvent: properties: checkRun: description: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#check_run properties: names: description: |- Names is a list of GitHub Actions glob patterns. Any check_run event whose name matches one of patterns in the list can trigger autoscaling. Note that check_run name seem to equal to the job name you've defined in your actions workflow yaml file. So it is very likely that you can utilize this to trigger depending on the job. items: type: string type: array repositories: description: |- Repositories is a list of GitHub repositories. Any check_run event whose repository matches one of repositories in the list can trigger autoscaling. items: type: string type: array status: type: string types: description: 'One of: created, rerequested, or completed' items: type: string type: array type: object pullRequest: description: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request properties: branches: items: type: string type: array types: items: type: string type: array type: object push: description: |- PushSpec is the condition for triggering scale-up on push event Also see https://docs.github.com/en/actions/reference/events-that-trigger-workflows#push type: object workflowJob: description: https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads#workflow_job type: object type: object type: object type: array scheduledOverrides: description: |- ScheduledOverrides is the list of ScheduledOverride. It can be used to override a few fields of HorizontalRunnerAutoscalerSpec on schedule. The earlier a scheduled override is, the higher it is prioritized. items: description: |- ScheduledOverride can be used to override a few fields of HorizontalRunnerAutoscalerSpec on schedule. A schedule can optionally be recurring, so that the corresponding override happens every day, week, month, or year. properties: endTime: description: EndTime is the time at which the first override ends. format: date-time type: string minReplicas: description: |- MinReplicas is the number of runners while overriding. If omitted, it doesn't override minReplicas. minimum: 0 nullable: true type: integer recurrenceRule: properties: frequency: description: |- Frequency is the name of a predefined interval of each recurrence. The valid values are "Daily", "Weekly", "Monthly", and "Yearly". If empty, the corresponding override happens only once. enum: - Daily - Weekly - Monthly - Yearly type: string untilTime: description: |- UntilTime is the time of the final recurrence. If empty, the schedule recurs forever. format: date-time type: string type: object startTime: description: StartTime is the time at which the first override starts. format: date-time type: string required: - endTime - startTime type: object type: array type: object status: properties: cacheEntries: items: properties: expirationTime: format: date-time type: string key: type: string value: type: integer type: object type: array desiredReplicas: description: |- DesiredReplicas is the total number of desired, non-terminated and latest pods to be set for the primary RunnerSet This doesn't include outdated pods while upgrading the deployment and replacing the runnerset. type: integer lastSuccessfulScaleOutTime: format: date-time nullable: true type: string observedGeneration: description: |- ObservedGeneration is the most recent generation observed for the target. It corresponds to e.g. RunnerDeployment's generation, which is updated on mutation by the API Server. format: int64 type: integer scheduledOverridesSummary: description: |- ScheduledOverridesSummary is the summary of active and upcoming scheduled overrides to be shown in e.g. a column of a `kubectl get hra` output for observability. type: string type: object type: object served: true storage: true subresources: status: {}