Erminig/erminig/cli/govel.py

99 lines
3.1 KiB
Python
Raw Permalink Normal View History

#
# 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 lair, stable comme un menhir, et salé comme le beurre.
#
2025-04-29 17:15:19 +02:00
import argparse
2025-05-03 18:33:53 +02:00
from pathlib import Path
from erminig.core.config import Config
2025-04-29 17:15:19 +02:00
from erminig.controllers.govel.pakva import Pakva
2025-05-05 16:16:24 +02:00
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
2025-04-29 17:15:19 +02:00
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")
2025-04-29 17:15:19 +02:00
args = parser.parse_args()
if args.command == "build":
if args.name:
2025-05-03 18:33:53 +02:00
pakva = Pakva.load_from_name(args.name)
2025-04-29 17:15:19 +02:00
else:
2025-05-03 18:33:53 +02:00
pakva_path = Path.cwd() / "Pakva"
if not pakva_path.exists():
print("[GOVEL] Erreur : Aucun Pakva trouvé dans le dossier courant.")
2025-04-29 17:15:19 +02:00
return
2025-05-03 18:33:53 +02:00
pakva = Pakva.read(pakva_path)
2025-04-29 17:15:19 +02:00
2025-05-05 16:16:24 +02:00
pak_success = False
2025-04-29 17:15:19 +02:00
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)
2025-05-05 16:16:24 +02:00
build_success = run_build_function(pakva.path, pakva.name, pakva.version)
2025-04-29 17:15:19 +02:00
if build_success:
2025-05-05 16:16:24 +02:00
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()
2025-04-29 17:15:19 +02:00
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)])
2025-04-29 17:15:19 +02:00
if __name__ == "__main__":
main()