# -*- mode: makefile-gmake -*- ## Définition des variables # Le nom de l'exécutable Python à utiliser ou son chemin absolu # (ex. : python ou python3). PYTHON_EXE := python3 # S'il faut utiliser un environnement virtuel (yes ou no). USE_VENV := yes # Configuration de l'environnement virtuel. VENV_DIR := venv VENV_OPT := --system-site-packages # Définis les chemins et options des exécutables. PYTHON_EXE_BASENAME := $(shell basename $(PYTHON_EXE)) VENV_PYTHON := --python=$(PYTHON_EXE_BASENAME) ifeq ($(USE_VENV), yes) PYTHON := $(VENV_DIR)/bin/$(PYTHON_EXE_BASENAME) PIP := $(VENV_DIR)/bin/pip else PYTHON := $(shell which $(PYTHON_EXE)) PIP := $(shell which pip) endif # Charge la configuration du 'config.env' s'il existe ifneq ("$(wildcard config.env)", "") include config.env endif # ... et définis l'environnement à utiliser. ifdef DJANGO_SETTINGS_MODULE ENV = $(shell echo $(DJANGO_SETTINGS_MODULE) | cut -d. -f3) else ENV = production endif # Définition des cibles ------------------------------------------------------- .PHONY: clean-pyc clean-build clear-venv help .DEFAULT_GOAL := help # commentaire d'une cible : #-> interne ##-> aide production+dev ###-> aide dev help: ## affiche cette aide ifeq ($(ENV), production) @perl -nle'print $& if m{^[a-zA-Z_-]+:[^#]*?## .*$$}' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' else @perl -nle'print $& if m{^[a-zA-Z_-]+:[^#]*?###? .*$$}' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?###? "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}' endif clean: clean-build clean-pyc ## nettoie tous les fichiers temporaires clean-build: ### nettoie les fichiers de construction du paquet rm -rf build/ rm -rf dist/ rm -rf *.egg-info clean-pyc: ### nettoie les fichiers temporaires python find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + find . -name '*~' -exec rm -f {} + init: create-venv config.env update ## initialise l'environnement et l'application config.env: # TODO: lancer une commande interactive cp config.env.example config.env update: install-deps migrate static check ## mets à jour l'application et ses dépendances touch resthys/wsgi.py install-deps: ## installe les dépendances de l'application $(PIP) install -r requirements/$(ENV).txt migrate: ## mets à jour le schéma de la base de données $(PYTHON) manage.py migrate static: ## collecte les fichiers statiques ifeq ($(ENV), production) @echo "Collecte des fichiers statiques..." $(PYTHON) manage.py collectstatic --no-input --verbosity 0 endif check: ### vérifie la santé du projet $(PYTHON) manage.py check inspectdb: ### introspecte le schéma de base de donnée $(PYTHON) manage.py inspectdb --database=noethys > resthys/base/models.py ## Cibles liées à l'environnement virtuel create-venv: $(PYTHON) $(PYTHON): ifeq ($(USE_VENV), yes) virtualenv $(VENV_OPT) $(VENV_PYTHON) $(VENV_DIR) else @echo "\033[31mErreur !\033[0m Impossible de trouver l'exécutable Python $(PYTHON)" @exit 1 endif clear-venv: ## supprime l'environnement virtuel -rm -rf $(VENV_DIR) ## Cibles pour le développement test: ### lance les tests de l'application DJANGO_SETTINGS_MODULE="resthys.settings.test" \ $(PYTHON) manage.py test --parallel 4 serve: ### démarre un serveur local pour l'application $(PYTHON) manage.py runserver 8080 lint: ### vérifie la syntaxe et le code python flake8 resthys