mirror of
https://github.com/GSA/notifications-admin.git
synced 2025-12-09 14:45:00 -05:00
122 lines
3.8 KiB
Makefile
122 lines
3.8 KiB
Makefile
.DEFAULT_GOAL := help
|
|
SHELL := /bin/bash
|
|
DATE = $(shell date +%Y-%m-%dT%H:%M:%S)
|
|
|
|
APP_VERSION_FILE = app/version.py
|
|
|
|
GIT_BRANCH ?= $(shell git symbolic-ref --short HEAD 2> /dev/null || echo "detached")
|
|
GIT_COMMIT ?= $(shell git rev-parse HEAD 2> /dev/null || echo "")
|
|
|
|
VIRTUALENV_ROOT := $(shell [ -z $$VIRTUAL_ENV ] && echo $$(pwd)/venv || echo $$VIRTUAL_ENV)
|
|
|
|
NVMSH := $(shell [ -f "$(HOME)/.nvm/nvm.sh" ] && echo "$(HOME)/.nvm/nvm.sh" || echo "/usr/local/share/nvm/nvm.sh")
|
|
|
|
## DEVELOPMENT
|
|
|
|
.PHONY: bootstrap
|
|
bootstrap: generate-version-file ## Set up everything to run the app
|
|
pipenv install --dev
|
|
source $(NVMSH) --no-use && nvm install && npm ci --no-audit
|
|
source $(NVMSH) && npm run build
|
|
|
|
.PHONY: watch-frontend
|
|
watch-frontend: ## Build frontend and watch for changes
|
|
source $(NVMSH) && npm run watch
|
|
|
|
.PHONY: run-flask
|
|
run-flask: ## Run flask
|
|
pipenv run newrelic-admin run-program flask run -p 6012 --host=0.0.0.0
|
|
|
|
.PHONY: run-flask-bare
|
|
run-flask-bare: ## Run flask without invoking pipenv so we can override ENV variables in .env
|
|
flask run -p 6012 --host=0.0.0.0
|
|
|
|
.PHONY: npm-audit
|
|
npm-audit: ## Check for vulnerabilities in NPM packages
|
|
source $(NVMSH) && npm run audit
|
|
|
|
.PHONY: help
|
|
help:
|
|
@cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-]+:.*?## .*$$' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
|
|
|
.PHONY: generate-version-file
|
|
generate-version-file: ## Generates the app version file
|
|
@echo -e "__git_commit__ = \"${GIT_COMMIT}\"\n__time__ = \"${DATE}\"" > ${APP_VERSION_FILE}
|
|
|
|
.PHONY: test
|
|
test: py-lint py-test js-lint js-test ## Run tests
|
|
|
|
.PHONY: py-lint
|
|
py-lint: ## Run python linting scanners
|
|
pipenv run flake8 .
|
|
pipenv run isort --check-only ./app ./tests
|
|
|
|
.PHONY: py-test
|
|
py-test: export NEW_RELIC_ENVIRONMENT=test
|
|
py-test: ## Run python unit tests
|
|
pipenv run coverage run --omit=*/notifications_utils/* -m pytest --maxfail=10 tests/
|
|
pipenv run coverage report --fail-under=90
|
|
pipenv run coverage html -d .coverage_cache
|
|
|
|
.PHONY: js-lint
|
|
js-lint: ## Run javascript linting scanners
|
|
source $(NVMSH) && npm run lint
|
|
|
|
.PHONY: js-test
|
|
js-test: ## Run javascript unit tests
|
|
source $(NVMSH) && npm test
|
|
|
|
.PHONY: fix-imports
|
|
fix-imports: ## Fix imports using isort
|
|
pipenv run isort ./app ./tests
|
|
|
|
.PHONY: freeze-requirements
|
|
freeze-requirements: ## create static requirements.txt
|
|
pipenv requirements > requirements.txt
|
|
|
|
.PHONY: pip-audit
|
|
pip-audit:
|
|
pipenv requirements > requirements.txt
|
|
pipenv requirements --dev > requirements_for_test.txt
|
|
pipenv run pip-audit -r requirements.txt
|
|
-pipenv run pip-audit -r requirements_for_test.txt
|
|
|
|
.PHONY: audit
|
|
audit: npm-audit pip-audit
|
|
|
|
.PHONY: static-scan
|
|
static-scan:
|
|
pipenv run bandit -r app/
|
|
|
|
.PHONY: a11y-scan
|
|
a11y-scan:
|
|
source $(NVMSH) && npm install -g pa11y-ci
|
|
source $(NVMSH) && pa11y-ci
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf node_modules cache target ${CF_MANIFEST_PATH}
|
|
|
|
|
|
## DEPLOYMENT
|
|
|
|
.PHONY: upload-static ## Upload the static files to be served from S3
|
|
upload-static:
|
|
aws s3 cp --region us-west-2 --recursive --cache-control max-age=315360000,immutable ./app/static s3://${DNS_NAME}-static
|
|
|
|
# .PHONY: cf-failwhale-deployed
|
|
# cf-failwhale-deployed:
|
|
# @cf app notify-admin-failwhale --guid || (echo "notify-admin-failwhale is not deployed on ${CF_SPACE}" && exit 1)
|
|
|
|
# .PHONY: enable-failwhale
|
|
# enable-failwhale: cf-target cf-failwhale-deployed ## Enable the failwhale app and disable admin
|
|
# @cf map-route notify-admin-failwhale ${DNS_NAME} --hostname www
|
|
# @cf unmap-route notify-admin ${DNS_NAME} --hostname www
|
|
# @echo "Failwhale is enabled"
|
|
|
|
# .PHONY: disable-failwhale
|
|
# disable-failwhale: cf-target cf-failwhale-deployed ## Disable the failwhale app and enable admin
|
|
# @cf map-route notify-admin ${DNS_NAME} --hostname www
|
|
# @cf unmap-route notify-admin-failwhale ${DNS_NAME} --hostname www
|
|
# @echo "Failwhale is disabled"
|