From b3ff529cfa8f3b7e59cbd16871568541fa153308 Mon Sep 17 00:00:00 2001 From: cyber-mawonaj Date: Sat, 1 Aug 2026 09:25:39 -0400 Subject: [PATCH] feat(packaging) : package YunoHost veille-ia_ynh (packaging v2, helpers 2.1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - manifest.toml validé contre le schéma officiel manifest.v2.schema.json (sources par tag forge avec placeholder sha256 assumé, nodejs 24, ports, system_user, install_dir, data_dir, permission privée all_users, SSO) - Scripts install/remove/upgrade/backup/restore/change_url (bash -n OK) : build au fil de l'eau avec BASE_PATH, ALERTS_TOKEN généré à l'install, .env chmod 400, logs journald - conf/nginx.conf : proxy_params_with_auth (header Ynh-User), conf/systemd.service : node via __NODEJS_DIR__, sandboxing modéré, conf/env : DATA_DIR/OLLAMA_URL/ALERTS_TOKEN - tests.toml minimal, doc DESCRIPTION/ADMIN fr+en - README racine : dev local, variables d'env, procédure de release, Ollama --- README.md | 86 +++++++++++++++++++++++++++++ app/README.md | 49 ++++------------ veille-ia_ynh/conf/env | 11 ++++ veille-ia_ynh/conf/nginx.conf | 14 +++++ veille-ia_ynh/conf/systemd.service | 41 ++++++++++++++ veille-ia_ynh/doc/ADMIN_fr.md | 17 ++++++ veille-ia_ynh/doc/DESCRIPTION.md | 9 +++ veille-ia_ynh/doc/DESCRIPTION_fr.md | 9 +++ veille-ia_ynh/manifest.toml | 69 +++++++++++++++++++++++ veille-ia_ynh/scripts/_common.sh | 28 ++++++++++ veille-ia_ynh/scripts/backup | 19 +++++++ veille-ia_ynh/scripts/change_url | 42 ++++++++++++++ veille-ia_ynh/scripts/install | 58 +++++++++++++++++++ veille-ia_ynh/scripts/remove | 18 ++++++ veille-ia_ynh/scripts/restore | 54 ++++++++++++++++++ veille-ia_ynh/scripts/upgrade | 67 ++++++++++++++++++++++ veille-ia_ynh/tests.toml | 7 +++ 17 files changed, 559 insertions(+), 39 deletions(-) create mode 100644 README.md create mode 100644 veille-ia_ynh/conf/env create mode 100644 veille-ia_ynh/conf/nginx.conf create mode 100644 veille-ia_ynh/conf/systemd.service create mode 100644 veille-ia_ynh/doc/ADMIN_fr.md create mode 100644 veille-ia_ynh/doc/DESCRIPTION.md create mode 100644 veille-ia_ynh/doc/DESCRIPTION_fr.md create mode 100644 veille-ia_ynh/manifest.toml create mode 100644 veille-ia_ynh/scripts/_common.sh create mode 100755 veille-ia_ynh/scripts/backup create mode 100755 veille-ia_ynh/scripts/change_url create mode 100755 veille-ia_ynh/scripts/install create mode 100755 veille-ia_ynh/scripts/remove create mode 100755 veille-ia_ynh/scripts/restore create mode 100755 veille-ia_ynh/scripts/upgrade create mode 100644 veille-ia_ynh/tests.toml diff --git a/README.md b/README.md new file mode 100644 index 0000000..245267e --- /dev/null +++ b/README.md @@ -0,0 +1,86 @@ +# veille-ia + +Observatoire personnel de veille sur les modèles IA génératifs (sorties, licences, classements), avec moteur de recommandation par profils de projets. Application privée, self-hosted, packagée pour YunoHost. Licence AGPL-3.0. + +- **Spécification fonctionnelle** : [`plan_prd_veille_ia.md`](plan_prd_veille_ia.md) +- **Conventions frontend (prioritaires)** : [`SPECS_SVELTE.md`](SPECS_SVELTE.md) + +## Structure du dépôt + +| Chemin | Contenu | +|---|---| +| `app/` | Application SvelteKit (Svelte 5 runes, TypeScript strict, adapter-node) | +| `veille-ia_ynh/` | Package YunoHost (packaging v2, helpers 2.1) | +| `nodered-flows/` | Flows Node-RED exportés (phase 2 — à venir) | + +## Développement local (hors YunoHost) + +Prérequis : Node 24 LTS, npm. + +```bash +cd app +cp .env.example .env # DEV_USER=dev simule un utilisateur SSO connecté +npm ci +npm run dev +``` + +Sans `DEV_USER`, l'accueil public minimal est affiché et toute autre route renvoie 401 — comme en production sans header SSO. + +### Variables d'environnement + +| Variable | Défaut | Rôle | +|---|---|---| +| `DATA_DIR` | `./data` (relatif à `app/`) | Dossier persistant : YAML + git interne. En prod : `/home/yunohost.app/veille-ia` | +| `OLLAMA_URL` | `http://127.0.0.1:11434` | Endpoint Ollama. Optionnel : dégradation gracieuse si injoignable | +| `ALERTS_TOKEN` | *(aucun)* | Token Bearer de `POST /api/alerts`. Généré à l'install YNH, jamais commité | +| `SSO_HEADER` | `ynh-user` | Header HTTP injecté par SSOwat portant l'utilisateur authentifié | +| `DEV_USER` | *(aucun)* | Dev uniquement : simule un utilisateur SSO. Ignoré en production | +| `BASE_PATH` | *(aucun)* | Build uniquement : sous-chemin de montage (ex. `/veille`) pour `paths.base` | + +### Qualité (à faire passer avant chaque commit) + +```bash +npm run check # svelte-check : 0 erreur, 0 warning +npm run lint # prettier + eslint +npm run test # vitest +npm run build # build adapter-node +``` + +## Packaging YunoHost (`veille-ia_ynh/`) + +Packaging v2 vérifié contre la documentation officielle (août 2026) et le schéma +`manifest.v2.schema.json`. Helpers 2.1 (`ynh_config_add_nginx`, `ynh_config_add_systemd`…). +Ressources : `ports`, `nodejs` (24), `system_user`, `install_dir` (`/var/www/veille-ia`), +`data_dir` (`/home/yunohost.app/veille-ia`). App privée : permission `all_users`, +identité transmise via le header `Ynh-User` (`proxy_params_with_auth`). + +### Procédure de release (à suivre avant toute installation) + +Le package consomme une **archive de tag** publiée sur la forge : + +1. Pousser le dépôt sur `https://labola.o-k-i.net/cyber-mawonaj/veille-ia` (procédure : `doc2sveltekit-transition/GITEA.md` — dépôt créé **sans** initialisation). +2. Taguer : `git tag v0.1.0 && git push gitea v0.1.0`. +3. Télécharger `https://labola.o-k-i.net/cyber-mawonaj/veille-ia/archive/v0.1.0.tar.gz` et calculer son sha256. +4. Mettre à jour `veille-ia_ynh/manifest.toml` : `version = "0.1.0~ynh1"`, `resources.sources.main.url` et `sha256` (le placeholder `TODO_…` actuel bloque volontairement toute installation). +5. Vérifier avec `package_check` (sur une machine YunoHost de test) : viser niveau ≥ 7. + +### Installation (sur le serveur) + +```bash +yunohost app install /chemin/vers/veille-ia_ynh +# ou une fois publié : yunohost app install https://labola.o-k-i.net/cyber-mawonaj/veille-ia_ynh +``` + +L'install : déploie l'archive, `npm ci` + build (avec `BASE_PATH` = chemin d'install), génère `ALERTS_TOKEN`, écrit `/var/www/veille-ia/app/.env` (chmod 400), configure nginx + systemd (logs journald). + +### Ollama + +Optionnel. Si le paquet `ollama_ynh` est indisponible : Ollama sur la machine locale du porteur, exposé au serveur via wireguard/LAN — renseigner `OLLAMA_URL` à l'install (question du manifest) ou dans `/var/www/veille-ia/app/.env`. L'app démarre et fonctionne sans (dégradation gracieuse). + +## État d'avancement + +- [x] **Phase 0** — socle SvelteKit (SSO, thème OKI, CSP) + packaging YNH + dev local +- [ ] **Phase 1** — registre + profils + moteur de recommandation + export markdown +- [ ] **Phase 2** — inbox alertes + flows Node-RED +- [ ] **Phase 3** — templates ComfyUI + smoke tests +- [ ] **Phase 4** — durcissement (i18n gcf/en, niveau 8 package_check) diff --git a/app/README.md b/app/README.md index d34facd..3e2b257 100644 --- a/app/README.md +++ b/app/README.md @@ -1,42 +1,13 @@ -# sv +# veille-ia — application SvelteKit -Everything you need to build a Svelte project, powered by [`sv`](https://github.com/sveltejs/cli). +Voir le [README racine](../README.md) pour la vue d'ensemble, le dev local et les variables d'environnement, et [SPECS_SVELTE.md](../SPECS_SVELTE.md) pour les conventions de code (prioritaires sur tout choix frontend). -## Creating a project - -If you're seeing this, you've probably already done this step. Congrats! - -```sh -# create a new project -npx sv create my-app +```bash +npm ci +npm run dev # dev (DEV_USER=dev dans .env simule le SSO) +npm run check # svelte-check — 0 erreur / 0 warning exigé +npm run lint # prettier + eslint +npm run test # vitest +npm run build # build adapter-node (BASE_PATH=/veille pour un sous-chemin) +node build/index.js ``` - -To recreate this project with the same configuration: - -```sh -# recreate this project -npx sv@0.17.0 create --template minimal --types ts --add prettier eslint vitest="usages:unit" sveltekit-adapter="adapter:node" --install npm app -``` - -## Developing - -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: - -```sh -npm run dev - -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` - -## Building - -To create a production version of your app: - -```sh -npm run build -``` - -You can preview the production build with `npm run preview`. - -> To deploy your app, you may need to install an [adapter](https://svelte.dev/docs/kit/adapters) for your target environment. diff --git a/veille-ia_ynh/conf/env b/veille-ia_ynh/conf/env new file mode 100644 index 0000000..d8ee1f1 --- /dev/null +++ b/veille-ia_ynh/conf/env @@ -0,0 +1,11 @@ +# Environnement applicatif de veille-ia (chargé par systemd via EnvironmentFile). +# Régénéré par les scripts du package (ynh_config_add) — ne pas éditer à la main. + +# Dossier de données persistant : registre/profils YAML + dépôt git interne. +DATA_DIR=__DATA_DIR__ + +# Endpoint Ollama (optionnel : dégradation gracieuse si injoignable). +OLLAMA_URL=__OLLAMA_URL__ + +# Token Bearer protégeant POST /api/alerts (généré à l'install — secret). +ALERTS_TOKEN=__ALERTS_TOKEN__ diff --git a/veille-ia_ynh/conf/nginx.conf b/veille-ia_ynh/conf/nginx.conf new file mode 100644 index 0000000..cf93e4f --- /dev/null +++ b/veille-ia_ynh/conf/nginx.conf @@ -0,0 +1,14 @@ +#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; +location __PATH__/ { + + # Reverse proxy vers le serveur Node (adapter-node). + # Pas de '/' final à proxy_pass : l'URI complète (avec le sous-chemin) est + # transmise, ce qui correspond au paths.base configuré au build de l'app. + proxy_pass http://127.0.0.1:__PORT__; + + # Transmet l'identité SSO (Ynh-User…) après authentification SSOwat, et vide + # ces headers pour les requêtes client (non spoofable). + include proxy_params_with_auth; + + client_max_body_size 10M; +} diff --git a/veille-ia_ynh/conf/systemd.service b/veille-ia_ynh/conf/systemd.service new file mode 100644 index 0000000..2efcf61 --- /dev/null +++ b/veille-ia_ynh/conf/systemd.service @@ -0,0 +1,41 @@ +[Unit] +Description=Veille IA — observatoire de veille sur les modèles IA (SvelteKit) +After=network.target + +[Service] +Type=simple +User=__APP__ +Group=__APP__ +WorkingDirectory=__INSTALL_DIR__/app + +Environment="PATH=__PATH_WITH_NODEJS__" +Environment="NODE_ENV=production" +Environment="HOST=127.0.0.1" +Environment="PORT=__PORT__" +Environment="ORIGIN=https://__DOMAIN____PATH__" +# DATA_DIR, OLLAMA_URL, ALERTS_TOKEN (fichier posé à l'install, chmod 400) +EnvironmentFile=__INSTALL_DIR__/app/.env + +ExecStart=__NODEJS_DIR__/node build/index.js + +# Logs vers journald : yunohost service log __APP__ +StandardOutput=journal +StandardError=journal +SyslogIdentifier=__APP__ + +# Sandboxing (niveau modéré : le service doit pouvoir lancer git dans le data_dir, +# phase 1 — simple-git — et joindre Ollama en HTTP sortant). +NoNewPrivileges=yes +PrivateTmp=yes +ProtectSystem=full +ProtectKernelModules=yes +ProtectKernelTunables=yes +ProtectControlGroups=yes +RestrictRealtime=yes +RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK +LockPersonality=yes +SystemCallArchitectures=native +CapabilityBoundingSet= + +[Install] +WantedBy=multi-user.target diff --git a/veille-ia_ynh/doc/ADMIN_fr.md b/veille-ia_ynh/doc/ADMIN_fr.md new file mode 100644 index 0000000..0988f27 --- /dev/null +++ b/veille-ia_ynh/doc/ADMIN_fr.md @@ -0,0 +1,17 @@ +## Administration de Veille IA + +### Ollama (optionnel) + +L'app fonctionne sans Ollama (dégradation gracieuse). Pour activer le classifieur LLM, indiquez l'URL de votre endpoint Ollama à l'install (ou éditez `/var/www/veille-ia/app/.env` puis `systemctl restart veille-ia`). Ollama peut tourner sur une autre machine joignable en HTTP (LAN, wireguard). + +### Données + +Registre et profils (YAML + git interne) : `/home/yunohost.app/veille-ia`. Sauvegardés par le script de backup standard. Non supprimés à la désinstallation sauf `--purge`. + +### Alertes (webhook) + +`POST /api/alerts` est protégé par un token Bearer généré à l'install, visible dans `/var/www/veille-ia/app/.env` (`ALERTS_TOKEN`). À configurer côté Node-RED (flows fournis dans le dépôt source, dossier `nodered-flows/`). + +### Journaux + +`yunohost service log veille-ia` (journald). diff --git a/veille-ia_ynh/doc/DESCRIPTION.md b/veille-ia_ynh/doc/DESCRIPTION.md new file mode 100644 index 0000000..d10cdbb --- /dev/null +++ b/veille-ia_ynh/doc/DESCRIPTION.md @@ -0,0 +1,9 @@ +Veille IA is a personal watchtower for generative AI models: releases, licenses, rankings, with a recommendation engine based on project profiles. + +- **Model registry**: single source of truth (git-versioned YAML), anti-hallucination rule (unverified field = "to be checked") +- **Project profiles**: legal constraints per production context +- **Recommendation engine**: ranked, justified shortlist with warnings +- **Alert inbox**: events classified by a local LLM (Ollama), pushed from Node-RED +- **Markdown export**: guides and rankings regenerated from the registry + +Private application (YunoHost SSO), 100% open source (AGPL-3.0), no paid API. diff --git a/veille-ia_ynh/doc/DESCRIPTION_fr.md b/veille-ia_ynh/doc/DESCRIPTION_fr.md new file mode 100644 index 0000000..dc5b113 --- /dev/null +++ b/veille-ia_ynh/doc/DESCRIPTION_fr.md @@ -0,0 +1,9 @@ +Veille IA est un observatoire personnel de veille sur les modèles IA génératifs : sorties, licences, classements, avec un moteur de recommandation par profils de projets. + +- **Registre des modèles** : source de vérité unique (YAML versionné git), règle anti-hallucination (champ non vérifié = « à vérifier ») +- **Profils de projets** : contraintes juridiques par contexte de production +- **Moteur de recommandation** : shortlist classée et justifiée, avec warnings +- **Inbox d'alertes** : événements classifiés par un LLM local (Ollama), poussés depuis Node-RED +- **Export markdown** : guides et classements régénérés depuis le registre + +Application privée (SSO YunoHost), 100 % open-source (AGPL-3.0), aucune API payante. diff --git a/veille-ia_ynh/manifest.toml b/veille-ia_ynh/manifest.toml new file mode 100644 index 0000000..12c024d --- /dev/null +++ b/veille-ia_ynh/manifest.toml @@ -0,0 +1,69 @@ +#:schema https://raw.githubusercontent.com/YunoHost/apps/main/schemas/manifest.v2.schema.json + +packaging_format = 2 + +id = "veille-ia" +name = "Veille IA" +description.en = "Personal watchtower for generative AI models (releases, licenses, rankings)" +description.fr = "Observatoire personnel de veille sur les modèles IA génératifs (sorties, licences, classements)" + +version = "0.1.0~ynh1" + +maintainers = ["cyber-mawonaj"] + +[upstream] +license = "AGPL-3.0-or-later" +code = "https://labola.o-k-i.net/cyber-mawonaj/veille-ia" + +[integration] +yunohost = ">= 12.1" +helpers_version = "2.1" +architectures = "all" +multi_instance = false +ldap = false +sso = true +disk = "300M" +ram.build = "1G" +ram.runtime = "150M" + +[install] + [install.domain] + type = "domain" + + [install.path] + type = "path" + default = "/veille" + + [install.init_main_permission] + # App privée : "all_users" = SSO requis (remplace l'ancienne question is_public). + type = "group" + default = "all_users" + + [install.ollama_url] + ask.fr = "URL de l'endpoint Ollama (optionnel — l'app fonctionne sans, en mode dégradé)" + ask.en = "Ollama endpoint URL (optional — the app works without it, in degraded mode)" + type = "string" + default = "http://127.0.0.1:11434" + optional = true + +[resources] + # Archive de l'app, publiée par tag sur la forge (procédure de release : README racine). + # ⚠️ sha256 à recalculer après chaque tag : sha256sum vX.Y.Z.tar.gz + [resources.sources.main] + url = "https://labola.o-k-i.net/cyber-mawonaj/veille-ia/archive/v0.1.0.tar.gz" + sha256 = "TODO_SHA256_A_CALCULER_APRES_LE_TAG_v0.1.0" + autoupdate.strategy = "latest_forgejo_tag" + + [resources.system_user] + + [resources.install_dir] + + [resources.data_dir] + + [resources.permissions] + main.url = "/" + + [resources.ports] + + [resources.nodejs] + version = "24" diff --git a/veille-ia_ynh/scripts/_common.sh b/veille-ia_ynh/scripts/_common.sh new file mode 100644 index 0000000..5c57015 --- /dev/null +++ b/veille-ia_ynh/scripts/_common.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Variables et fonctions communes aux scripts du package veille-ia_ynh. + +# Normalise le chemin YNH pour paths.base de SvelteKit ("/" -> "" ; sinon "/veille"). +veille_ia_base_path() { + if [ "$path" = "/" ]; then + echo "" + else + echo "$path" + fi +} + +# Installe les dépendances, build l'app (avec le bon sous-chemin), puis élague +# les devDependencies pour ne garder que le runtime. +veille_ia_build_app() { + pushd "$install_dir/app" + ynh_hide_warnings ynh_exec_as_app npm ci + ynh_hide_warnings ynh_exec_as_app env BASE_PATH="$(veille_ia_base_path)" npm run build + ynh_hide_warnings ynh_exec_as_app npm prune --omit=dev + popd +} + +# (Re)génère le fichier d'environnement applicatif et verrouille ses droits. +veille_ia_write_env() { + ynh_config_add --template="env" --destination="$install_dir/app/.env" + chmod 400 "$install_dir/app/.env" + chown "$app:$app" "$install_dir/app/.env" +} diff --git a/veille-ia_ynh/scripts/backup b/veille-ia_ynh/scripts/backup new file mode 100755 index 0000000..a7a3115 --- /dev/null +++ b/veille-ia_ynh/scripts/backup @@ -0,0 +1,19 @@ +#!/bin/bash + +source ../settings/scripts/_common.sh +source /usr/share/yunohost/helpers + +ynh_print_info "Déclaration des fichiers à sauvegarder..." + +# Code + build + .env (reconstruisible, mais sauvegardé pour une restauration rapide). +ynh_backup "$install_dir" + +# Données : registre/profils YAML + dépôt git interne. +# (Ignoré par le backup de sécurité pré-upgrade — comportement standard du cœur.) +ynh_backup "$data_dir" + +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" + +ynh_backup "/etc/systemd/system/$app.service" + +ynh_print_info "Sauvegarde de veille-ia terminée" diff --git a/veille-ia_ynh/scripts/change_url b/veille-ia_ynh/scripts/change_url new file mode 100755 index 0000000..79f0f81 --- /dev/null +++ b/veille-ia_ynh/scripts/change_url @@ -0,0 +1,42 @@ +#!/bin/bash + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression "Arrêt du service systemd de veille-ia..." + +ynh_systemctl --service="$app" --action="stop" + +#================================================= +# UPDATE NGINX CONFIGURATION +#================================================= +ynh_script_progression "Mise à jour de la configuration nginx de veille-ia..." + +# $domain/$path pointent déjà vers les nouvelles valeurs ($old_domain/$old_path +# et $change_domain/$change_path sont disponibles si besoin). +ynh_config_change_url_nginx + +#================================================= +# RE-BUILD THE APP WITH THE NEW BASE PATH +#================================================= +ynh_script_progression "Re-build de veille-ia pour le nouveau chemin..." + +# paths.base est figé au build (SvelteKit) : le changement de chemin impose +# un re-build avec le nouveau BASE_PATH. +veille_ia_build_app + +# .env : régénéré pour rester cohérent (ORIGIN systemd suit __DOMAIN____PATH__ +# via ynh_config_change_url_nginx ; le .env ne contient pas le domaine). +veille_ia_write_env + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression "Démarrage du service systemd de veille-ia..." + +ynh_systemctl --service="$app" --action="start" + +ynh_script_progression "Changement d'URL de veille-ia terminé" diff --git a/veille-ia_ynh/scripts/install b/veille-ia_ynh/scripts/install new file mode 100755 index 0000000..94e17a6 --- /dev/null +++ b/veille-ia_ynh/scripts/install @@ -0,0 +1,58 @@ +#!/bin/bash + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RETRIEVE ARGUMENTS FROM THE MANIFEST AND GENERATE SETTINGS +#================================================= +ynh_script_progression "Récupération des paramètres de veille-ia..." + +# Token protégeant POST /api/alerts (webhook Node-RED) — secret généré à l'install. +alerts_token="$(ynh_string_random 48)" +ynh_app_setting_set --key=alerts_token --value="$alerts_token" + +#================================================= +# DEPLOY APP FILES +#================================================= +ynh_script_progression "Déploiement des fichiers de veille-ia..." + +# Archive du tag de la forge (ressource sources.main du manifest), pré-téléchargée. +ynh_setup_source --dest_dir="$install_dir" + +# L'app SvelteKit vit dans le sous-dossier app/ du dépôt. +chown -R "$app:$app" "$install_dir" + +#================================================= +# BUILD THE APP +#================================================= +ynh_script_progression "Installation des dépendances et build de veille-ia..." + +veille_ia_build_app + +#================================================= +# APP CONFIGURATION +#================================================= +ynh_script_progression "Ajout de la configuration de veille-ia..." + +veille_ia_write_env + +#================================================= +# SYSTEM CONFIGURATION +#================================================= +ynh_script_progression "Ajout de la configuration système pour veille-ia..." + +ynh_config_add_nginx + +ynh_config_add_systemd + +yunohost service add "$app" --description="Observatoire de veille sur les modèles IA" + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression "Démarrage du service systemd de veille-ia..." + +ynh_systemctl --service="$app" --action="start" + +ynh_script_progression "Installation de veille-ia terminée" diff --git a/veille-ia_ynh/scripts/remove b/veille-ia_ynh/scripts/remove new file mode 100755 index 0000000..66ca397 --- /dev/null +++ b/veille-ia_ynh/scripts/remove @@ -0,0 +1,18 @@ +#!/bin/bash + +source _common.sh +source /usr/share/yunohost/helpers + +ynh_script_progression "Suppression de la configuration système de veille-ia..." + +# Les ressources (user, dossiers, port, nodejs, permissions) sont déprovisionnées +# automatiquement par le cœur après ce script. Le data_dir est conservé sauf --purge. + +if ynh_hide_warnings yunohost service status "$app" >/dev/null; then + yunohost service remove "$app" +fi +ynh_config_remove_systemd + +ynh_config_remove_nginx + +ynh_script_progression "Suppression de veille-ia terminée" diff --git a/veille-ia_ynh/scripts/restore b/veille-ia_ynh/scripts/restore new file mode 100755 index 0000000..6d06bff --- /dev/null +++ b/veille-ia_ynh/scripts/restore @@ -0,0 +1,54 @@ +#!/bin/bash + +source ../settings/scripts/_common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RESTORE THE APP MAIN DIRECTORY +#================================================= +ynh_script_progression "Restauration du dossier principal de veille-ia..." + +# Les ressources (user, dossiers, port, nodejs) sont re-provisionnées par le cœur +# AVANT ce script. $domain, $path, $install_dir, $data_dir… sont rechargés. +ynh_restore "$install_dir" +chown -R "$app:$app" "$install_dir" + +#================================================= +# RE-BUILD THE APP +#================================================= +ynh_script_progression "Réinstallation des dépendances et build de veille-ia..." + +# Le build restauré est régénéré proprement (version de node, sous-chemin). +veille_ia_build_app + +veille_ia_write_env + +#================================================= +# RESTORE THE DATA DIRECTORY +#================================================= +ynh_script_progression "Restauration du dossier de données de veille-ia..." + +ynh_restore "$data_dir" +chown -R "$app:$app" "$data_dir" + +#================================================= +# RESTORE SYSTEM CONFIGURATIONS +#================================================= +ynh_script_progression "Restauration de la configuration système de veille-ia..." + +ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf" + +ynh_restore "/etc/systemd/system/$app.service" +systemctl enable "$app.service" --quiet + +yunohost service add "$app" --description="Observatoire de veille sur les modèles IA" + +#================================================= +# RELOAD NGINX AND START THE APP +#================================================= +ynh_script_progression "Rechargement de nginx et démarrage de veille-ia..." + +ynh_systemctl --service="$app" --action="start" +ynh_systemctl --service=nginx --action=reload + +ynh_script_progression "Restauration de veille-ia terminée" diff --git a/veille-ia_ynh/scripts/upgrade b/veille-ia_ynh/scripts/upgrade new file mode 100755 index 0000000..499115e --- /dev/null +++ b/veille-ia_ynh/scripts/upgrade @@ -0,0 +1,67 @@ +#!/bin/bash + +source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# STOP SYSTEMD SERVICE +#================================================= +ynh_script_progression "Arrêt du service systemd de veille-ia..." + +ynh_systemctl --service="$app" --action="stop" + +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression "Vérification des paramètres de veille-ia..." + +# Token d'alertes : créé à l'install ; le régénère si absent (installs anciennes). +if [ -z "${alerts_token:-}" ]; then + alerts_token="$(ynh_string_random 48)" + ynh_app_setting_set --key=alerts_token --value="$alerts_token" +fi + +#================================================= +# UPGRADE SOURCE FILES +#================================================= +ynh_script_progression "Mise à jour des fichiers de veille-ia..." + +# Un backup de sécurité a déjà été réalisé par le cœur. Remplacement complet : +# le .env est régénéré juste après depuis les settings persistants. +ynh_setup_source --dest_dir="$install_dir" --full_replace + +chown -R "$app:$app" "$install_dir" + +#================================================= +# RE-BUILD THE APP +#================================================= +ynh_script_progression "Installation des dépendances et build de veille-ia..." + +veille_ia_build_app + +#================================================= +# UPDATE APP CONFIGURATION +#================================================= +ynh_script_progression "Mise à jour de la configuration de veille-ia..." + +veille_ia_write_env + +#================================================= +# UPDATE SYSTEM CONFIGURATION +#================================================= +ynh_script_progression "Mise à jour de la configuration système pour veille-ia..." + +ynh_config_add_nginx + +ynh_config_add_systemd + +yunohost service add "$app" --description="Observatoire de veille sur les modèles IA" + +#================================================= +# START SYSTEMD SERVICE +#================================================= +ynh_script_progression "Démarrage du service systemd de veille-ia..." + +ynh_systemctl --service="$app" --action="start" + +ynh_script_progression "Mise à jour de veille-ia terminée" diff --git a/veille-ia_ynh/tests.toml b/veille-ia_ynh/tests.toml new file mode 100644 index 0000000..3a50838 --- /dev/null +++ b/veille-ia_ynh/tests.toml @@ -0,0 +1,7 @@ +#:schema https://raw.githubusercontent.com/YunoHost/apps/main/schemas/tests.v1.schema.json + +test_format = 1.0 + +# Le minimum suffit : les tests (install.root, install.subdir, backup_restore, +# upgrade, change_url…) sont déduits automatiquement du manifest. +[default]