Site web de Terre de Liens HdF
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.

164 lines
5.1KB

  1. # -*- mode: makefile-gmake -*-
  2. ## Définition des variables
  3. # Le nom de l'exécutable Python à utiliser ou son chemin absolu
  4. # (ex. : python ou python3).
  5. PYTHON_EXE := python3
  6. # S'il faut utiliser un environnement virtuel (y ou n).
  7. USE_VENV := y
  8. # Configuration de l'environnement virtuel.
  9. VENV_DIR := venv
  10. VENV_OPT := --system-site-packages
  11. # Définis les chemins et options des exécutables.
  12. PYTHON_EXE_BASENAME := $(shell basename $(PYTHON_EXE))
  13. VENV_PYTHON := --python=$(PYTHON_EXE_BASENAME)
  14. ifeq ($(USE_VENV), y)
  15. PYTHON := $(VENV_DIR)/bin/$(PYTHON_EXE_BASENAME)
  16. PIP := $(VENV_DIR)/bin/pip
  17. COVERAGE := $(VENV_DIR)/bin/coverage
  18. FLAKE8 := $(VENV_DIR)/bin/flake8
  19. else
  20. PYTHON := $(shell which $(PYTHON_EXE))
  21. PIP := $(shell which pip)
  22. COVERAGE := $(shell which coverage)
  23. FLAKE8 := $(shell which flake8)
  24. endif
  25. # Détermine si black est présent.
  26. USE_BLACK := $(shell $(PYTHON) -c 'import black; print("1")' 2>/dev/null)
  27. # Détermine s'il faut charger le fichier de configuration.
  28. ifneq ($(READ_CONFIG_FILE), 0)
  29. READ_CONFIG_FILE := 1
  30. else
  31. READ_CONFIG_FILE := 0
  32. endif
  33. # Détermine l'environnement à utiliser.
  34. DEFAULT_ENV := production
  35. ifndef ENV
  36. ifeq ($(READ_CONFIG_FILE), 1)
  37. # Commence par chercher la dernière valeur de DJANGO_SETTINGS_MODULE,
  38. # puis de ENV s'il n'y en a pas, ou utilise l'environnement par défaut.
  39. ENV = $(shell \
  40. sed -n -e '/^DJANGO_SETTINGS_MODULE/s/[^.]*\.settings\.\([^.]*\)/\1/p' \
  41. -e '/^ENV/s/[^=]*=\(.*\)/\1/p' config.env 2> /dev/null \
  42. | tail -n 1 | grep -Ee '^..*' || echo "$(DEFAULT_ENV)")
  43. else
  44. ifdef DJANGO_SETTINGS_MODULE
  45. ENV = $(shell echo $(DJANGO_SETTINGS_MODULE) | cut -d. -f3)
  46. else
  47. ENV := $(DEFAULT_ENV)
  48. endif # ifdef DJANGO_SETTINGS_MODULE
  49. endif # ifeq READ_CONFIG_FILE
  50. endif # ifndef ENV
  51. # Définis EDITOR pour l'édition interactive.
  52. ifndef EDITOR
  53. ifdef VISUAL
  54. EDITOR := $(VISUAL)
  55. else
  56. EDITOR := vi
  57. endif
  58. endif
  59. # Définition des cibles -------------------------------------------------------
  60. .PHONY: clean-pyc clean-build clear-venv help check check-config
  61. .DEFAULT_GOAL := help
  62. # Commentaire d'une cible : #-> interne ##-> aide production+dev ###-> aide dev
  63. help: ## affiche cette aide
  64. ifeq ($(ENV), production)
  65. @perl -nle'print $& if m{^[a-zA-Z_-]+:[^#]*?## .*$$}' $(MAKEFILE_LIST) \
  66. | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
  67. else
  68. @perl -nle'print $& if m{^[a-zA-Z_-]+:[^#]*?###? .*$$}' $(MAKEFILE_LIST) \
  69. | sort | awk 'BEGIN {FS = ":.*?###? "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
  70. endif
  71. clean: clean-build clean-pyc ## nettoie tous les fichiers temporaires
  72. clean-build: ### nettoie les fichiers de construction du paquet
  73. rm -rf build/
  74. rm -rf dist/
  75. rm -rf *.egg-info
  76. clean-pyc: ### nettoie les fichiers temporaires python
  77. find terre_de_liens/ \
  78. \( -name '*.pyc' -o -name '*.pyo' -o -name '*~' \) -exec rm -f {} +
  79. init: create-venv config.env update ## initialise l'environnement et l'application
  80. config.env:
  81. ifeq ($(READ_CONFIG_FILE), 1)
  82. cp config.env.example config.env
  83. chmod go-rwx config.env
  84. $(EDITOR) config.env
  85. endif
  86. update: check-config install-deps migrate static ## mets à jour l'application et ses dépendances
  87. touch terre_de_liens/wsgi.py
  88. check: check-config ## vérifie la configuration de l'instance
  89. $(PYTHON) manage.py check
  90. check-config:
  91. @find . -maxdepth 1 -name config.env -perm /o+rwx -exec false {} + || \
  92. { echo "\033[31mErreur :\033[0m les permissions de config.env ne sont pas bonnes, \
  93. vous devriez au moins faire : chmod o-rwx config.env"; false; }
  94. install-deps: ## installe les dépendances de l'application
  95. $(PIP) install --upgrade --requirement requirements/$(ENV).txt
  96. migrate: ## mets à jour le schéma de la base de données
  97. $(PYTHON) manage.py migrate
  98. static: ## collecte les fichiers statiques
  99. ifeq ($(ENV), production)
  100. @echo "Collecte des fichiers statiques..."
  101. $(PYTHON) manage.py collectstatic --no-input --verbosity 0
  102. endif
  103. ## Cibles liées à l'environnement virtuel
  104. create-venv: $(PYTHON)
  105. $(PYTHON):
  106. ifeq ($(USE_VENV), y)
  107. virtualenv $(VENV_OPT) $(VENV_PYTHON) $(VENV_DIR)
  108. else
  109. @echo "\033[31mErreur !\033[0m Impossible de trouver l'exécutable Python $(PYTHON)"
  110. @exit 1
  111. endif
  112. clear-venv: ## supprime l'environnement virtuel
  113. -rm -rf $(VENV_DIR)
  114. ## Cibles pour le développement
  115. serve: ### démarre un serveur local pour l'application
  116. $(PYTHON) manage.py runserver
  117. test: ### lance les tests de l'application
  118. $(PYTHON) -m pytest --cov --cov-report=term:skip-covered
  119. cov: test ### vérifie la couverture de code
  120. $(PYTHON) -m coverage html
  121. @echo open htmlcov/index.html
  122. lint: ### vérifie la syntaxe et le code python
  123. @$(PYTHON) -m flake8 terre_de_liens \
  124. || echo "\033[31m[flake8]\033[0m Veuillez corriger les erreurs ci-dessus."
  125. @$(PYTHON) -m isort --check --recursive terre_de_liens \
  126. || echo "\033[31m[isort]\033[0m Veuillez corriger l'ordre des imports avec : make fix-lint"
  127. ifdef USE_BLACK
  128. @$(PYTHON) -m black --check terre_de_liens
  129. endif
  130. fix-lint: ### corrige la syntaxe et ordonne les imports python
  131. $(PYTHON) -m isort --recursive terre_de_liens
  132. ifdef USE_BLACK
  133. $(PYTHON) -m black terre_de_liens
  134. endif