From 44c3931d8e840749b22f991491b3989201b1c72e Mon Sep 17 00:00:00 2001 From: Tingluo Huang Date: Wed, 15 Mar 2023 12:17:11 -0400 Subject: [PATCH] Adding e2e workflows to test dind, kube mode and proxy (#2412) --- .github/actions/setup-arc-e2e/action.yaml | 7 +- .github/workflows/e2e-test-linux-vm.yaml | 506 +++++++++++++++++++++- test_e2e_arc/arc_jobs_test.go | 12 +- 3 files changed, 518 insertions(+), 7 deletions(-) diff --git a/.github/actions/setup-arc-e2e/action.yaml b/.github/actions/setup-arc-e2e/action.yaml index 1f533b16..922bb9f8 100644 --- a/.github/actions/setup-arc-e2e/action.yaml +++ b/.github/actions/setup-arc-e2e/action.yaml @@ -49,12 +49,11 @@ runs: cache-from: type=gha cache-to: type=gha,mode=max - - name: Create Kind cluster and load image + - name: Create minikube cluster and load image shell: bash run: | - PATH=$(go env GOPATH)/bin:$PATH - kind create cluster --name arc-e2e - kind load docker-image ${{inputs.docker-image-name}}:${{inputs.docker-image-tag}} --name arc-e2e + minikube start + minikube image load ${{inputs.docker-image-name}}:${{inputs.docker-image-tag}} - name: Get configure token id: config-token diff --git a/.github/workflows/e2e-test-linux-vm.yaml b/.github/workflows/e2e-test-linux-vm.yaml index d0c71c21..621d6962 100644 --- a/.github/workflows/e2e-test-linux-vm.yaml +++ b/.github/workflows/e2e-test-linux-vm.yaml @@ -27,6 +27,8 @@ env: jobs: default-setup: runs-on: ubuntu-latest + env: + WORKFLOW_FILE: "arc-test-workflow.yaml" steps: - uses: actions/checkout@v3 @@ -109,9 +111,11 @@ jobs: kubectl get pod -n arc-systems - name: Test ARC scales pods up and down + id: test run: | export GITHUB_TOKEN="${{ steps.setup.outputs.token }}" export ARC_NAME="${{ steps.install_arc.outputs.ARC_NAME }}" + export WORKFLOW_FILE="${{env.WORKFLOW_FILE}}" go test ./test_e2e_arc -v - name: Uninstall gha-runner-scale-set @@ -125,8 +129,19 @@ jobs: run: | kubectl logs deployment/arc-gha-runner-scale-set-controller -n arc-systems + - name: Job summary + if: always() && steps.install_arc.outcome == 'success' + run: | + cat <<-EOF > $GITHUB_STEP_SUMMARY + | **Outcome** | ${{ steps.test.outcome }} | + |----------------|--------------------------------------------- | + | **References** | [Test workflow runs](https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.TARGET_REPO}}/actions/workflows/${{ env.WORKFLOW_FILE }}) | + EOF + single-namespace-setup: runs-on: ubuntu-latest + env: + WORKFLOW_FILE: "arc-test-workflow.yaml" steps: - uses: actions/checkout@v3 @@ -211,9 +226,11 @@ jobs: kubectl get pod -n arc-systems - name: Test ARC scales pods up and down + id: test run: | export GITHUB_TOKEN="${{ steps.setup.outputs.token }}" export ARC_NAME="${{ steps.install_arc.outputs.ARC_NAME }}" + export WORKFLOW_FILE="${{env.WORKFLOW_FILE}}" go test ./test_e2e_arc -v - name: Uninstall gha-runner-scale-set @@ -225,4 +242,491 @@ jobs: - name: Dump gha-runner-scale-set-controller logs if: always() && steps.install_arc_controller.outcome == 'success' run: | - kubectl logs deployment/arc-gha-runner-scale-set-controller -n arc-systems \ No newline at end of file + kubectl logs deployment/arc-gha-runner-scale-set-controller -n arc-systems + + - name: Job summary + if: always() && steps.install_arc.outcome == 'success' + run: | + cat <<-EOF > $GITHUB_STEP_SUMMARY + | **Outcome** | ${{ steps.test.outcome }} | + |----------------|--------------------------------------------- | + | **References** | [Test workflow runs](https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.TARGET_REPO}}/actions/workflows/${{ env.WORKFLOW_FILE }}) | + EOF + + dind-mode-setup: + runs-on: ubuntu-latest + env: + WORKFLOW_FILE: arc-test-dind-workflow.yaml + steps: + - uses: actions/checkout@v3 + + - name: Resolve inputs + id: resolved_inputs + run: | + TARGET_ORG="${{env.TARGET_ORG}}" + TARGET_REPO="${{env.TARGET_REPO}}" + if [ ! -z "${{inputs.target_org}}" ]; then + TARGET_ORG="${{inputs.target_org}}" + fi + if [ ! -z "${{inputs.target_repo}}" ]; then + TARGET_REPO="${{inputs.target_repo}}" + fi + echo "TARGET_ORG=$TARGET_ORG" >> $GITHUB_OUTPUT + echo "TARGET_REPO=$TARGET_REPO" >> $GITHUB_OUTPUT + + - uses: ./.github/actions/setup-arc-e2e + id: setup + with: + github-app-id: ${{secrets.ACTIONS_ACCESS_APP_ID}} + github-app-pk: ${{secrets.ACTIONS_ACCESS_PK}} + github-app-org: ${{steps.resolved_inputs.outputs.TARGET_ORG}} + docker-image-name: ${{env.IMAGE_NAME}} + docker-image-tag: ${{env.IMAGE_VERSION}} + + - 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-runner-scale-set-controller -o name) + if [ -n "$POD_NAME" ]; then + echo "Pod found: $POD_NAME" + break + fi + if [ "$count" -ge 10 ]; then + echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-runner-scale-set-controller" + exit 1 + fi + sleep 1 + done + kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-runner-scale-set-controller + kubectl get pod -n arc-systems + kubectl describe deployment arc-gha-runner-scale-set-controller -n arc-systems + + - name: Install gha-runner-scale-set + id: install_arc + run: | + ARC_NAME=arc-runner-${{github.job}}-$(date +'%M-%S')-$(($RANDOM % 100 + 1)) + helm install "$ARC_NAME" \ + --namespace "arc-runners" \ + --create-namespace \ + --set githubConfigUrl="https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.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 auto-scaling-runner-set-name=$ARC_NAME -o name) + if [ -n "$POD_NAME" ]; then + echo "Pod found: $POD_NAME" + break + fi + if [ "$count" -ge 10 ]; then + echo "Timeout waiting for listener pod with label auto-scaling-runner-set-name=$ARC_NAME" + exit 1 + fi + sleep 1 + done + kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l auto-scaling-runner-set-name=$ARC_NAME + kubectl get pod -n arc-systems + + - name: Test ARC scales pods up and down + id: test + run: | + export GITHUB_TOKEN="${{ steps.setup.outputs.token }}" + export ARC_NAME="${{ steps.install_arc.outputs.ARC_NAME }}" + export WORKFLOW_FILE="${{env.WORKFLOW_FILE}}" + go test ./test_e2e_arc -v + + - name: Uninstall gha-runner-scale-set + if: always() && steps.install_arc.outcome == 'success' + run: | + helm uninstall ${{ steps.install_arc.outputs.ARC_NAME }} --namespace arc-runners + kubectl wait --timeout=10s --for=delete AutoScalingRunnerSet -n demo -l app.kubernetes.io/instance=${{ steps.install_arc.outputs.ARC_NAME }} + + - name: Dump gha-runner-scale-set-controller logs + if: always() && steps.install_arc_controller.outcome == 'success' + run: | + kubectl logs deployment/arc-gha-runner-scale-set-controller -n arc-systems + + - name: Job summary + if: always() && steps.install_arc.outcome == 'success' + run: | + cat <<-EOF > $GITHUB_STEP_SUMMARY + | **Outcome** | ${{ steps.test.outcome }} | + |----------------|--------------------------------------------- | + | **References** | [Test workflow runs](https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.TARGET_REPO}}/actions/workflows/${{ env.WORKFLOW_FILE }}) | + EOF + + kubernetes-mode-setup: + runs-on: ubuntu-latest + env: + WORKFLOW_FILE: "arc-test-kubernetes-workflow.yaml" + steps: + - uses: actions/checkout@v3 + + - name: Resolve inputs + id: resolved_inputs + run: | + TARGET_ORG="${{env.TARGET_ORG}}" + TARGET_REPO="${{env.TARGET_REPO}}" + if [ ! -z "${{inputs.target_org}}" ]; then + TARGET_ORG="${{inputs.target_org}}" + fi + if [ ! -z "${{inputs.target_repo}}" ]; then + TARGET_REPO="${{inputs.target_repo}}" + fi + echo "TARGET_ORG=$TARGET_ORG" >> $GITHUB_OUTPUT + echo "TARGET_REPO=$TARGET_REPO" >> $GITHUB_OUTPUT + + - uses: ./.github/actions/setup-arc-e2e + id: setup + with: + github-app-id: ${{secrets.ACTIONS_ACCESS_APP_ID}} + github-app-pk: ${{secrets.ACTIONS_ACCESS_PK}} + github-app-org: ${{steps.resolved_inputs.outputs.TARGET_ORG}} + docker-image-name: ${{env.IMAGE_NAME}} + docker-image-tag: ${{env.IMAGE_VERSION}} + + - 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-runner-scale-set-controller -o name) + if [ -n "$POD_NAME" ]; then + echo "Pod found: $POD_NAME" + break + fi + if [ "$count" -ge 10 ]; then + echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-runner-scale-set-controller" + exit 1 + fi + sleep 1 + done + kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-runner-scale-set-controller + kubectl get pod -n arc-systems + kubectl describe deployment arc-gha-runner-scale-set-controller -n arc-systems + + - name: Install gha-runner-scale-set + id: install_arc + 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 + + ARC_NAME=arc-runner-${{github.job}}-$(date +'%M-%S')-$(($RANDOM % 100 + 1)) + helm install "$ARC_NAME" \ + --namespace "arc-runners" \ + --create-namespace \ + --set githubConfigUrl="https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.TARGET_REPO}}" \ + --set githubConfigSecret.github_token="${{ steps.setup.outputs.token }}" \ + --set containerMode.type="kubernetes" \ + --set containerMode.kubernetesModeWorkVolumeClaim.storageClassName="openebs-hostpath" \ + ./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 auto-scaling-runner-set-name=$ARC_NAME -o name) + if [ -n "$POD_NAME" ]; then + echo "Pod found: $POD_NAME" + break + fi + if [ "$count" -ge 10 ]; then + echo "Timeout waiting for listener pod with label auto-scaling-runner-set-name=$ARC_NAME" + exit 1 + fi + sleep 1 + done + kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l auto-scaling-runner-set-name=$ARC_NAME + kubectl get pod -n arc-systems + + - name: Test ARC scales pods up and down + id: test + run: | + export GITHUB_TOKEN="${{ steps.setup.outputs.token }}" + export ARC_NAME="${{ steps.install_arc.outputs.ARC_NAME }}" + export WORKFLOW_FILE="${{env.WORKFLOW_FILE}}" + go test ./test_e2e_arc -v + + - name: Uninstall gha-runner-scale-set + if: always() && steps.install_arc.outcome == 'success' + run: | + helm uninstall ${{ steps.install_arc.outputs.ARC_NAME }} --namespace arc-runners + kubectl wait --timeout=10s --for=delete AutoScalingRunnerSet -n demo -l app.kubernetes.io/instance=${{ steps.install_arc.outputs.ARC_NAME }} + + - name: Dump gha-runner-scale-set-controller logs + if: always() && steps.install_arc_controller.outcome == 'success' + run: | + kubectl logs deployment/arc-gha-runner-scale-set-controller -n arc-systems + + - name: Job summary + if: always() && steps.install_arc.outcome == 'success' + run: | + cat <<-EOF > $GITHUB_STEP_SUMMARY + | **Outcome** | ${{ steps.test.outcome }} | + |----------------|--------------------------------------------- | + | **References** | [Test workflow runs](https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.TARGET_REPO}}/actions/workflows/${{ env.WORKFLOW_FILE }}) | + EOF + + auth-proxy-setup: + runs-on: ubuntu-latest + env: + WORKFLOW_FILE: "arc-test-workflow.yaml" + steps: + - uses: actions/checkout@v3 + + - name: Resolve inputs + id: resolved_inputs + run: | + TARGET_ORG="${{env.TARGET_ORG}}" + TARGET_REPO="${{env.TARGET_REPO}}" + if [ ! -z "${{inputs.target_org}}" ]; then + TARGET_ORG="${{inputs.target_org}}" + fi + if [ ! -z "${{inputs.target_repo}}" ]; then + TARGET_REPO="${{inputs.target_repo}}" + fi + echo "TARGET_ORG=$TARGET_ORG" >> $GITHUB_OUTPUT + echo "TARGET_REPO=$TARGET_REPO" >> $GITHUB_OUTPUT + + - uses: ./.github/actions/setup-arc-e2e + id: setup + with: + github-app-id: ${{secrets.ACTIONS_ACCESS_APP_ID}} + github-app-pk: ${{secrets.ACTIONS_ACCESS_PK}} + github-app-org: ${{steps.resolved_inputs.outputs.TARGET_ORG}} + docker-image-name: ${{env.IMAGE_NAME}} + docker-image-tag: ${{env.IMAGE_VERSION}} + + - 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-runner-scale-set-controller -o name) + if [ -n "$POD_NAME" ]; then + echo "Pod found: $POD_NAME" + break + fi + if [ "$count" -ge 10 ]; then + echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-runner-scale-set-controller" + exit 1 + fi + sleep 1 + done + kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-runner-scale-set-controller + kubectl get pod -n arc-systems + kubectl describe deployment arc-gha-runner-scale-set-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=arc-runner-${{github.job}}-$(date +'%M-%S')-$(($RANDOM % 100 + 1)) + helm install "$ARC_NAME" \ + --namespace "arc-runners" \ + --create-namespace \ + --set githubConfigUrl="https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.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 auto-scaling-runner-set-name=$ARC_NAME -o name) + if [ -n "$POD_NAME" ]; then + echo "Pod found: $POD_NAME" + break + fi + if [ "$count" -ge 10 ]; then + echo "Timeout waiting for listener pod with label auto-scaling-runner-set-name=$ARC_NAME" + exit 1 + fi + sleep 1 + done + kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l auto-scaling-runner-set-name=$ARC_NAME + kubectl get pod -n arc-systems + + - name: Test ARC scales pods up and down + id: test + run: | + export GITHUB_TOKEN="${{ steps.setup.outputs.token }}" + export ARC_NAME="${{ steps.install_arc.outputs.ARC_NAME }}" + export WORKFLOW_FILE="${{env.WORKFLOW_FILE}}" + go test ./test_e2e_arc -v + + - name: Uninstall gha-runner-scale-set + if: always() && steps.install_arc.outcome == 'success' + run: | + helm uninstall ${{ steps.install_arc.outputs.ARC_NAME }} --namespace arc-runners + kubectl wait --timeout=10s --for=delete AutoScalingRunnerSet -n demo -l app.kubernetes.io/instance=${{ steps.install_arc.outputs.ARC_NAME }} + + - name: Dump gha-runner-scale-set-controller logs + if: always() && steps.install_arc_controller.outcome == 'success' + run: | + kubectl logs deployment/arc-gha-runner-scale-set-controller -n arc-systems + + - name: Job summary + if: always() && steps.install_arc.outcome == 'success' + run: | + cat <<-EOF > $GITHUB_STEP_SUMMARY + | **Outcome** | ${{ steps.test.outcome }} | + |----------------|--------------------------------------------- | + | **References** | [Test workflow runs](https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.TARGET_REPO}}/actions/workflows/${{ env.WORKFLOW_FILE }}) | + EOF + + anonymous-proxy-setup: + runs-on: ubuntu-latest + env: + WORKFLOW_FILE: "arc-test-workflow.yaml" + steps: + - uses: actions/checkout@v3 + + - name: Resolve inputs + id: resolved_inputs + run: | + TARGET_ORG="${{env.TARGET_ORG}}" + TARGET_REPO="${{env.TARGET_REPO}}" + if [ ! -z "${{inputs.target_org}}" ]; then + TARGET_ORG="${{inputs.target_org}}" + fi + if [ ! -z "${{inputs.target_repo}}" ]; then + TARGET_REPO="${{inputs.target_repo}}" + fi + echo "TARGET_ORG=$TARGET_ORG" >> $GITHUB_OUTPUT + echo "TARGET_REPO=$TARGET_REPO" >> $GITHUB_OUTPUT + + - uses: ./.github/actions/setup-arc-e2e + id: setup + with: + github-app-id: ${{secrets.ACTIONS_ACCESS_APP_ID}} + github-app-pk: ${{secrets.ACTIONS_ACCESS_PK}} + github-app-org: ${{steps.resolved_inputs.outputs.TARGET_ORG}} + docker-image-name: ${{env.IMAGE_NAME}} + docker-image-tag: ${{env.IMAGE_VERSION}} + + - 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-runner-scale-set-controller -o name) + if [ -n "$POD_NAME" ]; then + echo "Pod found: $POD_NAME" + break + fi + if [ "$count" -ge 10 ]; then + echo "Timeout waiting for controller pod with label app.kubernetes.io/name=gha-runner-scale-set-controller" + exit 1 + fi + sleep 1 + done + kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l app.kubernetes.io/name=gha-runner-scale-set-controller + kubectl get pod -n arc-systems + kubectl describe deployment arc-gha-runner-scale-set-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=arc-runner-${{github.job}}-$(date +'%M-%S')-$(($RANDOM % 100 + 1)) + helm install "$ARC_NAME" \ + --namespace "arc-runners" \ + --create-namespace \ + --set githubConfigUrl="https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.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 auto-scaling-runner-set-name=$ARC_NAME -o name) + if [ -n "$POD_NAME" ]; then + echo "Pod found: $POD_NAME" + break + fi + if [ "$count" -ge 10 ]; then + echo "Timeout waiting for listener pod with label auto-scaling-runner-set-name=$ARC_NAME" + exit 1 + fi + sleep 1 + done + kubectl wait --timeout=30s --for=condition=ready pod -n arc-systems -l auto-scaling-runner-set-name=$ARC_NAME + kubectl get pod -n arc-systems + + - name: Test ARC scales pods up and down + id: test + run: | + export GITHUB_TOKEN="${{ steps.setup.outputs.token }}" + export ARC_NAME="${{ steps.install_arc.outputs.ARC_NAME }}" + export WORKFLOW_FILE="${{ env.WORKFLOW_FILE }}" + go test ./test_e2e_arc -v + + - name: Uninstall gha-runner-scale-set + if: always() && steps.install_arc.outcome == 'success' + run: | + helm uninstall ${{ steps.install_arc.outputs.ARC_NAME }} --namespace arc-runners + kubectl wait --timeout=10s --for=delete AutoScalingRunnerSet -n demo -l app.kubernetes.io/instance=${{ steps.install_arc.outputs.ARC_NAME }} + + - name: Dump gha-runner-scale-set-controller logs + if: always() && steps.install_arc_controller.outcome == 'success' + run: | + kubectl logs deployment/arc-gha-runner-scale-set-controller -n arc-systems + + - name: Job summary + if: always() && steps.install_arc.outcome == 'success' + run: | + cat <<-EOF > $GITHUB_STEP_SUMMARY + | **Outcome** | ${{ steps.test.outcome }} | + |----------------|--------------------------------------------- | + | **References** | [Test workflow runs](https://github.com/${{ steps.resolved_inputs.outputs.TARGET_ORG }}/${{steps.resolved_inputs.outputs.TARGET_REPO}}/actions/workflows/${{ env.WORKFLOW_FILE }}) | + EOF diff --git a/test_e2e_arc/arc_jobs_test.go b/test_e2e_arc/arc_jobs_test.go index 8b3ca9f8..39682c87 100644 --- a/test_e2e_arc/arc_jobs_test.go +++ b/test_e2e_arc/arc_jobs_test.go @@ -11,6 +11,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/require" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" @@ -93,16 +94,23 @@ func TestARCJobs(t *testing.T) { t.Run("Get available pods during job run", func(t *testing.T) { c := http.Client{} targetArcName := os.Getenv("ARC_NAME") + require.NotEmpty(t, targetArcName, "ARC_NAME environment variable is required for this test to run. (e.g. arc-e2e-test)") + + targetWorkflow := os.Getenv("WORKFLOW_FILE") + require.NotEmpty(t, targetWorkflow, "WORKFLOW_FILE environment variable is required for this test to run. (e.g. e2e_test.yml)") + + ght := os.Getenv("GITHUB_TOKEN") + require.NotEmpty(t, ght, "GITHUB_TOKEN environment variable is required for this test to run.") + // We are triggering manually a workflow that already exists in the repo. // This workflow is expected to spin up a number of runner pods matching the runners value set in podCountsByType. - url := "https://api.github.com/repos/actions-runner-controller/arc_e2e_test_dummy/actions/workflows/arc-test-workflow.yaml/dispatches" + url := "https://api.github.com/repos/actions-runner-controller/arc_e2e_test_dummy/actions/workflows/" + targetWorkflow + "/dispatches" jsonStr := []byte(fmt.Sprintf(`{"ref":"main", "inputs":{"arc_name":"%s"}}`, targetArcName)) req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr)) if err != nil { t.Fatal(err) } - ght := os.Getenv("GITHUB_TOKEN") req.Header.Add("Accept", "application/vnd.github+json") req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", ght)) req.Header.Add("X-GitHub-Api-Version", "2022-11-28")