# Define the targets .PHONY: help venv pip install dist test test-full docker-run docker-build docs read-docs clean format mypy run run-dev # Default target all: help # Target to display help information help: @echo "Available targets:" @echo " venv - Set up a Python 3 virtual environment." @echo " pip - Install dependencies from requirements.txt." @echo " pip-dev - Install dependencies from requirements-dev.txt." @echo " format - Format source code." @echo " mypy - Run mypy." @echo " install - Install EOS in editable form (development mode) into virtual environment." @echo " docker-run - Run entire setup on docker" @echo " docker-build - Rebuild docker image" @echo " docs - Generate HTML documentation (in build/docs/html/)." @echo " read-docs - Read HTML documentation in your browser." @echo " gen-docs - Generate openapi.json and docs/_generated/*."" @echo " clean-docs - Remove generated documentation."" @echo " run - Run EOS production server in the virtual environment." @echo " run-dev - Run EOS development server in the virtual environment (automatically reloads)." @echo " dist - Create distribution (in dist/)." @echo " clean - Remove generated documentation, distribution and virtual environment." # Target to set up a Python 3 virtual environment venv: python3 -m venv .venv @echo "Virtual environment created in '.venv'. Activate it using 'source .venv/bin/activate'." # Target to install dependencies from requirements.txt pip: venv .venv/bin/pip install --upgrade pip .venv/bin/pip install -r requirements.txt @echo "Dependencies installed from requirements.txt." # Target to install dependencies from requirements.txt pip-dev: pip .venv/bin/pip install -r requirements-dev.txt @echo "Dependencies installed from requirements-dev.txt." # Target to install EOS in editable form (development mode) into virtual environment. install: pip .venv/bin/pip install build .venv/bin/pip install -e . @echo "EOS installed in editable form (development mode)." # Target to create a distribution. dist: pip .venv/bin/pip install build .venv/bin/python -m build --wheel @echo "Distribution created (see dist/)." # Target to generate documentation gen-docs: pip-dev .venv/bin/pip install -e . .venv/bin/python ./scripts/generate_config_md.py --output-file docs/_generated/config.md .venv/bin/python ./scripts/generate_openapi_md.py --output-file docs/_generated/openapi.md .venv/bin/python ./scripts/generate_openapi.py --output-file openapi.json @echo "Documentation generated to openapi.json and docs/_generated." # Target to build HTML documentation docs: pip-dev .venv/bin/sphinx-build -M html docs build/docs @echo "Documentation build to build/docs/html/." # Target to read the HTML documentation read-docs: docs @echo "Read the documentation in your browser" .venv/bin/python -m webbrowser build/docs/html/index.html # Clean target to remove generated documentation and documentation artefacts clean-docs: @echo "Searching and deleting all '_autosum' directories in docs..." @find docs -type d -name '_autosummary' -exec rm -rf {} +; @echo "Cleaning docs build directories" rm -rf build/docs # Clean target to remove generated documentation, distribution and virtual environment clean: clean-docs @echo "Cleaning virtual env, distribution and build directories" rm -rf build .venv @echo "Deletion complete." run: @echo "Starting EOS production server, please wait..." .venv/bin/python src/akkudoktoreos/server/eos.py run-dev: @echo "Starting EOS development server, please wait..." .venv/bin/python src/akkudoktoreos/server/eos.py --host localhost --port 8503 --reload true # Target to setup tests. test-setup: pip-dev @echo "Setup tests" # Target to run tests. test: @echo "Running tests..." .venv/bin/pytest -vs --cov src --cov-report term-missing # Target to run all tests. test-full: @echo "Running all tests..." .venv/bin/pytest --full-run # Target to format code. format: .venv/bin/pre-commit run --all-files # Target to format code. mypy: .venv/bin/mypy # Run entire setup on docker docker-run: @docker compose up --remove-orphans docker-build: @docker compose build --pull