---
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: {}
