Files
2026-09-25 00:02:53 +02:00

65 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
"""Recupere la liste des apps installees sur le serveur YunoHost et ajoute
celles qui manquent dans src/config.json (dans "ungrouped"), sans toucher a
celles deja placees dans un groupe, dans "pinned" ou deja presentes.
Usage: python3 scripts/sync-apps.py [utilisateur@hote] [domaine]
Toute la configuration vient de .env (SYNC_SSH_USER, SYNC_SSH_HOST,
PORTAL_DOMAIN, REMOTE_USER) ; les arguments en ligne de commande, s'ils sont
fournis, ont priorite sur .env.
"""
import json
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent))
from yunohost_sync import CONFIG_PATH, build_app_list, fetch_remote_apps, known_urls, load_env, sync_target
ENV = load_env()
arg_target = sys.argv[1] if len(sys.argv) > 1 else None
arg_domain = sys.argv[2] if len(sys.argv) > 2 else None
SSH_TARGET, DOMAIN, SELF_APP_ID = sync_target(ENV, arg_target, arg_domain)
if not SSH_TARGET or not DOMAIN:
print(
"Configuration manquante : renseigne SYNC_SSH_HOST (ou REMOTE_HOST) "
"et PORTAL_DOMAIN dans .env (lance 'make config' si .env n'existe pas "
"encore), ou passe-les en argument :\n"
" python3 scripts/sync-apps.py utilisateur@hote domaine",
file=sys.stderr,
)
sys.exit(1)
def main():
with open(CONFIG_PATH, encoding="utf-8") as f:
config = json.load(f)
try:
remote = fetch_remote_apps(SSH_TARGET, DOMAIN)
except (RuntimeError, json.JSONDecodeError) as exc:
print(f"Erreur SSH: {exc}", file=sys.stderr)
sys.exit(1)
existing_urls = known_urls(config)
to_add = build_app_list(remote, DOMAIN, SELF_APP_ID, exclude_urls=existing_urls)
if not to_add:
print("Rien a ajouter, config.json est deja a jour.")
return
config.setdefault("ungrouped", []).extend(to_add)
with open(CONFIG_PATH, "w", encoding="utf-8") as f:
json.dump(config, f, ensure_ascii=False, indent=2)
f.write("\n")
print(f"{len(to_add)} application(s) ajoutee(s) dans \"ungrouped\" :")
for app in to_add:
print(f" - {app['name']}")
if __name__ == "__main__":
main()