-
Clayton, Brandon Scott authoredClayton, Brandon Scott authored
.gitlab-ci.yml 5.78 KiB
variables:
JACOCO_HTML_DIR: ${REPORTS_DIR}/jacoco/test/html
JUNIT_FILES: build/test-results/test*/TEST-*.xml
NSHMP_HAZ_WS_IMAGE: ${CI_REGISTRY_IMAGE}/nshmp-haz-ws:${ENVIRONMENT}-${CI_COMMIT_SHORT_SHA}
REPORTS_DIR: build/reports
image: ${CI_REGISTRY}/devops/images/usgs/java:11
# Do not run for merge requests
workflow:
rules:
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH
stages:
- build
- test
- trigger
default:
tags:
- dev
####
# Environment Templates
####
##
# Rule for development environment
##
.development-env: &development-env
if: >
$CI_PROJECT_PATH != $UPSTREAM_PATH
|| (
$CI_PROJECT_PATH == $UPSTREAM_PATH
&& (
$CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH
&& $CI_COMMIT_BRANCH != 'production'
&& $CI_COMMIT_TAG == null
)
)
variables:
ENVIRONMENT: development
##
# Rule for staging environment
##
.staging-env: &staging-env
if: >
$CI_PROJECT_PATH == $UPSTREAM_PATH
&& $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
variables:
ENVIRONMENT: staging
##
# Rule for production envrionment
##
.production-env: &production-env
if: >
$CI_PROJECT_PATH == $UPSTREAM_PATH
&& ( $CI_COMMIT_TAG && $CI_COMMIT_TAG != '' )
variables:
ENVIRONMENT: production
####
# Docker Templates
####
##
# Docker in Docker
##
.dind:
image: ${CI_REGISTRY}/devops/images/docker:20
services:
- alias: docker
name: ${CI_REGISTRY}/devops/images/docker:20-dind
variables:
DOCKER_DRIVER: overlay2
##
# Build Docker image and push to registry.
#
# Pushes to internal registry for all branches and Docker registry
# on default upstream and production upstream branches.
##
.docker-build:
extends:
- .dind
needs: []
rules:
- *development-env
- *staging-env
- *production-env
script:
- BUILD_ARGS='';
- |
for arg in ${DOCKER_BUILD_ARGS}; do
BUILD_ARGS="${BUILD_ARGS} --build-arg ${arg}";
done
- env_image_name="${REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${ENVIRONMENT}-latest";
- latest_image_name="${REGISTRY_IMAGE}/${CI_PROJECT_NAME}:latest";
- sha_image_name="${REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${IMAGE_TAG}";
- |
docker build \
${BUILD_ARGS} \
--pull \
--tag "${env_image_name}" \
--file "${CI_PROJECT_DIR}/${DOCKERFILE}" \
"${CI_PROJECT_DIR}/.";
- docker push "${env_image_name}";
- |
docker tag "${env_image_name}" "${sha_image_name}";
docker push "${sha_image_name}";
- |
if [[ "${ENVIRONMENT}" != "development" ]]; then
docker tag "${env_image_name}" "${latest_image_name}";
docker push "${latest_image_name}";
fi
- |
printf "
--------
Image Name - %s:%s
--------
" "${CI_PROJECT_NAME}" "${IMAGE_TAG}";
stage: build
tags:
- ${TAG}
variables:
DOCKERFILE: Dockerfile
DOCKER_BUILD_ARGS: |
BUILD_IMAGE=${CI_REGISTRY}/devops/images/usgs/java:11
FROM_IMAGE=${CI_REGISTRY}/devops/images/usgs/java:11
IMAGE_TAG: ${ENVIRONMENT}-${CI_COMMIT_SHORT_SHA}
REGISTRY_IMAGE: ${CI_REGISTRY_IMAGE}
TAG: build
####
# Stage: build
####
Container Registry:
before_script:
- docker login ${CI_REGISTRY} -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD}
extends:
- .docker-build
parallel:
matrix:
-
CI_PROJECT_NAME: nshmp-haz
DOCKERFILE: Dockerfile
REGISTRY_IMAGE: ${CI_REGISTRY_IMAGE}
TAG: dev
-
CI_PROJECT_NAME: nshmp-haz-ws
DOCKERFILE: ws.Dockerfile
REGISTRY_IMAGE: ${CI_REGISTRY_IMAGE}
TAG: dev
variables:
DOCKER_BUILD_ARGS: |
BUILD_IMAGE=${CI_REGISTRY}/devops/images/usgs/java:11
FROM_IMAGE=${CI_REGISTRY}/devops/images/usgs/java:11
CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH}
CI_PROJECT_URL=${CI_PROJECT_URL}
UPSTREAM_PATH: ghsc/nshmp/nshmp-haz
Build Project:
script:
- ./gradlew assemble
stage: build
####
# Stage: test
####
Markdown Lint:
allow_failure: true
needs: []
script:
- ./gradlew nodeInstall
- ./gradlew markdownlint
stage: test
NSHM Tests:
artifacts:
paths:
- ${JACOCO_HTML_DIR}
reports:
junit: ${JUNIT_FILES}
coverage: '/Total.*?([0-9]{1,3})%/'
needs: []
parallel:
matrix:
- NSHM: Alaska2007
- NSHM: Alaska2023
- NSHM: Conus2018
- NSHM: Conus2023
- NSHM: Hawaii2021
script:
- CI_RUNNER_MEMORY="$(awk '/MemTotal/ {printf( "%d\n", $2 / 1024 / 1024 * .90 )}' /proc/meminfo)g"
- export CI_RUNNER_MEMORY
- ./gradlew generate${NSHM} --info
- ./gradlew test${NSHM} --info
- cat ${JACOCO_HTML_DIR}/index.html
stage: test
tags:
- nshmp
YAML Lint:
allow_failure: true
needs: []
script:
- ./gradlew nodeInstall
- ./gradlew yamllint
stage: test
Unit Tests:
artifacts:
paths:
- ${JACOCO_HTML_DIR}
reports:
junit: ${JUNIT_FILES}
coverage: '/Total.*?([0-9]{1,3})%/'
needs: []
script:
- ./gradlew check
- cat ${JACOCO_HTML_DIR}/index.html
stage: test
####
# Stage: trigger
####
Trigger nshmp-haz-ws CDK:
rules:
-
<<: *development-env
when: manual
- *staging-env
- *production-env
script:
- |
if [ "${ENVIRONMENT}" == 'production' ]; then
REF="production";
fi
- |
curl --request POST \
--form token=${NSHMP_CDK_TRIGGER_TOKEN} \
--form ref=${REF} \
--form "variables[TRIGGER_DESCRIPTION]=Deploy nshmp-haz to ${ENVIRONMENT}" \
--form "variables[SOURCE_PROJECT_NAME]=nshmp-haz-ws" \
--form "variables[ENVIRONMENT]=${ENVIRONMENT}" \
--form "variables[NSHMP_HAZ_WS_IMAGE]=${NSHMP_HAZ_WS_IMAGE}" \
"https://${PRIVATE_GITLAB}/api/v4/projects/${NSHMP_CDK_PROJECT_ID}/trigger/pipeline"
stage: trigger
variables:
REF: main
UPSTREAM_PATH: ghsc/nshmp/nshmp-haz