diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..4241d05536cc5cda8ef9090fe8f7557cc2970b1b --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,202 @@ +variables: + CI_DEFAULT_BRANCH: legacy-main + CI_PROJECT_NAME: nshmp-haz-legacy + JACOCO_HTML_DIR: ${REPORTS_DIR}/jacoco/test/html + JUNIT_FILES: build/test-results/test*/TEST-*.xml + PRODUCTION_BRANCH: legacy-production + REPORTS_DIR: build/reports + UPSTREAM_PATH: ghsc/nshmp/nshmp-haz + +# Do not run for merge requests +workflow: + rules: + - if: $CI_COMMIT_TAG + - if: $CI_COMMIT_BRANCH + +stages: + - build + - test + +default: + tags: + - nshmp + +#### +# 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_BRANCH + ) + ) + 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_BRANCH == $PRODUCTION_BRANCH + variables: + ENVIRONMENT: production + + +#### +# Java Templates +#### + +## +# General Java setup +## +.java: + image: ${DEVOPS_REGISTRY}usgs/amazoncorretto:8 + +#### +# Docker Templates +#### + +## +# Docker in Docker +## +.dind: + image: ${DEVOPS_REGISTRY}docker:19.03-git + services: + - alias: docker + name: ${DEVOPS_REGISTRY}docker:19.03-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="${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${ENVIRONMENT}-latest"; + - latest_image_name="${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:latest"; + - sha_image_name="${CODE_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${IMAGE_TAG}"; + - | + docker build \ + ${BUILD_ARGS} \ + --pull \ + --tag "${env_image_name}" \ + --file "${DOCKERFILE}" \ + .; + - docker push "${env_image_name}"; + - | + docker tag "${env_image_name}" "${sha_image_name}"; + docker push "${sha_image_name}"; + - | + docker_latest_image="usgs/${CI_PROJECT_NAME}:latest"; + docker_env_image="usgs/${CI_PROJECT_NAME}:${ENVIRONMENT}-latest"; + + docker tag "${env_image_name}" "${docker_env_image}"; + docker push "${docker_env_image}"; + + if [[ "${ENVIRONMENT}" != "development" ]]; then + docker tag "${env_image_name}" "${latest_image_name}"; + docker push "${latest_image_name}"; + + docker tag "${env_image_name}" "${docker_latest_image}"; + docker push "${docker_latest_image}"; + fi + - | + printf " + -------- + Image Name - %s:%s + -------- + " "${CI_PROJECT_NAME}" "${IMAGE_TAG}"; + stage: build + tags: + - build + +#### +# Stage: build +#### + +Build Image: + extends: + - .docker-build + variables: + DOCKER_BUILD_ARGS: | + BUILD_IMAGE=${DEVOPS_REGISTRY}usgs/amazoncorretto:8 + FROM_IMAGE=${DEVOPS_REGISTRY}usgs/amazoncorretto:8 + DOCKERFILE: Dockerfile + IMAGE_TAG: ${ENVIRONMENT}-${CI_COMMIT_SHORT_SHA} + +Build Project: + artifacts: + paths: + - build + extends: + - .java + script: + - ./gradlew assemble + stage: build + +#### +# Stage: test +#### + +Test HazardCalc: + extends: + - .java + needs: + - Build Project + script: + - | + java -cp build/libs/nshmp-haz.jar \ + gov.usgs.earthquake.nshmp.HazardCalc \ + etc/peer/models/Set1-Case1 \ + "Test Site, -122.0, 38.0" + stage: test + +Unit Tests: + artifacts: + paths: + - ${JACOCO_HTML_DIR} + reports: + junit: ${JUNIT_FILES} + coverage: '/Total.*?([0-9]{1,3})%/' + extends: + - .java + needs: [] + script: + - ./gradlew check + - cat ${JACOCO_HTML_DIR}/index.html + stage: test