994 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			YAML
		
	
	
	
			
		
		
	
	
			994 lines
		
	
	
		
			38 KiB
		
	
	
	
		
			YAML
		
	
	
	
| name: (gha) E2E Tests
 | |
| 
 | |
| on:
 | |
|   push:
 | |
|     branches:
 | |
|       - master
 | |
|   pull_request:
 | |
|     branches:
 | |
|       - master
 | |
|   workflow_dispatch:
 | |
| 
 | |
| permissions:
 | |
|   contents: read
 | |
| 
 | |
| env:
 | |
|   TARGET_ORG: actions-runner-controller
 | |
|   TARGET_REPO: arc_e2e_test_dummy
 | |
|   IMAGE_NAME: "arc-test-image"
 | |
|   IMAGE_VERSION: "0.10.1"
 | |
| 
 | |
| concurrency:
 | |
|   # This will make sure we only apply the concurrency limits on pull requests
 | |
|   # but not pushes to master branch by making the concurrency group name unique
 | |
|   # for pushes
 | |
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
 | |
|   cancel-in-progress: true
 | |
| 
 | |
| jobs:
 | |
|   default-setup:
 | |
|     runs-on: ubuntu-latest
 | |
|     timeout-minutes: 20
 | |
|     if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
 | |
|     env:
 | |
|       WORKFLOW_FILE: "arc-test-workflow.yaml"
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|         with:
 | |
|           ref: ${{github.head_ref}}
 | |
| 
 | |
|       - uses: ./.github/actions/setup-arc-e2e
 | |
|         id: setup
 | |
|         with:
 | |
|           app-id: ${{secrets.E2E_TESTS_ACCESS_APP_ID}}
 | |
|           app-pk: ${{secrets.E2E_TESTS_ACCESS_PK}}
 | |
|           image-name: ${{env.IMAGE_NAME}}
 | |
|           image-tag: ${{env.IMAGE_VERSION}}
 | |
|           target-org: ${{env.TARGET_ORG}}
 | |
| 
 | |
|       - name: Install gha-runner-scale-set-controller
 | |
|         id: install_arc_controller
 | |
|         run: |
 | |
|           helm install arc \
 | |
|           --namespace "arc-systems" \
 | |
|           --create-namespace \
 | |
|           --set image.repository=${{ env.IMAGE_NAME }} \
 | |
|           --set image.tag=${{ env.IMAGE_VERSION }} \
 | |
|           ./charts/gha-runner-scale-set-controller \
 | |
|           --debug
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l app.kubernetes.io/name=gha-rs-controller -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-rs-controller"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-rs-controller
 | |
|           kubectl get pod -n arc-systems
 | |
|           kubectl describe deployment arc-gha-rs-controller -n arc-systems          
 | |
| 
 | |
|       - name: Install gha-runner-scale-set
 | |
|         id: install_arc
 | |
|         run: |
 | |
|           ARC_NAME=${{github.job}}-$(date +'%M%S')$((($RANDOM + 100) % 100 + 1))
 | |
|           helm install "$ARC_NAME" \
 | |
|           --namespace "arc-runners" \
 | |
|           --create-namespace \
 | |
|           --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{env.TARGET_REPO}}" \
 | |
|           --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|           ./charts/gha-runner-scale-set \
 | |
|           --debug
 | |
|           echo "ARC_NAME=$ARC_NAME" >> $GITHUB_OUTPUT
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener pod with label actions.github.com/scale-set-name=$ARC_NAME"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME
 | |
|           kubectl get pod -n arc-systems
 | |
| 
 | |
|           sleep 60          
 | |
| 
 | |
|       - name: Test ARC E2E
 | |
|         uses: ./.github/actions/execute-assert-arc-e2e
 | |
|         timeout-minutes: 10
 | |
|         with:
 | |
|           auth-token: ${{ steps.setup.outputs.token }}
 | |
|           repo-owner: ${{ env.TARGET_ORG }}
 | |
|           repo-name: ${{env.TARGET_REPO}}
 | |
|           workflow-file: ${{env.WORKFLOW_FILE}}
 | |
|           arc-name: ${{steps.install_arc.outputs.ARC_NAME}}
 | |
|           arc-namespace: "arc-runners"
 | |
|           arc-controller-namespace: "arc-systems"
 | |
| 
 | |
|   single-namespace-setup:
 | |
|     runs-on: ubuntu-latest
 | |
|     timeout-minutes: 20
 | |
|     if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
 | |
|     env:
 | |
|       WORKFLOW_FILE: "arc-test-workflow.yaml"
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|         with:
 | |
|           ref: ${{github.head_ref}}
 | |
| 
 | |
|       - uses: ./.github/actions/setup-arc-e2e
 | |
|         id: setup
 | |
|         with:
 | |
|           app-id: ${{secrets.E2E_TESTS_ACCESS_APP_ID}}
 | |
|           app-pk: ${{secrets.E2E_TESTS_ACCESS_PK}}
 | |
|           image-name: ${{env.IMAGE_NAME}}
 | |
|           image-tag: ${{env.IMAGE_VERSION}}
 | |
|           target-org: ${{env.TARGET_ORG}}
 | |
| 
 | |
|       - name: Install gha-runner-scale-set-controller
 | |
|         id: install_arc_controller
 | |
|         run: |
 | |
|           kubectl create namespace arc-runners
 | |
|           helm install arc \
 | |
|           --namespace "arc-systems" \
 | |
|           --create-namespace \
 | |
|           --set image.repository=${{ env.IMAGE_NAME }} \
 | |
|           --set image.tag=${{ env.IMAGE_VERSION }} \
 | |
|           --set flags.watchSingleNamespace=arc-runners \
 | |
|           ./charts/gha-runner-scale-set-controller \
 | |
|           --debug
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l app.kubernetes.io/name=gha-rs-controller -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-rs-controller"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-rs-controller
 | |
|           kubectl get pod -n arc-systems
 | |
|           kubectl describe deployment arc-gha-rs-controller -n arc-systems          
 | |
| 
 | |
|       - name: Install gha-runner-scale-set
 | |
|         id: install_arc
 | |
|         run: |
 | |
|           ARC_NAME=${{github.job}}-$(date +'%M%S')$((($RANDOM + 100) % 100 + 1))
 | |
|           helm install "$ARC_NAME" \
 | |
|           --namespace "arc-runners" \
 | |
|           --create-namespace \
 | |
|           --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{env.TARGET_REPO}}" \
 | |
|           --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|           ./charts/gha-runner-scale-set \
 | |
|           --debug
 | |
|           echo "ARC_NAME=$ARC_NAME" >> $GITHUB_OUTPUT
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener pod with label actions.github.com/scale-set-name=$ARC_NAME"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME
 | |
|           kubectl get pod -n arc-systems
 | |
| 
 | |
|           sleep 60          
 | |
| 
 | |
|       - name: Test ARC E2E
 | |
|         uses: ./.github/actions/execute-assert-arc-e2e
 | |
|         timeout-minutes: 10
 | |
|         with:
 | |
|           auth-token: ${{ steps.setup.outputs.token }}
 | |
|           repo-owner: ${{ env.TARGET_ORG }}
 | |
|           repo-name: ${{env.TARGET_REPO}}
 | |
|           workflow-file: ${{env.WORKFLOW_FILE}}
 | |
|           arc-name: ${{steps.install_arc.outputs.ARC_NAME}}
 | |
|           arc-namespace: "arc-runners"
 | |
|           arc-controller-namespace: "arc-systems"
 | |
| 
 | |
|   dind-mode-setup:
 | |
|     runs-on: ubuntu-latest
 | |
|     timeout-minutes: 20
 | |
|     if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
 | |
|     env:
 | |
|       WORKFLOW_FILE: arc-test-dind-workflow.yaml
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|         with:
 | |
|           ref: ${{github.head_ref}}
 | |
| 
 | |
|       - uses: ./.github/actions/setup-arc-e2e
 | |
|         id: setup
 | |
|         with:
 | |
|           app-id: ${{secrets.E2E_TESTS_ACCESS_APP_ID}}
 | |
|           app-pk: ${{secrets.E2E_TESTS_ACCESS_PK}}
 | |
|           image-name: ${{env.IMAGE_NAME}}
 | |
|           image-tag: ${{env.IMAGE_VERSION}}
 | |
|           target-org: ${{env.TARGET_ORG}}
 | |
| 
 | |
|       - name: Install gha-runner-scale-set-controller
 | |
|         id: install_arc_controller
 | |
|         run: |
 | |
|           helm install arc \
 | |
|           --namespace "arc-systems" \
 | |
|           --create-namespace \
 | |
|           --set image.repository=${{ env.IMAGE_NAME }} \
 | |
|           --set image.tag=${{ env.IMAGE_VERSION }} \
 | |
|           ./charts/gha-runner-scale-set-controller \
 | |
|           --debug
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l app.kubernetes.io/name=gha-rs-controller -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-rs-controller"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-rs-controller
 | |
|           kubectl get pod -n arc-systems
 | |
|           kubectl describe deployment arc-gha-rs-controller -n arc-systems          
 | |
| 
 | |
|       - name: Install gha-runner-scale-set
 | |
|         id: install_arc
 | |
|         run: |
 | |
|           ARC_NAME=${{github.job}}-$(date +'%M%S')$((($RANDOM + 100) % 100 + 1))
 | |
|           helm install "$ARC_NAME" \
 | |
|           --namespace "arc-runners" \
 | |
|           --create-namespace \
 | |
|           --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{env.TARGET_REPO}}" \
 | |
|           --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|           --set containerMode.type="dind" \
 | |
|           ./charts/gha-runner-scale-set \
 | |
|           --debug
 | |
|           echo "ARC_NAME=$ARC_NAME" >> $GITHUB_OUTPUT
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener pod with label actions.github.com/scale-set-name=$ARC_NAME"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME
 | |
|           kubectl get pod -n arc-systems
 | |
| 
 | |
|           sleep 60          
 | |
| 
 | |
|       - name: Test ARC E2E
 | |
|         uses: ./.github/actions/execute-assert-arc-e2e
 | |
|         timeout-minutes: 10
 | |
|         with:
 | |
|           auth-token: ${{ steps.setup.outputs.token }}
 | |
|           repo-owner: ${{ env.TARGET_ORG }}
 | |
|           repo-name: ${{env.TARGET_REPO}}
 | |
|           workflow-file: ${{env.WORKFLOW_FILE}}
 | |
|           arc-name: ${{steps.install_arc.outputs.ARC_NAME}}
 | |
|           arc-namespace: "arc-runners"
 | |
|           arc-controller-namespace: "arc-systems"
 | |
| 
 | |
|   kubernetes-mode-setup:
 | |
|     runs-on: ubuntu-latest
 | |
|     timeout-minutes: 20
 | |
|     if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
 | |
|     env:
 | |
|       WORKFLOW_FILE: "arc-test-kubernetes-workflow.yaml"
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|         with:
 | |
|           ref: ${{github.head_ref}}
 | |
| 
 | |
|       - uses: ./.github/actions/setup-arc-e2e
 | |
|         id: setup
 | |
|         with:
 | |
|           app-id: ${{secrets.E2E_TESTS_ACCESS_APP_ID}}
 | |
|           app-pk: ${{secrets.E2E_TESTS_ACCESS_PK}}
 | |
|           image-name: ${{env.IMAGE_NAME}}
 | |
|           image-tag: ${{env.IMAGE_VERSION}}
 | |
|           target-org: ${{env.TARGET_ORG}}
 | |
| 
 | |
|       - name: Install gha-runner-scale-set-controller
 | |
|         id: install_arc_controller
 | |
|         run: |
 | |
|           echo "Install openebs/dynamic-localpv-provisioner"
 | |
|           helm repo add openebs https://openebs.github.io/charts
 | |
|           helm repo update
 | |
|           helm install openebs openebs/openebs -n openebs --create-namespace
 | |
| 
 | |
|           helm install arc \
 | |
|           --namespace "arc-systems" \
 | |
|           --create-namespace \
 | |
|           --set image.repository=${{ env.IMAGE_NAME }} \
 | |
|           --set image.tag=${{ env.IMAGE_VERSION }} \
 | |
|           ./charts/gha-runner-scale-set-controller \
 | |
|           --debug
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l app.kubernetes.io/name=gha-rs-controller -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-rs-controller"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-rs-controller
 | |
|           kubectl get pod -n arc-systems
 | |
|           kubectl describe deployment arc-gha-rs-controller -n arc-systems
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n openebs -l name=openebs-localpv-provisioner          
 | |
| 
 | |
|       - name: Install gha-runner-scale-set
 | |
|         id: install_arc
 | |
|         run: |
 | |
|           ARC_NAME=${{github.job}}-$(date +'%M%S')$((($RANDOM + 100) % 100 + 1))
 | |
|           helm install "$ARC_NAME" \
 | |
|           --namespace "arc-runners" \
 | |
|           --create-namespace \
 | |
|           --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{env.TARGET_REPO}}" \
 | |
|           --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|           --set containerMode.type="kubernetes" \
 | |
|           --set containerMode.kubernetesModeWorkVolumeClaim.accessModes={"ReadWriteOnce"} \
 | |
|           --set containerMode.kubernetesModeWorkVolumeClaim.storageClassName="openebs-hostpath" \
 | |
|           --set containerMode.kubernetesModeWorkVolumeClaim.resources.requests.storage="1Gi" \
 | |
|           ./charts/gha-runner-scale-set \
 | |
|           --debug
 | |
|           echo "ARC_NAME=$ARC_NAME" >> $GITHUB_OUTPUT
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener pod with label actions.github.com/scale-set-name=$ARC_NAME"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME
 | |
|           kubectl get pod -n arc-systems
 | |
| 
 | |
|           sleep 60          
 | |
| 
 | |
|       - name: Test ARC E2E
 | |
|         uses: ./.github/actions/execute-assert-arc-e2e
 | |
|         timeout-minutes: 10
 | |
|         with:
 | |
|           auth-token: ${{ steps.setup.outputs.token }}
 | |
|           repo-owner: ${{ env.TARGET_ORG }}
 | |
|           repo-name: ${{env.TARGET_REPO}}
 | |
|           workflow-file: ${{env.WORKFLOW_FILE}}
 | |
|           arc-name: ${{steps.install_arc.outputs.ARC_NAME}}
 | |
|           arc-namespace: "arc-runners"
 | |
|           arc-controller-namespace: "arc-systems"
 | |
| 
 | |
|   auth-proxy-setup:
 | |
|     runs-on: ubuntu-latest
 | |
|     timeout-minutes: 20
 | |
|     if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
 | |
|     env:
 | |
|       WORKFLOW_FILE: "arc-test-workflow.yaml"
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|         with:
 | |
|           ref: ${{github.head_ref}}
 | |
| 
 | |
|       - uses: ./.github/actions/setup-arc-e2e
 | |
|         id: setup
 | |
|         with:
 | |
|           app-id: ${{secrets.E2E_TESTS_ACCESS_APP_ID}}
 | |
|           app-pk: ${{secrets.E2E_TESTS_ACCESS_PK}}
 | |
|           image-name: ${{env.IMAGE_NAME}}
 | |
|           image-tag: ${{env.IMAGE_VERSION}}
 | |
|           target-org: ${{env.TARGET_ORG}}
 | |
| 
 | |
|       - name: Install gha-runner-scale-set-controller
 | |
|         id: install_arc_controller
 | |
|         run: |
 | |
|           helm install arc \
 | |
|           --namespace "arc-systems" \
 | |
|           --create-namespace \
 | |
|           --set image.repository=${{ env.IMAGE_NAME }} \
 | |
|           --set image.tag=${{ env.IMAGE_VERSION }} \
 | |
|           ./charts/gha-runner-scale-set-controller \
 | |
|           --debug
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l app.kubernetes.io/name=gha-rs-controller -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-rs-controller"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-rs-controller
 | |
|           kubectl get pod -n arc-systems
 | |
|           kubectl describe deployment arc-gha-rs-controller -n arc-systems          
 | |
| 
 | |
|       - name: Install gha-runner-scale-set
 | |
|         id: install_arc
 | |
|         run: |
 | |
|           docker run -d \
 | |
|             --name squid \
 | |
|             --publish 3128:3128 \
 | |
|             huangtingluo/squid-proxy:latest
 | |
|           kubectl create namespace arc-runners
 | |
|           kubectl create secret generic proxy-auth \
 | |
|             --namespace=arc-runners \
 | |
|             --from-literal=username=github \
 | |
|             --from-literal=password='actions'
 | |
|           ARC_NAME=${{github.job}}-$(date +'%M%S')$((($RANDOM + 100) % 100 + 1))
 | |
|           helm install "$ARC_NAME" \
 | |
|           --namespace "arc-runners" \
 | |
|           --create-namespace \
 | |
|           --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{env.TARGET_REPO}}" \
 | |
|           --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|           --set proxy.https.url="http://host.minikube.internal:3128" \
 | |
|           --set proxy.https.credentialSecretRef="proxy-auth" \
 | |
|           --set "proxy.noProxy[0]=10.96.0.1:443" \
 | |
|           ./charts/gha-runner-scale-set \
 | |
|           --debug
 | |
|           echo "ARC_NAME=$ARC_NAME" >> $GITHUB_OUTPUT
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener pod with label actions.github.com/scale-set-name=$ARC_NAME"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME
 | |
|           kubectl get pod -n arc-systems
 | |
| 
 | |
|           sleep 60          
 | |
| 
 | |
|       - name: Test ARC E2E
 | |
|         uses: ./.github/actions/execute-assert-arc-e2e
 | |
|         timeout-minutes: 10
 | |
|         with:
 | |
|           auth-token: ${{ steps.setup.outputs.token }}
 | |
|           repo-owner: ${{ env.TARGET_ORG }}
 | |
|           repo-name: ${{env.TARGET_REPO}}
 | |
|           workflow-file: ${{env.WORKFLOW_FILE}}
 | |
|           arc-name: ${{steps.install_arc.outputs.ARC_NAME}}
 | |
|           arc-namespace: "arc-runners"
 | |
|           arc-controller-namespace: "arc-systems"
 | |
| 
 | |
|   anonymous-proxy-setup:
 | |
|     runs-on: ubuntu-latest
 | |
|     timeout-minutes: 20
 | |
|     if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
 | |
|     env:
 | |
|       WORKFLOW_FILE: "arc-test-workflow.yaml"
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|         with:
 | |
|           ref: ${{github.head_ref}}
 | |
| 
 | |
|       - uses: ./.github/actions/setup-arc-e2e
 | |
|         id: setup
 | |
|         with:
 | |
|           app-id: ${{secrets.E2E_TESTS_ACCESS_APP_ID}}
 | |
|           app-pk: ${{secrets.E2E_TESTS_ACCESS_PK}}
 | |
|           image-name: ${{env.IMAGE_NAME}}
 | |
|           image-tag: ${{env.IMAGE_VERSION}}
 | |
|           target-org: ${{env.TARGET_ORG}}
 | |
| 
 | |
|       - name: Install gha-runner-scale-set-controller
 | |
|         id: install_arc_controller
 | |
|         run: |
 | |
|           helm install arc \
 | |
|           --namespace "arc-systems" \
 | |
|           --create-namespace \
 | |
|           --set image.repository=${{ env.IMAGE_NAME }} \
 | |
|           --set image.tag=${{ env.IMAGE_VERSION }} \
 | |
|           ./charts/gha-runner-scale-set-controller \
 | |
|           --debug
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l app.kubernetes.io/name=gha-rs-controller -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-rs-controller"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-rs-controller
 | |
|           kubectl get pod -n arc-systems
 | |
|           kubectl describe deployment arc-gha-rs-controller -n arc-systems          
 | |
| 
 | |
|       - name: Install gha-runner-scale-set
 | |
|         id: install_arc
 | |
|         run: |
 | |
|           docker run -d \
 | |
|             --name squid \
 | |
|             --publish 3128:3128 \
 | |
|             ubuntu/squid:latest
 | |
|           ARC_NAME=${{github.job}}-$(date +'%M%S')$((($RANDOM + 100) % 100 + 1))
 | |
|           helm install "$ARC_NAME" \
 | |
|           --namespace "arc-runners" \
 | |
|           --create-namespace \
 | |
|           --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{env.TARGET_REPO}}" \
 | |
|           --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|           --set proxy.https.url="http://host.minikube.internal:3128" \
 | |
|           --set "proxy.noProxy[0]=10.96.0.1:443" \
 | |
|           ./charts/gha-runner-scale-set \
 | |
|           --debug
 | |
|           echo "ARC_NAME=$ARC_NAME" >> $GITHUB_OUTPUT
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener pod with label actions.github.com/scale-set-name=$ARC_NAME"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME
 | |
|           kubectl get pod -n arc-systems
 | |
| 
 | |
|           sleep 60          
 | |
| 
 | |
|       - name: Test ARC E2E
 | |
|         uses: ./.github/actions/execute-assert-arc-e2e
 | |
|         timeout-minutes: 10
 | |
|         with:
 | |
|           auth-token: ${{ steps.setup.outputs.token }}
 | |
|           repo-owner: ${{ env.TARGET_ORG }}
 | |
|           repo-name: ${{env.TARGET_REPO}}
 | |
|           workflow-file: ${{env.WORKFLOW_FILE}}
 | |
|           arc-name: ${{steps.install_arc.outputs.ARC_NAME}}
 | |
|           arc-namespace: "arc-runners"
 | |
|           arc-controller-namespace: "arc-systems"
 | |
| 
 | |
|   self-signed-ca-setup:
 | |
|     runs-on: ubuntu-latest
 | |
|     timeout-minutes: 20
 | |
|     if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
 | |
|     env:
 | |
|       WORKFLOW_FILE: "arc-test-workflow.yaml"
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|         with:
 | |
|           ref: ${{github.head_ref}}
 | |
| 
 | |
|       - uses: ./.github/actions/setup-arc-e2e
 | |
|         id: setup
 | |
|         with:
 | |
|           app-id: ${{secrets.E2E_TESTS_ACCESS_APP_ID}}
 | |
|           app-pk: ${{secrets.E2E_TESTS_ACCESS_PK}}
 | |
|           image-name: ${{env.IMAGE_NAME}}
 | |
|           image-tag: ${{env.IMAGE_VERSION}}
 | |
|           target-org: ${{env.TARGET_ORG}}
 | |
| 
 | |
|       - name: Install gha-runner-scale-set-controller
 | |
|         id: install_arc_controller
 | |
|         run: |
 | |
|           helm install arc \
 | |
|           --namespace "arc-systems" \
 | |
|           --create-namespace \
 | |
|           --set image.repository=${{ env.IMAGE_NAME }} \
 | |
|           --set image.tag=${{ env.IMAGE_VERSION }} \
 | |
|           ./charts/gha-runner-scale-set-controller \
 | |
|           --debug
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l app.kubernetes.io/name=gha-rs-controller -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-rs-controller"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-rs-controller
 | |
|           kubectl get pod -n arc-systems
 | |
|           kubectl describe deployment arc-gha-rs-controller -n arc-systems          
 | |
| 
 | |
|       - name: Install gha-runner-scale-set
 | |
|         id: install_arc
 | |
|         run: |
 | |
|           docker run -d \
 | |
|             --rm \
 | |
|             --name mitmproxy \
 | |
|             --publish 8080:8080 \
 | |
|             -v ${{ github.workspace }}/mitmproxy:/home/mitmproxy/.mitmproxy \
 | |
|             mitmproxy/mitmproxy:latest \
 | |
|             mitmdump
 | |
|           count=0
 | |
|           while true; do
 | |
|             if [ -f "${{ github.workspace }}/mitmproxy/mitmproxy-ca-cert.pem" ]; then
 | |
|               echo "CA cert generated"
 | |
|               cat ${{ github.workspace }}/mitmproxy/mitmproxy-ca-cert.pem
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for mitmproxy generate its CA cert"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           sudo cp ${{ github.workspace }}/mitmproxy/mitmproxy-ca-cert.pem ${{ github.workspace }}/mitmproxy/mitmproxy-ca-cert.crt
 | |
|           sudo chown runner ${{ github.workspace }}/mitmproxy/mitmproxy-ca-cert.crt
 | |
|           kubectl create namespace arc-runners
 | |
|           kubectl -n arc-runners create configmap ca-cert --from-file="${{ github.workspace }}/mitmproxy/mitmproxy-ca-cert.crt"
 | |
|           kubectl -n arc-runners get configmap ca-cert -o yaml
 | |
|           ARC_NAME=${{github.job}}-$(date +'%M%S')$((($RANDOM + 100) % 100 + 1))
 | |
|           helm install "$ARC_NAME" \
 | |
|           --namespace "arc-runners" \
 | |
|           --create-namespace \
 | |
|           --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{env.TARGET_REPO}}" \
 | |
|           --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|           --set proxy.https.url="http://host.minikube.internal:8080" \
 | |
|           --set "proxy.noProxy[0]=10.96.0.1:443" \
 | |
|           --set "githubServerTLS.certificateFrom.configMapKeyRef.name=ca-cert" \
 | |
|           --set "githubServerTLS.certificateFrom.configMapKeyRef.key=mitmproxy-ca-cert.crt" \
 | |
|           --set "githubServerTLS.runnerMountPath=/usr/local/share/ca-certificates/" \
 | |
|           ./charts/gha-runner-scale-set \
 | |
|           --debug
 | |
|           echo "ARC_NAME=$ARC_NAME" >> $GITHUB_OUTPUT
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener pod with label actions.github.com/scale-set-name=$ARC_NAME"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME
 | |
|           kubectl get pod -n arc-systems
 | |
| 
 | |
|           sleep 60          
 | |
| 
 | |
|       - name: Test ARC E2E
 | |
|         uses: ./.github/actions/execute-assert-arc-e2e
 | |
|         timeout-minutes: 10
 | |
|         with:
 | |
|           auth-token: ${{ steps.setup.outputs.token }}
 | |
|           repo-owner: ${{ env.TARGET_ORG }}
 | |
|           repo-name: ${{env.TARGET_REPO}}
 | |
|           workflow-file: ${{env.WORKFLOW_FILE}}
 | |
|           arc-name: ${{steps.install_arc.outputs.ARC_NAME}}
 | |
|           arc-namespace: "arc-runners"
 | |
|           arc-controller-namespace: "arc-systems"
 | |
| 
 | |
|   update-strategy-tests:
 | |
|     runs-on: ubuntu-latest
 | |
|     timeout-minutes: 20
 | |
|     if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
 | |
|     env:
 | |
|       WORKFLOW_FILE: "arc-test-sleepy-matrix.yaml"
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|         with:
 | |
|           ref: ${{github.head_ref}}
 | |
| 
 | |
|       - uses: ./.github/actions/setup-arc-e2e
 | |
|         id: setup
 | |
|         with:
 | |
|           app-id: ${{secrets.E2E_TESTS_ACCESS_APP_ID}}
 | |
|           app-pk: ${{secrets.E2E_TESTS_ACCESS_PK}}
 | |
|           image-name: ${{env.IMAGE_NAME}}
 | |
|           image-tag: ${{env.IMAGE_VERSION}}
 | |
|           target-org: ${{env.TARGET_ORG}}
 | |
| 
 | |
|       - name: Install gha-runner-scale-set-controller
 | |
|         id: install_arc_controller
 | |
|         run: |
 | |
|           helm install arc \
 | |
|           --namespace "arc-systems" \
 | |
|           --create-namespace \
 | |
|           --set image.repository=${{ env.IMAGE_NAME }} \
 | |
|           --set image.tag=${{ env.IMAGE_VERSION }} \
 | |
|           --set flags.updateStrategy="eventual" \
 | |
|           ./charts/gha-runner-scale-set-controller \
 | |
|           --debug
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l app.kubernetes.io/name=gha-rs-controller -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-rs-controller"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-rs-controller
 | |
|           kubectl get pod -n arc-systems
 | |
|           kubectl describe deployment arc-gha-rs-controller -n arc-systems          
 | |
| 
 | |
|       - name: Install gha-runner-scale-set
 | |
|         id: install_arc
 | |
|         run: |
 | |
|           ARC_NAME=${{github.job}}-$(date +'%M%S')$((($RANDOM + 100) % 100 + 1))
 | |
|           helm install "$ARC_NAME" \
 | |
|           --namespace "arc-runners" \
 | |
|           --create-namespace \
 | |
|           --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{env.TARGET_REPO}}" \
 | |
|           --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|           ./charts/gha-runner-scale-set \
 | |
|           --debug
 | |
|           echo "ARC_NAME=$ARC_NAME" >> $GITHUB_OUTPUT
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener pod with label actions.github.com/scale-set-name=$ARC_NAME"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME
 | |
|           kubectl get pod -n arc-systems
 | |
| 
 | |
|           sleep 60          
 | |
| 
 | |
|       - name: Trigger long running jobs and wait for runners to pick them up
 | |
|         uses: ./.github/actions/execute-assert-arc-e2e
 | |
|         timeout-minutes: 10
 | |
|         with:
 | |
|           auth-token: ${{ steps.setup.outputs.token }}
 | |
|           repo-owner: ${{ env.TARGET_ORG }}
 | |
|           repo-name: ${{env.TARGET_REPO}}
 | |
|           workflow-file: ${{env.WORKFLOW_FILE}}
 | |
|           arc-name: ${{steps.install_arc.outputs.ARC_NAME}}
 | |
|           arc-namespace: "arc-runners"
 | |
|           arc-controller-namespace: "arc-systems"
 | |
|           wait-to-running: "true"
 | |
|           wait-to-finish: "false"
 | |
| 
 | |
|       - name: Upgrade the gha-runner-scale-set
 | |
|         shell: bash
 | |
|         run: |
 | |
|           helm upgrade --install "${{ steps.install_arc.outputs.ARC_NAME }}" \
 | |
|             --namespace "arc-runners" \
 | |
|             --create-namespace \
 | |
|             --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{ env.TARGET_REPO }}" \
 | |
|             --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|             --set template.spec.containers[0].name="runner" \
 | |
|             --set template.spec.containers[0].image="ghcr.io/actions/actions-runner:latest" \
 | |
|             --set template.spec.containers[0].command={"/home/runner/run.sh"} \
 | |
|             --set template.spec.containers[0].env[0].name="TEST" \
 | |
|             --set template.spec.containers[0].env[0].value="E2E TESTS" \
 | |
|             ./charts/gha-runner-scale-set \
 | |
|             --debug          
 | |
| 
 | |
|       - name: Assert that the listener is deleted while jobs are running
 | |
|         shell: bash
 | |
|         run: |
 | |
|           count=0
 | |
|           while true; do
 | |
|             LISTENER_COUNT="$(kubectl get pods -l actions.github.com/scale-set-name=${{ steps.install_arc.outputs.ARC_NAME }} -n arc-systems --field-selector=status.phase=Running -o=jsonpath='{.items}' | jq 'length')"
 | |
|             RUNNERS_COUNT="$(kubectl get pods -l app.kubernetes.io/component=runner -n arc-runners --field-selector=status.phase=Running -o=jsonpath='{.items}' | jq 'length')"
 | |
|             RESOURCES="$(kubectl get pods -A)"
 | |
| 
 | |
|             if [ "$LISTENER_COUNT" -eq 0 ]; then
 | |
|               echo "Listener has been deleted"
 | |
|               echo "$RESOURCES"
 | |
|               exit 0
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener to be deleted"
 | |
|               echo "$RESOURCES"
 | |
|               exit 1
 | |
|             fi
 | |
| 
 | |
|             echo "Waiting for listener to be deleted"
 | |
|             echo "Listener count: $LISTENER_COUNT target: 0 | Runners count: $RUNNERS_COUNT target: 3"
 | |
| 
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done          
 | |
| 
 | |
|       - name: Assert that the listener goes back up after the jobs are done
 | |
|         shell: bash
 | |
|         run: |
 | |
|           count=0
 | |
|           while true; do
 | |
|             LISTENER_COUNT="$(kubectl get pods -l actions.github.com/scale-set-name=${{ steps.install_arc.outputs.ARC_NAME }} -n arc-systems --field-selector=status.phase=Running -o=jsonpath='{.items}' | jq 'length')"
 | |
|             RUNNERS_COUNT="$(kubectl get pods -l app.kubernetes.io/component=runner -n arc-runners --field-selector=status.phase=Running -o=jsonpath='{.items}' | jq 'length')"
 | |
|             RESOURCES="$(kubectl get pods -A)"
 | |
| 
 | |
|             if [ "$LISTENER_COUNT" -eq 1 ]; then
 | |
|               echo "Listener is up!"
 | |
|               echo "$RESOURCES"
 | |
|               exit 0
 | |
|             fi
 | |
|             if [ "$count" -ge 120 ]; then
 | |
|               echo "Timeout waiting for listener to be recreated"
 | |
|               echo "$RESOURCES"
 | |
|               exit 1
 | |
|             fi
 | |
| 
 | |
|             echo "Waiting for listener to be recreated"
 | |
|             echo "Listener count: $LISTENER_COUNT target: 1 | Runners count: $RUNNERS_COUNT target: 0"
 | |
| 
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done          
 | |
| 
 | |
|       - name: Gather logs and cleanup
 | |
|         shell: bash
 | |
|         if: always()
 | |
|         run: |
 | |
|           helm uninstall "${{ steps.install_arc.outputs.ARC_NAME }}" --namespace "arc-runners" --debug
 | |
|           kubectl wait --timeout=10s --for=delete AutoScalingRunnerSet -n "${{ steps.install_arc.outputs.ARC_NAME }}" -l app.kubernetes.io/instance="${{ steps.install_arc.outputs.ARC_NAME }}"
 | |
|           kubectl logs deployment/arc-gha-rs-controller -n "arc-systems"          
 | |
| 
 | |
|   init-with-min-runners:
 | |
|     runs-on: ubuntu-latest
 | |
|     timeout-minutes: 20
 | |
|     if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
 | |
|     env:
 | |
|       WORKFLOW_FILE: arc-test-workflow.yaml
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
|         with:
 | |
|           ref: ${{ github.head_ref }}
 | |
| 
 | |
|       - uses: ./.github/actions/setup-arc-e2e
 | |
|         id: setup
 | |
|         with:
 | |
|           app-id: ${{secrets.E2E_TESTS_ACCESS_APP_ID}}
 | |
|           app-pk: ${{secrets.E2E_TESTS_ACCESS_PK}}
 | |
|           image-name: ${{env.IMAGE_NAME}}
 | |
|           image-tag: ${{env.IMAGE_VERSION}}
 | |
|           target-org: ${{env.TARGET_ORG}}
 | |
| 
 | |
|       - name: Install gha-runner-scale-set-controller
 | |
|         id: install_arc_controller
 | |
|         run: |
 | |
|           helm install arc \
 | |
|           --namespace "arc-systems" \
 | |
|           --create-namespace \
 | |
|           --set image.repository=${{ env.IMAGE_NAME }} \
 | |
|           --set image.tag=${{ env.IMAGE_VERSION }} \
 | |
|           --set flags.updateStrategy="eventual" \
 | |
|           ./charts/gha-runner-scale-set-controller \
 | |
|           --debug
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l app.kubernetes.io/name=gha-rs-controller -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-rs-controller"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-rs-controller
 | |
|           kubectl get pod -n arc-systems
 | |
|           kubectl describe deployment arc-gha-rs-controller -n arc-systems          
 | |
| 
 | |
|       - name: Install gha-runner-scale-set
 | |
|         id: install_arc
 | |
|         run: |
 | |
|           ARC_NAME=${{github.job}}-$(date +'%M%S')$((($RANDOM + 100) % 100 + 1))
 | |
|           helm install "$ARC_NAME" \
 | |
|           --namespace "arc-runners" \
 | |
|           --create-namespace \
 | |
|           --set githubConfigUrl="https://github.com/${{ env.TARGET_ORG }}/${{env.TARGET_REPO}}" \
 | |
|           --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \
 | |
|           --set minRunners=5 \
 | |
|           ./charts/gha-runner-scale-set \
 | |
|           --debug
 | |
|           echo "ARC_NAME=$ARC_NAME" >> $GITHUB_OUTPUT
 | |
|           count=0
 | |
|           while true; do
 | |
|             POD_NAME=$(kubectl get pods -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME -o name)
 | |
|             if [ -n "$POD_NAME" ]; then
 | |
|               echo "Pod found: $POD_NAME"
 | |
|               break
 | |
|             fi
 | |
|             if [ "$count" -ge 60 ]; then
 | |
|               echo "Timeout waiting for listener pod with label actions.github.com/scale-set-name=$ARC_NAME"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done
 | |
|           kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l actions.github.com/scale-set-name=$ARC_NAME
 | |
|           kubectl get pod -n arc-systems          
 | |
|       - name: Ensure 5 runners are up
 | |
|         run: |
 | |
|           count=0
 | |
|           while true; do
 | |
|             pod_count=$(kubectl get pods -n arc-runners --no-headers | wc -l)
 | |
|             if [[ "$pod_count" = 5 ]]; then
 | |
|               echo "5 pods are up!"
 | |
|               break
 | |
|             fi
 | |
|             if [[ "$count" -ge 12 ]]; then
 | |
|               echo "Timeout waiting for 5 pods to be created"
 | |
|               exit 1
 | |
|             fi
 | |
|             sleep 1
 | |
|             count=$((count+1))
 | |
|           done          
 |