testdays-web/Makefile

94 lines
3.2 KiB
Makefile

# testdays-web helper Makefile
SHELL := /bin/bash
APP_NAME := testdays-web
DB_DRIVER := postgresql+psycopg2
DB_DATABASE := testdays
DB_USER := tester
DB_PASSWORD := fedora
DB_HOST := localhost
DB_PORT := 5432
SETTINGS_TEMPLATE := ./conf/settings.py.example
SETTINGS_FILE := ./conf/settings.py
# Check if running inside Toolbox
IS_TOOLBOX := $(shell test -f /run/.toolboxenv && echo true || echo false)
ifeq ($(IS_TOOLBOX), true)
PODMAN_CMD := flatpak-spawn --host podman
else
PODMAN_CMD := podman
endif
.PHONY: all help create_db start_db stop_db remove_db setup_db create_mock_data config_app run_app cli
all: help
# HELP
# This will output the help for each task
# thanks to https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
help: ## This help.
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "%-25s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
# Check if DB container is already running
IS_DB_RUNNING := $(shell $(PODMAN_CMD) ps -q -f name=$(DB_DATABASE)db | grep -q . && echo true || echo false)
create_db: ## Create and start PostgreSQL DB container
@echo 'Creating PostgreSQL container for DB_URI: $(DB_DRIVER)://$(DB_USER):$(DB_PASSWORD)@$(DB_HOST):$(DB_PORT)/$(DB_DATABASE)'
ifneq ($(IS_DB_RUNNING), true)
@$(PODMAN_CMD) run --detach --name $(DB_DATABASE)db \
--env POSTGRESQL_USER=$(DB_USER) \
--env POSTGRESQL_PASSWORD=$(DB_PASSWORD) \
--env POSTGRESQL_DATABASE=$(DB_DATABASE) \
--publish $(DB_PORT):5432 \
quay.io/fedora/postgresql-16:latest
@echo "Wait for DB to finish initializing..."
@sleep 10
@python run_cli.py init_db
else
@echo "PostgreSQL DB Container '$(DB_DATABASE)db' is running"
endif
start_db: create_db ## Start PostgreSQL DB container
@echo "Starting PostgreSQL DB Container '$(DB_DATABASE)db'"
@$(PODMAN_CMD) start $(DB_DATABASE)db
stop_db: ## Stop PostgreSQL DB container
@echo "Stopping PostgreSQL DB Container '$(DB_DATABASE)db'"
@$(PODMAN_CMD) stop $(DB_DATABASE)db
remove_db: stop_db ## Stop and remove PostgreSQL DB container
@echo "Removing PostgreSQL DB Container '$(DB_DATABASE)db'"
@$(PODMAN_CMD) container rm $(DB_DATABASE)db
setup_db: start_db ## Initialize DB tables
@python run_cli.py init_db
create_mock_data: setup_db ## Preload mock DB users and data
@python run_cli.py mock_db_users -d
@python run_cli.py mock_data -d
config_app: ## Create app settings file
ifeq ("$(wildcard $(SETTINGS_FILE))", "")
@cp $(SETTINGS_TEMPLATE) $(SETTINGS_FILE)
@sed -i 's/PRODUCTION = True/PRODUCTION = False/g' $(SETTINGS_FILE)
@sed -i 's/OIDC_ENABLED = True/OIDC_ENABLED = False/g' $(SETTINGS_FILE)
@echo "Please review app settings in '$(SETTINGS_FILE)' and update as necessary"
else
@echo "App configuration: '$(SETTINGS_FILE)'"
endif
run_app: config_app start_db ## Start the testdays-web app web server in local development mode
@echo "Starting $(APP_NAME) by 'python runapp.py'"
@RUNMODE=dev python runapp.py
CLI_ARGS = $(filter-out $@,$(MAKECMDGOALS))
cli: ## Execute app CLI runner. Use `make cli -- --help` for help.
@echo "Note: Separate arguments from cli target by '--' like this: 'make cli -- --help'."
@echo "Executing CLI: 'python run_cli.py $(CLI_ARGS)'"
@python run_cli.py $(CLI_ARGS)
%: # match all unprocessed targets
@: # do-nothing