bin/ci-e2e
#!/bin/bash
if [[ -z ${GIT_COMMIT_SHA+x} ]]; then
echo 'GIT_COMMIT_SHA is not set'
exit 1
fi
if [[ -z ${GIT_BRANCH+x} ]]; then
echo 'GIT_BRANCH is not set'
exit 1
fi
if [[ -z ${TEST_IMAGE+x} ]]; then
echo 'TEST_IMAGE is not set'
exit 1
fi
if [[ -z ${DIST_IMAGE+x} ]]; then
echo 'DIST_IMAGE is not set'
exit 1
fi
if [[ "${CI}" == "true" ]]; then
if [[ -z ${S3_BUCKET_URI+x} ]]; then
echo 'S3_BUCKET_URI must be set when CI=true'
exit 1
fi
if [[ -z ${S3_BUCKET_PUBLIC_URI+x} ]]; then
echo 'S3_BUCKET_PUBLIC_URI must be set when CI=true'
exit 1
fi
if [[ -z ${MASTER_BUILD_S3_KEY_PREFIX+x} ]]; then
echo 'MASTER_BUILD_S3_KEY_PREFIX must be set when CI=true'
exit 1
fi
if [[ -z ${BUILD_S3_KEY_PREFIX+x} ]]; then
echo 'BUILD_S3_KEY_PREFIX must be set when CI=true'
exit 1
fi
fi
CONTAINER_REPORTS_ROOT_DIR=${CONTAINER_SRC_DIR}/reports
BUILD_REPORTS_S3_KEY_PREFIX=${BUILD_S3_KEY_PREFIX%/}/reports/e2e/allure/
MASTER_REPORTS_S3_KEY_PREFIX=${MASTER_BUILD_S3_KEY_PREFIX%/}/reports/e2e/allure/
MASTER_ALLURE_HISTORY_S3_KEY_PREFIX=${MASTER_REPORTS_S3_KEY_PREFIX%/}/allure/html/history/
is-ci-context() {
[[ "${CI}" == "true" ]]
}
is-master-branch() {
[[ "${GIT_BRANCH}" == "master" ]]
}
prep() {
for I in mesosphere/aws-cli mattupstate/allure; do
docker pull $I
done
}
clean() {
docker-compose down 2>/dev/null || :
}
generate-allure-report() {
docker-compose run --rm aws \
s3 cp --quiet --recursive \
${MASTER_ALLURE_HISTORY_S3_KEY_PREFIX} /work/e2e/allure/xml/history/
echo "Allure report history fetched from ${MASTER_ALLURE_HISTORY_S3_KEY_PREFIX}"
export ALLURE_ENVIRONMENT="Hostname=$(hostname)
Git.Commit=${GIT_COMMIT_SHA}
Git.Branch=${GIT_BRANCH}
Docker.Version=$(docker --version)
Docker.TestImage=${TEST_IMAGE}
DockerCompose.Version=$(docker-compose --version)"
docker-compose run --rm \
--entrypoint /bin/sh \
allure -c '
echo "$ALLURE_ENVIRONMENT" >> e2e/allure/xml/environment.properties
echo "Allure environment:"
cat e2e/allure/xml/environment.properties
allure generate --clean --report-dir e2e/allure/html e2e/allure/xml'
docker-compose run --rm \
--entrypoint /bin/sh protractor -c '
tree -H . -L 1 --noreport --charset utf-8 reports/e2e/allure > reports/e2e/allure/index.html'
docker-compose run --rm \
--entrypoint /bin/sh protractor -c '
tree -H . -L 1 --noreport --charset utf-8 reports/e2e/allure/xml > reports/e2e/allure/xml/index.html'
}
publish-allure-report() {
docker-compose run --rm aws \
s3 rm --quiet --recursive ${1}
docker-compose run --rm aws \
s3 cp --quiet --acl public-read --recursive /work/e2e/allure/ ${1}
echo "Report published to: ${1/${S3_BUCKET_URI}/${S3_BUCKET_PUBLIC_URI}}"
}
publish-build-reports() {
publish-allure-report ${BUILD_REPORTS_S3_KEY_PREFIX}
}
publish-master-reports() {
publish-allure-report ${MASTER_REPORTS_S3_KEY_PREFIX}
}
reports() {
is-ci-context && generate-allure-report || :
is-ci-context && publish-build-reports || :
is-ci-context && is-master-branch && publish-master-reports || :
}
tests() {
docker-compose up \
--abort-on-container-exit \
--exit-code-from protractor \
--force-recreate \
--remove-orphans \
--quiet-pull \
hub firefox chrome webapp protractor
}
prep
tests
E2E_EXIT_CODE=$?
reports
clean
exit ${E2E_EXIT_CODE}