Skip to content

Commit

Permalink
Add acceptance test (actions#168)
Browse files Browse the repository at this point in the history
To ease verifying the controller to work before submitting/merging PRs and releasing a new version of the controller.
  • Loading branch information
mumoshu authored Nov 14, 2020
1 parent 8ccf640 commit bbfe03f
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,6 @@ bin
*.swp
*.swo
*~

.envrc
*.pem
23 changes: 23 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,29 @@ release: manifests
mkdir -p release
kustomize build config/default > release/actions-runner-controller.yaml

.PHONY: acceptance
acceptance: release
ACCEPTANCE_TEST_SECRET_TYPE=token make acceptance/setup acceptance/tests acceptance/teardown
ACCEPTANCE_TEST_SECRET_TYPE=app make acceptance/setup acceptance/tests acceptance/teardown

acceptance/setup:
kind create cluster --name acceptance
kubectl cluster-info --context kind-acceptance
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.4/cert-manager.yaml #kubectl create namespace actions-runner-system
kubectl -n cert-manager wait deploy/cert-manager-cainjector --for condition=available --timeout 60s
kubectl -n cert-manager wait deploy/cert-manager-webhook --for condition=available --timeout 60s
kubectl -n cert-manager wait deploy/cert-manager --for condition=available --timeout 60s
kubectl create namespace actions-runner-system
# Adhocly wait for some time until cert-manager's admission webhook gets ready
sleep 5

acceptance/teardown:
kind delete cluster --name acceptance

acceptance/tests:
acceptance/deploy.sh
acceptance/checks.sh

# Upload release file to GitHub.
github-release: release
ghr ${VERSION} release/
Expand Down
22 changes: 22 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,28 @@ Your base64'ed PAT token has a new line at the end, it needs to be created witho
* `echo -n $TOKEN | base64`
* Create the secret as described in the docs using the shell and documeneted flags

# Developing

If you'd like to modify the controller to fork or contribute, I'd suggest using the following snippet for running
the acceptance test:

```shell
NAME=$DOCKER_USER/actions-runner-controller VERSION=dev \
GITHUB_TOKEN=*** \
APP_ID=*** \
PRIVATE_KEY_FILE_PATH=path/to/pem/file \
INSTALLATION_ID=*** \
make docker-build docker-push acceptance
```

Please follow the instructions explained in [Using Personal Access Token](#using-personal-access-token) to obtain
`GITHUB_TOKEN`, and those in [Using GitHub App](#using-github-app) to obtain `APP_ID`, `INSTALLATION_ID`, and
`PRIAVTE_KEY_FILE_PATH`.

The test creates a one-off `kind` cluster, deploys `cert-manager` and `actions-runner-controller`,
creates a `RunnerDeployment` custom resource for a public Git repository to confirm that the
controller is able to bring up a runner pod with the actions runner registration token installed.

# Alternatives

The following is a list of alternative solutions that may better fit you depending on your use-case:
Expand Down
29 changes: 29 additions & 0 deletions acceptance/checks.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/usr/bin/env bash

set -e

runner_name=

while [ -z "${runner_name}" ]; do
echo Finding the runner... 1>&2
sleep 1
runner_name=$(kubectl get runner --output=jsonpath="{.items[*].metadata.name}")
done

echo Found runner ${runner_name}.

pod_name=

while [ -z "${pod_name}" ]; do
echo Finding the runner pod... 1>&2
sleep 1
pod_name=$(kubectl get pod --output=jsonpath="{.items[*].metadata.name}" | grep ${runner_name})
done

echo Found pod ${pod_name}.

echo Waiting for pod ${runner_name} to become ready... 1>&2

kubectl wait pod/${runner_name} --for condition=ready --timeout 120s

echo All tests passed. 1>&2
32 changes: 32 additions & 0 deletions acceptance/deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env bash

set -e

tpe=${ACCEPTANCE_TEST_SECRET_TYPE}

if [ "${tpe}" == "token" ]; then
kubectl create secret generic controller-manager \
-n actions-runner-system \
--from-literal=github_token=${GITHUB_TOKEN:?GITHUB_TOKEN must not be empty}
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

kubectl apply \
-n actions-runner-system \
-f release/actions-runner-controller.yaml

kubectl -n actions-runner-system wait deploy/controller-manager --for condition=available

# Adhocly wait for some time until actions-runner-controller's admission webhook gets ready
sleep 20

kubectl apply \
-f acceptance/testdata/runnerdeploy.yaml
9 changes: 9 additions & 0 deletions acceptance/testdata/runnerdeploy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
apiVersion: actions.summerwind.dev/v1alpha1
kind: RunnerDeployment
metadata:
name: example-runnerdeploy
spec:
replicas: 1
template:
spec:
repository: mumoshu/actions-runner-controller-ci

0 comments on commit bbfe03f

Please sign in to comment.