Files

114 lines
4.2 KiB
Bash
Raw Permalink Normal View History

#!/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
}