From c26fcdc1db50136e36e6afe78af3abed3a8a0e37 Mon Sep 17 00:00:00 2001 From: L0m1g Date: Sat, 3 May 2025 18:33:53 +0200 Subject: [PATCH] Add: Start govel build packages --- Dockerfile | 2 +- erminig/cli/govel.py | 17 ++++++++--------- erminig/cli/init.py | 4 ++-- erminig/controllers/evezh/abstract.py | 1 - erminig/controllers/evezh/check.py | 1 - erminig/controllers/evezh/parsers/github.py | 4 ++-- erminig/controllers/evezh/parsers/http.py | 2 +- .../controllers/evezh/parsers/sourceforge.py | 2 +- erminig/controllers/govel/build.py | 17 +++++++++++++++-- erminig/controllers/govel/pakva.py | 4 ++-- erminig/{system => core}/__init__.py | 0 erminig/{ => core}/config.py | 1 + erminig/core/package.py | 0 erminig/{system => core}/retry.py | 2 +- erminig/{system => core}/security.py | 0 erminig/models/db.py | 2 +- tests/test_config.py | 2 +- tests/test_pakva.py | 2 +- 18 files changed, 37 insertions(+), 26 deletions(-) rename erminig/{system => core}/__init__.py (100%) rename erminig/{ => core}/config.py (94%) create mode 100644 erminig/core/package.py rename erminig/{system => core}/retry.py (97%) rename erminig/{system => core}/security.py (100%) diff --git a/Dockerfile b/Dockerfile index 6e6c1eb..3e609a9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM fedora:42 RUN dnf -y update && \ - dnf -y install python3 python3-pip sqlite tar zstd git bash && \ + dnf -y install python3 python3-pip sqlite tar zstd git bash vim && \ dnf clean all RUN useradd -r -s /sbin/nologin -d /var/lib/erminig pak && \ diff --git a/erminig/cli/govel.py b/erminig/cli/govel.py index 1ca0d32..b4dfed5 100644 --- a/erminig/cli/govel.py +++ b/erminig/cli/govel.py @@ -8,7 +8,8 @@ # import argparse -from erminig.config import Config +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 @@ -24,17 +25,15 @@ def main(): if args.command == "build": if args.name: - pakva = Pakva(name=args.name, version=None, archive=None) - pakva.read() + pakva = Pakva.load_from_name(args.name) else: - if not Config.PAKVA_DIR.exists(): - print("[GOVEL] Erreur : Aucun Pakva trouvé ici.") + pakva_path = Path.cwd() / "Pakva" + if not pakva_path.exists(): + print("[GOVEL] Erreur : Aucun Pakva trouvé dans le dossier courant.") return - pakva = Pakva(name="local", version=None, archive=None) - pakva.path = Config.PAKVA_DIR - pakva.read() + pakva = Pakva.read(pakva_path) - build_success = run_build_function(pakva.path) + build_success = run_build_function(pakva.path, pakva.name, pakva.version) if build_success: print(f"[GOVEL] Build réussi pour {pakva.name}") diff --git a/erminig/cli/init.py b/erminig/cli/init.py index 0efa943..5769cf7 100644 --- a/erminig/cli/init.py +++ b/erminig/cli/init.py @@ -11,8 +11,8 @@ import os import subprocess import sys from pathlib import Path -from erminig.system.security import check_root, check_user_exists -from erminig.config import Config # Voilà la différence clé ! +from erminig.core.security import check_root, check_user_exists +from erminig.core.config import Config PAK_USER = Config.PAK_USER diff --git a/erminig/controllers/evezh/abstract.py b/erminig/controllers/evezh/abstract.py index 9c42a2c..874c3d5 100644 --- a/erminig/controllers/evezh/abstract.py +++ b/erminig/controllers/evezh/abstract.py @@ -7,7 +7,6 @@ # Libre comme l’air, stable comme un menhir, et salé comme le beurre. # - from abc import ABC, abstractmethod diff --git a/erminig/controllers/evezh/check.py b/erminig/controllers/evezh/check.py index 65a9237..d187e92 100644 --- a/erminig/controllers/evezh/check.py +++ b/erminig/controllers/evezh/check.py @@ -11,7 +11,6 @@ import json from pathlib import Path import yaml - from erminig.controllers.evezh.parsers.github import GitHubSource from erminig.controllers.evezh.parsers.http import HttpSource from erminig.controllers.evezh.parsers.sourceforge import SourceForgeRSS diff --git a/erminig/controllers/evezh/parsers/github.py b/erminig/controllers/evezh/parsers/github.py index 5d29562..e6e029f 100644 --- a/erminig/controllers/evezh/parsers/github.py +++ b/erminig/controllers/evezh/parsers/github.py @@ -9,9 +9,9 @@ import re import requests -from erminig.config import Config +from erminig.core.config import Config from erminig.controllers.evezh.abstract import UpstreamSource -from erminig.system.retry import retry_on_failure +from erminig.core.retry import retry_on_failure class GitHubSource(UpstreamSource): diff --git a/erminig/controllers/evezh/parsers/http.py b/erminig/controllers/evezh/parsers/http.py index 774aaee..ec13ba7 100644 --- a/erminig/controllers/evezh/parsers/http.py +++ b/erminig/controllers/evezh/parsers/http.py @@ -10,7 +10,7 @@ import re import requests from erminig.controllers.evezh.abstract import UpstreamSource -from erminig.system.retry import retry_on_failure +from erminig.core.retry import retry_on_failure class HttpSource(UpstreamSource): diff --git a/erminig/controllers/evezh/parsers/sourceforge.py b/erminig/controllers/evezh/parsers/sourceforge.py index 29bcac8..f711af9 100644 --- a/erminig/controllers/evezh/parsers/sourceforge.py +++ b/erminig/controllers/evezh/parsers/sourceforge.py @@ -11,7 +11,7 @@ import re import requests import xml.etree.ElementTree as ET from erminig.controllers.evezh.abstract import UpstreamSource -from erminig.system.retry import retry_on_failure +from erminig.core.retry import retry_on_failure class SourceForgeRSS(UpstreamSource): diff --git a/erminig/controllers/govel/build.py b/erminig/controllers/govel/build.py index bab7913..f45b5c2 100644 --- a/erminig/controllers/govel/build.py +++ b/erminig/controllers/govel/build.py @@ -7,18 +7,30 @@ # Libre comme l’air, stable comme un menhir, et salé comme le beurre. # +import os import subprocess -from erminig.system.security import check_root, check_user_exists, run_as_user +from erminig.core.config import Config +from erminig.core.security import check_root, check_user_exists, run_as_user check_root check_user_exists("pak") @run_as_user("pak") -def run_build_function(pakva_path): +def run_build_function(pakva_path, name, version): """ Exécute la fonction build() du fichier Pakva donné. """ + build_root = Config.BUILD_DIR / f"{name}-{version}" + src_dir = build_root / "src" + tmp_dir = build_root / "tmp" + + os.makedirs(src_dir, exist_ok=True) + os.makedirs(tmp_dir, exist_ok=True) + + env = os.environ.copy() + env["SRC"] = str(src_dir) + env["TMP"] = str(tmp_dir) try: result = subprocess.run( f""" @@ -32,6 +44,7 @@ def run_build_function(pakva_path): stderr=subprocess.PIPE, executable="/bin/bash", text=True, + env=env, ) print(f"[BUILD] Succès : {pakva_path.name}") print(result.stdout) diff --git a/erminig/controllers/govel/pakva.py b/erminig/controllers/govel/pakva.py index 89050c3..ebcc869 100644 --- a/erminig/controllers/govel/pakva.py +++ b/erminig/controllers/govel/pakva.py @@ -8,8 +8,8 @@ # from pathlib import Path -from erminig.config import Config -from erminig.system.security import run_as_user +from erminig.core.config import Config +from erminig.core.security import run_as_user class Pakva: diff --git a/erminig/system/__init__.py b/erminig/core/__init__.py similarity index 100% rename from erminig/system/__init__.py rename to erminig/core/__init__.py diff --git a/erminig/config.py b/erminig/core/config.py similarity index 94% rename from erminig/config.py rename to erminig/core/config.py index c6e4e7a..0090cc4 100644 --- a/erminig/config.py +++ b/erminig/core/config.py @@ -19,6 +19,7 @@ class Config: PAKVA_DIR = LIB_DIR / "pakva" GOVEL_DIR = LIB_DIR / "govel" REPO_DIR = LIB_DIR / "keo" + BUILD_DIR = Path("/tmp/erminig/build") PAK_USER = "pak" GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN") diff --git a/erminig/core/package.py b/erminig/core/package.py new file mode 100644 index 0000000..e69de29 diff --git a/erminig/system/retry.py b/erminig/core/retry.py similarity index 97% rename from erminig/system/retry.py rename to erminig/core/retry.py index e3f2be8..cc0c02b 100644 --- a/erminig/system/retry.py +++ b/erminig/core/retry.py @@ -10,7 +10,7 @@ import time import requests -from erminig.config import Config +from erminig.core.config import Config def retry_on_failure(): diff --git a/erminig/system/security.py b/erminig/core/security.py similarity index 100% rename from erminig/system/security.py rename to erminig/core/security.py diff --git a/erminig/models/db.py b/erminig/models/db.py index 3fd0cc9..1de4382 100644 --- a/erminig/models/db.py +++ b/erminig/models/db.py @@ -10,7 +10,7 @@ import os import pwd import sqlite3 -from erminig.config import Config +from erminig.core.config import Config def init_db(): diff --git a/tests/test_config.py b/tests/test_config.py index d38183c..06638dd 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -7,7 +7,7 @@ # Libre comme l’air, stable comme un menhir, et salé comme le beurre. # -from erminig.config import Config +from erminig.core.config import Config def test_db_path(): diff --git a/tests/test_pakva.py b/tests/test_pakva.py index 09621b2..1f7ab25 100644 --- a/tests/test_pakva.py +++ b/tests/test_pakva.py @@ -13,7 +13,7 @@ from unittest.mock import patch # PATCH directement le décorateur run_as_user pour les tests -@patch("erminig.system.security.run_as_user", lambda x=None: (lambda f: f)) +@patch("erminig.core.security.run_as_user", lambda x=None: (lambda f: f)) def test_pakva_save_and_read(tmp_path): from erminig.controllers.govel.pakva import Pakva # Importer après patch !