#!/bin/bash #================================================= # FONCTIONS COMMUNES AUX SCRIPTS DU PAQUET #================================================= # Description affichée dans la liste des services YunoHost. readonly DESCRIPTION_SERVICE="Vèy Lalwa — veille législative Gwadloup" #================================================= # CONSTRUCTION DE L'APPLICATION WEB #================================================= construire_application_web() { pushd "$install_dir/web" || ynh_die "Répertoire web/ absent de l'archive" # `npm ci` respecte le verrou de versions ; `npm install` ne le # garantit pas et rendrait deux installations non reproductibles. ynh_hide_warnings ynh_exec_as_app npm ci # Les polices Archivo et Inter sont copiées depuis node_modules vers # static/. Sans cette étape, la page appellerait des polices absentes — # et la politique de sécurité de contenu interdit tout hôte tiers, donc # aucun repli n'est possible. ynh_hide_warnings ynh_exec_as_app npm run polices ynh_hide_warnings ynh_exec_as_app npm run build # Les dépendances de développement pèsent l'essentiel de node_modules et # ne servent plus une fois le build produit. On garde better-sqlite3, # qui est une dépendance d'exécution. ynh_hide_warnings ynh_exec_as_app npm prune --omit=dev popd || true } #================================================= # ENVIRONNEMENT PYTHON DU PIPELINE #================================================= construire_environnement_python() { # Environnement virtuel dédié : on n'installe jamais dans le Python système # d'une machine YunoHost, qui sert aussi à YunoHost lui-même. ynh_exec_as_app python3 -m venv "$install_dir/venv" ynh_hide_warnings ynh_exec_as_app "$install_dir/venv/bin/pip" install \ --upgrade pip setuptools wheel # Installation depuis le pyproject embarqué, sans les extras de # développement : ni pytest ni ruff n'ont leur place en production. pushd "$install_dir" || ynh_die "Répertoire d'installation introuvable" ynh_hide_warnings ynh_exec_as_app "$install_dir/venv/bin/pip" install . popd || true } #================================================= # BASE DE DONNÉES #================================================= # Vrai si la base existe déjà et contient des textes. base_deja_remplie() { [ -s "$data_dir/veille.db" ] && [ "$(sqlite3 "$data_dir/veille.db" \ "SELECT COUNT(*) FROM textes" 2>/dev/null || echo 0)" -gt 0 ] } # Remplit la base depuis le corpus de recherche embarqué dans l'archive. # Idempotent : relancer le seed ne duplique rien. remplir_la_base() { pushd "$install_dir" || ynh_die "Répertoire d'installation introuvable" ynh_exec_as_app env \ VEILLE_RACINE="$install_dir" \ VEILLE_DB="$data_dir/veille.db" \ VEILLE_CACHE="$data_dir/cache_http" \ VEILLE_DUMP_JSON="$data_dir/textes.json" \ "$install_dir/venv/bin/python" -m pipeline.seed_from_research popd || true } # Applique les migrations en attente, sans toucher aux données. migrer_la_base() { pushd "$install_dir" || ynh_die "Répertoire d'installation introuvable" ynh_exec_as_app env \ VEILLE_RACINE="$install_dir" \ VEILLE_DB="$data_dir/veille.db" \ "$install_dir/venv/bin/python" -m pipeline.db popd || true } #================================================= # UNITÉS SYSTEMD SUPPLÉMENTAIRES #================================================= # `ynh_config_add_systemd` ne gère que l'unité principale `$app.service`. Le # passage de collecte et son minuteur sont donc posés à la main. installer_le_minuteur() { ynh_config_add --template="pipeline.service" \ --destination="/etc/systemd/system/$app-pipeline.service" ynh_config_add --template="pipeline.timer" \ --destination="/etc/systemd/system/$app-pipeline.timer" systemctl daemon-reload systemctl enable "$app-pipeline.timer" --quiet systemctl start "$app-pipeline.timer" } retirer_le_minuteur() { if systemctl list-unit-files "$app-pipeline.timer" --quiet >/dev/null 2>&1; then systemctl stop "$app-pipeline.timer" 2>/dev/null || true systemctl disable "$app-pipeline.timer" --quiet 2>/dev/null || true fi ynh_safe_rm "/etc/systemd/system/$app-pipeline.timer" ynh_safe_rm "/etc/systemd/system/$app-pipeline.service" systemctl daemon-reload }