Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(dev): Ajouter un makeFile avec des raccourcis admin/dev #3300

Closed
jacquesfize opened this issue Dec 31, 2024 · 13 comments
Closed

feat(dev): Ajouter un makeFile avec des raccourcis admin/dev #3300

jacquesfize opened this issue Dec 31, 2024 · 13 comments

Comments

@jacquesfize
Copy link
Contributor

Bonjour à tous,

Je propose un début de travail sur la création d'un Makefile. Plus d'infos sur GNU Make ici : https://scaron.info/blog/gnu-make.html

Dans l'idée, cela permettrait de "simplifier" des ensembles de commandes principalement de dev comme :

  • lancer le backend, le frontend et le worker celery
  • lancer l'installation de tous les modules externes supportés (dashboard, monitoring, export)
  • lancer l'installation de geonature en mode dev
  • etc.

Dans #3298, je propose une première version de ce fichier.

Dans ma proposition, les commandes de lancement de l'installation des modules occhab,occtax ou validation qui se résument aux commandes suivantes :

	source backend/venv/bin/activate 
        geonature install-gn-module contrib/occtax --build false --upgrade-db=${upgrade_db_extra}
	if [ "$add_sample_data" = true ]; then geonature db upgrade occtax-samples@head;fi
	geonature install-gn-module contrib/gn_module_occhab --build false --upgrade-db=${upgrade_db_extra}
	geonature install-gn-module contrib/gn_module_validation  --build false --upgrade-db=${upgrade_db_extra}

sont regroupés dans un bloc d'instructions identifiés par une target, ici install_contrib:

GeoNature/Makefile

Lines 37 to 41 in 0c4c37d

install_contrib:
source backend/venv/bin/activate && geonature install-gn-module contrib/occtax --build false --upgrade-db=${upgrade_db_extra}
if [ "$add_sample_data" = true ]; then source backend/venv/bin/activate && geonature db upgrade occtax-samples@head;fi
source backend/venv/bin/activate && geonature install-gn-module contrib/gn_module_occhab --build false --upgrade-db=${upgrade_db_extra}
source backend/venv/bin/activate && geonature install-gn-module contrib/gn_module_validation --build false --upgrade-db=${upgrade_db_extra}

Pour exécuter ce bloc, il suffit ensuite de lancer la commande suivante :

make install_contrib

Questions

  1. Est-ce que l'ajout de ce fichier semble pertinent pour les développeurs/administrateurs de GeoNature ?
  2. Est-ce qu'il serait intéressant d'ajouter d'autres raccourcis plus orientés administrateurs ? Par exemple, le lancement d'une migration partant du chargement de l'archive (ou pull) jusqu'à l'exécution du script principale
  3. Est-ce que d'autres raccourcis dev sont à envisager ?
  4. Est que l'utilisation de MakeFile est pertinent ?
@camillemonchicourt
Copy link
Member

Ça me semble une bonne chose.
Pour info, celui de Geotrek-admin : https://github.com/GeotrekCE/Geotrek-admin/blob/master/Makefile
Et un début de MakeFile ajouté récemment à GeoNature-atlas : https://github.com/PnX-SI/GeoNature-atlas/pull/576/files

@edelclaux
Copy link
Contributor

Ah, c'est un chouette revirement :)

Je suis personnelement très Makefile. C'est mon côté 90's.

Côté dev, j'en ai un qui permet de faire diverses choses de setup:
manip git, install en mode dev de gn / modules, les mise à jours, des maj de config, la config de vscode pour le mode debug, l'application d'un patch pour rendre le backend de gn compatible avec du mode debug, le retrait de ce patch, etc. etc.

C'est très perso, mais ça doit pouvoir s'intégrer à un truc global sans trop de modif

@jacquesfize
Copy link
Contributor Author

jacquesfize commented Jan 2, 2025

Je suis personnelement très Makefile. C'est mon côté 90's.

Je sais pas s'il y a une techno plus intéressante/moderne qui existe 🤔 Makefile me semble encore très utilisé.

Côté dev, j'en ai un qui permet de faire diverses choses de setup:
manip git, install en mode dev de gn / modules, les mise à jours, des maj de config, la config de vscode pour le mode debug, l'application d'un patch pour rendre le backend de gn compatible avec du mode debug, le retrait de ce patch, etc. etc.

Si tu peux partager ton MakeFile, je suis intéressé d'en discuter !

@jacquesfize jacquesfize pinned this issue Jan 2, 2025
@edelclaux
Copy link
Contributor

edelclaux commented Jan 3, 2025

En général, c'est à force de faire du docker qu'on se remet à faire du makefile. Les vieux ont les reins solides :D
Y a ansible qui est un peu la version moderne, mais l'usage est un peu différent, et le setup est nettement plus complexe.

Et puis, un makefile, ça fait pas de mal, c'est pas pour le temps que ça prend.

Dans mon makefile, y a pas mal de bricoles, mais oui je peux partager des bouts.

@edelclaux
Copy link
Contributor

edelclaux commented Jan 3, 2025

Une partie sur la gestion du .env

#############################################################################
# Environment variables
#############################################################################

-include geonature.local.env

# defaultValues - if not defined in .env
PORT_USERSHUB ?= 5001
PORT_GN_FRONTEND ?= 4200
PORT_GN_BACKEND ?= 8000

PG_DB_NAME ?= geonature2db

PG_USER_NAME ?= gn_user
PG_USER_PASSWD ?= gn_passwd

USERSHUB_VERSION ?= develop
GEONATURE_APP_NAME ?= 'DEV'

WITH_SAMPLE_DATA ?= true

MODULE_DASHBOARD_VERSION ?= 1.4.0
MODULE_EXPORT_VERSION ?= 1.6.0
MODULE_MONITORING_VERSION ?= 0.7.0

MODULE_DIRECTORY ?= modules

GEONATURE_DIRECTORY ?= geonature

USERSHUB_REPOSITORY = [email protected]:PnX-SI/UsersHub.git

GEONATURE_REPOSITORY ?= [email protected]:PnX-SI/GeoNature.git
GEONATURE_VERSION ?= develop

Exemple de .env:

PORT_USERSHUB=5001
PORT_GN_FRONTEND=4200
PORT_GN_BACKEND=8000

PG_DB_NAME=geonature_import_monitoring

PG_USER_NAME=XXXX
PG_USER_PASSWD=XXXX

GITHOOK_REPOSITORY=/home/etienne/Documents/devel/git-hook

GEONATURE_VERSION=feat/import-monitorings
USERSHUB_VERSION=ce5d200

@edelclaux
Copy link
Contributor

un peu d'install.

#############################################################################
# main commands
#############################################################################

all: init_repository config build up

init_repository: usershub_init_repository geonature_init_repository copy_launch_json

config: taxhub_config usershub_config geonature_config

install: usershub_install geonature_install
build: install

install_noDB: usershub_install geonature_install_noDB

update_ports: config geonature_install_frontend

run:
	 gnome-terminal --tab -t "UsersHub" -- make usershub_run && gnome-terminal --tab -t "Geonature Backend" -- make geonature_run_backend && gnome-terminal --tab -t "Celery" -- make celery_run && gnome-terminal --tab -t "Geonature Frontend" -- make geonature_run_frontend
up: run

run_nobackend:
	gnome-terminal --tab -t "TaxHub" -- make taxhub_run && gnome-terminal --tab -t "UsersHub" -- make usershub_run && gnome-terminal --tab -t "Celery" -- make celery_run && gnome-terminal --tab -t "Geonature Frontend" -- make geonature_run_frontend
up_nobackend: run_nobackend

@edelclaux
Copy link
Contributor

celery run:

#############################################################################
# celery run
#############################################################################

celery_run:
	cd $(GEONATURE_DIRECTORY) && source backend/venv/bin/activate && cd backend/geonature/ && celery -A geonature.celery_app:app worker

@edelclaux
Copy link
Contributor

Je me rends compte que mon makefile est dans le dossier parent, ce qui permt de faire les clones, les installs de modules, etc.

Ptet qu'une forme envisageable pourrait être:

  • avoir un Makefile dans géonature
  • avoir un Makefile dans un projet séparé (superprojet), qui aurait les méthodes de création etc ET incluerait le Makefile de geonature

genre -include $(GEONATURE_DIRECTORY)/Makefile (Syntaxe à vérifier)

⚠️ Les includes fonctionnent en inlinant le contenu. Il faut faire attention aux conflits des noms

@jacquesfize
Copy link
Contributor Author

Super ! 🌟 Merci pour le partage !

Ptet qu'une forme envisageable pourrait être:

  • avoir un Makefile dans géonature
  • avoir un Makefile dans un projet séparé (superprojet), qui aurait les méthodes de création etc ET incluerait le Makefile de geonature

A voir 🤔 Je pense dans un premier temps, je ferais un MakeFile dans GeoNature. Mais j'aime l'idée ! 😃

@edelclaux
Copy link
Contributor

Ma section dédiée GN:

# #############################################################################
# GEONATURE
###############################################################################

GEONATURE_DEFAULT_CONFIG_FILE = $(GEONATURE_DIRECTORY)/config/geonature_config.toml.sample
GEONATURE_LOCAL_CONFIG_FILE = $(GEONATURE_DIRECTORY)/config/geonature_config.toml

GEONATURE_DEFAULT_SETTING_FILE = $(GEONATURE_DIRECTORY)/config/settings.ini.sample
GEONATURE_LOCAL_SETTING_FILE = $(GEONATURE_DIRECTORY)/config/settings.ini

GEONATURE_APP_SECRET_KEY ?= '8551a7a-64a4-4216-bda4-9a919fcc7a27'

geonature_init_repository:
	if [ ! -d 'geonature' ] ; then git clone $(GEONATURE_REPOSITORY) $(GEONATURE_DIRECTORY) ; fi;
	cd $(GEONATURE_DIRECTORY) && git fetch --tags https://github.com/PnX-SI/GeoNature.git && git checkout $(GEONATURE_VERSION) && git submodule init && git submodule update

geonature_init_config:
	cp -f $(GEONATURE_DEFAULT_CONFIG_FILE) $(GEONATURE_LOCAL_CONFIG_FILE)
	sed -i 's/SQLALCHEMY_DATABASE_URI = "postgresql:\/\/monuser:monpassachanger@localhost:5432\/mabase"/SQLALCHEMY_DATABASE_URI = "postgresql:\/\/$(PG_USER_NAME):$(PG_USER_PASSWD)@localhost:5432\/$(PG_DB_NAME)"/g' $(GEONATURE_LOCAL_CONFIG_FILE)
	sed -i "s/SECRET_KEY = 'super secret key'/SECRET_KEY = $(GEONATURE_APP_SECRET_KEY)/g" $(GEONATURE_LOCAL_CONFIG_FILE)
	sed -i "s/SECRET_KEY = $(GEONATURE_APP_SECRET_KEY)/SECRET_KEY = $(GEONATURE_APP_SECRET_KEY)\n\n\# Nom de l'application dans la page d'accueil\nappName = $(GEONATURE_APP_NAME)/g" $(GEONATURE_LOCAL_CONFIG_FILE)
	sed -i "s/URL_APPLICATION = 'http:\/\/url.com\/geonature'/URL_APPLICATION = 'http:\/\/localhost:$(PORT_GN_FRONTEND)'/g" $(GEONATURE_LOCAL_CONFIG_FILE)
	sed -i "s/API_ENDPOINT = 'http:\/\/url.com\/geonature\/api'/API_ENDPOINT = 'http:\/\/localhost:$(PORT_GN_BACKEND)'/g" $(GEONATURE_LOCAL_CONFIG_FILE)
	sed -i "s/API_TAXHUB = 'http:\/\/url.com\/taxhub\/api'/API_TAXHUB = 'http:\/\/localhost:$(PORT_TAXUB)\/api'/g" $(GEONATURE_LOCAL_CONFIG_FILE)

geonature_init_settings:
	cp -f $(GEONATURE_DEFAULT_SETTING_FILE) $(GEONATURE_LOCAL_SETTING_FILE)
	sed -i 's/MODE=prod/MODE=dev/g' $(GEONATURE_LOCAL_SETTING_FILE)
	sed -i 's/my_url=http:\/\/url.com\//my_url=http:\/\/localhost:$(PORT_GN_FRONTEND)\//g' $(GEONATURE_LOCAL_SETTING_FILE)
	sed -i 's/db_name=geonature2db/db_name=$(PG_DB_NAME)/g' $(GEONATURE_LOCAL_SETTING_FILE)
	sed -i 's/user_pg=geonatadmin/user_pg=$(PG_USER_NAME)/g' $(GEONATURE_LOCAL_SETTING_FILE)
	sed -i 's/user_pg_pass=monpassachanger/user_pg_pass=$(PG_USER_PASSWD)/g' $(GEONATURE_LOCAL_SETTING_FILE)
	sed -i 's/install_default_dem=true/install_default_dem=false/g' $(GEONATURE_LOCAL_SETTING_FILE)
	sed -i 's/add_sample_data=true/add_sample_data=$(WITH_SAMPLE_DATA)/g' $(GEONATURE_LOCAL_SETTING_FILE)
	sed -i 's/install_module_validation=false/install_module_validation=true/g' $(GEONATURE_LOCAL_SETTING_FILE)
	sed -i 's/install_module_occhab=false/install_module_occhab=true/g' $(GEONATURE_LOCAL_SETTING_FILE)

# Works fine, but alter git tracekd file. Not satisfying.
# GEONATURE_FRONTED_CYPRESS_CONFIG_FILE = $(GEONATURE_DIRECTORY)/frontend/cypress.config.ts
# geonature_init_cypress_config:
# 	sed -i "s/baseUrl: 'http:\/\/127.0.0.1:.*'/baseUrl: 'http:\/\/127.0.0.1:$(PORT_GN_FRONTEND)'/g" $(GEONATURE_FRONTED_CYPRESS_CONFIG_FILE)

# INSTALL #####################################################################
geonature_install: geonature_install_backend geonature_drop_db_activate geonature_install_db geonature_drop_db_deactivate geonature_install_frontend geonature_install_modules
geonature_install_noDB: geonature_install_backend geonature_install_frontend geonature_install_modules

# backend
geonature_install_backend:
	cd $(GEONATURE_DIRECTORY)/install && GUNICORN_PORT=9000 ./01_install_backend.sh --dev

# modules
geonature_install_modules:
	cd $(GEONATURE_DIRECTORY)/install && BASE_DIR=/home/etienne/Documents/devel/geonature-workspace/geonature ./04_install_gn_modules.sh

# db
geonature_drop_db_activate:
	sed -i 's/drop_apps_db=false/drop_apps_db=true/g' $(GEONATURE_LOCAL_SETTING_FILE)

geonature_install_db:
	cd $(GEONATURE_DIRECTORY)/install && ./03_create_db.sh

geonature_drop_db_deactivate:
	sed -i 's/drop_apps_db=true/drop_apps_db=false/g' $(GEONATURE_LOCAL_SETTING_FILE)

# frontend
geonature_install_frontend:
	rm $(GEONATURE_DIRECTORY)/frontend/src/assets/config.json -f
	cd $(GEONATURE_DIRECTORY)/install && ./05_install_frontend.sh --dev

# CONFIG ######################################################################
geonature_config: geonature_init_config geonature_init_settings

# RUN #########################################################################
geonature_run_backend:
	cd $(GEONATURE_DIRECTORY)/backend && source venv/bin/activate && geonature dev-back --port $(PORT_GN_BACKEND)

geonature_run_frontend:
	cd $(GEONATURE_DIRECTORY)/frontend && source ~/.nvm/nvm.sh && nvm use && npm run start -- --port $(PORT_GN_FRONTEND)

geonature_test_frontend:
	cd $(GEONATURE_DIRECTORY)/frontend && source ~/.nvm/nvm.sh && nvm use && npm run cypress:run -- --spec "cypress/e2e/occtax-form-spec.js"

geonature_lint_frontend:
	cd $(GEONATURE_DIRECTORY)/frontend && source ~/.nvm/nvm.sh && nvm use && npm run format

@jacquesfize
Copy link
Contributor Author

jacquesfize commented Jan 6, 2025

Une première version est disponible sur develop

@jacquesfize jacquesfize unpinned this issue Jan 7, 2025
@edelclaux
Copy link
Contributor

Suite à la pr que t'as mergé, il faut rajouter le fichier geonature.local.env dans le gitignore

@camillemonchicourt
Copy link
Member

Première version intégrée dans GN 2.15.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants