# # Erminig - Analyse d'arguments pour govel # Copyright (C) 2025 L0m1g # Sous licence DOUARN - Voir le fichier LICENCE pour les détails # # Ce fichier fait partie du projet Erminig. # Libre comme l’air, stable comme un menhir, et salé comme le beurre. # import argparse from pathlib import Path from erminig.core.config import Config from erminig.controllers.govel.pakva import Pakva from erminig.controllers.govel.build import run_build_function, run_pak_function from erminig.core.package import Package from erminig.core.security import run_as_user import os import subprocess def main(): parser = argparse.ArgumentParser(description="Govel – Build artisanal Erminig") subparsers = parser.add_subparsers(dest="command") build_parser = subparsers.add_parser("build") build_parser.add_argument("--name", help="Nom du paquet à builder") build_parser.add_argument( "--force", action="store_true", help="Force le build même si le dossier existe déjà", ) new_parser = subparsers.add_parser("new") new_parser.add_argument("--name", required=True, help="Nom du paquet") edit_parser = subparsers.add_parser("edit") edit_parser.add_argument("--name", required=True, help="Nom du paquet à éditer") args = parser.parse_args() if args.command == "build": if args.name: pakva = Pakva.load_from_name(args.name) else: pakva_path = Path.cwd() / "Pakva" if not pakva_path.exists(): print("[GOVEL] Erreur : Aucun Pakva trouvé dans le dossier courant.") return pakva = Pakva.read(pakva_path) pak_success = False tmp_path = Path(f"{Config.BUILD_DIR}/{pakva.name}-{pakva.version}") if tmp_path.exists(): if not args.force: print( f"[GOVEL] Erreur : {tmp_path} existe déjà. Utilisez --force pour écraser." ) return else: print(f"[GOVEL] Build forcé activé. Suppression de {tmp_path}…") import shutil shutil.rmtree(tmp_path) build_success = run_build_function(pakva.path, pakva.name, pakva.version) if build_success: pak_success = run_pak_function(pakva.path, pakva.name, pakva.version) if pak_success: tmp_path = f"{Config.BUILD_DIR}/{pakva.name}-{pakva.version}" pkg = Package(pakva.name, pakva.version, tmp_path) pkg.generate_manifest() pkg.write_manifest() pkg.copy_pakva(pakva.path) pkg.build_archive() print(f"[GOVEL] Build réussi pour {pakva.name}") else: print(f"[GOVEL] Build échoué pour {pakva.name}") elif args.command == "new": if args.name: pakva = Pakva(args.name) pakva.save() elif args.command == "edit": pakva = Pakva.load_from_name(args.name) open_editor(pakva.path) @run_as_user("pak") def open_editor(path): editor = os.getenv("EDITOR", "nvim") subprocess.run([editor, str(path)]) if __name__ == "__main__": main()