2020-11-14 20:07:14 +09:00
#!/usr/bin/env bash
set -e
tpe = ${ ACCEPTANCE_TEST_SECRET_TYPE }
2021-05-11 06:30:57 +00:00
VALUES_FILE = ${ VALUES_FILE :- $( dirname $0 ) /values.yaml }
2022-02-16 11:42:38 +00:00
kubectl delete secret controller-manager || :
2020-11-14 20:07:14 +09:00
if [ " ${ tpe } " = = "token" ] ; then
2021-05-02 16:31:07 +09:00
if ! kubectl get secret controller-manager -n actions-runner-system >/dev/null; then
kubectl create secret generic controller-manager \
-n actions-runner-system \
--from-literal= github_token = ${ GITHUB_TOKEN : ?GITHUB_TOKEN must not be empty }
fi
2020-11-14 20:07:14 +09:00
elif [ " ${ tpe } " = = "app" ] ; then
kubectl create secret generic controller-manager \
-n actions-runner-system \
--from-literal= github_app_id = ${ APP_ID : ?must not be empty } \
--from-literal= github_app_installation_id = ${ INSTALLATION_ID : ?must not be empty } \
--from-file= github_app_private_key = ${ PRIVATE_KEY_FILE_PATH : ?must not be empty }
else
echo "ACCEPTANCE_TEST_SECRET_TYPE must be set to either \"token\" or \"app\"" 1>& 2
exit 1
fi
2022-02-17 09:16:16 +09:00
if [ -n " ${ WEBHOOK_GITHUB_TOKEN } " ] ; then
kubectl -n actions-runner-system delete secret \
github-webhook-server || :
kubectl -n actions-runner-system create secret generic \
github-webhook-server \
--from-literal= github_token = ${ WEBHOOK_GITHUB_TOKEN : ?WEBHOOK_GITHUB_TOKEN must not be empty }
else
echo 'Skipped deploying secret "github-webhook-server". Set WEBHOOK_GITHUB_TOKEN to deploy.' 1>& 2
fi
2020-11-14 20:31:37 +09:00
tool = ${ ACCEPTANCE_TEST_DEPLOYMENT_TOOL }
2022-02-19 09:24:12 +00:00
TEST_ID = ${ TEST_ID :- default }
2020-11-14 20:31:37 +09:00
if [ " ${ tool } " = = "helm" ] ; then
2022-02-19 09:24:12 +00:00
set -v
2020-11-14 20:31:37 +09:00
helm upgrade --install actions-runner-controller \
charts/actions-runner-controller \
-n actions-runner-system \
2020-11-14 21:58:16 +09:00
--create-namespace \
2021-05-02 16:31:07 +09:00
--set syncPeriod = ${ SYNC_PERIOD } \
2021-05-01 08:10:57 +02:00
--set authSecret.create= false \
--set image.repository= ${ NAME } \
2021-05-11 06:30:57 +00:00
--set image.tag= ${ VERSION } \
2022-02-19 09:24:12 +00:00
--set podAnnotations.test-id= ${ TEST_ID } \
--set githubWebhookServer.podAnnotations.test-id= ${ TEST_ID } \
2021-05-11 06:30:57 +00:00
-f ${ VALUES_FILE }
2022-02-19 09:24:12 +00:00
set +v
2022-02-16 11:44:28 +00:00
# To prevent `CustomResourceDefinition.apiextensions.k8s.io "runners.actions.summerwind.dev" is invalid: metadata.annotations: Too long: must have at most 262144 bytes`
# errors
kubectl create -f charts/actions-runner-controller/crds || kubectl replace -f charts/actions-runner-controller/crds
2022-02-27 11:49:50 +00:00
# This wait fails due to timeout when it's already in crashloopback and this update doesn't change the image tag.
# That's why we add `|| :`. With that we prevent stopping the script in case of timeout and
# proceed to delete (possibly in crashloopback and/or running with outdated image) pods so that they are recreated by K8s.
kubectl -n actions-runner-system wait deploy/actions-runner-controller --for condition = available --timeout 60s || :
2020-11-14 20:31:37 +09:00
else
kubectl apply \
-n actions-runner-system \
-f release/actions-runner-controller.yaml
2022-02-27 11:49:50 +00:00
kubectl -n actions-runner-system wait deploy/controller-manager --for condition = available --timeout 120s || :
2020-11-14 20:31:37 +09:00
fi
2020-11-14 20:07:14 +09:00
2022-02-27 11:49:50 +00:00
# Restart all ARC pods
kubectl -n actions-runner-system delete po -l app.kubernetes.io/name= actions-runner-controller
echo Waiting for all ARC pods to be up and running after restart
kubectl -n actions-runner-system wait deploy/actions-runner-controller --for condition = available --timeout 120s
2020-11-14 20:07:14 +09:00
# Adhocly wait for some time until actions-runner-controller's admission webhook gets ready
sleep 20
e2e: Install and run workflow and verify the result (#661)
This enhances the E2E test suite introduced in #658 to also include the following steps:
- Install GitHub Actions workflow
- Trigger a workflow run via a git commit
- Verify the workflow run result
In the workflow, we use `kubectl create cm --from-literal` to create a configmap that contains an unique test ID. In the last step we obtain the configmap from within the E2E test and check the test ID to match the expected one.
To install a GitHub Actions workflow, we clone a GitHub repository denoted by the TEST_REPO envvar, progmatically generate a few files with some Go code, run `git-add`, `git-commit`, and then `git-push` to actually push the files to the repository. A single commit containing an updated workflow definition and an updated file seems to run a workflow derived to the definition introduced in the commit, which was a bit surpirising and useful behaviour.
At this point, the E2E test fully covers all the steps for a GitHub token based installation. We need to add scenarios for more deployment options, like GitHub App, RunnerDeployment, HRA, and so on. But each of them would worth another pull request.
2021-06-28 08:30:32 +09:00
RUNNER_LABEL = ${ RUNNER_LABEL :- self -hosted }
2021-05-11 06:30:57 +00:00
if [ -n " ${ TEST_REPO } " ] ; then
2022-02-27 11:43:07 +00:00
if [ " ${ USE_RUNNERSET } " != "false" ] ; then
cat acceptance/testdata/runnerset.envsubst.yaml | TEST_ENTERPRISE = TEST_ORG = RUNNER_MIN_REPLICAS = ${ REPO_RUNNER_MIN_REPLICAS } NAME = repo-runnerset envsubst | kubectl apply -f -
2021-06-22 17:10:09 +09:00
else
echo 'Deploying runnerdeployment and hra. Set USE_RUNNERSET if you want to deploy runnerset instead.'
2022-03-05 12:13:22 +00:00
cat acceptance/testdata/runnerdeploy.envsubst.yaml | TEST_ENTERPRISE = TEST_ORG = RUNNER_MIN_REPLICAS = ${ REPO_RUNNER_MIN_REPLICAS } NAME = repo-runnerdeploy envsubst | kubectl apply -f -
2021-06-22 17:10:09 +09:00
fi
2021-05-11 06:30:57 +00:00
else
echo 'Skipped deploying runnerdeployment and hra. Set TEST_REPO to "yourorg/yourrepo" to deploy.'
fi
if [ -n " ${ TEST_ORG } " ] ; then
2022-02-27 11:43:07 +00:00
if [ " ${ USE_RUNNERSET } " != "false" ] ; then
cat acceptance/testdata/runnerset.envsubst.yaml | TEST_ENTERPRISE = TEST_REPO = RUNNER_MIN_REPLICAS = ${ ORG_RUNNER_MIN_REPLICAS } NAME = org-runnerset envsubst | kubectl apply -f -
else
cat acceptance/testdata/runnerdeploy.envsubst.yaml | TEST_ENTERPRISE = TEST_REPO = RUNNER_MIN_REPLICAS = ${ ORG_RUNNER_MIN_REPLICAS } NAME = org-runnerdeploy envsubst | kubectl apply -f -
fi
2021-05-11 06:30:57 +00:00
2022-02-17 09:16:28 +09:00
if [ -n " ${ TEST_ORG_GROUP } " ] ; then
2022-02-27 11:43:07 +00:00
if [ " ${ USE_RUNNERSET } " != "false" ] ; then
cat acceptance/testdata/runnerset.envsubst.yaml | TEST_ENTERPRISE = TEST_REPO = RUNNER_MIN_REPLICAS = ${ ORG_RUNNER_MIN_REPLICAS } TEST_GROUP = ${ TEST_ORG_GROUP } NAME = orgroupg-runnerset envsubst | kubectl apply -f -
else
cat acceptance/testdata/runnerdeploy.envsubst.yaml | TEST_ENTERPRISE = TEST_REPO = RUNNER_MIN_REPLICAS = ${ ORG_RUNNER_MIN_REPLICAS } TEST_GROUP = ${ TEST_ORG_GROUP } NAME = orggroup-runnerdeploy envsubst | kubectl apply -f -
fi
2021-05-11 06:30:57 +00:00
else
2022-02-17 09:16:28 +09:00
echo 'Skipped deploying enterprise runnerdeployment. Set TEST_ORG_GROUP to deploy.'
2021-05-11 06:30:57 +00:00
fi
else
echo 'Skipped deploying organizational runnerdeployment. Set TEST_ORG to deploy.'
fi
2022-02-17 09:16:28 +09:00
if [ -n " ${ TEST_ENTERPRISE } " ] ; then
2022-02-27 11:43:07 +00:00
if [ " ${ USE_RUNNERSET } " != "false" ] ; then
cat acceptance/testdata/runnerset.envsubst.yaml | TEST_ORG = TEST_REPO = RUNNER_MIN_REPLICAS = ${ ENTERPRISE_RUNNER_MIN_REPLICAS } NAME = enterprise-runnerset envsubst | kubectl apply -f -
else
cat acceptance/testdata/runnerdeploy.envsubst.yaml | TEST_ORG = TEST_REPO = RUNNER_MIN_REPLICAS = ${ ENTERPRISE_RUNNER_MIN_REPLICAS } NAME = enterprise-runnerdeploy envsubst | kubectl apply -f -
fi
2022-02-17 09:16:28 +09:00
if [ -n " ${ TEST_ENTERPRISE_GROUP } " ] ; then
2022-02-27 11:43:07 +00:00
if [ " ${ USE_RUNNERSET } " != "false" ] ; then
cat acceptance/testdata/runnerset.envsubst.yaml | TEST_ORG = TEST_REPO = RUNNER_MIN_REPLICAS = ${ ENTERPRISE_RUNNER_MIN_REPLICAS } TEST_GROUP = ${ TEST_ENTERPRISE_GROUP } NAME = enterprisegroup-runnerset envsubst | kubectl apply -f -
else
cat acceptance/testdata/runnerdeploy.envsubst.yaml | TEST_ORG = TEST_REPO = RUNNER_MIN_REPLICAS = ${ ENTERPRISE_RUNNER_MIN_REPLICAS } TEST_GROUP = ${ TEST_ENTERPRISE_GROUP } NAME = enterprisegroup-runnerdeploy envsubst | kubectl apply -f -
fi
2022-02-17 09:16:28 +09:00
else
echo 'Skipped deploying enterprise runnerdeployment. Set TEST_ENTERPRISE_GROUP to deploy.'
fi
else
echo 'Skipped deploying enterprise runnerdeployment. Set TEST_ENTERPRISE to deploy.'
fi