Site web de Bio Hauts de France
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.

143 lines
4.3KB

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