98 lines
3.1 KiB
Python
98 lines
3.1 KiB
Python
#
|
||
# 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()
|