From 6df0e09f8454c9a3920a86755cf2d58e60e4b06b Mon Sep 17 00:00:00 2001 From: Nikola Jokic Date: Fri, 18 Sep 2026 10:03:18 +0200 Subject: [PATCH] Revert "Remove legacy e2e tests and promote v2 tests (#4658)" (#4667) --- .github/workflows/gha-e2e-tests.yaml | 212 +++++++++++++++++- .../anonymous-proxy-setup-v2.test.sh | 86 +++++++ .../anonymous-proxy-setup.test.sh | 16 +- .../auth-proxy-setup-v2.test.sh | 101 +++++++++ .../auth-proxy-setup.test.sh | 18 +- .../custom-label-setup-v2.test.sh | 113 ++++++++++ .../custom-label-setup.test.sh | 21 +- .../default-setup-v2.test.sh | 73 ++++++ test/actions.github.com/default-setup.test.sh | 19 +- .../dind-mode-setup-v2.test.sh | 73 ++++++ .../dind-mode-setup.test.sh | 20 +- .../init-with-min-runners-v2.test.sh | 96 ++++++++ .../init-with-min-runners.test.sh | 20 +- .../kubernetes-mode-setup-v2.test.sh | 80 +++++++ .../kubernetes-mode-setup.test.sh | 24 +- .../self-signed-ca-setup-v2.test.sh | 150 +++++++++++++ .../self-signed-ca-setup.test.sh | 16 +- .../single-namespace-setup-v2.test.sh | 73 ++++++ .../single-namespace-setup.test.sh | 20 +- .../update-gha-runner-scale-set-v2.test.sh | 141 ++++++++++++ .../update-gha-runner-scale-set.test.sh | 43 ++-- 21 files changed, 1303 insertions(+), 112 deletions(-) create mode 100755 test/actions.github.com/anonymous-proxy-setup-v2.test.sh create mode 100755 test/actions.github.com/auth-proxy-setup-v2.test.sh create mode 100755 test/actions.github.com/custom-label-setup-v2.test.sh create mode 100755 test/actions.github.com/default-setup-v2.test.sh create mode 100755 test/actions.github.com/dind-mode-setup-v2.test.sh create mode 100755 test/actions.github.com/init-with-min-runners-v2.test.sh create mode 100755 test/actions.github.com/kubernetes-mode-setup-v2.test.sh create mode 100755 test/actions.github.com/self-signed-ca-setup-v2.test.sh create mode 100755 test/actions.github.com/single-namespace-setup-v2.test.sh create mode 100755 test/actions.github.com/update-gha-runner-scale-set-v2.test.sh diff --git a/.github/workflows/gha-e2e-tests.yaml b/.github/workflows/gha-e2e-tests.yaml index 40714604..1b664da7 100644 --- a/.github/workflows/gha-e2e-tests.yaml +++ b/.github/workflows/gha-e2e-tests.yaml @@ -43,12 +43,36 @@ jobs: application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} organization: ${{ env.TARGET_ORG }} + - name: Run default setup test run: hack/e2e-test.sh default-setup env: GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" shell: bash + default-setup-v2: + runs-on: ubuntu-latest + timeout-minutes: 20 + if: github.event_name != 'pull_request' || + github.event.pull_request.head.repo.id == github.repository_id + steps: + - uses: actions/checkout@v7 + with: + ref: ${{github.head_ref}} + + - name: Get configure token + id: config-token + uses: peter-murray/workflow-application-token-action@dad2b81e50ce3edeb5f3b7ffbd79f731368bd668 + with: + application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} + application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} + organization: ${{ env.TARGET_ORG }} + - name: Run default setup test + run: hack/e2e-test.sh default-setup-v2 + env: + GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" + shell: bash + single-namespace-setup: runs-on: ubuntu-latest timeout-minutes: 20 @@ -72,6 +96,29 @@ jobs: GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" shell: bash + single-namespace-setup-v2: + runs-on: ubuntu-latest + timeout-minutes: 20 + if: github.event_name != 'pull_request' || + github.event.pull_request.head.repo.id == github.repository_id + steps: + - uses: actions/checkout@v7 + with: + ref: ${{github.head_ref}} + + - name: Get configure token + id: config-token + uses: peter-murray/workflow-application-token-action@dad2b81e50ce3edeb5f3b7ffbd79f731368bd668 + with: + application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} + application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} + organization: ${{ env.TARGET_ORG }} + - name: Run single namespace setup test + run: hack/e2e-test.sh single-namespace-setup-v2 + env: + GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" + shell: bash + dind-mode-setup: runs-on: ubuntu-latest timeout-minutes: 20 @@ -95,6 +142,29 @@ jobs: GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" shell: bash + dind-mode-setup-v2: + runs-on: ubuntu-latest + timeout-minutes: 20 + if: github.event_name != 'pull_request' || + github.event.pull_request.head.repo.id == github.repository_id + steps: + - uses: actions/checkout@v7 + with: + ref: ${{github.head_ref}} + + - name: Get configure token + id: config-token + uses: peter-murray/workflow-application-token-action@dad2b81e50ce3edeb5f3b7ffbd79f731368bd668 + with: + application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} + application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} + organization: ${{ env.TARGET_ORG }} + - name: Run dind mode setup test + run: hack/e2e-test.sh dind-mode-setup-v2 + env: + GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" + shell: bash + kubernetes-mode-setup: runs-on: ubuntu-latest timeout-minutes: 20 @@ -118,6 +188,29 @@ jobs: GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" shell: bash + kubernetes-mode-setup-v2: + runs-on: ubuntu-latest + timeout-minutes: 20 + if: github.event_name != 'pull_request' || + github.event.pull_request.head.repo.id == github.repository_id + steps: + - uses: actions/checkout@v7 + with: + ref: ${{github.head_ref}} + + - name: Get configure token + id: config-token + uses: peter-murray/workflow-application-token-action@dad2b81e50ce3edeb5f3b7ffbd79f731368bd668 + with: + application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} + application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} + organization: ${{ env.TARGET_ORG }} + - name: Run kubernetes mode setup test + run: hack/e2e-test.sh kubernetes-mode-setup-v2 + env: + GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" + shell: bash + auth-proxy-setup: runs-on: ubuntu-latest timeout-minutes: 20 @@ -135,8 +228,31 @@ jobs: application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} organization: ${{ env.TARGET_ORG }} - - name: Run auth proxy setup test - run: hack/e2e-test.sh auth-proxy-setup + - name: Run single namespace setup test + run: hack/e2e-test.sh single-namespace-setup + env: + GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" + shell: bash + + auth-proxy-setup-v2: + runs-on: ubuntu-latest + timeout-minutes: 20 + if: github.event_name != 'pull_request' || + github.event.pull_request.head.repo.id == github.repository_id + steps: + - uses: actions/checkout@v7 + with: + ref: ${{github.head_ref}} + + - name: Get configure token + id: config-token + uses: peter-murray/workflow-application-token-action@dad2b81e50ce3edeb5f3b7ffbd79f731368bd668 + with: + application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} + application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} + organization: ${{ env.TARGET_ORG }} + - name: Run single namespace setup test + run: hack/e2e-test.sh single-namespace-setup-v2 env: GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" shell: bash @@ -164,6 +280,29 @@ jobs: GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" shell: bash + anonymous-proxy-setup-v2: + runs-on: ubuntu-latest + timeout-minutes: 20 + if: github.event_name != 'pull_request' || + github.event.pull_request.head.repo.id == github.repository_id + steps: + - uses: actions/checkout@v7 + with: + ref: ${{github.head_ref}} + + - name: Get configure token + id: config-token + uses: peter-murray/workflow-application-token-action@dad2b81e50ce3edeb5f3b7ffbd79f731368bd668 + with: + application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} + application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} + organization: ${{ env.TARGET_ORG }} + - name: Run anonymous proxy setup test + run: hack/e2e-test.sh anonymous-proxy-setup-v2 + env: + GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" + shell: bash + self-signed-ca-setup: runs-on: ubuntu-latest timeout-minutes: 20 @@ -187,6 +326,29 @@ jobs: GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" shell: bash + self-signed-ca-setup-v2: + runs-on: ubuntu-latest + timeout-minutes: 20 + if: github.event_name != 'pull_request' || + github.event.pull_request.head.repo.id == github.repository_id + steps: + - uses: actions/checkout@v7 + with: + ref: ${{github.head_ref}} + + - name: Get configure token + id: config-token + uses: peter-murray/workflow-application-token-action@dad2b81e50ce3edeb5f3b7ffbd79f731368bd668 + with: + application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} + application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} + organization: ${{ env.TARGET_ORG }} + - name: Run self signed CA setup test + run: hack/e2e-test.sh self-signed-ca-setup-v2 + env: + GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" + shell: bash + update-gha-runner-scale-set-tests: runs-on: ubuntu-latest timeout-minutes: 20 @@ -210,6 +372,29 @@ jobs: GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" shell: bash + update-gha-runner-scale-set-tests-v2: + runs-on: ubuntu-latest + timeout-minutes: 20 + if: github.event_name != 'pull_request' || + github.event.pull_request.head.repo.id == github.repository_id + steps: + - uses: actions/checkout@v7 + with: + ref: ${{github.head_ref}} + + - name: Get configure token + id: config-token + uses: peter-murray/workflow-application-token-action@dad2b81e50ce3edeb5f3b7ffbd79f731368bd668 + with: + application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} + application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} + organization: ${{ env.TARGET_ORG }} + - name: Run update strategy test + run: hack/e2e-test.sh update-gha-runner-scale-set-v2 + env: + GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" + shell: bash + init-with-min-runners: runs-on: ubuntu-latest timeout-minutes: 20 @@ -232,3 +417,26 @@ jobs: env: GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" shell: bash + + init-with-min-runners-v2: + runs-on: ubuntu-latest + timeout-minutes: 20 + if: github.event_name != 'pull_request' || + github.event.pull_request.head.repo.id == github.repository_id + steps: + - uses: actions/checkout@v7 + with: + ref: ${{github.head_ref}} + + - name: Get configure token + id: config-token + uses: peter-murray/workflow-application-token-action@dad2b81e50ce3edeb5f3b7ffbd79f731368bd668 + with: + application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }} + application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }} + organization: ${{ env.TARGET_ORG }} + - name: Run init with min runners test + run: hack/e2e-test.sh init-with-min-runners-v2 + env: + GITHUB_TOKEN: "${{steps.config-token.outputs.token}}" + shell: bash diff --git a/test/actions.github.com/anonymous-proxy-setup-v2.test.sh b/test/actions.github.com/anonymous-proxy-setup-v2.test.sh new file mode 100755 index 00000000..696e1017 --- /dev/null +++ b/test/actions.github.com/anonymous-proxy-setup-v2.test.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" + +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" + +SCALE_SET_NAME="anonymous-proxy-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-workflow.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +function install_arc() { + echo "Installing ARC" + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_squid() { + echo "Starting squid-proxy" + kubectl apply -f "${DIR}/anonymous-proxy-setup.squid.yaml" +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAMESPACE}/${SCALE_SET_NAME}" + + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + --set proxy.https.url="http://squid.default.svc.cluster.local:3128" \ + --set "proxy.noProxy[0]=10.96.0.1:443" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function main() { + local failed=() + + build_image + create_cluster + + install_arc + install_squid + + install_scale_set || { + echo "Scale set installation failed" + NAMESPACE="${ARC_NAMESPACE}" log_arc + delete_cluster + exit 1 + } + + WORKFLOW_FILE="${WORKFLOW_FILE}" SCALE_SET_NAME="${SCALE_SET_NAME}" run_workflow || failed+=("run_workflow") + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/anonymous-proxy-setup.test.sh b/test/actions.github.com/anonymous-proxy-setup.test.sh index 696e1017..ff45710c 100755 --- a/test/actions.github.com/anonymous-proxy-setup.test.sh +++ b/test/actions.github.com/anonymous-proxy-setup.test.sh @@ -8,7 +8,7 @@ ROOT_DIR="$(realpath "${DIR}/../..")" source "${DIR}/helper.sh" -export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" SCALE_SET_NAME="anonymous-proxy-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" SCALE_SET_NAMESPACE="arc-runners" @@ -21,8 +21,9 @@ function install_arc() { helm install "${ARC_NAME}" \ --namespace "${ARC_NAMESPACE}" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -42,13 +43,12 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ --set proxy.https.url="http://squid.default.svc.cluster.local:3128" \ --set "proxy.noProxy[0]=10.96.0.1:443" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then NAMESPACE="${ARC_NAMESPACE}" log_arc diff --git a/test/actions.github.com/auth-proxy-setup-v2.test.sh b/test/actions.github.com/auth-proxy-setup-v2.test.sh new file mode 100755 index 00000000..630c5954 --- /dev/null +++ b/test/actions.github.com/auth-proxy-setup-v2.test.sh @@ -0,0 +1,101 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" + +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" + +SCALE_SET_NAME="default-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-workflow.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +function install_arc() { + install_openebs || { + echo "OpenEBS installation failed" + return 1 + } + + echo "Installing ARC" + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_squid() { + echo "Starting squid-proxy" + kubectl apply -f "${DIR}/auth-proxy-setup.squid.yaml" + + echo "Creating scale set namespace" + kubectl create namespace "${SCALE_SET_NAMESPACE}" || true + + echo "Creating squid proxy secret" + kubectl create secret generic proxy-auth \ + --namespace=arc-runners \ + --from-literal=username=github \ + --from-literal=password='actions' +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAMESPACE}/${SCALE_SET_NAME}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + --set proxy.https.url="http://squid.default.svc.cluster.local:3128" \ + --set proxy.https.credentialSecretRef="proxy-auth" \ + --set "proxy.noProxy[0]=10.96.0.1:443" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ + --version="${VERSION}" + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function main() { + local failed=() + + build_image + create_cluster + + install_arc + install_squid + + install_scale_set || { + echo "Scale set installation failed" + NAMESPACE="${ARC_NAMESPACE}" log_arc + delete_cluster + exit 1 + } + + WORKFLOW_FILE="${WORKFLOW_FILE}" SCALE_SET_NAME="${SCALE_SET_NAME}" run_workflow || failed+=("run_workflow") + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/auth-proxy-setup.test.sh b/test/actions.github.com/auth-proxy-setup.test.sh index 630c5954..179748de 100755 --- a/test/actions.github.com/auth-proxy-setup.test.sh +++ b/test/actions.github.com/auth-proxy-setup.test.sh @@ -8,7 +8,7 @@ ROOT_DIR="$(realpath "${DIR}/../..")" source "${DIR}/helper.sh" -export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" SCALE_SET_NAME="default-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" SCALE_SET_NAMESPACE="arc-runners" @@ -26,8 +26,9 @@ function install_arc() { helm install "${ARC_NAME}" \ --namespace "${ARC_NAMESPACE}" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -55,15 +56,14 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ --set proxy.https.url="http://squid.default.svc.cluster.local:3128" \ --set proxy.https.credentialSecretRef="proxy-auth" \ --set "proxy.noProxy[0]=10.96.0.1:443" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ - --version="${VERSION}" + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --version="${VERSION}" \ + --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then NAMESPACE="${ARC_NAMESPACE}" log_arc diff --git a/test/actions.github.com/custom-label-setup-v2.test.sh b/test/actions.github.com/custom-label-setup-v2.test.sh new file mode 100755 index 00000000..c6485520 --- /dev/null +++ b/test/actions.github.com/custom-label-setup-v2.test.sh @@ -0,0 +1,113 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" + +VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" || exit 1 +export VERSION + +SCALE_SET_NAME="custom-label-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +SCALE_SET_LABEL="custom-$(date +'%s')${RANDOM}" +WORKFLOW_FILE="arc-custom-label.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +function install_arc() { + echo "Installing ARC" + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAMESPACE}/${SCALE_SET_NAME} with label ${SCALE_SET_LABEL}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + --set scaleset.labels[0]="${SCALE_SET_LABEL}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ + --version="${VERSION}" + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function verify_scale_set_label() { + local actual_label + actual_label="$(kubectl get autoscalingrunnersets.actions.github.com -n "${SCALE_SET_NAMESPACE}" -l app.kubernetes.io/instance="${SCALE_SET_NAME}" -o jsonpath='{.items[0].spec.runnerScaleSetLabels[0]}')" + if [[ "${actual_label}" != "${SCALE_SET_LABEL}" ]]; then + echo "Expected scale set label '${SCALE_SET_LABEL}', got '${actual_label}'" >&2 + return 1 + fi +} + +function run_custom_label_workflow() { + local repo="${TARGET_ORG}/${TARGET_REPO}" + local queue_time + queue_time="$(date -u +%FT%TZ)" + + gh workflow run -R "${repo}" "${WORKFLOW_FILE}" \ + -f scaleset-label="${SCALE_SET_LABEL}" || return 1 + + local count=0 + local run_id= + while true; do + if [[ "${count}" -ge 12 ]]; then + echo "Timeout waiting for custom label workflow to start" >&2 + return 1 + fi + + run_id="$(gh run list -R "${repo}" --workflow "${WORKFLOW_FILE}" --created ">${queue_time}" --json databaseId --jq '.[0].databaseId' | head -n1)" + if [[ -n "${run_id}" ]]; then + break + fi + + sleep 5 + count=$((count + 1)) + done + + gh run watch "${run_id}" -R "${repo}" --exit-status +} + +function main() { + local failed=() + + build_image + create_cluster + + install_arc + install_scale_set + verify_scale_set_label || failed+=("verify_scale_set_label") + + run_custom_label_workflow || failed+=("run_custom_label_workflow") + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/custom-label-setup.test.sh b/test/actions.github.com/custom-label-setup.test.sh index c6485520..8295ec3e 100755 --- a/test/actions.github.com/custom-label-setup.test.sh +++ b/test/actions.github.com/custom-label-setup.test.sh @@ -8,8 +8,7 @@ ROOT_DIR="$(realpath "${DIR}/../..")" source "${DIR}/helper.sh" -VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" || exit 1 -export VERSION +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" SCALE_SET_NAME="custom-label-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" SCALE_SET_NAMESPACE="arc-runners" @@ -23,8 +22,9 @@ function install_arc() { helm install "${ARC_NAME}" \ --namespace "${ARC_NAMESPACE}" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -38,13 +38,12 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ - --set scaleset.labels[0]="${SCALE_SET_LABEL}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ - --version="${VERSION}" + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + --set scaleSetLabels[0]="${SCALE_SET_LABEL}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --version="${VERSION}" \ + --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then NAMESPACE="${ARC_NAMESPACE}" log_arc diff --git a/test/actions.github.com/default-setup-v2.test.sh b/test/actions.github.com/default-setup-v2.test.sh new file mode 100755 index 00000000..921165fd --- /dev/null +++ b/test/actions.github.com/default-setup-v2.test.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" + +VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" || exit 1 +export VERSION + +SCALE_SET_NAME="default-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-workflow.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +function install_arc() { + echo "Installing ARC" + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAMESPACE}/${SCALE_SET_NAME}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ + --version="${VERSION}" + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function main() { + local failed=() + + build_image + create_cluster + + install_arc + install_scale_set + + WORKFLOW_FILE="${WORKFLOW_FILE}" SCALE_SET_NAME="${SCALE_SET_NAME}" run_workflow || failed+=("run_workflow") + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/default-setup.test.sh b/test/actions.github.com/default-setup.test.sh index 921165fd..9a92a260 100755 --- a/test/actions.github.com/default-setup.test.sh +++ b/test/actions.github.com/default-setup.test.sh @@ -8,8 +8,7 @@ ROOT_DIR="$(realpath "${DIR}/../..")" source "${DIR}/helper.sh" -VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" || exit 1 -export VERSION +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" SCALE_SET_NAME="default-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" SCALE_SET_NAMESPACE="arc-runners" @@ -22,8 +21,9 @@ function install_arc() { helm install "${ARC_NAME}" \ --namespace "${ARC_NAMESPACE}" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -37,12 +37,11 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ - --version="${VERSION}" + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --version="${VERSION}" \ + --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then NAMESPACE="${ARC_NAMESPACE}" log_arc diff --git a/test/actions.github.com/dind-mode-setup-v2.test.sh b/test/actions.github.com/dind-mode-setup-v2.test.sh new file mode 100755 index 00000000..0e1a9ff6 --- /dev/null +++ b/test/actions.github.com/dind-mode-setup-v2.test.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" + +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" + +SCALE_SET_NAME="default-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-dind-workflow.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +function install_arc() { + echo "Installing ARC" + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAMESPACE}/${SCALE_SET_NAME}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + --set runner.mode="dind" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ + --version="${VERSION}" + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function main() { + local failed=() + + build_image + create_cluster + + install_arc + install_scale_set + + WORKFLOW_FILE="${WORKFLOW_FILE}" SCALE_SET_NAME="${SCALE_SET_NAME}" run_workflow || failed+=("run_workflow") + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/dind-mode-setup.test.sh b/test/actions.github.com/dind-mode-setup.test.sh index 0e1a9ff6..deb9b75d 100755 --- a/test/actions.github.com/dind-mode-setup.test.sh +++ b/test/actions.github.com/dind-mode-setup.test.sh @@ -8,7 +8,7 @@ ROOT_DIR="$(realpath "${DIR}/../..")" source "${DIR}/helper.sh" -export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" SCALE_SET_NAME="default-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" SCALE_SET_NAMESPACE="arc-runners" @@ -21,8 +21,9 @@ function install_arc() { helm install "${ARC_NAME}" \ --namespace "${ARC_NAMESPACE}" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -36,13 +37,12 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ - --set runner.mode="dind" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ - --version="${VERSION}" + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + --set containerMode.type="dind" \ + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --version="${VERSION}" \ + --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then NAMESPACE="${ARC_NAMESPACE}" log_arc diff --git a/test/actions.github.com/init-with-min-runners-v2.test.sh b/test/actions.github.com/init-with-min-runners-v2.test.sh new file mode 100755 index 00000000..c194ef2c --- /dev/null +++ b/test/actions.github.com/init-with-min-runners-v2.test.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" || { + echo "Failed to source helper.sh" + exit 1 +} + +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" + +SCALE_SET_NAME="init-min-runners-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-workflow.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +function install_arc() { + echo "Installing ARC" + helm install arc \ + --namespace "arc-systems" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + --set controller.manager.config.updateStrategy="eventual" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAMESPACE}/${SCALE_SET_NAME}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + --set scaleset.minRunners=5 \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function assert_5_runners() { + echo "[*] Asserting 5 runners are created" + local count=0 + while true; do + pod_count=$(kubectl get pods -n arc-runners --no-headers | wc -l) + + if [[ "${pod_count}" = 5 ]]; then + echo "[*] Found 5 runners as expected" + break + fi + + if [[ "$count" -ge 30 ]]; then + echo "Timeout waiting for 5 pods to be created" + exit 1 + fi + sleep 1 + count=$((count + 1)) + done +} + +function main() { + local failed=() + + build_image + create_cluster + + install_arc + install_scale_set + + assert_5_runners || failed+=("assert_5_runners") + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/init-with-min-runners.test.sh b/test/actions.github.com/init-with-min-runners.test.sh index c194ef2c..7af68232 100755 --- a/test/actions.github.com/init-with-min-runners.test.sh +++ b/test/actions.github.com/init-with-min-runners.test.sh @@ -11,7 +11,7 @@ source "${DIR}/helper.sh" || { exit 1 } -export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" SCALE_SET_NAME="init-min-runners-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" SCALE_SET_NAMESPACE="arc-runners" @@ -24,9 +24,10 @@ function install_arc() { helm install arc \ --namespace "arc-systems" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - --set controller.manager.config.updateStrategy="eventual" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + --set flags.updateStrategy="eventual" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -40,12 +41,11 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ - --set scaleset.minRunners=5 \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + --set minRunners=5 \ + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then NAMESPACE="${ARC_NAMESPACE}" log_arc diff --git a/test/actions.github.com/kubernetes-mode-setup-v2.test.sh b/test/actions.github.com/kubernetes-mode-setup-v2.test.sh new file mode 100755 index 00000000..7a388296 --- /dev/null +++ b/test/actions.github.com/kubernetes-mode-setup-v2.test.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" + +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" + +SCALE_SET_NAME="kubernetes-mode-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-kubernetes-workflow.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +function install_arc() { + install_openebs || { + echo "OpenEBS installation failed" + return 1 + } + + echo "Installing ARC" + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAMESPACE}/${SCALE_SET_NAME}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + --set runner.mode="kubernetes" \ + --set runner.kubernetesMode.workVolumeClaim.accessModes={"ReadWriteOnce"} \ + --set runner.kubernetesMode.workVolumeClaim.storageClassName="openebs-hostpath" \ + --set runner.kubernetesMode.workVolumeClaim.resources.requests.storage="1Gi" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function main() { + local failed=() + + build_image + create_cluster + + install_arc + install_scale_set + + WORKFLOW_FILE="${WORKFLOW_FILE}" SCALE_SET_NAME="${SCALE_SET_NAME}" run_workflow || failed+=("run_workflow") + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/kubernetes-mode-setup.test.sh b/test/actions.github.com/kubernetes-mode-setup.test.sh index 7a388296..aa9b52b3 100755 --- a/test/actions.github.com/kubernetes-mode-setup.test.sh +++ b/test/actions.github.com/kubernetes-mode-setup.test.sh @@ -8,7 +8,7 @@ ROOT_DIR="$(realpath "${DIR}/../..")" source "${DIR}/helper.sh" -export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" SCALE_SET_NAME="kubernetes-mode-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" SCALE_SET_NAMESPACE="arc-runners" @@ -26,8 +26,9 @@ function install_arc() { helm install "${ARC_NAME}" \ --namespace "${ARC_NAMESPACE}" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -41,15 +42,14 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ - --set runner.mode="kubernetes" \ - --set runner.kubernetesMode.workVolumeClaim.accessModes={"ReadWriteOnce"} \ - --set runner.kubernetesMode.workVolumeClaim.storageClassName="openebs-hostpath" \ - --set runner.kubernetesMode.workVolumeClaim.resources.requests.storage="1Gi" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + --set containerMode.type="kubernetes" \ + --set containerMode.kubernetesModeWorkVolumeClaim.accessModes={"ReadWriteOnce"} \ + --set containerMode.kubernetesModeWorkVolumeClaim.storageClassName="openebs-hostpath" \ + --set containerMode.kubernetesModeWorkVolumeClaim.resources.requests.storage="1Gi" \ + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then NAMESPACE="${ARC_NAMESPACE}" log_arc diff --git a/test/actions.github.com/self-signed-ca-setup-v2.test.sh b/test/actions.github.com/self-signed-ca-setup-v2.test.sh new file mode 100755 index 00000000..5600f868 --- /dev/null +++ b/test/actions.github.com/self-signed-ca-setup-v2.test.sh @@ -0,0 +1,150 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" || { + echo "Failed to source helper.sh" + exit 1 +} + +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" + +TEMP_DIR=$(mktemp -d) +LOCAL_CERT_PATH="${TEMP_DIR}/mitmproxy-ca-cert.crt" +MITM_CERT_PATH="/root/.mitmproxy/mitmproxy-ca-cert.pem" + +trap 'rm -rf "$TEMP_DIR"' EXIT + +SCALE_SET_NAME="self-signed-crt-$(date '+%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-workflow.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +MITMPROXY_NAMESPACE="mitmproxy" +MITMPROXY_POD_NAME="mitmproxy" + +function install_arc() { + echo "Installing ARC" + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_scale_set() { + echo "Creating namespace ${SCALE_SET_NAMESPACE}" + kubectl create namespace "${SCALE_SET_NAMESPACE}" + + echo "Installing ca-cert config map" + kubectl -n "${SCALE_SET_NAMESPACE}" create configmap ca-cert \ + --from-file=mitmproxy-ca-cert.crt="${LOCAL_CERT_PATH}" + + echo "Installing scale set ${SCALE_SET_NAME}/${SCALE_SET_NAMESPACE}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + --set proxy.https.url="http://mitmproxy.mitmproxy.svc.cluster.local: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/" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function wait_for_mitmproxy_ready() { + echo "Waiting for mitmproxy pod to be ready" + + # Wait for pod to be running + if ! kubectl wait --for=condition=ready pod -n "${MITMPROXY_NAMESPACE}" "${MITMPROXY_POD_NAME}" --timeout=60s; then + echo "Timeout waiting for mitmproxy pod" + kubectl get pods -n "${MITMPROXY_NAMESPACE}" || true + kubectl describe pod -n "${MITMPROXY_NAMESPACE}" "${MITMPROXY_POD_NAME}" || true + kubectl logs -n "${MITMPROXY_NAMESPACE}" "${MITMPROXY_POD_NAME}" || true + return 1 + fi + + echo "Mitmproxy pod is ready, trying to copy the certitficate..." + + # Verify certificate exists + retry 15 1 kubectl exec -n "${MITMPROXY_NAMESPACE}" "${MITMPROXY_POD_NAME}" -- test -f "${MITM_CERT_PATH}" + + echo "Getting mitmproxy CA certificate from pod" + if ! kubectl exec -n "${MITMPROXY_NAMESPACE}" "${MITMPROXY_POD_NAME}" -- cat "${MITM_CERT_PATH}" >"${LOCAL_CERT_PATH}"; then + echo "Failed to get mitmproxy CA certificate from pod" + return 1 + fi + echo "Mitmproxy certificate generated successfully and stored to ${LOCAL_CERT_PATH}" + return 0 +} + +function run_mitmproxy() { + echo "Deploying mitmproxy to Kubernetes" + + # Create namespace + kubectl create namespace "${MITMPROXY_NAMESPACE}" || true + + # Create mitmproxy pod and service + kubectl apply -f "${DIR}/self-signed-ca-setup.mitm.yaml" + + if ! wait_for_mitmproxy_ready; then + return 1 + fi + + echo "Mitmproxy is ready" +} + +function main() { + local failed=() + + build_image + create_cluster + install_arc + run_mitmproxy || { + echo "Failed to run mitmproxy" + echo "ARC logs:" + NAMESPACE="${ARC_NAMESPACE}" log_arc + echo "Deleting cluster..." + delete_cluster + exit 1 + } + install_scale_set || { + echo "Failed to run mitmproxy" + echo "ARC logs:" + NAMESPACE="${ARC_NAMESPACE}" log_arc + echo "Deleting cluster..." + delete_cluster + exit 1 + } + + WORKFLOW_FILE="${WORKFLOW_FILE}" SCALE_SET_NAME="${SCALE_SET_NAME}" run_workflow || failed+=("run_workflow") + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/self-signed-ca-setup.test.sh b/test/actions.github.com/self-signed-ca-setup.test.sh index 5600f868..2db8cd53 100755 --- a/test/actions.github.com/self-signed-ca-setup.test.sh +++ b/test/actions.github.com/self-signed-ca-setup.test.sh @@ -11,7 +11,7 @@ source "${DIR}/helper.sh" || { exit 1 } -export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" TEMP_DIR=$(mktemp -d) LOCAL_CERT_PATH="${TEMP_DIR}/mitmproxy-ca-cert.crt" @@ -33,8 +33,9 @@ function install_arc() { helm install "${ARC_NAME}" \ --namespace "${ARC_NAMESPACE}" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -55,16 +56,15 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ --set proxy.https.url="http://mitmproxy.mitmproxy.svc.cluster.local: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/" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then NAMESPACE="${ARC_NAMESPACE}" log_arc diff --git a/test/actions.github.com/single-namespace-setup-v2.test.sh b/test/actions.github.com/single-namespace-setup-v2.test.sh new file mode 100755 index 00000000..382953bd --- /dev/null +++ b/test/actions.github.com/single-namespace-setup-v2.test.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" + +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" + +SCALE_SET_NAME="default-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-workflow.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="${SCALE_SET_NAMESPACE}" + +function install_arc() { + echo "Installing ARC" + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + --set controller.manager.config.watchSingleNamespace="${ARC_NAMESPACE}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAMESPACE}/${SCALE_SET_NAME}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ + --version="${VERSION}" + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function main() { + local failed=() + + build_image + create_cluster + + install_arc + install_scale_set + + WORKFLOW_FILE="${WORKFLOW_FILE}" SCALE_SET_NAME="${SCALE_SET_NAME}" run_workflow || failed+=("run_workflow") + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/single-namespace-setup.test.sh b/test/actions.github.com/single-namespace-setup.test.sh index 382953bd..836dfe74 100755 --- a/test/actions.github.com/single-namespace-setup.test.sh +++ b/test/actions.github.com/single-namespace-setup.test.sh @@ -8,7 +8,7 @@ ROOT_DIR="$(realpath "${DIR}/../..")" source "${DIR}/helper.sh" -export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" SCALE_SET_NAME="default-$(date +'%M%S')$(((RANDOM + 100) % 100 + 1))" SCALE_SET_NAMESPACE="arc-runners" @@ -21,9 +21,10 @@ function install_arc() { helm install "${ARC_NAME}" \ --namespace "${ARC_NAMESPACE}" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - --set controller.manager.config.watchSingleNamespace="${ARC_NAMESPACE}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + --set flags.watchSingleNamespace="${ARC_NAMESPACE}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -37,12 +38,11 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ - --version="${VERSION}" + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set" \ + --version="${VERSION}" \ + --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then NAMESPACE="${ARC_NAMESPACE}" log_arc diff --git a/test/actions.github.com/update-gha-runner-scale-set-v2.test.sh b/test/actions.github.com/update-gha-runner-scale-set-v2.test.sh new file mode 100755 index 00000000..74776dc1 --- /dev/null +++ b/test/actions.github.com/update-gha-runner-scale-set-v2.test.sh @@ -0,0 +1,141 @@ +#!/bin/bash + +set -euo pipefail + +DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" + +ROOT_DIR="$(realpath "${DIR}/../..")" + +source "${DIR}/helper.sh" || { + echo "Failed to source helper.sh" + exit 1 +} + +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" + +SCALE_SET_NAME="update-strategy-$(date '+%M%S')$(((RANDOM + 100) % 100 + 1))" +SCALE_SET_NAMESPACE="arc-runners" +WORKFLOW_FILE="arc-test-sleepy-matrix.yaml" +ARC_NAME="arc" +ARC_NAMESPACE="arc-systems" + +UPGRADE_MARKER="e2e-upgrade-${SCALE_SET_NAME}-$(date +%s)" + +function install_arc() { + echo "Installing ARC" + helm install "${ARC_NAME}" \ + --namespace "${ARC_NAMESPACE}" \ + --create-namespace \ + --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --debug + + if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function install_scale_set() { + echo "Installing scale set ${SCALE_SET_NAME}/${SCALE_SET_NAMESPACE}" + helm install "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --create-namespace \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + --set scaleset.name="${SCALE_SET_NAME}" \ + --set scaleset.minRunners=5 \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ + --version="${VERSION}" \ + --debug + + if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then + NAMESPACE="${ARC_NAMESPACE}" log_arc + return 1 + fi +} + +function upgrade_scale_set() { + echo "Upgrading scale set ${SCALE_SET_NAME}/${SCALE_SET_NAMESPACE}" + + echo "Generated upgrade marker: ${UPGRADE_MARKER}" + + helm upgrade "${SCALE_SET_NAME}" \ + --namespace "${SCALE_SET_NAMESPACE}" \ + --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ + --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ + --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set auth.githubToken="${GITHUB_TOKEN}" \ + --set scaleset.name="${SCALE_SET_NAME}" \ + --set runner.container.image="ghcr.io/actions/actions-runner:latest" \ + --set runner.container.command={"/home/runner/run.sh"} \ + --set runner.container.env[0].name="TEST" \ + --set runner.container.env[0].value="E2E TESTS" \ + --set "runner.pod.metadata.labels.e2e\.arc/upgrade-marker=${UPGRADE_MARKER}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ + --version="${VERSION}" \ + --debug + +} + +function assert_idle_pod_recreated() { + echo "Waiting for idle pod recreation" + local count=0 + + while true; do + local pods + if ! pods=$(kubectl get pods -n "${SCALE_SET_NAMESPACE}" -l "actions.github.com/scale-set-name=${SCALE_SET_NAME},e2e.arc/upgrade-marker=${UPGRADE_MARKER}" -o jsonpath='{.items[*].metadata.name}'); then + echo "Failed to get pods: $pods" + return 1 + fi + + if [[ -n "$pods" ]]; then + echo "Found idle pod with upgrade marker: $pods" + return 0 + fi + + if ((count >= 30)); then + echo "Timeout waiting for idle pod recreation after upgrade" + return 1 + fi + + echo "No idle pod with upgrade marker found yet, retrying... ($((count + 1))/30)" + sleep 10 + ((count++)) + done + +} + +function main() { + local failed=() + local run_id="" + + build_image + create_cluster + install_arc + install_scale_set + + upgrade_scale_set || failed+=("upgrade_scale_set") + + if ! run_id=$(WORKFLOW_FILE="${WORKFLOW_FILE}" SCALE_SET_NAME="${SCALE_SET_NAME}" start_workflow); then + failed+=("run_workflow") + fi + + assert_idle_pod_recreated || failed+=("assert_idle_pod_recreated") + + if [[ -n "${run_id}" ]]; then + wait_for_run_completion "${run_id}" || failed+=("wait_for_run_completion") + fi + + INSTALLATION_NAME="${SCALE_SET_NAME}" NAMESPACE="${SCALE_SET_NAMESPACE}" cleanup_scale_set || failed+=("cleanup_scale_set") + + NAMESPACE="${ARC_NAMESPACE}" log_arc || failed+=("log_arc") + + delete_cluster + + print_results "${failed[@]}" +} + +main diff --git a/test/actions.github.com/update-gha-runner-scale-set.test.sh b/test/actions.github.com/update-gha-runner-scale-set.test.sh index 74776dc1..aaa74656 100755 --- a/test/actions.github.com/update-gha-runner-scale-set.test.sh +++ b/test/actions.github.com/update-gha-runner-scale-set.test.sh @@ -11,7 +11,7 @@ source "${DIR}/helper.sh" || { exit 1 } -export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental/Chart.yaml")" +export VERSION="$(chart_version "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")" SCALE_SET_NAME="update-strategy-$(date '+%M%S')$(((RANDOM + 100) % 100 + 1))" SCALE_SET_NAMESPACE="arc-runners" @@ -26,8 +26,9 @@ function install_arc() { helm install "${ARC_NAME}" \ --namespace "${ARC_NAMESPACE}" \ --create-namespace \ - --set controller.manager.container.image="${IMAGE_NAME}:${IMAGE_TAG}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-controller-experimental" \ + --set image.repository="${IMAGE_NAME}" \ + --set image.tag="${IMAGE_TAG}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set-controller" \ --debug if ! NAME="${ARC_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_arc; then @@ -41,14 +42,10 @@ function install_scale_set() { helm install "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ --create-namespace \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ - --set scaleset.name="${SCALE_SET_NAME}" \ - --set scaleset.minRunners=5 \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ - --version="${VERSION}" \ + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + --set minRunners=1 \ + "${ROOT_DIR}/charts/gha-runner-scale-set" \ --debug if ! NAME="${SCALE_SET_NAME}" NAMESPACE="${ARC_NAMESPACE}" wait_for_scale_set; then @@ -62,19 +59,21 @@ function upgrade_scale_set() { echo "Generated upgrade marker: ${UPGRADE_MARKER}" + PATCH_APPLIED_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") + echo "Captured PATCH_APPLIED_TIME: ${PATCH_APPLIED_TIME}" + helm upgrade "${SCALE_SET_NAME}" \ --namespace "${SCALE_SET_NAMESPACE}" \ - --set controllerServiceAccount.name="${ARC_NAME}-gha-rs-controller" \ - --set controllerServiceAccount.namespace="${ARC_NAMESPACE}" \ - --set auth.url="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ - --set auth.githubToken="${GITHUB_TOKEN}" \ - --set scaleset.name="${SCALE_SET_NAME}" \ - --set runner.container.image="ghcr.io/actions/actions-runner:latest" \ - --set runner.container.command={"/home/runner/run.sh"} \ - --set runner.container.env[0].name="TEST" \ - --set runner.container.env[0].value="E2E TESTS" \ - --set "runner.pod.metadata.labels.e2e\.arc/upgrade-marker=${UPGRADE_MARKER}" \ - "${ROOT_DIR}/charts/gha-runner-scale-set-experimental" \ + --set githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ + --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ + --set minRunners=1 \ + --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" \ + --set "template.metadata.labels.e2e\.arc/upgrade-marker=${UPGRADE_MARKER}" \ + "${ROOT_DIR}/charts/gha-runner-scale-set" \ --version="${VERSION}" \ --debug