mattupstate/angular-pipeline-example

View on GitHub
bin/ci-e2e

Summary

Maintainability
Test Coverage
#!/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}