2025-04-29 17:35:21 +02:00
|
|
|
|
#
|
|
|
|
|
|
# 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.
|
|
|
|
|
|
#
|
|
|
|
|
|
|
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
|
2025-05-09 11:47:48 +02:00
|
|
|
|
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")
|
2025-05-09 11:47:48 +02:00
|
|
|
|
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
|
|
|
|
|
2025-05-09 11:47:48 +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}")
|
|
|
|
|
|
|
2025-05-09 11:47:48 +02:00
|
|
|
|
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()
|