diff --git a/.github/workflows/gha-validate-chart.yaml b/.github/workflows/gha-validate-chart.yaml index cfcad8fc..ffb1e583 100644 --- a/.github/workflows/gha-validate-chart.yaml +++ b/.github/workflows/gha-validate-chart.yaml @@ -65,82 +65,63 @@ jobs: echo "$changed" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT - - name: Install helm-unittest - if: | - contains(steps.list-changed.outputs.changed_charts, 'charts/gha-runner-scale-set-controller-experimental') || - contains(steps.list-changed.outputs.changed_charts, 'charts/gha-runner-scale-set-experimental') - run: | - helm plugin install https://github.com/helm-unittest/helm-unittest.git - - - name: Run helm-unittest (gha-runner-scale-set-controller-experimental) - if: contains(steps.list-changed.outputs.changed_charts, 'charts/gha-runner-scale-set-controller-experimental') - run: | - helm unittest ./charts/gha-runner-scale-set-controller-experimental/ - - - name: Run helm-unittest (gha-runner-scale-set-experimental) - if: contains(steps.list-changed.outputs.changed_charts, 'charts/gha-runner-scale-set-experimental') - run: | - helm unittest ./charts/gha-runner-scale-set-experimental/ - - name: Run chart-testing (lint) run: | ct lint --config charts/.ci/ct-config-gha.yaml - - name: Set up docker buildx - uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd - if: steps.list-changed.outputs.changed == 'true' - with: - version: latest - - - name: Build controller image - uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f - if: steps.list-changed.outputs.changed == 'true' - with: - file: Dockerfile - platforms: linux/amd64 - load: true - build-args: | - DOCKER_IMAGE_NAME=test-arc - VERSION=dev - tags: | - test-arc:dev - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: Create kind cluster - uses: helm/kind-action@ef37e7f390d99f746eb8b610417061a60e82a6cc - if: steps.list-changed.outputs.changed == 'true' - with: - cluster_name: chart-testing - - - name: Load image into cluster - if: steps.list-changed.outputs.changed == 'true' - run: | - export DOCKER_IMAGE_NAME=test-arc - export VERSION=dev - export IMG_RESULT=load - make docker-buildx - kind load docker-image test-arc:dev --name chart-testing - - - name: Run chart-testing (install) - if: steps.list-changed.outputs.changed == 'true' - run: | - ct install --config charts/.ci/ct-config-gha.yaml test-chart: name: Test Chart runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Set up Helm + uses: azure/setup-helm@1a275c3b69536ee54be43f2070a358922e12c8d4 + with: + version: ${{ env.HELM_VERSION }} + + # python is a requirement for the chart-testing action below (supports yamllint among other tests) + - uses: actions/setup-python@v6 + with: + python-version: "3.11" + + - name: Set up chart-testing + uses: helm/chart-testing-action@6ec842c01de15ebb84c8627d2744a0c2f2755c9f + + - name: Run chart-testing (list-changed) + id: list-changed + run: | + ct version + changed=$(ct list-changed --config charts/.ci/ct-config-gha.yaml) + if [[ -n "$changed" ]]; then + echo "changed=true" >> $GITHUB_OUTPUT + fi + echo "changed_charts<> $GITHUB_OUTPUT + echo "$changed" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + - name: Install helm-unittest + run: | + helm plugin install https://github.com/helm-unittest/helm-unittest.git + + - name: Run helm-unittest (gha-runner-scale-set-controller-experimental) + run: | + helm unittest ./charts/gha-runner-scale-set-controller-experimental/ + + - name: Run helm-unittest (gha-runner-scale-set-experimental) + run: | + helm unittest ./charts/gha-runner-scale-set-experimental/ + - uses: actions/setup-go@v6 with: go-version-file: "go.mod" cache: false + - name: Test gha-runner-scale-set run: go test ./charts/gha-runner-scale-set/... + - name: Test gha-runner-scale-set-controller run: go test ./charts/gha-runner-scale-set-controller/... - - name: Test gha-runner-scale-set-experimental - run: go test ./charts/gha-runner-scale-set-experimental/... - - name: Test gha-runner-scale-set-controller-experimental - run: go test ./charts/gha-runner-scale-set-controller-experimental/... diff --git a/Dockerfile b/Dockerfile index d24485cb..c7c255a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Build the manager binary -FROM --platform=$BUILDPLATFORM golang:1.26.1 AS builder +FROM --platform=$BUILDPLATFORM golang:1.26.3 AS builder WORKDIR /workspace diff --git a/apis/actions.github.com/v1alpha1/autoscalingrunnerset_types.go b/apis/actions.github.com/v1alpha1/autoscalingrunnerset_types.go index 908e1acc..24ccc8e3 100644 --- a/apis/actions.github.com/v1alpha1/autoscalingrunnerset_types.go +++ b/apis/actions.github.com/v1alpha1/autoscalingrunnerset_types.go @@ -37,7 +37,7 @@ import ( // +kubebuilder:printcolumn:JSONPath=".spec.minRunners",name=Minimum Runners,type=integer // +kubebuilder:printcolumn:JSONPath=".spec.maxRunners",name=Maximum Runners,type=integer // +kubebuilder:printcolumn:JSONPath=".status.currentRunners",name=Current Runners,type=integer -// +kubebuilder:printcolumn:JSONPath=".status.phase",name=Phase,type=string +// +kubebuilder:printcolumn:JSONPath=".status.state",name=State,type=string // +kubebuilder:printcolumn:JSONPath=".status.pendingEphemeralRunners",name=Pending Runners,type=integer // +kubebuilder:printcolumn:JSONPath=".status.runningEphemeralRunners",name=Running Runners,type=integer // +kubebuilder:printcolumn:JSONPath=".status.finishedEphemeralRunners",name=Finished Runners,type=integer diff --git a/apis/actions.github.com/v1alpha1/ephemeralrunner_types.go b/apis/actions.github.com/v1alpha1/ephemeralrunner_types.go index 155108d8..f9b4df52 100644 --- a/apis/actions.github.com/v1alpha1/ephemeralrunner_types.go +++ b/apis/actions.github.com/v1alpha1/ephemeralrunner_types.go @@ -29,7 +29,7 @@ const EphemeralRunnerContainerName = "runner" // +kubebuilder:subresource:status // +kubebuilder:printcolumn:JSONPath=".spec.githubConfigUrl",name="GitHub Config URL",type=string // +kubebuilder:printcolumn:JSONPath=".status.runnerId",name=RunnerId,type=number -// +kubebuilder:printcolumn:JSONPath=".status.phase",name=Phase,type=string +// +kubebuilder:printcolumn:JSONPath=".status.phase",name=Status,type=string // +kubebuilder:printcolumn:JSONPath=".status.jobRepositoryName",name=JobRepository,type=string // +kubebuilder:printcolumn:JSONPath=".status.jobWorkflowRef",name=JobWorkflowRef,type=string // +kubebuilder:printcolumn:JSONPath=".status.workflowRunId",name=WorkflowRunId,type=number diff --git a/apis/actions.github.com/v1alpha1/ephemeralrunnerset_types.go b/apis/actions.github.com/v1alpha1/ephemeralrunnerset_types.go index 299b7850..229bb252 100644 --- a/apis/actions.github.com/v1alpha1/ephemeralrunnerset_types.go +++ b/apis/actions.github.com/v1alpha1/ephemeralrunnerset_types.go @@ -64,7 +64,6 @@ const ( // +kubebuilder:printcolumn:JSONPath=".status.runningEphemeralRunners",name=Running Runners,type=integer // +kubebuilder:printcolumn:JSONPath=".status.finishedEphemeralRunners",name=Finished Runners,type=integer // +kubebuilder:printcolumn:JSONPath=".status.deletingEphemeralRunners",name=Deleting Runners,type=integer -// +kubebuilder:printcolumn:JSONPath=".status.phase",name=Phase,type=string // EphemeralRunnerSet is the Schema for the ephemeralrunnersets API type EphemeralRunnerSet struct { diff --git a/charts/.ci/ct-config-gha.yaml b/charts/.ci/ct-config-gha.yaml index b0a15a37..095e6573 100644 --- a/charts/.ci/ct-config-gha.yaml +++ b/charts/.ci/ct-config-gha.yaml @@ -8,4 +8,6 @@ check-version-increment: false # Disable checking that the chart version has bee charts: - charts/gha-runner-scale-set-controller - charts/gha-runner-scale-set + - charts/gha-runner-scale-set-controller-experimental + - charts/gha-runner-scale-set-experimental skip-clean-up: true diff --git a/charts/gha-runner-scale-set-controller-experimental/Chart.yaml b/charts/gha-runner-scale-set-controller-experimental/Chart.yaml index 8af1d81b..317a4fd4 100644 --- a/charts/gha-runner-scale-set-controller-experimental/Chart.yaml +++ b/charts/gha-runner-scale-set-controller-experimental/Chart.yaml @@ -15,13 +15,13 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: "0.14.1" +version: "0.14.2" # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.14.1" +appVersion: "0.14.2" home: https://github.com/actions/actions-runner-controller diff --git a/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_autoscalingrunnersets.yaml b/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_autoscalingrunnersets.yaml index d788cc1c..82001c24 100644 --- a/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_autoscalingrunnersets.yaml +++ b/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_autoscalingrunnersets.yaml @@ -24,8 +24,8 @@ spec: - jsonPath: .status.currentRunners name: Current Runners type: integer - - jsonPath: .status.phase - name: Phase + - jsonPath: .status.state + name: State type: string - jsonPath: .status.pendingEphemeralRunners name: Pending Runners diff --git a/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_ephemeralrunners.yaml b/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_ephemeralrunners.yaml index 3cd90148..6cc6707a 100644 --- a/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_ephemeralrunners.yaml +++ b/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_ephemeralrunners.yaml @@ -22,7 +22,7 @@ spec: name: RunnerId type: number - jsonPath: .status.phase - name: Phase + name: Status type: string - jsonPath: .status.jobRepositoryName name: JobRepository diff --git a/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_ephemeralrunnersets.yaml b/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_ephemeralrunnersets.yaml index 2d61b82d..cf52d980 100644 --- a/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_ephemeralrunnersets.yaml +++ b/charts/gha-runner-scale-set-controller-experimental/crds/actions.github.com_ephemeralrunnersets.yaml @@ -33,9 +33,6 @@ spec: - jsonPath: .status.deletingEphemeralRunners name: Deleting Runners type: integer - - jsonPath: .status.phase - name: Phase - type: string name: v1alpha1 schema: openAPIV3Schema: diff --git a/charts/gha-runner-scale-set-controller-experimental/templates/_controller_template.tpl b/charts/gha-runner-scale-set-controller-experimental/templates/_controller_template.tpl index 44a17b3c..18cd6ccf 100644 --- a/charts/gha-runner-scale-set-controller-experimental/templates/_controller_template.tpl +++ b/charts/gha-runner-scale-set-controller-experimental/templates/_controller_template.tpl @@ -73,6 +73,11 @@ args: {{- with .Values.controller.manager.config.k8sClientRateLimiterBurst }} - "--k8s-client-rate-limiter-burst={{ . }}" {{- end }} +{{- with .Values.controller.manager.config.rateLimiter }} +{{- with .name }} + - "--workqueue-rate-limiter={{ . }}" +{{- end }} +{{- end }} {{- with .Values.controller.manager.config.healthProbeBindAddress }} - "--health-probe-bind-address={{ . }}" {{- end }} diff --git a/charts/gha-runner-scale-set-controller-experimental/tests/controller_deployment_rate_limiter_test.yaml b/charts/gha-runner-scale-set-controller-experimental/tests/controller_deployment_rate_limiter_test.yaml new file mode 100644 index 00000000..30039ed3 --- /dev/null +++ b/charts/gha-runner-scale-set-controller-experimental/tests/controller_deployment_rate_limiter_test.yaml @@ -0,0 +1,66 @@ +suite: "Controller Deployment rate limiter" +templates: + - deployment.yaml +tests: + - it: should omit workqueue-rate-limiter flag by default + release: + name: "test-arc" + namespace: "test-ns" + asserts: + - notContains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=bucket_rate_limiter" + - notContains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=typed_rate_limiter" + + - it: should include workqueue-rate-limiter flag when bucket_rate_limiter is configured + set: + controller: + manager: + config: + rateLimiter: + name: "bucket_rate_limiter" + release: + name: "test-arc" + namespace: "test-ns" + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=bucket_rate_limiter" + + - it: should include workqueue-rate-limiter flag when typed_rate_limiter is configured + set: + controller: + manager: + config: + rateLimiter: + name: "typed_rate_limiter" + release: + name: "test-arc" + namespace: "test-ns" + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=typed_rate_limiter" + + - it: should render both config and extraArgs in deterministic order + set: + controller: + manager: + config: + rateLimiter: + name: "bucket_rate_limiter" + container: + extraArgs: + - "--workqueue-rate-limiter=typed_rate_limiter" + release: + name: "test-arc" + namespace: "test-ns" + asserts: + - contains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=bucket_rate_limiter" + - contains: + path: spec.template.spec.containers[0].args + content: "--workqueue-rate-limiter=typed_rate_limiter" diff --git a/charts/gha-runner-scale-set-controller-experimental/tests/template_test.go b/charts/gha-runner-scale-set-controller-experimental/tests/template_test.go deleted file mode 100644 index 80870ec3..00000000 --- a/charts/gha-runner-scale-set-controller-experimental/tests/template_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package tests - -import ( - "os" - "path/filepath" - "strings" - "testing" - - "github.com/gruntwork-io/terratest/modules/helm" - "github.com/gruntwork-io/terratest/modules/k8s" - "github.com/gruntwork-io/terratest/modules/logger" - "github.com/gruntwork-io/terratest/modules/random" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "gopkg.in/yaml.v2" - appsv1 "k8s.io/api/apps/v1" -) - -type Chart struct { - Version string `yaml:"version"` - AppVersion string `yaml:"appVersion"` -} - -func TestTemplate_RenderedDeployment_UsesChartMetadataLabels(t *testing.T) { - t.Parallel() - - helmChartPath, err := filepath.Abs("../../gha-runner-scale-set-controller-experimental") - require.NoError(t, err) - - chartContent, err := os.ReadFile(filepath.Join(helmChartPath, "Chart.yaml")) - require.NoError(t, err) - - chart := new(Chart) - err = yaml.Unmarshal(chartContent, chart) - require.NoError(t, err) - - releaseName := "test-arc" - namespaceName := "test-" + strings.ToLower(random.UniqueId()) - - options := &helm.Options{ - Logger: logger.Discard, - KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName), - } - - output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/deployment.yaml"}) - - var deployment appsv1.Deployment - helm.UnmarshalK8SYaml(t, output, &deployment) - - assert.Equal(t, "gha-rs-controller-"+chart.Version, deployment.Labels["helm.sh/chart"]) - assert.Equal(t, chart.AppVersion, deployment.Labels["app.kubernetes.io/version"]) -} diff --git a/charts/gha-runner-scale-set-controller-experimental/values.yaml b/charts/gha-runner-scale-set-controller-experimental/values.yaml index 75bcc314..a06d86c6 100644 --- a/charts/gha-runner-scale-set-controller-experimental/values.yaml +++ b/charts/gha-runner-scale-set-controller-experimental/values.yaml @@ -44,6 +44,13 @@ controller: k8sClientRateLimiterQPS: null k8sClientRateLimiterBurst: null + ## Workqueue rate limiter configuration. + ## By default, controller-runtime uses a combined rate limiter with both a per-item + ## exponential backoff and an overall token bucket (10 QPS, 100 bucket size). + ## Valid names: "bucket_rate_limiter" (default), "typed_rate_limiter" (per-item only, no global token bucket). + # rateLimiter: + # name: "bucket_rate_limiter" + # The address the health probe endpoint binds to. Disabled if empty/null. # When set, liveness and readiness probes are added to the controller pod. # healthProbeBindAddress: ":8081" diff --git a/charts/gha-runner-scale-set-controller/Chart.yaml b/charts/gha-runner-scale-set-controller/Chart.yaml index 159ba11f..b68accce 100644 --- a/charts/gha-runner-scale-set-controller/Chart.yaml +++ b/charts/gha-runner-scale-set-controller/Chart.yaml @@ -15,13 +15,13 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.14.1 +version: 0.14.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.14.1" +appVersion: "0.14.2" home: https://github.com/actions/actions-runner-controller diff --git a/charts/gha-runner-scale-set-controller/crds/actions.github.com_autoscalingrunnersets.yaml b/charts/gha-runner-scale-set-controller/crds/actions.github.com_autoscalingrunnersets.yaml index d788cc1c..82001c24 100644 --- a/charts/gha-runner-scale-set-controller/crds/actions.github.com_autoscalingrunnersets.yaml +++ b/charts/gha-runner-scale-set-controller/crds/actions.github.com_autoscalingrunnersets.yaml @@ -24,8 +24,8 @@ spec: - jsonPath: .status.currentRunners name: Current Runners type: integer - - jsonPath: .status.phase - name: Phase + - jsonPath: .status.state + name: State type: string - jsonPath: .status.pendingEphemeralRunners name: Pending Runners diff --git a/charts/gha-runner-scale-set-controller/crds/actions.github.com_ephemeralrunners.yaml b/charts/gha-runner-scale-set-controller/crds/actions.github.com_ephemeralrunners.yaml index 3cd90148..6cc6707a 100644 --- a/charts/gha-runner-scale-set-controller/crds/actions.github.com_ephemeralrunners.yaml +++ b/charts/gha-runner-scale-set-controller/crds/actions.github.com_ephemeralrunners.yaml @@ -22,7 +22,7 @@ spec: name: RunnerId type: number - jsonPath: .status.phase - name: Phase + name: Status type: string - jsonPath: .status.jobRepositoryName name: JobRepository diff --git a/charts/gha-runner-scale-set-controller/crds/actions.github.com_ephemeralrunnersets.yaml b/charts/gha-runner-scale-set-controller/crds/actions.github.com_ephemeralrunnersets.yaml index 2d61b82d..cf52d980 100644 --- a/charts/gha-runner-scale-set-controller/crds/actions.github.com_ephemeralrunnersets.yaml +++ b/charts/gha-runner-scale-set-controller/crds/actions.github.com_ephemeralrunnersets.yaml @@ -33,9 +33,6 @@ spec: - jsonPath: .status.deletingEphemeralRunners name: Deleting Runners type: integer - - jsonPath: .status.phase - name: Phase - type: string name: v1alpha1 schema: openAPIV3Schema: diff --git a/charts/gha-runner-scale-set-experimental/Chart.yaml b/charts/gha-runner-scale-set-experimental/Chart.yaml index 46c6007b..252d33ee 100644 --- a/charts/gha-runner-scale-set-experimental/Chart.yaml +++ b/charts/gha-runner-scale-set-experimental/Chart.yaml @@ -15,13 +15,13 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: "0.14.1" +version: "0.14.2" # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.14.1" +appVersion: "0.14.2" home: https://github.com/actions/actions-runner-controller diff --git a/charts/gha-runner-scale-set-experimental/tests/template_test.go b/charts/gha-runner-scale-set-experimental/tests/template_test.go deleted file mode 100644 index 2a1aa615..00000000 --- a/charts/gha-runner-scale-set-experimental/tests/template_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package tests - -import ( - "os" - "path/filepath" - "strings" - "testing" - - v1alpha1 "github.com/actions/actions-runner-controller/apis/actions.github.com/v1alpha1" - "github.com/gruntwork-io/terratest/modules/helm" - "github.com/gruntwork-io/terratest/modules/k8s" - "github.com/gruntwork-io/terratest/modules/logger" - "github.com/gruntwork-io/terratest/modules/random" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "gopkg.in/yaml.v2" -) - -type Chart struct { - Version string `yaml:"version"` - AppVersion string `yaml:"appVersion"` -} - -func TestTemplate_RenderedAutoscalingRunnerSet_UsesChartMetadataLabels(t *testing.T) { - t.Parallel() - - helmChartPath, err := filepath.Abs("../../gha-runner-scale-set-experimental") - require.NoError(t, err) - - chartContent, err := os.ReadFile(filepath.Join(helmChartPath, "Chart.yaml")) - require.NoError(t, err) - - chart := new(Chart) - err = yaml.Unmarshal(chartContent, chart) - require.NoError(t, err) - - releaseName := "test-runners" - namespaceName := "test-" + strings.ToLower(random.UniqueId()) - - options := &helm.Options{ - Logger: logger.Discard, - SetValues: map[string]string{ - "scaleset.name": "test", - "auth.url": "https://github.com/actions", - "auth.githubToken": "gh_token12345", - "controllerServiceAccount.name": "arc", - "controllerServiceAccount.namespace": "arc-system", - }, - KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName), - } - - output := helm.RenderTemplate(t, options, helmChartPath, releaseName, []string{"templates/autoscalingrunnserset.yaml"}) - - var autoscalingRunnerSet v1alpha1.AutoscalingRunnerSet - helm.UnmarshalK8SYaml(t, output, &autoscalingRunnerSet) - - assert.Equal(t, "gha-rs-"+chart.Version, autoscalingRunnerSet.Labels["helm.sh/chart"]) - assert.Equal(t, chart.AppVersion, autoscalingRunnerSet.Labels["app.kubernetes.io/version"]) - assert.Equal(t, "gha-rs-"+chart.Version, autoscalingRunnerSet.Spec.Template.Labels["helm.sh/chart"]) - assert.Equal(t, chart.AppVersion, autoscalingRunnerSet.Spec.Template.Labels["app.kubernetes.io/version"]) -} diff --git a/charts/gha-runner-scale-set/Chart.yaml b/charts/gha-runner-scale-set/Chart.yaml index a783121b..18cc3c3e 100644 --- a/charts/gha-runner-scale-set/Chart.yaml +++ b/charts/gha-runner-scale-set/Chart.yaml @@ -15,13 +15,13 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.14.1 +version: 0.14.2 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.14.1" +appVersion: "0.14.2" home: https://github.com/actions/actions-runner-controller diff --git a/config/crd/bases/actions.github.com_autoscalingrunnersets.yaml b/config/crd/bases/actions.github.com_autoscalingrunnersets.yaml index d788cc1c..82001c24 100644 --- a/config/crd/bases/actions.github.com_autoscalingrunnersets.yaml +++ b/config/crd/bases/actions.github.com_autoscalingrunnersets.yaml @@ -24,8 +24,8 @@ spec: - jsonPath: .status.currentRunners name: Current Runners type: integer - - jsonPath: .status.phase - name: Phase + - jsonPath: .status.state + name: State type: string - jsonPath: .status.pendingEphemeralRunners name: Pending Runners diff --git a/config/crd/bases/actions.github.com_ephemeralrunners.yaml b/config/crd/bases/actions.github.com_ephemeralrunners.yaml index 3cd90148..6cc6707a 100644 --- a/config/crd/bases/actions.github.com_ephemeralrunners.yaml +++ b/config/crd/bases/actions.github.com_ephemeralrunners.yaml @@ -22,7 +22,7 @@ spec: name: RunnerId type: number - jsonPath: .status.phase - name: Phase + name: Status type: string - jsonPath: .status.jobRepositoryName name: JobRepository diff --git a/config/crd/bases/actions.github.com_ephemeralrunnersets.yaml b/config/crd/bases/actions.github.com_ephemeralrunnersets.yaml index 2d61b82d..cf52d980 100644 --- a/config/crd/bases/actions.github.com_ephemeralrunnersets.yaml +++ b/config/crd/bases/actions.github.com_ephemeralrunnersets.yaml @@ -33,9 +33,6 @@ spec: - jsonPath: .status.deletingEphemeralRunners name: Deleting Runners type: integer - - jsonPath: .status.phase - name: Phase - type: string name: v1alpha1 schema: openAPIV3Schema: diff --git a/docs/gha-runner-scale-set-controller/README.md b/docs/gha-runner-scale-set-controller/README.md index 92736a63..a0f009d9 100644 --- a/docs/gha-runner-scale-set-controller/README.md +++ b/docs/gha-runner-scale-set-controller/README.md @@ -43,6 +43,25 @@ You can follow [this troubleshooting guide](https://docs.github.com/en/actions/h ## Changelog +### 0.14.2 + +1. Fix orphan no-permission ServiceAccount in kubernetes-novolume mode [#4455](https://github.com/actions/actions-runner-controller/pull/4455) +1. Updates: runner to v2.334.0 [#4467](https://github.com/actions/actions-runner-controller/pull/4467) +1. Add option to disable workqueue bucket rate limiter [#4451](https://github.com/actions/actions-runner-controller/pull/4451) +1. Add a flag for enabling pprof on the controller manager [#4449](https://github.com/actions/actions-runner-controller/pull/4449) +1. Add health and readiness probes to controller manager [#4459](https://github.com/actions/actions-runner-controller/pull/4459) +1. Fix empty GVK in OwnerReferences for modern controllers [#4475](https://github.com/actions/actions-runner-controller/pull/4475) +1. Fix: Detect init container failure in EphemeralRunner controller [#4457](https://github.com/actions/actions-runner-controller/pull/4457) +1. Bump the actions group with 3 updates [#4483](https://github.com/actions/actions-runner-controller/pull/4483) +1. Render empty arrays for kubernetes-novolume volumes fields [#4461](https://github.com/actions/actions-runner-controller/pull/4461) +1. Fix secret reconciliation updates for the listener pod [#4492](https://github.com/actions/actions-runner-controller/pull/4492) +1. Fix job execution duration when runner assign time is not set [#4472](https://github.com/actions/actions-runner-controller/pull/4472) +1. Update CODEOWNERS [#4495](https://github.com/actions/actions-runner-controller/pull/4495) +1. Bump Go to 1.26.2 to fix critical security vulnerabilities [#4491](https://github.com/actions/actions-runner-controller/pull/4491) +1. Fix helm chart validation workflow [#4479](https://github.com/actions/actions-runner-controller/pull/4479) +1. Port rate limiter to experimental charts [#4478](https://github.com/actions/actions-runner-controller/pull/4478) +1. Bump Go to 1.26.3 [#4504](https://github.com/actions/actions-runner-controller/pull/4504) + ### 0.14.1 1. Fix null field for resource metadata fields in experimental chart [#4419](https://github.com/actions/actions-runner-controller/pull/4419) diff --git a/go.mod b/go.mod index a902c947..2213cc20 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/actions/actions-runner-controller -go 1.26.1 +go 1.26.3 require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.1 diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index 102d3d60..b56a5749 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -783,26 +783,30 @@ func (e *env) installActionsRunnerController(t *testing.T, repo, tag, testID, ch } if e.useApp { - varEnv = append(varEnv, + varEnv = append( + varEnv, "ACCEPTANCE_TEST_SECRET_TYPE=app", "APP_ID="+e.appID, "APP_INSTALLATION_ID="+e.appInstallationID, "APP_PRIVATE_KEY_FILE="+e.appPrivateKeyFile, ) } else { - varEnv = append(varEnv, + varEnv = append( + varEnv, "ACCEPTANCE_TEST_SECRET_TYPE=token", "GITHUB_TOKEN="+e.githubToken, ) } if e.logFormat != "" { - varEnv = append(varEnv, + varEnv = append( + varEnv, "LOG_FORMAT="+e.logFormat, ) } - varEnv = append(varEnv, + varEnv = append( + varEnv, "GITHUB_WEBHOOK_SERVER_ENV_NAME="+c.GithubWebhookServerEnvName, "GITHUB_WEBHOOK_SERVER_ENV_VALUE="+c.GithubWebhookServerEnvValue, ) @@ -909,20 +913,24 @@ func (e *env) do(t *testing.T, op string, kind DeployKind, testID string, env .. } if e.dockerdWithinRunnerContainer { - varEnv = append(varEnv, + varEnv = append( + varEnv, "RUNNER_DOCKERD_WITHIN_RUNNER_CONTAINER=true", ) if e.rootlessDocker { - varEnv = append(varEnv, + varEnv = append( + varEnv, "RUNNER_NAME="+e.vars.runnerRootlessDindImageRepo, ) } else { - varEnv = append(varEnv, + varEnv = append( + varEnv, "RUNNER_NAME="+e.vars.runnerDindImageRepo, ) } } else { - varEnv = append(varEnv, + varEnv = append( + varEnv, "RUNNER_DOCKERD_WITHIN_RUNNER_CONTAINER=false", "RUNNER_NAME="+e.vars.runnerImageRepo, ) @@ -1062,14 +1070,16 @@ func installActionsWorkflow(t *testing.T, testName, runnerLabel, testResultCMNam if !kubernetesContainerMode { if kind == RunnerDeployments { - steps = append(steps, + steps = append( + steps, testing.Step{ Run: sudo + "mkdir -p \"${RUNNER_TOOL_CACHE}\" \"${HOME}/.cache\"", }, ) if useSudo { - steps = append(steps, + steps = append( + steps, testing.Step{ // This might be the easiest way to handle permissions without use of securityContext // https://stackoverflow.com/questions/50156124/kubernetes-nfs-persistent-volumes-permission-denied#comment107483717_53186320 @@ -1080,7 +1090,8 @@ func installActionsWorkflow(t *testing.T, testName, runnerLabel, testResultCMNam } if useSudo { - steps = append(steps, + steps = append( + steps, testing.Step{ // This might be the easiest way to handle permissions without use of securityContext // https://stackoverflow.com/questions/50156124/kubernetes-nfs-persistent-volumes-permission-denied#comment107483717_53186320 @@ -1102,18 +1113,20 @@ func installActionsWorkflow(t *testing.T, testName, runnerLabel, testResultCMNam ) } - steps = append(steps, + steps = append( + steps, testing.Step{ Uses: "actions/setup-go@v3", With: &testing.With{ - GoVersion: "1.26.1", + GoVersion: "1.26.3", }, }, ) // Ensure both the alias and the full command work after // https://github.com/actions/actions-runner-controller/pull/2326 - steps = append(steps, + steps = append( + steps, testing.Step{ Run: "docker-compose version", }, @@ -1123,7 +1136,8 @@ func installActionsWorkflow(t *testing.T, testName, runnerLabel, testResultCMNam ) } - steps = append(steps, + steps = append( + steps, testing.Step{ Run: "go version", }, @@ -1166,19 +1180,21 @@ func installActionsWorkflow(t *testing.T, testName, runnerLabel, testResultCMNam if useCustomDockerContext { setupBuildXActionWith.Endpoint = "mycontext" - steps = append(steps, testing.Step{ - // https://github.com/docker/buildx/issues/413#issuecomment-710660155 - // To prevent setup-buildx-action from failing with: - // error: could not create a builder instance with TLS data loaded from environment. Please use `docker context create ` to create a context for current environment and then create a builder instance with `docker buildx create ` - Run: "docker context create mycontext", - }, + steps = append( + steps, testing.Step{ + // https://github.com/docker/buildx/issues/413#issuecomment-710660155 + // To prevent setup-buildx-action from failing with: + // error: could not create a builder instance with TLS data loaded from environment. Please use `docker context create ` to create a context for current environment and then create a builder instance with `docker buildx create ` + Run: "docker context create mycontext", + }, testing.Step{ Run: "docker context use mycontext", }, ) } - steps = append(steps, + steps = append( + steps, testing.Step{ Name: "Set up Docker Buildx", Uses: "docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2", @@ -1203,7 +1219,8 @@ func installActionsWorkflow(t *testing.T, testName, runnerLabel, testResultCMNam ) if useSudo { - steps = append(steps, + steps = append( + steps, testing.Step{ // https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md#local-cache // See https://github.com/moby/buildkit/issues/1896 for why this is needed @@ -1218,7 +1235,8 @@ func installActionsWorkflow(t *testing.T, testName, runnerLabel, testResultCMNam if useSudo { if kind == RunnerDeployments { - steps = append(steps, + steps = append( + steps, testing.Step{ // https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md#local-cache // See https://github.com/moby/buildkit/issues/1896 for why this is needed @@ -1232,7 +1250,8 @@ func installActionsWorkflow(t *testing.T, testName, runnerLabel, testResultCMNam } } - steps = append(steps, + steps = append( + steps, testing.Step{ Uses: "azure/setup-kubectl@3e0aec4d80787158d308d7b364cb1b702e7feb7f", With: &testing.With{