Gestion de contact et suivi de conversion pour les groupement d'agriculture biologique
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

226 lines
7.7 KiB

# -*- 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 (y ou n).
USE_VENV := y
# 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), y)
PYTHON := $(VENV_DIR)/bin/$(PYTHON_EXE_BASENAME)
PIP := $(VENV_DIR)/bin/pip
else
PYTHON := $(shell which $(PYTHON_EXE))
PIP := $(shell which pip)
endif
# Détermine s'il faut charger le fichier de configuration.
ifneq ($(READ_CONFIG_FILE), 0)
READ_CONFIG_FILE := 1
else
READ_CONFIG_FILE := 0
endif
# Détermine l'environnement à utiliser.
DEFAULT_ENV := production
ifndef ENV
ifeq ($(READ_CONFIG_FILE), 1)
# Commence par chercher la dernière valeur de DJANGO_SETTINGS_MODULE,
# puis de ENV s'il n'y en a pas, ou utilise l'environnement par défaut.
ENV = $(shell \
sed -n -e '/^DJANGO_SETTINGS_MODULE/s/[^.]*\.settings\.\([^.]*\)/\1/p' \
-e '/^ENV/s/[^=]*=\(.*\)/\1/p' config.env 2> /dev/null \
| tail -n 1 | grep -Ee '^..*' || echo "$(DEFAULT_ENV)")
else
ifdef DJANGO_SETTINGS_MODULE
ENV = $(shell echo $(DJANGO_SETTINGS_MODULE) | cut -d. -f3)
else
ENV := $(DEFAULT_ENV)
endif # ifdef DJANGO_SETTINGS_MODULE
endif # ifeq READ_CONFIG_FILE
endif # ifndef ENV
# Définis EDITOR pour l'édition interactive.
ifndef EDITOR
ifdef VISUAL
EDITOR := $(VISUAL)
else
EDITOR := vi
endif
endif
# Définition des cibles -------------------------------------------------------
.PHONY: help shell
.PHONY: init create-venv update install-deps migrate static static-local
.PHONY: check check-config serve lint
.PHONY: test qtest twip check-selenium stest stwip stwip-gui full-test
.PHONY: clean clean-pyc clean-build clear-venv
.PHONY: black pre-commit isort
.PHONY: sql-reset psql-reset
.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' -o -name '*.pyo' -o -name '*~' \) -delete
init: create-venv config.env update ## initialise l'environnement et l'application
config.env:
ifeq ($(READ_CONFIG_FILE), 1)
cp config.env.example config.env
chmod go-rwx config.env
$(EDITOR) config.env
endif
update: check-config install-deps migrate static ## mets à jour l'application et ses dépendances
touch gaby/wsgi.py
#PRC#
check: check-config ## vérifie la configuration de l'instance pour deploiement
$(PYTHON) manage.py check --deploy
$(PYTHON) manage.py makemigrations --dry-run --check
check-config:
@find . -maxdepth 1 -name config.env -perm /o+rwx -exec false {} + || \
{ echo "\033[31mErreur :\033[0m les permissions de config.env ne sont pas bonnes, \
vous devriez au moins faire : chmod o-rwx config.env"; false; }
install-deps: ## installe les dépendances de l'application
$(PIP) install --upgrade pip
$(PIP) install --upgrade --requirement requirements/$(ENV).txt
migrate: ## mets à jour le schéma de la base de données
$(PYTHON) manage.py migrate
static: ## collecte les fichiers statiques
@echo "Collecte des fichiers statiques..."
$(PYTHON) manage.py collectstatic --noinput --verbosity 0
static-local: ## supprime puis collecte les fichiers statiques (permet de rafraichir 'local')
$(PYTHON) manage.py collectstatic --clear --noinput --verbosity 0
create-venv: clean $(PYTHON)
$(PYTHON):
ifeq ($(USE_VENV), y)
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
full-test: ### lance tous les tests (classique + selenium)
$(PYTHON) -m pytest --cov=gaby gaby
test: ### lance les tests de l'application via pytest
$(PYTHON) -m pytest -m 'not slow' --create-db --cov=gaby --cov-report=html --cov-report=term-missing gaby
qtest: ### lance les tests de l'application via pytest (quick)
$(PYTHON) -m pytest -m 'not slow' --cov=gaby --cov-report=html --cov-report=term-missing gaby
twip: ### lance les tests marques 'wip' de l'application via pytest
$(PYTHON) -m pytest -vv -m 'wip and not slow' --cov=gaby --cov-report=html --pdb gaby
serve: ### démarre un serveur local pour l'application
$(PYTHON) manage.py runserver
lint: ### vérifie la syntaxe et le code python
which black > /dev/null && black --config black.toml --check gaby ; true
$(PYTHON) -m isort --check --recursive gaby ; true
flake8 gaby
@echo "check debug flag"
! git grep -Ee '^[^#]*(DBG|pdb\.set_trace).*$$' '*.py'
! git grep -Ee 'DBG' '*.html'
! git grep -Ee '@pytest\.mark\.wip'
#PRC#
shell: ### lance ./manage shell_plus (django-extension)
$(PYTHON) manage.py shell
# $(PYTHON) manage.py shell_plus
#PRC#
isort: ### reformat the code using black
$(PYTHON) -m isort --recursive gaby
#PRC#
black: ### reformat the code using black
which black > /dev/null && black --config black.toml gaby
#PRC#
pre-commit: isort black lint check test ### useful before commit: reformat the code (black), lint it, test it
#PRC#
reset-sql: ### réinitialise la base de données (reset_db de django_extensions)
@test "x$(FORCE)" = "xYES" || { \
echo "Cela va effacer toutes les données de la base. Si vous êtes sûr, spécifiez FORCE=YES à la commande." ; exit 1 ; }
$(PYTHON) manage.py reset_db --noinput
#PRC#
reset-psql: ### réinitialise la base de données postgresql
# la commande reset_db de django_extensions utilise un DROP/CREATE DATABASE qui necessite plus de droit
# ce script enumere les tables de base de donnee et les DROP une a une
@test "x$(FORCE)" = "xYES" || { \
echo "Cela va effacer toutes les données de la base. Si vous êtes sûr, spécifiez FORCE=YES à la commande." ; exit 1 ; }
@cat db_scripts/psql_reset.sql | $(PYTHON) manage.py dbshell
load-demo: ## charge le jeux de donnees de demo
$(PYTHON) manage.py loaddata gaby/fixtures/demo/*.json
######################################################################
# --- pour migrer depuis la production
.PHONY: prod_update ask_for_local_check check_post_op migrate-from-prod
prod_update: ask_for_local_check clear-venv create-venv install-deps migrate-from-prod static-local check_post_op ## temporary rules to upgrade production
ask_for_local_check:
@echo "USER:"
@echo " - Is config.env correctly set ?"
@echo " - Is subdirectory 'basket' , 'selectable' are removed ?"
@echo " - Is staticfiles moved or symlinked to var/static"
@echo " - Is uploads moved or symlinked to var/media"
@echo "ROOT:"
@echo " - Is /etc/uwsgi-emperor/vassals/ ini file is a symlink to python3-venv.skel"
@echo " - Is /etc/nginx/sites-enabled/ conf file static aim to var/static"
@read -p "If not press Ctrl-C now" ANS
check_post_op:
$(PYTHON) manage.py clearsessions
$(PYTHON) manage.py remove_stale_contenttypes
touch gaby/wsgi.py
migrate-from-prod:
$(PYTHON) manage.py migrate --fake-initial
Map all the world