mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-08 14:12:27 -05:00
This changeset undoes the recent changes we tried after the Python 3.13 update as they had no bearing on the SSL cert validation errors. Back to the drawing board! Signed-off-by: Carlo Costino <carlo.costino@gsa.gov>
170 lines
5.0 KiB
Makefile
170 lines
5.0 KiB
Makefile
.DEFAULT_GOAL := help
|
|
SHELL := /bin/bash
|
|
DATE = $(shell date +%Y-%m-%d:%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 "")
|
|
GIT_HOOKS_PATH ?= $(shell git config --global core.hooksPath || echo "")
|
|
|
|
## DEVELOPMENT
|
|
|
|
## TODO this line should go under `make generate-version-file`
|
|
## poetry self update
|
|
|
|
.PHONY: bootstrap
|
|
bootstrap: ## Set up everything to run the app
|
|
make generate-version-file
|
|
poetry sync --no-root
|
|
poetry run pre-commit install
|
|
createdb notification_api || true
|
|
createdb test_notification_api || true
|
|
(poetry run flask db upgrade) || true
|
|
|
|
.PHONY: bootstrap-with-git-hooks
|
|
bootstrap-with-git-hooks: ## Sets everything up and accounts for pre-existing git hooks
|
|
make generate-version-file
|
|
poetry sync --no-root
|
|
git config --global --unset-all core.hooksPath
|
|
poetry run pre-commit install
|
|
git config --global core.hookspath "${GIT_HOOKS_PATH}"
|
|
createdb notification_api || true
|
|
createdb test_notification_api || true
|
|
(poetry run flask db upgrade) || true
|
|
|
|
.PHONY: bootstrap-with-docker
|
|
bootstrap-with-docker: ## Build the image to run the app in Docker
|
|
docker build -f docker/Dockerfile -t notifications-api .
|
|
|
|
.PHONY: run-procfile
|
|
run-procfile:
|
|
poetry run honcho start -f Procfile.dev
|
|
|
|
|
|
|
|
.PHONY: tada
|
|
tada:
|
|
poetry run isort .
|
|
poetry run black .
|
|
poetry run flake8 .
|
|
|
|
.PHONY: avg-complexity
|
|
avg-complexity:
|
|
echo "*** Shows average complexity in radon of all code ***"
|
|
poetry run radon cc ./app -a -na
|
|
|
|
.PHONY: too-complex
|
|
too-complex:
|
|
echo "*** Shows code that got a rating of C, D or F in radon ***"
|
|
poetry run radon cc ./app -a -nc
|
|
|
|
.PHONY: run-flask
|
|
run-flask:
|
|
poetry run newrelic-admin run-program flask run -p 6011 --host=0.0.0.0
|
|
|
|
.PHONY: run-celery
|
|
run-celery: ## Run celery, TODO remove purge for staging/prod
|
|
poetry run celery -A run_celery.notify_celery purge -f
|
|
poetry run newrelic-admin run-program celery \
|
|
-A run_celery.notify_celery worker \
|
|
--pidfile="/tmp/celery.pid" \
|
|
--loglevel=INFO \
|
|
--pool=gevent
|
|
--concurrency=20
|
|
|
|
|
|
.PHONY: dead-code
|
|
dead-code: ## Use 60 to look for suspected dead code
|
|
poetry run vulture ./app --min-confidence=100
|
|
|
|
.PHONY: run-celery-beat
|
|
run-celery-beat: ## Run celery beat
|
|
poetry run celery \
|
|
-A run_celery.notify_celery beat \
|
|
--loglevel=INFO
|
|
|
|
.PHONY: cloudgov-user-report
|
|
cloudgov-user-report:
|
|
@poetry run python -m terraform.ops.cloudgov_user_report
|
|
|
|
.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: export NEW_RELIC_ENVIRONMENT=test
|
|
test: ## Run tests and create coverage report
|
|
poetry run black .
|
|
poetry run flake8 .
|
|
poetry run isort ./app ./tests
|
|
poetry run coverage run --omit=*/migrations/*,*/tests/* -m pytest --maxfail=10
|
|
|
|
|
|
poetry run coverage report -m --fail-under=95
|
|
poetry run coverage html -d .coverage_cache
|
|
|
|
.PHONY: test-debug
|
|
test-debug:
|
|
poetry run pytest --pdb -x
|
|
|
|
.PHONY: py-lock
|
|
py-lock: ## Syncs dependencies and updates lock file without performing recursive internal updates
|
|
poetry sync --no-root
|
|
poetry lock
|
|
|
|
.PHONY: freeze-requirements
|
|
freeze-requirements: ## Pin all requirements including sub dependencies into requirements.txt
|
|
poetry export --output > requirements.txt
|
|
|
|
.PHONY: audit
|
|
audit:
|
|
poetry requirements > requirements.txt
|
|
poetry requirements --dev > requirements_for_test.txt
|
|
poetry run pip-audit -r requirements.txt --skip-editable
|
|
poetry run pip-audit -r requirements_for_test.txt --skip-editable
|
|
|
|
.PHONY: static-scan
|
|
static-scan:
|
|
poetry run bandit -r app/
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf node_modules cache target venv .coverage build tests/.cache ${CF_MANIFEST_PATH}
|
|
|
|
|
|
## DEPLOYMENT
|
|
|
|
# .PHONY: cf-deploy-failwhale
|
|
# cf-deploy-failwhale:
|
|
# $(if ${CF_SPACE},,$(error Must target space, eg `make preview cf-deploy-failwhale`))
|
|
# cd ./paas-failwhale; cf push notify-api-failwhale -f manifest.yml
|
|
|
|
# .PHONY: enable-failwhale
|
|
# enable-failwhale: ## Enable the failwhale app and disable api
|
|
# $(if ${DNS_NAME},,$(error Must target space, eg `make preview enable-failwhale`))
|
|
# # make sure failwhale is running first
|
|
# cf start notify-api-failwhale
|
|
|
|
# cf map-route notify-api-failwhale ${DNS_NAME} --hostname api
|
|
# cf unmap-route notify-api ${DNS_NAME} --hostname api
|
|
# @echo "Failwhale is enabled"
|
|
|
|
# .PHONY: disable-failwhale
|
|
# disable-failwhale: ## Disable the failwhale app and enable api
|
|
# $(if ${DNS_NAME},,$(error Must target space, eg `make preview disable-failwhale`))
|
|
|
|
# cf map-route notify-api ${DNS_NAME} --hostname api
|
|
# cf unmap-route notify-api-failwhale ${DNS_NAME} --hostname api
|
|
# cf stop notify-api-failwhale
|
|
# @echo "Failwhale is disabled"
|
|
|
|
.PHONY: test-single
|
|
test-single: export NEW_RELIC_ENVIRONMENT=test
|
|
test-single: ## Run a single test file
|
|
poetry run pytest -s $(TEST_FILE)
|