Merge 8b09e6c5a8 into 0baa4f6b09
				
					
				
			This commit is contained in:
		
						commit
						3d6f15140f
					
				|  | @ -26,6 +26,30 @@ concurrency: | ||||||
|   cancel-in-progress: true |   cancel-in-progress: true | ||||||
| 
 | 
 | ||||||
| jobs: | jobs: | ||||||
|  |   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 | ||||||
|  |     env: | ||||||
|  |       TARGET_ORG: ${{ env.TARGET_ORG }} | ||||||
|  |       TARGET_REPO: ${{ env.TARGET_REPO }} | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v3 | ||||||
|  |         with: | ||||||
|  |           ref: ${{github.head_ref}} | ||||||
|  | 
 | ||||||
|  |       - name: Get configure token | ||||||
|  |         id: config-token | ||||||
|  |         uses: peter-murray/workflow-application-token-action@8e1ba3bf1619726336414f1014e37f17fbadf1db | ||||||
|  |         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 | ||||||
|  |         shell: bash | ||||||
|  | 
 | ||||||
|   default-setup: |   default-setup: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     timeout-minutes: 20 |     timeout-minutes: 20 | ||||||
|  |  | ||||||
							
								
								
									
										6
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										6
									
								
								Makefile
								
								
								
								
							|  | @ -210,8 +210,6 @@ docker-buildx: | ||||||
| 		docker buildx create --platform ${PLATFORMS} --name container-builder --use;\
 | 		docker buildx create --platform ${PLATFORMS} --name container-builder --use;\
 | ||||||
| 	fi | 	fi | ||||||
| 	docker buildx build --platform ${PLATFORMS} \
 | 	docker buildx build --platform ${PLATFORMS} \
 | ||||||
| 		--build-arg RUNNER_VERSION=${RUNNER_VERSION} \
 |  | ||||||
| 		--build-arg DOCKER_VERSION=${DOCKER_VERSION} \
 |  | ||||||
| 		--build-arg VERSION=${VERSION} \
 | 		--build-arg VERSION=${VERSION} \
 | ||||||
| 		--build-arg COMMIT_SHA=${COMMIT_SHA} \
 | 		--build-arg COMMIT_SHA=${COMMIT_SHA} \
 | ||||||
| 		-t "${DOCKER_IMAGE_NAME}:${VERSION}" \
 | 		-t "${DOCKER_IMAGE_NAME}:${VERSION}" \
 | ||||||
|  | @ -297,6 +295,10 @@ acceptance/runner/startup: | ||||||
| e2e: | e2e: | ||||||
| 	go test -count=1 -v -timeout 600s -run '^TestE2E$$' ./test/e2e | 	go test -count=1 -v -timeout 600s -run '^TestE2E$$' ./test/e2e | ||||||
| 
 | 
 | ||||||
|  | .PHONY: gha-e2e | ||||||
|  | gha-e2e: | ||||||
|  | 	bash hack/e2e-test.sh | ||||||
|  | 
 | ||||||
| # Upload release file to GitHub.
 | # Upload release file to GitHub.
 | ||||||
| github-release: release | github-release: release | ||||||
| 	ghr ${VERSION} release/ | 	ghr ${VERSION} release/ | ||||||
|  |  | ||||||
|  | @ -0,0 +1,92 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | DIR="$(dirname "${BASH_SOURCE[0]}")" | ||||||
|  | 
 | ||||||
|  | DIR="$(realpath "${DIR}")" | ||||||
|  | 
 | ||||||
|  | TEST_DIR="$(realpath "${DIR}/../test/actions.github.com")" | ||||||
|  | 
 | ||||||
|  | export PLATFORMS="linux/amd64" | ||||||
|  | 
 | ||||||
|  | TARGETS=() | ||||||
|  | 
 | ||||||
|  | function set_targets() { | ||||||
|  |     local cases="$(find "${TEST_DIR}" -name '*.test.sh' | sed "s#^${TEST_DIR}/##g" )" | ||||||
|  | 
 | ||||||
|  |     mapfile -t TARGETS < <(echo "${cases}") | ||||||
|  | 
 | ||||||
|  |     echo $TARGETS | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function env_test() { | ||||||
|  |     if [[ -z "${GITHUB_TOKEN}" ]]; then | ||||||
|  |         echo "Error: GITHUB_TOKEN is not set" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     if [[ -z "${TARGET_ORG}" ]]; then | ||||||
|  |         echo "Error: TARGET_ORG is not set" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     if [[ -z "${TARGET_REPO}" ]]; then | ||||||
|  |         echo "Error: TARGET_REPO is not set" | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function usage() { | ||||||
|  |     echo "Usage: $0 [test_name]" | ||||||
|  |     echo "  test_name: the name of the test to run" | ||||||
|  |     echo "    if not specified, all tests will be run" | ||||||
|  |     echo "    test_name should be the name of the test file without the .test.sh suffix" | ||||||
|  |     echo "" | ||||||
|  |     exit 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function main() { | ||||||
|  |     local failed=() | ||||||
|  | 
 | ||||||
|  |     env_test | ||||||
|  | 
 | ||||||
|  |     if [[ -z "${1}" ]]; then | ||||||
|  |         echo "Running all tests" | ||||||
|  |         set_targets | ||||||
|  |     elif [[ -f "${TEST_DIR}/${1}.test.sh" ]]; then | ||||||
|  |         echo "Running test ${1}" | ||||||
|  |         TARGETS=("${1}.test.sh") | ||||||
|  |     else | ||||||
|  |         usage | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     for target in "${TARGETS[@]}"; do | ||||||
|  |         echo "============================================================" | ||||||
|  |         test="${TEST_DIR}/${target}" | ||||||
|  |         if [[ ! -x "${test}" ]]; then | ||||||
|  |             echo "Error: test ${test} is not executable or not found" | ||||||
|  |             failed+=("${test}") | ||||||
|  |             continue | ||||||
|  |         fi | ||||||
|  | 
 | ||||||
|  |         echo "Running test ${target}" | ||||||
|  |         if ! "${test}"; then | ||||||
|  |             failed+=("${target}") | ||||||
|  |             echo "---------------------------------" | ||||||
|  |             echo "FAILED: ${target}" | ||||||
|  |         else | ||||||
|  |             echo "---------------------------------" | ||||||
|  |             echo "PASSED: ${target}" | ||||||
|  |         fi | ||||||
|  |         echo "============================================================" | ||||||
|  |     done | ||||||
|  | 
 | ||||||
|  |     if [[ "${#failed[@]}" -gt 0 ]]; then | ||||||
|  |         echo "Failed tests:" | ||||||
|  |         for fail in "${failed[@]}"; do | ||||||
|  |             echo "  ${fail}" | ||||||
|  |         done | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | main $@ | ||||||
|  | @ -0,0 +1,92 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | set -euo pipefail | ||||||
|  | 
 | ||||||
|  | DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" | ||||||
|  | 
 | ||||||
|  | ROOT_DIR="$(realpath "${DIR}/../..")" | ||||||
|  | 
 | ||||||
|  | source "${DIR}/helper.sh" | ||||||
|  | 
 | ||||||
|  | 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 "Creating namespace ${ARC_NAMESPACE}" | ||||||
|  |     kubectl create namespace "${SCALE_SET_NAMESPACE}" | ||||||
|  | 
 | ||||||
|  |     echo "Installing ARC" | ||||||
|  |     helm install "${ARC_NAME}" \ | ||||||
|  |         --namespace "${ARC_NAMESPACE}" \ | ||||||
|  |         --create-namespace \ | ||||||
|  |         --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 | ||||||
|  |         NAMESPACE="${ARC_NAMESPACE}" log_arc | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function start_squid_proxy() { | ||||||
|  |     echo "Starting squid-proxy" | ||||||
|  |     docker run -d \ | ||||||
|  |         --rm \ | ||||||
|  |         --name squid \ | ||||||
|  |         --publish 3128:3128 \ | ||||||
|  |         ubuntu/squid:latest | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function stop_squid_proxy() { | ||||||
|  |     echo "Stopping squid-proxy" | ||||||
|  |     docker stop squid | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 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 githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ | ||||||
|  |         --set githubConfigSecret.github_token="${GITHUB_TOKEN}" \ | ||||||
|  |         --set proxy.https.url="http://host.minikube.internal:3128" \ | ||||||
|  |         --set "proxy.noProxy[0]=10.96.0.1:443" \ | ||||||
|  |         "${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 | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function main() { | ||||||
|  |     echo "[*] Running anonymous proxy setup" | ||||||
|  |     local failed=() | ||||||
|  | 
 | ||||||
|  |     build_image | ||||||
|  |     create_cluster | ||||||
|  | 
 | ||||||
|  |     install_arc | ||||||
|  |     start_squid_proxy | ||||||
|  |     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 | ||||||
|  |     stop_squid_proxy | ||||||
|  | 
 | ||||||
|  |     print_results "${failed[@]}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | main | ||||||
|  | @ -0,0 +1,100 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | set -euo pipefail | ||||||
|  | 
 | ||||||
|  | DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" | ||||||
|  | 
 | ||||||
|  | ROOT_DIR="$(realpath "${DIR}/../..")" | ||||||
|  | 
 | ||||||
|  | source "${DIR}/helper.sh" | ||||||
|  | 
 | ||||||
|  | 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 "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 | ||||||
|  | 
 | ||||||
|  |     echo "Creating namespace ${ARC_NAMESPACE}" | ||||||
|  |     kubectl create namespace "${SCALE_SET_NAMESPACE}" | ||||||
|  | 
 | ||||||
|  |     echo "Installing ARC" | ||||||
|  |     helm install "${ARC_NAME}" \ | ||||||
|  |         --namespace "${ARC_NAMESPACE}" \ | ||||||
|  |         --create-namespace \ | ||||||
|  |         --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 | ||||||
|  |         NAMESPACE="${ARC_NAMESPACE}" log_arc | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function start_squid_proxy() { | ||||||
|  |     echo "Starting squid-proxy" | ||||||
|  |     docker run -d \ | ||||||
|  |         --name squid \ | ||||||
|  |         --publish 3128:3128 \ | ||||||
|  |         huangtingluo/squid-proxy:latest | ||||||
|  | 
 | ||||||
|  |     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 githubConfigUrl="https://github.com/${TARGET_ORG}/${TARGET_REPO}" \ | ||||||
|  |         --set githubConfigSecret.github_token="${GITHUB_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" \ | ||||||
|  |         "${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 | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function main() { | ||||||
|  |     echo "[*] Running auth proxy setup" | ||||||
|  |     local failed=() | ||||||
|  | 
 | ||||||
|  |     build_image | ||||||
|  |     create_cluster | ||||||
|  | 
 | ||||||
|  |     install_arc | ||||||
|  |     start_squid_proxy | ||||||
|  |     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 | ||||||
|  | @ -0,0 +1,74 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | set -euo pipefail | ||||||
|  | 
 | ||||||
|  | DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" | ||||||
|  | 
 | ||||||
|  | ROOT_DIR="$(realpath "${DIR}/../..")" | ||||||
|  | 
 | ||||||
|  | source "${DIR}/helper.sh" | ||||||
|  | 
 | ||||||
|  | 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 "Creating namespace ${ARC_NAMESPACE}" | ||||||
|  |     kubectl create namespace "${SCALE_SET_NAMESPACE}" | ||||||
|  | 
 | ||||||
|  |     echo "Installing ARC" | ||||||
|  |     helm install "${ARC_NAME}" \ | ||||||
|  |         --namespace "${ARC_NAMESPACE}" \ | ||||||
|  |         --create-namespace \ | ||||||
|  |         --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 | ||||||
|  |         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 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 | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function main() { | ||||||
|  |     echo "[*] Running default setup" | ||||||
|  |     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 | ||||||
|  | @ -0,0 +1,75 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | set -euo pipefail | ||||||
|  | 
 | ||||||
|  | DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" | ||||||
|  | 
 | ||||||
|  | ROOT_DIR="$(realpath "${DIR}/../..")" | ||||||
|  | 
 | ||||||
|  | source "${DIR}/helper.sh" | ||||||
|  | 
 | ||||||
|  | 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 "Creating namespace ${ARC_NAMESPACE}" | ||||||
|  |     kubectl create namespace "${SCALE_SET_NAMESPACE}" | ||||||
|  | 
 | ||||||
|  |     echo "Installing ARC" | ||||||
|  |     helm install "${ARC_NAME}" \ | ||||||
|  |         --namespace "${ARC_NAMESPACE}" \ | ||||||
|  |         --create-namespace \ | ||||||
|  |         --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 | ||||||
|  |         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 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 | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function main() { | ||||||
|  |     echo "[*] Running dind mode setup" | ||||||
|  |     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 | ||||||
|  | @ -0,0 +1,3 @@ | ||||||
|  | export TARGET_ORG="org" | ||||||
|  | export TARGET_REPO="repo" | ||||||
|  | export GITHUB_TOKEN="token" | ||||||
|  | @ -0,0 +1,168 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | DIR="$(dirname "${BASH_SOURCE[0]}")" | ||||||
|  | 
 | ||||||
|  | DIR="$(realpath "${DIR}")" | ||||||
|  | 
 | ||||||
|  | ROOT_DIR="$(realpath "${DIR}/../..")" | ||||||
|  | 
 | ||||||
|  | export TARGET_ORG="${TARGET_ORG:-actions-runner-controller}" | ||||||
|  | export TARGET_REPO="${TARGET_REPO:-arc_e2e_test_dummy}" | ||||||
|  | export IMAGE_NAME="${IMAGE_NAME:-arc-test-image}" | ||||||
|  | export VERSION="${VERSION:-$(yq .version < "${ROOT_DIR}/charts/gha-runner-scale-set-controller/Chart.yaml")}" | ||||||
|  | export IMAGE_TAG="${VERSION}" | ||||||
|  | export IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" | ||||||
|  | 
 | ||||||
|  | export PLATFORMS="linux/amd64" | ||||||
|  | export COMMIT_SHA="$(git rev-parse HEAD)" | ||||||
|  | 
 | ||||||
|  | function build_image() { | ||||||
|  |     echo "Building ARC image ${IMAGE}" | ||||||
|  | 
 | ||||||
|  |     cd "${ROOT_DIR}" || exit 1 | ||||||
|  | 
 | ||||||
|  | 	docker buildx build --platform "${PLATFORMS}" \ | ||||||
|  | 		--build-arg VERSION="${VERSION}" \ | ||||||
|  | 		--build-arg COMMIT_SHA="${COMMIT_SHA}" \ | ||||||
|  | 		-t "${IMAGE}" \ | ||||||
|  | 		-f Dockerfile \ | ||||||
|  | 		. --load | ||||||
|  | 
 | ||||||
|  |     echo "Created image ${IMAGE}" | ||||||
|  |     cd - || exit 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function create_cluster() { | ||||||
|  |     echo "Deleting minikube cluster if exists" | ||||||
|  |     minikube delete || true | ||||||
|  | 
 | ||||||
|  |     echo "Creating minikube cluster" | ||||||
|  |     minikube start | ||||||
|  | 
 | ||||||
|  |     echo "Loading image into minikube cluster" | ||||||
|  |     minikube image load "${IMAGE}" | ||||||
|  | 
 | ||||||
|  |     echo "Loading runner image into minikube cluster" | ||||||
|  |     minikube image load "ghcr.io/actions/actions-runner:latest" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function delete_cluster() { | ||||||
|  |     echo "Deleting minikube cluster" | ||||||
|  |     minikube delete | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function log_arc() { | ||||||
|  |     echo "ARC logs" | ||||||
|  |     kubectl logs -n "${NAMESPACE}" -l app.kubernetes.io/name=gha-rs-controller | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function wait_for_arc() { | ||||||
|  |     echo "Waiting for ARC to be ready" | ||||||
|  |     local count=0; | ||||||
|  |     while true; do | ||||||
|  |         POD_NAME=$(kubectl get pods -n "${NAMESPACE}" -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" | ||||||
|  |             return 1 | ||||||
|  |         fi | ||||||
|  |         sleep 1 | ||||||
|  |         count=$((count+1)) | ||||||
|  |     done | ||||||
|  | 
 | ||||||
|  |     kubectl wait --timeout=30s --for=condition=ready pod -n "${NAMESPACE}" -l app.kubernetes.io/name=gha-rs-controller | ||||||
|  |     kubectl get pod -n "${NAMESPACE}" | ||||||
|  |     kubectl describe deployment "${NAME}" -n "${NAMESPACE}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function wait_for_scale_set() { | ||||||
|  |     local count=0 | ||||||
|  |     while true; do | ||||||
|  |         POD_NAME=$(kubectl get pods -n "${NAMESPACE}" -l "actions.github.com/scale-set-name=${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=${NAME}" | ||||||
|  |             return 1 | ||||||
|  |         fi | ||||||
|  | 
 | ||||||
|  |         sleep 1 | ||||||
|  |         count=$((count+1)) | ||||||
|  |     done | ||||||
|  |     kubectl wait --timeout=30s --for=condition=ready pod -n "${NAMESPACE}" -l "actions.github.com/scale-set-name=${NAME}" | ||||||
|  |     kubectl get pod -n "${NAMESPACE}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function cleanup_scale_set() { | ||||||
|  |     helm uninstall "${INSTALLATION_NAME}" --namespace "${NAMESPACE}" --debug | ||||||
|  | 
 | ||||||
|  |     kubectl wait --timeout=40s --for=delete autoscalingrunnersets -n "${NAMESPACE}" -l app.kubernetes.io/instance="${INSTALLATION_NAME}" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function install_openebs() { | ||||||
|  |     echo "Install openebs/dynamic-localpv-provisioner" | ||||||
|  |     helm repo add openebs https://openebs.github.io/charts | ||||||
|  |     helm repo update | ||||||
|  |     helm install openebs openebs/openebs --namespace openebs --create-namespace | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function print_results() { | ||||||
|  |     local failed=("$@") | ||||||
|  | 
 | ||||||
|  |     if [[ "${#failed[@]}" -ne 0 ]]; then | ||||||
|  |         echo "----------------------------------" | ||||||
|  |         echo "The following tests failed:" | ||||||
|  |         for test in "${failed[@]}"; do | ||||||
|  |             echo "  - ${test}" | ||||||
|  |         done | ||||||
|  |         return 1 | ||||||
|  |     else | ||||||
|  |         echo "----------------------------------" | ||||||
|  |         echo "All tests passed!" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function run_workflow() { | ||||||
|  |     echo "Checking if the workflow file exists" | ||||||
|  |     gh workflow view -R "${TARGET_ORG}/${TARGET_REPO}" "${WORKFLOW_FILE}" || return 1 | ||||||
|  | 
 | ||||||
|  |     local queue_time="$(date -u +%FT%TZ)" | ||||||
|  | 
 | ||||||
|  |     echo "Running workflow ${WORKFLOW_FILE}" | ||||||
|  |     gh workflow run -R "${TARGET_ORG}/${TARGET_REPO}" "${WORKFLOW_FILE}" --ref main -f arc_name="${SCALE_SET_NAME}" || return 1 | ||||||
|  | 
 | ||||||
|  |     echo "Waiting for run to start" | ||||||
|  |     local count=0 | ||||||
|  |     local run_id= | ||||||
|  |     while true; do | ||||||
|  |         if [[ "${count}" -ge 12 ]]; then | ||||||
|  |             echo "Timeout waiting for run to start" | ||||||
|  |             return 1 | ||||||
|  |         fi | ||||||
|  |         run_id=$(gh run list -R "${TARGET_ORG}/${TARGET_REPO}" --workflow "${WORKFLOW_FILE}" --created ">${queue_time}" --json "name,databaseId" --jq ".[] | select(.name | contains(\"${SCALE_SET_NAME}\")) | .databaseId") | ||||||
|  |         echo "Run ID: ${run_id}" | ||||||
|  |         if [ -n "$run_id" ]; then | ||||||
|  |             echo "Run found!" | ||||||
|  |             break | ||||||
|  |         fi | ||||||
|  | 
 | ||||||
|  |         echo "Run not found yet, waiting 5 seconds" | ||||||
|  |         sleep 5 | ||||||
|  |         count=$((count+1)) | ||||||
|  |     done | ||||||
|  | 
 | ||||||
|  |     echo "Waiting for run to complete" | ||||||
|  |     local code=$(gh run watch "${run_id}" -R "${TARGET_ORG}/${TARGET_REPO}" --exit-status &> /dev/null) | ||||||
|  |     if [[ "${code}" -ne 0 ]]; then | ||||||
|  |         echo "Run failed with exit code ${code}" | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     echo "Run completed successfully" | ||||||
|  | } | ||||||
|  | @ -0,0 +1,83 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | set -euo pipefail | ||||||
|  | 
 | ||||||
|  | DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" | ||||||
|  | 
 | ||||||
|  | ROOT_DIR="$(realpath "${DIR}/../..")" | ||||||
|  | 
 | ||||||
|  | source "${DIR}/helper.sh" | ||||||
|  | 
 | ||||||
|  | SCALE_SET_NAME="default-$(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() { | ||||||
|  |     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 | ||||||
|  | 
 | ||||||
|  |     echo "Creating namespace ${ARC_NAMESPACE}" | ||||||
|  |     kubectl create namespace "${SCALE_SET_NAMESPACE}" | ||||||
|  | 
 | ||||||
|  |     echo "Installing ARC" | ||||||
|  |     helm install "${ARC_NAME}" \ | ||||||
|  |         --namespace "${ARC_NAMESPACE}" \ | ||||||
|  |         --create-namespace \ | ||||||
|  |         --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 | ||||||
|  |         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 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" \ | ||||||
|  |         --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 main() { | ||||||
|  |     echo "[*] Running kubernetes mode setup" | ||||||
|  |     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 | ||||||
|  | @ -0,0 +1,75 @@ | ||||||
|  | #!/bin/bash | ||||||
|  | 
 | ||||||
|  | set -euo pipefail | ||||||
|  | 
 | ||||||
|  | DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")" | ||||||
|  | 
 | ||||||
|  | ROOT_DIR="$(realpath "${DIR}/../..")" | ||||||
|  | 
 | ||||||
|  | source "${DIR}/helper.sh" | ||||||
|  | 
 | ||||||
|  | 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 "Creating namespace ${ARC_NAMESPACE}" | ||||||
|  |     kubectl create namespace "${SCALE_SET_NAMESPACE}" | ||||||
|  | 
 | ||||||
|  |     echo "Installing ARC" | ||||||
|  |     helm install "${ARC_NAME}" \ | ||||||
|  |         --namespace "${ARC_NAMESPACE}" \ | ||||||
|  |         --create-namespace \ | ||||||
|  |         --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 | ||||||
|  |         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 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 | ||||||
|  |         return 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function main() { | ||||||
|  |     echo "[*] Running single namespace setup" | ||||||
|  |     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 | ||||||
		Loading…
	
		Reference in New Issue