bin/ci-analysis
#!/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}