mirror of
https://github.com/actions/actions-runner-controller.git
synced 2025-12-11 12:06:57 +00:00
Compare commits
6 Commits
nikola-jok
...
51023ade49
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51023ade49 | ||
|
|
4615321588 | ||
|
|
9f9409a4c1 | ||
|
|
3d73636407 | ||
|
|
722c6e9edd | ||
|
|
dcb45f0617 |
4
.github/workflows/arc-publish-chart.yaml
vendored
4
.github/workflows/arc-publish-chart.yaml
vendored
@@ -63,7 +63,7 @@ jobs:
|
||||
python-version: "3.11"
|
||||
|
||||
- name: Set up chart-testing
|
||||
uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b
|
||||
uses: helm/chart-testing-action@6ec842c01de15ebb84c8627d2744a0c2f2755c9f
|
||||
|
||||
- name: Run chart-testing (list-changed)
|
||||
id: list-changed
|
||||
@@ -79,7 +79,7 @@ jobs:
|
||||
|
||||
- name: Create kind cluster
|
||||
if: steps.list-changed.outputs.changed == 'true'
|
||||
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3
|
||||
uses: helm/kind-action@92086f6be054225fa813e0a4b13787fc9088faab
|
||||
|
||||
# We need cert-manager already installed in the cluster because we assume the CRDs exist
|
||||
- name: Install cert-manager
|
||||
|
||||
2
.github/workflows/arc-release-runners.yaml
vendored
2
.github/workflows/arc-release-runners.yaml
vendored
@@ -19,7 +19,7 @@ env:
|
||||
PUSH_TO_REGISTRIES: true
|
||||
TARGET_ORG: actions-runner-controller
|
||||
TARGET_WORKFLOW: release-runners.yaml
|
||||
DOCKER_VERSION: 24.0.7
|
||||
DOCKER_VERSION: 28.0.4
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}
|
||||
|
||||
4
.github/workflows/arc-validate-chart.yaml
vendored
4
.github/workflows/arc-validate-chart.yaml
vendored
@@ -55,7 +55,7 @@ jobs:
|
||||
python-version: "3.11"
|
||||
|
||||
- name: Set up chart-testing
|
||||
uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b
|
||||
uses: helm/chart-testing-action@6ec842c01de15ebb84c8627d2744a0c2f2755c9f
|
||||
|
||||
- name: Run chart-testing (list-changed)
|
||||
id: list-changed
|
||||
@@ -70,7 +70,7 @@ jobs:
|
||||
ct lint --config charts/.ci/ct-config.yaml
|
||||
|
||||
- name: Create kind cluster
|
||||
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3
|
||||
uses: helm/kind-action@92086f6be054225fa813e0a4b13787fc9088faab
|
||||
if: steps.list-changed.outputs.changed == 'true'
|
||||
|
||||
# We need cert-manager already installed in the cluster because we assume the CRDs exist
|
||||
|
||||
2
.github/workflows/gha-e2e-tests.yaml
vendored
2
.github/workflows/gha-e2e-tests.yaml
vendored
@@ -984,7 +984,7 @@ jobs:
|
||||
echo "5 pods are up!"
|
||||
break
|
||||
fi
|
||||
if [[ "$count" -ge 12 ]]; then
|
||||
if [[ "$count" -ge 30 ]]; then
|
||||
echo "Timeout waiting for 5 pods to be created"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
2
.github/workflows/gha-publish-chart.yaml
vendored
2
.github/workflows/gha-publish-chart.yaml
vendored
@@ -72,7 +72,7 @@ jobs:
|
||||
echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392
|
||||
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435
|
||||
|
||||
4
.github/workflows/gha-validate-chart.yaml
vendored
4
.github/workflows/gha-validate-chart.yaml
vendored
@@ -51,7 +51,7 @@ jobs:
|
||||
python-version: "3.11"
|
||||
|
||||
- name: Set up chart-testing
|
||||
uses: helm/chart-testing-action@0d28d3144d3a25ea2cc349d6e59901c4ff469b3b
|
||||
uses: helm/chart-testing-action@6ec842c01de15ebb84c8627d2744a0c2f2755c9f
|
||||
|
||||
- name: Run chart-testing (list-changed)
|
||||
id: list-changed
|
||||
@@ -88,7 +88,7 @@ jobs:
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
- name: Create kind cluster
|
||||
uses: helm/kind-action@a1b0e391336a6ee6713a0583f8c6240d70863de3
|
||||
uses: helm/kind-action@92086f6be054225fa813e0a4b13787fc9088faab
|
||||
if: steps.list-changed.outputs.changed == 'true'
|
||||
with:
|
||||
cluster_name: chart-testing
|
||||
|
||||
2
.github/workflows/global-publish-canary.yaml
vendored
2
.github/workflows/global-publish-canary.yaml
vendored
@@ -110,7 +110,7 @@ jobs:
|
||||
echo "repository_owner=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392
|
||||
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435
|
||||
|
||||
4
.github/workflows/go.yaml
vendored
4
.github/workflows/go.yaml
vendored
@@ -48,7 +48,7 @@ jobs:
|
||||
go-version-file: "go.mod"
|
||||
cache: false
|
||||
- name: golangci-lint
|
||||
uses: golangci/golangci-lint-action@4afd733a84b1f43292c63897423277bb7f4313a9
|
||||
uses: golangci/golangci-lint-action@0a35821d5c230e903fcfe077583637dea1b27b47
|
||||
with:
|
||||
only-new-issues: true
|
||||
version: v2.5.0
|
||||
@@ -78,7 +78,7 @@ jobs:
|
||||
run: git diff --exit-code
|
||||
- name: Install kubebuilder
|
||||
run: |
|
||||
curl -D headers.txt -fsL "https://storage.googleapis.com/kubebuilder-tools/kubebuilder-tools-1.26.1-linux-amd64.tar.gz" -o kubebuilder-tools
|
||||
curl -D headers.txt -fsL "https://storage.googleapis.com/kubebuilder-tools/kubebuilder-tools-1.30.0-linux-amd64.tar.gz" -o kubebuilder-tools
|
||||
echo "$(grep -i etag headers.txt -m 1 | cut -d'"' -f2) kubebuilder-tools" > sum
|
||||
md5sum -c sum
|
||||
tar -zvxf kubebuilder-tools
|
||||
|
||||
@@ -48,7 +48,7 @@ type EphemeralRunner struct {
|
||||
}
|
||||
|
||||
func (er *EphemeralRunner) IsDone() bool {
|
||||
return er.Status.Phase == EphemeralRunnerSucceeded || er.Status.Phase == EphemeralRunnerFailed
|
||||
return er.Status.Phase == corev1.PodSucceeded || er.Status.Phase == corev1.PodFailed
|
||||
}
|
||||
|
||||
func (er *EphemeralRunner) HasJob() bool {
|
||||
@@ -125,40 +125,6 @@ type EphemeralRunnerSpec struct {
|
||||
corev1.PodTemplateSpec `json:",inline"`
|
||||
}
|
||||
|
||||
// EphemeralRunnerPhase is a label for the condition of an EphemeralRunner at the current time.
|
||||
// +kubebuilder:validation:Enum=Pending;Running;Restarting;Succeeded;Failed;Aborted
|
||||
type EphemeralRunnerPhase string
|
||||
|
||||
const (
|
||||
// EphemeralRunnerPending is the stage where the ephemeral runner is about to start.
|
||||
EphemeralRunnerPending EphemeralRunnerPhase = "Pending"
|
||||
// EphemeralRunnerRunning is the stage where the ephemeral runner is running and ready to accept the job.
|
||||
EphemeralRunnerRunning EphemeralRunnerPhase = "Running"
|
||||
// EphemeralRunnerRestarting is the stage where the ephemeral runner pod stopped, so the ephemeral runner should restart it
|
||||
EphemeralRunnerRestarting EphemeralRunnerPhase = "Restarting"
|
||||
// EphemeralRunnerSucceeded is the stage where the ephemeral runner finished running and exited with exit code 0.
|
||||
EphemeralRunnerSucceeded EphemeralRunnerPhase = "Succeeded"
|
||||
// EphemeralRunnerFailed means that the ephemeral runner finished running and exited with a non-zero exit code.
|
||||
EphemeralRunnerFailed EphemeralRunnerPhase = "Failed"
|
||||
// EphemeralRunnerAborted means that the ephemeral runner failed to start due to unrecoverable failure, and will be left as is for manual inspection.
|
||||
EphemeralRunnerAborted EphemeralRunnerPhase = "Aborted"
|
||||
)
|
||||
|
||||
func EphemeralRunnerPhaseFromPodPhase(podPhase corev1.PodPhase) EphemeralRunnerPhase {
|
||||
switch podPhase {
|
||||
case corev1.PodPending:
|
||||
return EphemeralRunnerPending
|
||||
case corev1.PodRunning:
|
||||
return EphemeralRunnerRunning
|
||||
case corev1.PodSucceeded:
|
||||
return EphemeralRunnerSucceeded
|
||||
case corev1.PodFailed:
|
||||
return EphemeralRunnerFailed
|
||||
default:
|
||||
return EphemeralRunnerPending
|
||||
}
|
||||
}
|
||||
|
||||
// EphemeralRunnerStatus defines the observed state of EphemeralRunner
|
||||
type EphemeralRunnerStatus struct {
|
||||
// Turns true only if the runner is online.
|
||||
@@ -174,7 +140,7 @@ 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 EphemeralRunnerPhase `json:"phase,omitempty"`
|
||||
Phase corev1.PodPhase `json:"phase,omitempty"`
|
||||
// +optional
|
||||
Reason string `json:"reason,omitempty"`
|
||||
// +optional
|
||||
|
||||
@@ -8257,13 +8257,6 @@ spec:
|
||||
|
||||
The PodSucceded phase should be set only when confirmed that EphemeralRunner
|
||||
actually executed the job and has been removed from the service.
|
||||
enum:
|
||||
- Pending
|
||||
- Running
|
||||
- Restarting
|
||||
- Succeeded
|
||||
- Failed
|
||||
- Aborted
|
||||
type: string
|
||||
ready:
|
||||
description: Turns true only if the runner is online.
|
||||
|
||||
@@ -8257,13 +8257,6 @@ spec:
|
||||
|
||||
The PodSucceded phase should be set only when confirmed that EphemeralRunner
|
||||
actually executed the job and has been removed from the service.
|
||||
enum:
|
||||
- Pending
|
||||
- Running
|
||||
- Restarting
|
||||
- Succeeded
|
||||
- Failed
|
||||
- Aborted
|
||||
type: string
|
||||
ready:
|
||||
description: Turns true only if the runner is online.
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/actions/actions-runner-controller/apis/actions.github.com/v1alpha1"
|
||||
@@ -282,10 +283,37 @@ func (r *EphemeralRunnerReconciler) Reconcile(ctx context.Context, req ctrl.Requ
|
||||
case kerrors.IsAlreadyExists(err):
|
||||
log.Info("Runner pod already exists. Waiting for the pod event to be received")
|
||||
return ctrl.Result{Requeue: true, RequeueAfter: 5 * time.Second}, nil
|
||||
case kerrors.IsInvalid(err) || kerrors.IsForbidden(err):
|
||||
case kerrors.IsInvalid(err):
|
||||
log.Error(err, "Failed to create a pod due to unrecoverable failure")
|
||||
errMessage := fmt.Sprintf("Failed to create the pod: %v", err)
|
||||
if err := r.markAsAborted(ctx, ephemeralRunner, errMessage, ReasonInvalidPodFailure, log); err != nil {
|
||||
if err := r.markAsFailed(ctx, ephemeralRunner, errMessage, ReasonInvalidPodFailure, log); err != nil {
|
||||
log.Error(err, "Failed to set ephemeral runner to phase Failed")
|
||||
return ctrl.Result{}, err
|
||||
}
|
||||
return ctrl.Result{}, nil
|
||||
case kerrors.IsForbidden(err):
|
||||
if status, ok := err.(kerrors.APIStatus); ok || errors.As(err, &status) {
|
||||
isResourceQuotaExceeded := strings.Contains(status.Status().Message, "exceeded quota:")
|
||||
isAboutToExpire := ephemeralRunner.CreationTimestamp.Time.Add(10 * time.Minute).Before(time.Now())
|
||||
switch {
|
||||
case isResourceQuotaExceeded && isAboutToExpire:
|
||||
log.Error(err, "Failed to create a pod due to resource quota exceeded and the ephemeral runner is about to expire; re-creating the ephemeral runner")
|
||||
if err := r.Delete(ctx, ephemeralRunner); err != nil {
|
||||
log.Error(err, "Failed to delete the ephemeral runner")
|
||||
return ctrl.Result{}, err
|
||||
}
|
||||
return ctrl.Result{}, nil
|
||||
case isResourceQuotaExceeded:
|
||||
log.Error(err, "Resource quota is exceeded; requeue in 30s to retry pod creation")
|
||||
return ctrl.Result{RequeueAfter: 30 * time.Second}, nil
|
||||
default:
|
||||
// other forbidden errors
|
||||
// fallthrough to the default handling below
|
||||
}
|
||||
}
|
||||
log.Error(err, "Failed to create a pod due to unrecoverable failure")
|
||||
errMessage := fmt.Sprintf("Failed to create the pod: %v", err)
|
||||
if err := r.markAsFailed(ctx, ephemeralRunner, errMessage, ReasonInvalidPodFailure, log); err != nil {
|
||||
log.Error(err, "Failed to set ephemeral runner to phase Failed")
|
||||
return ctrl.Result{}, err
|
||||
}
|
||||
@@ -511,12 +539,10 @@ func (r *EphemeralRunnerReconciler) cleanupRunnerLinkedSecrets(ctx context.Conte
|
||||
return errors.Join(errs...)
|
||||
}
|
||||
|
||||
// markAsAborted updates the ephemeral runner status to aborted and stops the reconciliation.
|
||||
// This runner is left in aborted state and won't be deleted until someone manually does that.
|
||||
func (r *EphemeralRunnerReconciler) markAsAborted(ctx context.Context, ephemeralRunner *v1alpha1.EphemeralRunner, errMessage string, reason string, log logr.Logger) error {
|
||||
func (r *EphemeralRunnerReconciler) markAsFailed(ctx context.Context, ephemeralRunner *v1alpha1.EphemeralRunner, errMessage string, reason string, log logr.Logger) error {
|
||||
log.Info("Updating ephemeral runner status to Failed")
|
||||
if err := patchSubResource(ctx, r.Status(), ephemeralRunner, func(obj *v1alpha1.EphemeralRunner) {
|
||||
obj.Status.Phase = v1alpha1.EphemeralRunnerAborted
|
||||
obj.Status.Phase = corev1.PodFailed
|
||||
obj.Status.Reason = reason
|
||||
obj.Status.Message = errMessage
|
||||
}); err != nil {
|
||||
@@ -547,7 +573,6 @@ func (r *EphemeralRunnerReconciler) deletePodAsFailed(ctx context.Context, ephem
|
||||
if obj.Status.Failures == nil {
|
||||
obj.Status.Failures = make(map[string]metav1.Time)
|
||||
}
|
||||
obj.Status.Phase = v1alpha1.EphemeralRunnerRestarting
|
||||
obj.Status.Failures[string(pod.UID)] = metav1.Now()
|
||||
obj.Status.Ready = false
|
||||
obj.Status.Reason = pod.Status.Reason
|
||||
@@ -737,8 +762,7 @@ func (r *EphemeralRunnerReconciler) updateRunStatusFromPod(ctx context.Context,
|
||||
}
|
||||
}
|
||||
|
||||
newPhase := v1alpha1.EphemeralRunnerPhaseFromPodPhase(pod.Status.Phase)
|
||||
phaseChanged := ephemeralRunner.Status.Phase != newPhase
|
||||
phaseChanged := ephemeralRunner.Status.Phase != pod.Status.Phase
|
||||
readyChanged := ready != ephemeralRunner.Status.Ready
|
||||
|
||||
if !phaseChanged && !readyChanged {
|
||||
@@ -753,7 +777,7 @@ func (r *EphemeralRunnerReconciler) updateRunStatusFromPod(ctx context.Context,
|
||||
"ready", ready,
|
||||
)
|
||||
err := patchSubResource(ctx, r.Status(), ephemeralRunner, func(obj *v1alpha1.EphemeralRunner) {
|
||||
obj.Status.Phase = newPhase
|
||||
obj.Status.Phase = pod.Status.Phase
|
||||
obj.Status.Ready = ready
|
||||
obj.Status.Reason = pod.Status.Reason
|
||||
obj.Status.Message = pod.Status.Message
|
||||
|
||||
@@ -270,7 +270,7 @@ var _ = Describe("EphemeralRunner", func() {
|
||||
|
||||
updated := new(v1alpha1.EphemeralRunner)
|
||||
Eventually(
|
||||
func() (v1alpha1.EphemeralRunnerPhase, error) {
|
||||
func() (corev1.PodPhase, error) {
|
||||
err := k8sClient.Get(
|
||||
ctx,
|
||||
client.ObjectKey{Name: invalideEphemeralRunner.Name, Namespace: invalideEphemeralRunner.Namespace},
|
||||
@@ -283,7 +283,7 @@ var _ = Describe("EphemeralRunner", func() {
|
||||
},
|
||||
ephemeralRunnerTimeout,
|
||||
ephemeralRunnerInterval,
|
||||
).Should(BeEquivalentTo(v1alpha1.EphemeralRunnerAborted))
|
||||
).Should(BeEquivalentTo(corev1.PodFailed))
|
||||
|
||||
Expect(updated.Status.Reason).Should(Equal("InvalidPod"))
|
||||
Expect(updated.Status.Message).Should(Equal("Failed to create the pod: pods \"invalid-ephemeral-runner\" is forbidden: no PriorityClass with name notexist was found"))
|
||||
@@ -470,7 +470,7 @@ var _ = Describe("EphemeralRunner", func() {
|
||||
|
||||
var updated *v1alpha1.EphemeralRunner
|
||||
Eventually(
|
||||
func() (v1alpha1.EphemeralRunnerPhase, error) {
|
||||
func() (corev1.PodPhase, error) {
|
||||
updated = new(v1alpha1.EphemeralRunner)
|
||||
err := k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, updated)
|
||||
if err != nil {
|
||||
@@ -480,7 +480,7 @@ var _ = Describe("EphemeralRunner", func() {
|
||||
},
|
||||
ephemeralRunnerTimeout,
|
||||
ephemeralRunnerInterval,
|
||||
).Should(BeEquivalentTo(v1alpha1.EphemeralRunnerPhase(phase)))
|
||||
).Should(BeEquivalentTo(phase))
|
||||
}
|
||||
})
|
||||
|
||||
@@ -592,10 +592,10 @@ var _ = Describe("EphemeralRunner", func() {
|
||||
Expect(err).To(BeNil(), "failed to patch pod status")
|
||||
|
||||
Consistently(
|
||||
func() (v1alpha1.EphemeralRunnerPhase, error) {
|
||||
func() (corev1.PodPhase, error) {
|
||||
updated := new(v1alpha1.EphemeralRunner)
|
||||
if err := k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, updated); err != nil {
|
||||
return "", err
|
||||
return corev1.PodUnknown, err
|
||||
}
|
||||
return updated.Status.Phase, nil
|
||||
},
|
||||
@@ -772,7 +772,7 @@ var _ = Describe("EphemeralRunner", func() {
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
Eventually(
|
||||
func() (v1alpha1.EphemeralRunnerPhase, error) {
|
||||
func() (corev1.PodPhase, error) {
|
||||
updated := new(v1alpha1.EphemeralRunner)
|
||||
if err := k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, updated); err != nil {
|
||||
return "", err
|
||||
@@ -781,7 +781,7 @@ var _ = Describe("EphemeralRunner", func() {
|
||||
},
|
||||
ephemeralRunnerTimeout,
|
||||
ephemeralRunnerInterval,
|
||||
).Should(BeEquivalentTo(v1alpha1.EphemeralRunnerRunning))
|
||||
).Should(BeEquivalentTo(corev1.PodRunning))
|
||||
|
||||
// set phase to succeeded
|
||||
pod.Status.Phase = corev1.PodSucceeded
|
||||
@@ -789,7 +789,7 @@ var _ = Describe("EphemeralRunner", func() {
|
||||
Expect(err).To(BeNil())
|
||||
|
||||
Consistently(
|
||||
func() (v1alpha1.EphemeralRunnerPhase, error) {
|
||||
func() (corev1.PodPhase, error) {
|
||||
updated := new(v1alpha1.EphemeralRunner)
|
||||
if err := k8sClient.Get(ctx, client.ObjectKey{Name: ephemeralRunner.Name, Namespace: ephemeralRunner.Namespace}, updated); err != nil {
|
||||
return "", err
|
||||
@@ -797,7 +797,7 @@ var _ = Describe("EphemeralRunner", func() {
|
||||
return updated.Status.Phase, nil
|
||||
},
|
||||
ephemeralRunnerTimeout,
|
||||
).Should(BeEquivalentTo(v1alpha1.EphemeralRunnerRunning))
|
||||
).Should(BeEquivalentTo(corev1.PodRunning))
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ func (r *EphemeralRunnerSetReconciler) Reconcile(ctx context.Context, req ctrl.R
|
||||
"pending", len(ephemeralRunnerState.pending),
|
||||
"running", len(ephemeralRunnerState.running),
|
||||
"finished", len(ephemeralRunnerState.finished),
|
||||
"failed", len(ephemeralRunnerState.aborted),
|
||||
"failed", len(ephemeralRunnerState.failed),
|
||||
"deleting", len(ephemeralRunnerState.deleting),
|
||||
)
|
||||
|
||||
@@ -185,7 +185,7 @@ func (r *EphemeralRunnerSetReconciler) Reconcile(ctx context.Context, req ctrl.R
|
||||
},
|
||||
len(ephemeralRunnerState.pending),
|
||||
len(ephemeralRunnerState.running),
|
||||
len(ephemeralRunnerState.aborted),
|
||||
len(ephemeralRunnerState.failed),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -232,7 +232,7 @@ func (r *EphemeralRunnerSetReconciler) Reconcile(ctx context.Context, req ctrl.R
|
||||
CurrentReplicas: total,
|
||||
PendingEphemeralRunners: len(ephemeralRunnerState.pending),
|
||||
RunningEphemeralRunners: len(ephemeralRunnerState.running),
|
||||
FailedEphemeralRunners: len(ephemeralRunnerState.aborted),
|
||||
FailedEphemeralRunners: len(ephemeralRunnerState.failed),
|
||||
}
|
||||
|
||||
// Update the status if needed.
|
||||
@@ -307,13 +307,13 @@ func (r *EphemeralRunnerSetReconciler) cleanUpEphemeralRunners(ctx context.Conte
|
||||
"pending", len(ephemeralRunnerState.pending),
|
||||
"running", len(ephemeralRunnerState.running),
|
||||
"finished", len(ephemeralRunnerState.finished),
|
||||
"failed", len(ephemeralRunnerState.aborted),
|
||||
"failed", len(ephemeralRunnerState.failed),
|
||||
"deleting", len(ephemeralRunnerState.deleting),
|
||||
)
|
||||
|
||||
log.Info("Cleanup finished or failed ephemeral runners")
|
||||
var errs []error
|
||||
for _, ephemeralRunner := range append(ephemeralRunnerState.finished, ephemeralRunnerState.aborted...) {
|
||||
for _, ephemeralRunner := range append(ephemeralRunnerState.finished, ephemeralRunnerState.failed...) {
|
||||
log.Info("Deleting ephemeral runner", "name", ephemeralRunner.Name)
|
||||
if err := r.Delete(ctx, ephemeralRunner); err != nil && !kerrors.IsNotFound(err) {
|
||||
errs = append(errs, err)
|
||||
@@ -564,7 +564,7 @@ type ephemeralRunnerState struct {
|
||||
pending []*v1alpha1.EphemeralRunner
|
||||
running []*v1alpha1.EphemeralRunner
|
||||
finished []*v1alpha1.EphemeralRunner
|
||||
aborted []*v1alpha1.EphemeralRunner
|
||||
failed []*v1alpha1.EphemeralRunner
|
||||
deleting []*v1alpha1.EphemeralRunner
|
||||
|
||||
latestPatchID int
|
||||
@@ -585,12 +585,12 @@ func newEphemeralRunnerState(ephemeralRunnerList *v1alpha1.EphemeralRunnerList)
|
||||
}
|
||||
|
||||
switch r.Status.Phase {
|
||||
case v1alpha1.EphemeralRunnerRunning:
|
||||
case corev1.PodRunning:
|
||||
ephemeralRunnerState.running = append(ephemeralRunnerState.running, r)
|
||||
case v1alpha1.EphemeralRunnerSucceeded, v1alpha1.EphemeralRunnerFailed:
|
||||
case corev1.PodSucceeded:
|
||||
ephemeralRunnerState.finished = append(ephemeralRunnerState.finished, r)
|
||||
case v1alpha1.EphemeralRunnerAborted:
|
||||
ephemeralRunnerState.aborted = append(ephemeralRunnerState.aborted, r)
|
||||
case corev1.PodFailed:
|
||||
ephemeralRunnerState.failed = append(ephemeralRunnerState.failed, r)
|
||||
default:
|
||||
// Pending or no phase should be considered as pending.
|
||||
//
|
||||
@@ -603,5 +603,5 @@ func newEphemeralRunnerState(ephemeralRunnerList *v1alpha1.EphemeralRunnerList)
|
||||
}
|
||||
|
||||
func (s *ephemeralRunnerState) scaleTotal() int {
|
||||
return len(s.pending) + len(s.running) + len(s.aborted)
|
||||
return len(s.pending) + len(s.running) + len(s.failed)
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
for i, runner := range runnerList.Items {
|
||||
if runner.Status.RunnerId == 0 {
|
||||
updatedRunner := runner.DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
updatedRunner.Status.Phase = corev1.PodRunning
|
||||
updatedRunner.Status.RunnerId = i + 100
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runner))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
@@ -225,7 +225,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
for i, runner := range runnerList.Items {
|
||||
if runner.Status.RunnerId == 0 {
|
||||
updatedRunner := runner.DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
updatedRunner.Status.Phase = corev1.PodRunning
|
||||
updatedRunner.Status.RunnerId = i + 100
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runner))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
@@ -390,12 +390,12 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
).Should(BeEquivalentTo(2), "2 EphemeralRunner should be created")
|
||||
|
||||
updatedRunner := runnerList.Items[0].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerSucceeded
|
||||
updatedRunner.Status.Phase = corev1.PodSucceeded
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[0]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
updatedRunner = runnerList.Items[1].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
updatedRunner.Status.Phase = corev1.PodRunning
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[1]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
@@ -468,12 +468,12 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
).Should(BeEquivalentTo(2), "2 EphemeralRunner should be created")
|
||||
|
||||
updatedRunner := runnerList.Items[0].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
updatedRunner.Status.Phase = corev1.PodSucceeded
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[0]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
updatedRunner = runnerList.Items[1].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerPending
|
||||
updatedRunner.Status.Phase = corev1.PodPending
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[1]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
@@ -520,12 +520,12 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
).Should(BeEquivalentTo(2), "2 EphemeralRunner should be created")
|
||||
|
||||
updatedRunner := runnerList.Items[0].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerSucceeded
|
||||
updatedRunner.Status.Phase = corev1.PodSucceeded
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[0]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
updatedRunner = runnerList.Items[1].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
updatedRunner.Status.Phase = corev1.PodRunning
|
||||
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[1]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
@@ -555,7 +555,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
}
|
||||
|
||||
for _, runner := range runnerList.Items {
|
||||
if runner.Status.Phase == v1alpha1.EphemeralRunnerSucceeded {
|
||||
if runner.Status.Phase == corev1.PodSucceeded {
|
||||
return fmt.Errorf("Runner %s is in Succeeded phase", runner.Name)
|
||||
}
|
||||
}
|
||||
@@ -594,12 +594,12 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
).Should(BeEquivalentTo(2), "2 EphemeralRunner should be created")
|
||||
|
||||
updatedRunner := runnerList.Items[0].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerSucceeded
|
||||
updatedRunner.Status.Phase = corev1.PodSucceeded
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[0]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
updatedRunner = runnerList.Items[1].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerPending
|
||||
updatedRunner.Status.Phase = corev1.PodPending
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[1]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
@@ -615,9 +615,9 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
succeeded := 0
|
||||
for _, runner := range runnerList.Items {
|
||||
switch runner.Status.Phase {
|
||||
case v1alpha1.EphemeralRunnerSucceeded:
|
||||
case corev1.PodSucceeded:
|
||||
succeeded++
|
||||
case v1alpha1.EphemeralRunnerPending:
|
||||
case corev1.PodPending:
|
||||
pending++
|
||||
}
|
||||
}
|
||||
@@ -657,7 +657,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
return fmt.Errorf("Expected 1 runner, got %d", len(runnerList.Items))
|
||||
}
|
||||
|
||||
if runnerList.Items[0].Status.Phase != v1alpha1.EphemeralRunnerPending {
|
||||
if runnerList.Items[0].Status.Phase != corev1.PodPending {
|
||||
return fmt.Errorf("Expected runner to be in Pending, got %s", runnerList.Items[0].Status.Phase)
|
||||
}
|
||||
|
||||
@@ -669,7 +669,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
|
||||
// Now, the ephemeral runner finally is done and we can scale down to 0
|
||||
updatedRunner = runnerList.Items[0].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerSucceeded
|
||||
updatedRunner.Status.Phase = corev1.PodSucceeded
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[0]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
@@ -715,12 +715,12 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
|
||||
// Put one runner in Pending and one in Running
|
||||
updatedRunner := runnerList.Items[0].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerPending
|
||||
updatedRunner.Status.Phase = corev1.PodPending
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[0]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
updatedRunner = runnerList.Items[1].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
updatedRunner.Status.Phase = corev1.PodRunning
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[1]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
@@ -738,9 +738,9 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
|
||||
for _, runner := range runnerList.Items {
|
||||
switch runner.Status.Phase {
|
||||
case v1alpha1.EphemeralRunnerPending:
|
||||
case corev1.PodPending:
|
||||
pending++
|
||||
case v1alpha1.EphemeralRunnerRunning:
|
||||
case corev1.PodRunning:
|
||||
running++
|
||||
|
||||
}
|
||||
@@ -839,12 +839,12 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
|
||||
// Put one runner in Succeeded and one in Running
|
||||
updatedRunner := runnerList.Items[0].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerSucceeded
|
||||
updatedRunner.Status.Phase = corev1.PodSucceeded
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[0]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
updatedRunner = runnerList.Items[1].DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
updatedRunner.Status.Phase = corev1.PodRunning
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runnerList.Items[1]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
|
||||
@@ -863,9 +863,9 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
|
||||
for _, runner := range runnerList.Items {
|
||||
switch runner.Status.Phase {
|
||||
case v1alpha1.EphemeralRunnerSucceeded:
|
||||
case corev1.PodSucceeded:
|
||||
succeeded++
|
||||
case v1alpha1.EphemeralRunnerRunning:
|
||||
case corev1.PodRunning:
|
||||
running++
|
||||
}
|
||||
}
|
||||
@@ -907,7 +907,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
}
|
||||
|
||||
for _, runner := range runnerList.Items {
|
||||
if runner.Status.Phase == v1alpha1.EphemeralRunnerSucceeded {
|
||||
if runner.Status.Phase == corev1.PodSucceeded {
|
||||
return fmt.Errorf("Expected no runners in Succeeded phase, got one")
|
||||
}
|
||||
}
|
||||
@@ -972,7 +972,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
|
||||
pending := pendingOriginal.DeepCopy()
|
||||
pending.Status.RunnerId = 101
|
||||
pending.Status.Phase = v1alpha1.EphemeralRunnerPending
|
||||
pending.Status.Phase = corev1.PodPending
|
||||
|
||||
err = k8sClient.Status().Patch(ctx, pending, client.MergeFrom(pendingOriginal))
|
||||
if err != nil {
|
||||
@@ -986,7 +986,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
empty = empty[1:]
|
||||
running := runningOriginal.DeepCopy()
|
||||
running.Status.RunnerId = 102
|
||||
running.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
running.Status.Phase = corev1.PodRunning
|
||||
|
||||
err = k8sClient.Status().Patch(ctx, running, client.MergeFrom(runningOriginal))
|
||||
if err != nil {
|
||||
@@ -1000,7 +1000,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() {
|
||||
|
||||
failed := pendingOriginal.DeepCopy()
|
||||
failed.Status.RunnerId = 103
|
||||
failed.Status.Phase = v1alpha1.EphemeralRunnerAborted
|
||||
failed.Status.Phase = corev1.PodFailed
|
||||
|
||||
err = k8sClient.Status().Patch(ctx, failed, client.MergeFrom(failedOriginal))
|
||||
if err != nil {
|
||||
@@ -1236,7 +1236,7 @@ var _ = Describe("Test EphemeralRunnerSet controller with proxy settings", func(
|
||||
for i, runner := range runnerList.Items {
|
||||
if runner.Status.RunnerId == 0 {
|
||||
updatedRunner := runner.DeepCopy()
|
||||
updatedRunner.Status.Phase = v1alpha1.EphemeralRunnerSucceeded
|
||||
updatedRunner.Status.Phase = corev1.PodSucceeded
|
||||
updatedRunner.Status.RunnerId = i + 100
|
||||
err = k8sClient.Status().Patch(ctx, updatedRunner, client.MergeFrom(&runner))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update EphemeralRunner")
|
||||
@@ -1355,7 +1355,7 @@ var _ = Describe("Test EphemeralRunnerSet controller with proxy settings", func(
|
||||
).Should(BeEquivalentTo(1), "failed to create ephemeral runner")
|
||||
|
||||
runner := runnerList.Items[0].DeepCopy()
|
||||
runner.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
runner.Status.Phase = corev1.PodRunning
|
||||
runner.Status.RunnerId = 100
|
||||
err = k8sClient.Status().Patch(ctx, runner, client.MergeFrom(&runnerList.Items[0]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update ephemeral runner status")
|
||||
@@ -1505,7 +1505,7 @@ var _ = Describe("Test EphemeralRunnerSet controller with custom root CA", func(
|
||||
Expect(runner.Spec.GitHubServerTLS).NotTo(BeNil(), "runner tls config should not be nil")
|
||||
Expect(runner.Spec.GitHubServerTLS).To(BeEquivalentTo(ephemeralRunnerSet.Spec.EphemeralRunnerSpec.GitHubServerTLS), "runner tls config should be correct")
|
||||
|
||||
runner.Status.Phase = v1alpha1.EphemeralRunnerRunning
|
||||
runner.Status.Phase = corev1.PodRunning
|
||||
runner.Status.RunnerId = 100
|
||||
err = k8sClient.Status().Patch(ctx, runner, client.MergeFrom(&runnerList.Items[0]))
|
||||
Expect(err).NotTo(HaveOccurred(), "failed to update ephemeral runner status")
|
||||
|
||||
@@ -690,20 +690,28 @@ func scaleSetListenerConfigName(autoscalingListener *v1alpha1.AutoscalingListene
|
||||
return fmt.Sprintf("%s-config", autoscalingListener.Name)
|
||||
}
|
||||
|
||||
func scaleSetListenerName(autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet) string {
|
||||
namespaceHash := hash.FNVHashString(autoscalingRunnerSet.Namespace)
|
||||
func hashSuffix(namespace, runnerGroup, configURL string) string {
|
||||
namespaceHash := hash.FNVHashString(namespace + "@" + runnerGroup + "@" + configURL)
|
||||
if len(namespaceHash) > 8 {
|
||||
namespaceHash = namespaceHash[:8]
|
||||
}
|
||||
return fmt.Sprintf("%v-%v-listener", autoscalingRunnerSet.Name, namespaceHash)
|
||||
return namespaceHash
|
||||
}
|
||||
|
||||
func scaleSetListenerName(autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet) string {
|
||||
return fmt.Sprintf(
|
||||
"%v-%v-listener",
|
||||
autoscalingRunnerSet.Name,
|
||||
hashSuffix(
|
||||
autoscalingRunnerSet.Namespace,
|
||||
autoscalingRunnerSet.Spec.RunnerGroup,
|
||||
autoscalingRunnerSet.Spec.GitHubConfigUrl,
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
func proxyListenerSecretName(autoscalingListener *v1alpha1.AutoscalingListener) string {
|
||||
namespaceHash := hash.FNVHashString(autoscalingListener.Spec.AutoscalingRunnerSetNamespace)
|
||||
if len(namespaceHash) > 8 {
|
||||
namespaceHash = namespaceHash[:8]
|
||||
}
|
||||
return fmt.Sprintf("%v-%v-listener-proxy", autoscalingListener.Spec.AutoscalingRunnerSetName, namespaceHash)
|
||||
return autoscalingListener.Name + "-proxy"
|
||||
}
|
||||
|
||||
func proxyEphemeralRunnerSetSecretName(ephemeralRunnerSet *v1alpha1.EphemeralRunnerSet) string {
|
||||
|
||||
@@ -8,7 +8,7 @@ TARGETPLATFORM ?= $(shell arch)
|
||||
|
||||
RUNNER_VERSION ?= 2.329.0
|
||||
RUNNER_CONTAINER_HOOKS_VERSION ?= 0.8.0
|
||||
DOCKER_VERSION ?= 24.0.7
|
||||
DOCKER_VERSION ?= 28.0.4
|
||||
|
||||
# default list of platforms for which multiarch image is built
|
||||
ifeq (${PLATFORMS}, )
|
||||
|
||||
@@ -5,7 +5,7 @@ ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
# Docker and Docker Compose arguments
|
||||
ENV CHANNEL=stable
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.38.2
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
|
||||
# Other arguments
|
||||
|
||||
@@ -5,7 +5,7 @@ ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
# Docker and Docker Compose arguments
|
||||
ENV CHANNEL=stable
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.38.2
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
ARG RUNNER_USER_UID=1001
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
# Docker and Docker Compose arguments
|
||||
ENV CHANNEL=stable
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.38.2
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
ARG RUNNER_USER_UID=1001
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
# Docker and Docker Compose arguments
|
||||
ARG CHANNEL=stable
|
||||
ARG DOCKER_VERSION=24.0.7
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DOCKER_VERSION=28.0.4
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.38.2
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
|
||||
# Use 1001 and 121 for compatibility with GitHub-hosted runners
|
||||
|
||||
@@ -5,8 +5,8 @@ ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
# Docker and Docker Compose arguments
|
||||
ARG CHANNEL=stable
|
||||
ARG DOCKER_VERSION=24.0.7
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DOCKER_VERSION=28.0.4
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.38.2
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
ARG RUNNER_USER_UID=1001
|
||||
ARG DOCKER_GROUP_GID=121
|
||||
|
||||
@@ -5,8 +5,8 @@ ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
# Docker and Docker Compose arguments
|
||||
ARG CHANNEL=stable
|
||||
ARG DOCKER_VERSION=24.0.7
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DOCKER_VERSION=28.0.4
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.38.2
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
ARG RUNNER_USER_UID=1001
|
||||
ARG DOCKER_GROUP_GID=121
|
||||
|
||||
@@ -5,8 +5,8 @@ ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
# Docker and Docker Compose arguments
|
||||
ARG CHANNEL=stable
|
||||
ARG DOCKER_VERSION=24.0.7
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DOCKER_VERSION=28.0.4
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.38.2
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
|
||||
# Use 1001 and 121 for compatibility with GitHub-hosted runners
|
||||
|
||||
@@ -5,8 +5,8 @@ ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
# Docker and Docker Compose arguments
|
||||
ARG CHANNEL=stable
|
||||
ARG DOCKER_VERSION=24.0.7
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DOCKER_VERSION=28.0.4
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.38.2
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
ARG RUNNER_USER_UID=1001
|
||||
ARG DOCKER_GROUP_GID=121
|
||||
|
||||
@@ -5,8 +5,8 @@ ARG RUNNER_VERSION
|
||||
ARG RUNNER_CONTAINER_HOOKS_VERSION
|
||||
# Docker and Docker Compose arguments
|
||||
ARG CHANNEL=stable
|
||||
ARG DOCKER_VERSION=24.0.7
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.23.0
|
||||
ARG DOCKER_VERSION=28.0.4
|
||||
ARG DOCKER_COMPOSE_VERSION=v2.38.2
|
||||
ARG DUMB_INIT_VERSION=1.2.5
|
||||
ARG RUNNER_USER_UID=1001
|
||||
ARG DOCKER_GROUP_GID=121
|
||||
|
||||
@@ -455,7 +455,7 @@ func buildVars(repo, ubuntuVer string) vars {
|
||||
runnerRootlessDindImage = testing.Img(runnerRootlessDindImageRepo, runnerImageTag)
|
||||
|
||||
dindSidecarImageRepo = "docker"
|
||||
dindSidecarImageTag = "24.0.7-dind"
|
||||
dindSidecarImageTag = "28.0.4-dind"
|
||||
dindSidecarImage = testing.Img(dindSidecarImageRepo, dindSidecarImageTag)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user