piaf/Makefile

104 lignes
3.2 KiB
Makefile

# -*- 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 ## mets à jour l'application et ses dépendances
touch piaf/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") # on evite de faire du bruit en dev
@echo "Collecte des fichiers statiques..."
$(PYTHON) manage.py collectstatic --no-input --verbosity 0
endif
## 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
$(PYTHON) manage.py test --parallel 4
serve: ### démarre un serveur local pour l'application
$(PYTHON) manage.py runserver
lint: ### vérifie la syntaxe et le code python
flake8 piaf