Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ci(brigade.js): add e2e job #955

Merged
merged 2 commits into from
Oct 29, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 32 additions & 1 deletion brigade.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// Be careful when editing!
// ============================================================================
const { events, Job, Group } = require("brigadier");
const { Check } = require("@brigadecore/brigade-utils");
const { Check, KindJob } = require("@brigadecore/brigade-utils");

const projectName = "brigade";
const projectOrg = "brigadecore";
Expand Down Expand Up @@ -50,6 +50,26 @@ function jsTest() {
return job;
}

function e2e() {
// Create a new job to run kind-based e2e tests
// Spec'd image wraps docker:stable-dind
// with make, bash,, git, kubectl, etc.
let kind = new KindJob("test-e2e");
// Add golang path setup as e2e script invokes the brig cli
// by its main.go filepath
kind.mountPath = localPath;
kind.tasks.push(
"apk add --update --no-cache bash",
`cd ${localPath}`,
"CREATE_KIND=false make e2e"
);
// TODO: remove this override once brigade-utils is bumped
// Fixed in https://github.com/brigadecore/brigade-utils/pull/30
kind.timeout = 1800000

return kind;
}

function buildAndPublishImages(project, version) {
let dockerRegistry = project.secrets.dockerhubRegistry || "docker.io";
let dockerOrg = project.secrets.dockerhubOrg || "brigadecore";
Expand Down Expand Up @@ -86,6 +106,7 @@ function runSuite(e, p) {
return Promise.all([
runTests(e, p, goTest).catch((err) => { return err }),
runTests(e, p, jsTest).catch((err) => { return err }),
runTests(e, p, e2e).catch((err) => { return err }),
])
.then((values) => {
values.forEach((value) => {
Expand All @@ -112,6 +133,8 @@ function runCheck(e, p) {
return runTests(e, p, goTest);
case "test-javascript":
return runTests(e, p, jsTest);
case "test-e2e":
return runTests(e, p, e2e);
default:
throw new Error(`No check found with name: ${name}`);
}
Expand Down Expand Up @@ -174,6 +197,14 @@ function slackNotify(title, msg, project) {
return noopJob;
}

////////////////////////////////////////////////////////////////////////////////////////////
// Event Handlers
////////////////////////////////////////////////////////////////////////////////////////////

events.on("e2e", () => {
return e2e().run();
})

events.on("exec", (e, p) => {
return Group.runAll([
goTest(),
Expand Down
6 changes: 3 additions & 3 deletions brigade.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"dependencies": {
"@brigadecore/brigade-utils": "0.2.0"
}
"dependencies": {
"@brigadecore/brigade-utils": "0.3.0"
}
}
36 changes: 24 additions & 12 deletions e2e/run.sh
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
#!/bin/bash
# custom script for e2e testing
# ~/bin must exist and be part of $PATH
# ${BIN_DIR} must exist and be part of $PATH

# kudos to https://elder.dev/posts/safer-bash/
set -o errexit # script exits when a command fails == set -e
set -o nounset # script exits when tries to use undeclared variables == set -u
#set -o xtrace # trace what's executed == set -x (useful for debugging)
set -o pipefail # causes pipelines to retain / set the last non-zero status

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
BIN_DIR="${BIN_DIR:-"$(mktemp -d)"}"

# This script may be run in the form of a Brigade KindJob,
# wherein the kind cluster will have already been pre-provisioned,
# hence the need to be able to opt-out
CREATE_KIND="${CREATE_KIND:-true}"

KUBECTL_PLATFORM=linux/amd64
KUBECTL_VERSION=v1.15.0
KUBECTL_VERSION=v1.15.3
KUBECTL_EXECUTABLE=kubectl

KIND_PLATFORM=kind-linux-amd64
KIND_VERSION=v0.4.0
KIND_VERSION=v0.5.1
KIND_EXECUTABLE=kind

HELM_PLATFORM=linux-amd64
HELM_VERSION=helm-v3.0.0-alpha.1
HELM_VERSION=helm-v3.0.0-beta.4
HELM_EXECUTABLE=helm3

########################################################################################################################################################
Expand All @@ -26,20 +34,22 @@ function prerequisites_check(){
# check if kubectl is installed
if ! [ -x "$(command -v kubectl)" ]; then
echo 'Error: kubectl is not installed. Installing...'
curl -LO https://storage.googleapis.com/kubernetes-release/release/$KUBECTL_VERSION/bin/$KUBECTL_PLATFORM/kubectl && chmod +x ./kubectl && mv kubectl ~/bin/$KUBECTL_EXECUTABLE
curl -LO https://storage.googleapis.com/kubernetes-release/release/$KUBECTL_VERSION/bin/$KUBECTL_PLATFORM/kubectl && chmod +x ./kubectl && mv kubectl ${BIN_DIR}/$KUBECTL_EXECUTABLE
fi

# check if kind is installed
if ! [ -x "$(command -v $KIND_EXECUTABLE)" ]; then
echo 'Error: kind is not installed. Installing...'
wget https://github.com/kubernetes-sigs/kind/releases/download/$KIND_VERSION/$KIND_PLATFORM && mv $KIND_PLATFORM ~/bin/$KIND_EXECUTABLE && chmod +x ~/bin/$KIND_EXECUTABLE
wget https://github.com/kubernetes-sigs/kind/releases/download/$KIND_VERSION/$KIND_PLATFORM && mv $KIND_PLATFORM ${BIN_DIR}/$KIND_EXECUTABLE && chmod +x ${BIN_DIR}/$KIND_EXECUTABLE
fi

# check if helm is installed
if ! [ -x "$(command -v $HELM_EXECUTABLE)" ]; then
echo 'Error: Helm is not installed. Installing...'
wget https://get.helm.sh/$HELM_VERSION-$HELM_PLATFORM.tar.gz && tar -xvzf $HELM_VERSION-$HELM_PLATFORM.tar.gz && rm -rf $HELM_VERSION-$HELM_PLATFORM.tar.gz && mv $HELM_PLATFORM/helm ~/bin/$HELM_EXECUTABLE && chmod +x ~/bin/$HELM_EXECUTABLE
wget https://get.helm.sh/$HELM_VERSION-$HELM_PLATFORM.tar.gz && tar -xvzf $HELM_VERSION-$HELM_PLATFORM.tar.gz && rm -rf $HELM_VERSION-$HELM_PLATFORM.tar.gz && mv $HELM_PLATFORM/helm ${BIN_DIR}/$HELM_EXECUTABLE && chmod +x ${BIN_DIR}/$HELM_EXECUTABLE
fi

export PATH="${BIN_DIR}:${PATH}"
}


Expand All @@ -57,13 +67,11 @@ function install_helm_project(){
function wait_for_deployments() {
echo "-----Waiting for Brigade components' deployments-----"
# https://stackoverflow.com/questions/59895/getting-the-source-directory-of-a-bash-script-from-within
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
"${DIR}"/wait-for-deployment.sh -n default brigade-server-brigade-api
"${DIR}"/wait-for-deployment.sh -n default brigade-server-brigade-cr-gw
"${DIR}"/wait-for-deployment.sh -n default brigade-server-brigade-ctrl
"${DIR}"/wait-for-deployment.sh -n default brigade-server-brigade-generic-gateway
"${DIR}"/wait-for-deployment.sh -n default brigade-server-brigade-github-app
"${DIR}"/wait-for-deployment.sh -n default brigade-server-brigade-github-oauth
"${DIR}"/wait-for-deployment.sh -n default brigade-server-kashti
}

Expand Down Expand Up @@ -100,11 +108,15 @@ function run_verify_build(){
prerequisites_check

# create kind k8s cluster
$KIND_EXECUTABLE create cluster
if [[ "${CREATE_KIND}" == "true" ]]; then
$KIND_EXECUTABLE create cluster
fi

function finish {
echo "-----Cleaning up-----"
$KIND_EXECUTABLE delete cluster
if [[ "${CREATE_KIND}" == "true" ]]; then
echo "-----Cleaning up-----"
$KIND_EXECUTABLE delete cluster
fi
}

trap finish EXIT
Expand Down