Plate-forme pour les organisations de l'Économie Sociale et Solidaire du Pas-de-Calais
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.

161 lines
5.0KB

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