CMSgov/dpc-app

View on GitHub
Makefile

Summary

Maintainability
Test Coverage
REPORT_COVERAGE ?= false

# Smoke Testing
# ==============

SMOKE_THREADS ?= 10

venv: venv/bin/activate

venv/bin/activate: requirements.txt
    test -d venv || python3 -m venv venv
    . venv/bin/activate
    touch venv/bin/activate

.PHONY: smoke
smoke: ## If running on Jenkins, purges JMeter's library, then copies all of dpc-smoketests dependencies into it
smoke:
    @JENKINS_DIR="/var/jenkins_home/.bzt/jmeter-taurus/5.5/lib"; \
    if [ -d $$JENKINS_DIR ]; then \
          echo "Rebuilding JMeter lib"; \
          rm $$JENKINS_DIR/*.jar; \
          mvn dependency:copy-dependencies -pl dpc-smoketest -DoutputDirectory=$$JENKINS_DIR; \
    else \
        echo "Not running on Jenkins"; \
    fi
    @mvn clean package -DskipTests -Djib.skip=True -pl dpc-smoketest -am -ntp

.PHONY: smoke/local
smoke/local: venv smoke
    @echo "Running Smoke Tests against Local env"
    @read -p "`echo '\n=====\nThe Smoke Tests require an authenticated environment!\nVerify your local API environment has \"authenticationDisabled = false\" or these tests will fail.\n=====\n\nPress ENTER to run the tests...'`"
    . venv/bin/activate; pip install -Ur requirements.txt; bzt src/test/local.smoke_test.yml

.PHONY: smoke/remote
smoke/remote: venv smoke
    @echo "Running Smoke Tests against ${HOST_URL}"
    . venv/bin/activate; bzt src/test/remote.smoke_test.yml

.PHONY: smoke/prod
smoke/prod: venv smoke
    @echo "Running Smoke Tests against ${HOST_URL}"
    . venv/bin/activate; bzt src/test/prod.smoke_test.yml


# Build commands
#
# These commands build/compile our applications and docker images.
# To start the applications, use the start-* commands below.
# ==============

api: ## Builds the Java API services
api: secure-envs
    mvn clean compile -Perror-prone -B -V -ntp -T 4 -DskipTests
    mvn package -Pci -ntp -T 4 -DskipTests

website: ## Builds the sandbox portal website
website:
    @docker build -f dpc-web/Dockerfile . -t dpc-web

admin: ## Builds the sandbox admin website
admin:
    @docker build -f dpc-admin/Dockerfile . -t dpc-web-admin

portal: ## Builds the DPC portal
portal:
    mkdir -p dpc-portal/vendor/api_client
    cp -r engines/api_client/ dpc-portal/vendor/api_client/
    @docker build -f dpc-portal/Dockerfile . -t dpc-web-portal


# Start commands
# ==============

start-dpc: ## Start all DPC API and portal services
start-dpc: start-app start-portals

start-db: ## Start the database
start-db:
    @docker-compose up start_core_dependencies

start-api-dependencies: # Start internal Java service dependencies, e.g. attribution and aggregation services.
start-api-dependencies:
    @USE_BFD_MOCK=false docker-compose up start_api_dependencies

start-app: ## Start the API
start-app: secure-envs start-db start-api-dependencies
    @docker-compose up start_api

start-api: ## Start the API
start-api: start-app

start-web: ## Start the sandbox portal
start-web:
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_web

start-admin: ## Start the sandbox admin portal
start-admin:
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_admin

start-portal: ## Start the DPC portal
start-portal: secure-envs
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_portal

start-portals: ## Start all frontend services
start-portals: start-db start-web start-admin start-portal


# Debug commands
# ==============

.PHONY: start-dpc-debug
start-dpc-debug: secure-envs
    @mvn clean install -Pdebug -DskipTests -ntp
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_core_dependencies
    @DEBUG_MODE=true USE_BFD_MOCK=false docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_api_dependencies
    @DEBUG_MODE=true docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_api
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_web
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_admin
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_portal
    @docker ps

.PHONY: start-app-debug
start-app-debug: secure-envs
    @mvn clean install -Pdebug -DskipTests -ntp
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_core_dependencies
    @DEBUG_MODE=true USE_BFD_MOCK=false docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_api_dependencies
    @DEBUG_MODE=true docker-compose -f docker-compose.yml -f docker-compose.portals.yml up start_api

.PHONY: start-it-debug
start-it-debug: secure-envs
    @docker-compose down
    @mvn clean compile -Pdebug -B -V -ntp -DskipTests
    @mvn package -Pci -ntp -DskipTests
    @docker-compose up start_core_dependencies
    @DEBUG_MODE=true docker-compose up start_api_dependencies


# Down commands
# ==============

down-dpc: ## Shut down all services
down-dpc:
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml down

down-portals: ## Shut down all services
down-portals: down-dpc

down-start-v1-portals: ## Shut down test services
down-start-v1-portals:
    @docker-compose -p start-v1-portals -f docker-compose.yml -f docker-compose.portals.yml down

# Utility commands
# =================

CONF_FILE = "dpc-attribution/src/test/resources/test.application.yml"

secure-envs: ## Decrypt API environment secrets
secure-envs:
    @bash ops/scripts/secrets --decrypt ops/config/encrypted/bb.keystore | tail -n +2 > bbcerts/bb.keystore
    @bash ops/scripts/secrets --decrypt ops/config/encrypted/local.env | tail -n +2 > ops/config/decrypted/local.env

seed-db: ## Seed attribution data for local database
seed-db:
    @java -jar dpc-attribution/target/dpc-attribution.jar db migrate $(CONF_FILE)
    @java -jar dpc-attribution/target/dpc-attribution.jar seed $(CONF_FILE)

maven-config: ## Translate local environment variables into maven.config for manual API installation
maven-config:
    @mkdir -p ./.mvn
    @: > ./.mvn/maven.config
    @while read line;do echo "-D$${line} " >> ./.mvn/maven.config;done < ./ops/config/decrypted/local.env

psql: ## Run a psql shell
    @docker-compose -f docker-compose.yml exec -it db psql -U postgres

portal-console: ## Run a rails console shell
    @docker-compose -f docker-compose.yml -f docker-compose.portals.yml exec -it dpc_portal rails console


# Build & Test commands
# ======================

.PHONY: docker-base
docker-base:
    @docker-compose -f ./docker-compose.base.yml build base

.PHONY: ci-app
ci-app: docker-base secure-envs
    @./dpc-test.sh

.PHONY: ci-portals
ci-portals: secure-envs
    @./dpc-portals-test.sh

.PHONY: ci-portals-v1
ci-portals-v1: secure-envs
    @./dpc-portals-test.sh

.PHONY: ci-admin-portal
ci-admin-portal: secure-envs
    @./dpc-admin-portal-test.sh

.PHONY: ci-portal
ci-portal: secure-envs
    @./dpc-portal-test.sh

.PHONY: ci-web-portal
ci-web-portal: secure-envs
    @./dpc-web-portal-test.sh

.PHONY: ci-api-client
ci-api-client:
    @./dpc-api-client-test.sh

.PHONY: unit-tests
unit-tests:
    @bash ./dpc-unit-test.sh