mattupstate/angular-pipeline-example

View on GitHub
bin/ci-analysis

Summary

Maintainability
Test Coverage
#!/bin/bash

if [[ -z ${TEST_IMAGE+x} ]]; then
  echo 'TEST_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

REPORTS_VOLUME=reports-$(./bin/uuid)
CONTAINER_NAME=analysis-$(./bin/uuid)
CONTAINER_SRC_DIR=/usr/src/app
CONTAINER_REPORTS_ROOT_DIR=${CONTAINER_SRC_DIR}/reports

is-ci-context() {
  [[ "${CI}" == "true" ]]
}

is-master-branch() {
  [[ "${GIT_BRANCH}" == "master" ]]
}

prep() {
  for I in ${TEST_IMAGE} mesosphere/aws-cli mattupstate/allure; do
    docker pull $I
  done
}

clean() {
  docker rm ${CONTAINER_NAME} 2>/dev/null >/dev/null || :
  docker volume rm ${REPORTS_VOLUME} 2>/dev/null >/dev/null || :
}

publish-lint-results() {
  S3_KEY_PREFIX="${2%/}/reports/${1}/lint/"

  docker run --rm \
    --env AWS_DEFAULT_REGION \
    --env AWS_ACCESS_KEY_ID \
    --env AWS_SECRET_ACCESS_KEY \
    mesosphere/aws-cli s3 rm --recursive --quiet ${S3_KEY_PREFIX}

  docker run --rm \
    --env AWS_DEFAULT_REGION \
    --env AWS_ACCESS_KEY_ID \
    --env AWS_SECRET_ACCESS_KEY \
    --workdir /work \
    --volume ${REPORTS_VOLUME}:/work \
    mesosphere/aws-cli s3 cp --quiet --acl public-read --recursive --quiet \
      /work/${1}/lint/ ${S3_KEY_PREFIX}

  echo "Report published to: ${S3_KEY_PREFIX/${S3_BUCKET_URI}/${S3_BUCKET_PUBLIC_URI}}"
}

generate-report-index() {
  docker run --rm \
    --workdir /work \
    --volume ${REPORTS_VOLUME}:/work \
    --entrypoint /bin/sh ${TEST_IMAGE} -c '
      tree -H . -L 1 --noreport --charset utf-8 '${1}'/lint > '${1}'/lint/index.html'
}

publish-app-lint-results() {
  generate-report-index app
  publish-lint-results app ${1}
}

publish-e2e-lint-results() {
  generate-report-index e2e
  publish-lint-results e2e ${1}
}

publish-build-reports() {
  publish-app-lint-results ${BUILD_S3_KEY_PREFIX}
  publish-e2e-lint-results ${BUILD_S3_KEY_PREFIX}
}

publish-master-reports() {
  publish-app-lint-results ${MASTER_BUILD_S3_KEY_PREFIX}
  publish-e2e-lint-results ${MASTER_BUILD_S3_KEY_PREFIX}
}

reports() {
  is-ci-context && publish-build-reports || :
  is-ci-context && is-master-branch && publish-master-reports || :
}

analysis() {
  docker volume create ${REPORTS_VOLUME}
  docker run --name ${CONTAINER_NAME} \
    --volume ${REPORTS_VOLUME}:${CONTAINER_REPORTS_ROOT_DIR} \
    ${TEST_IMAGE} npm run lint-ci
}

prep
analysis
ANALYSIS_EXIT_CODE=$?
reports
clean

exit ${ANALYSIS_EXIT_CODE}