114 lines
4.2 KiB
Bash
114 lines
4.2 KiB
Bash
#!/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
|
||
|
|
}
|