Add: Start govel build packages
This commit is contained in:
parent
865ec5def5
commit
c26fcdc1db
18 changed files with 37 additions and 26 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
FROM fedora:42
|
FROM fedora:42
|
||||||
|
|
||||||
RUN dnf -y update && \
|
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
|
dnf clean all
|
||||||
|
|
||||||
RUN useradd -r -s /sbin/nologin -d /var/lib/erminig pak && \
|
RUN useradd -r -s /sbin/nologin -d /var/lib/erminig pak && \
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,8 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
import argparse
|
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.pakva import Pakva
|
||||||
from erminig.controllers.govel.build import run_build_function
|
from erminig.controllers.govel.build import run_build_function
|
||||||
|
|
||||||
|
|
@ -24,17 +25,15 @@ def main():
|
||||||
|
|
||||||
if args.command == "build":
|
if args.command == "build":
|
||||||
if args.name:
|
if args.name:
|
||||||
pakva = Pakva(name=args.name, version=None, archive=None)
|
pakva = Pakva.load_from_name(args.name)
|
||||||
pakva.read()
|
|
||||||
else:
|
else:
|
||||||
if not Config.PAKVA_DIR.exists():
|
pakva_path = Path.cwd() / "Pakva"
|
||||||
print("[GOVEL] Erreur : Aucun Pakva trouvé ici.")
|
if not pakva_path.exists():
|
||||||
|
print("[GOVEL] Erreur : Aucun Pakva trouvé dans le dossier courant.")
|
||||||
return
|
return
|
||||||
pakva = Pakva(name="local", version=None, archive=None)
|
pakva = Pakva.read(pakva_path)
|
||||||
pakva.path = Config.PAKVA_DIR
|
|
||||||
pakva.read()
|
|
||||||
|
|
||||||
build_success = run_build_function(pakva.path)
|
build_success = run_build_function(pakva.path, pakva.name, pakva.version)
|
||||||
|
|
||||||
if build_success:
|
if build_success:
|
||||||
print(f"[GOVEL] Build réussi pour {pakva.name}")
|
print(f"[GOVEL] Build réussi pour {pakva.name}")
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,8 @@ import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from erminig.system.security import check_root, check_user_exists
|
from erminig.core.security import check_root, check_user_exists
|
||||||
from erminig.config import Config # Voilà la différence clé !
|
from erminig.core.config import Config
|
||||||
|
|
||||||
PAK_USER = Config.PAK_USER
|
PAK_USER = Config.PAK_USER
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
# Libre comme l’air, stable comme un menhir, et salé comme le beurre.
|
# Libre comme l’air, stable comme un menhir, et salé comme le beurre.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,6 @@ import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
from erminig.controllers.evezh.parsers.github import GitHubSource
|
from erminig.controllers.evezh.parsers.github import GitHubSource
|
||||||
from erminig.controllers.evezh.parsers.http import HttpSource
|
from erminig.controllers.evezh.parsers.http import HttpSource
|
||||||
from erminig.controllers.evezh.parsers.sourceforge import SourceForgeRSS
|
from erminig.controllers.evezh.parsers.sourceforge import SourceForgeRSS
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import requests
|
import requests
|
||||||
from erminig.config import Config
|
from erminig.core.config import Config
|
||||||
from erminig.controllers.evezh.abstract import UpstreamSource
|
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):
|
class GitHubSource(UpstreamSource):
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
import re
|
import re
|
||||||
import requests
|
import requests
|
||||||
from erminig.controllers.evezh.abstract import UpstreamSource
|
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):
|
class HttpSource(UpstreamSource):
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import re
|
||||||
import requests
|
import requests
|
||||||
import xml.etree.ElementTree as ET
|
import xml.etree.ElementTree as ET
|
||||||
from erminig.controllers.evezh.abstract import UpstreamSource
|
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):
|
class SourceForgeRSS(UpstreamSource):
|
||||||
|
|
|
||||||
|
|
@ -7,18 +7,30 @@
|
||||||
# Libre comme l’air, stable comme un menhir, et salé comme le beurre.
|
# Libre comme l’air, stable comme un menhir, et salé comme le beurre.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import os
|
||||||
import subprocess
|
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_root
|
||||||
check_user_exists("pak")
|
check_user_exists("pak")
|
||||||
|
|
||||||
|
|
||||||
@run_as_user("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é.
|
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:
|
try:
|
||||||
result = subprocess.run(
|
result = subprocess.run(
|
||||||
f"""
|
f"""
|
||||||
|
|
@ -32,6 +44,7 @@ def run_build_function(pakva_path):
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
executable="/bin/bash",
|
executable="/bin/bash",
|
||||||
text=True,
|
text=True,
|
||||||
|
env=env,
|
||||||
)
|
)
|
||||||
print(f"[BUILD] Succès : {pakva_path.name}")
|
print(f"[BUILD] Succès : {pakva_path.name}")
|
||||||
print(result.stdout)
|
print(result.stdout)
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from erminig.config import Config
|
from erminig.core.config import Config
|
||||||
from erminig.system.security import run_as_user
|
from erminig.core.security import run_as_user
|
||||||
|
|
||||||
|
|
||||||
class Pakva:
|
class Pakva:
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,7 @@ class Config:
|
||||||
PAKVA_DIR = LIB_DIR / "pakva"
|
PAKVA_DIR = LIB_DIR / "pakva"
|
||||||
GOVEL_DIR = LIB_DIR / "govel"
|
GOVEL_DIR = LIB_DIR / "govel"
|
||||||
REPO_DIR = LIB_DIR / "keo"
|
REPO_DIR = LIB_DIR / "keo"
|
||||||
|
BUILD_DIR = Path("/tmp/erminig/build")
|
||||||
PAK_USER = "pak"
|
PAK_USER = "pak"
|
||||||
|
|
||||||
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN")
|
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN")
|
||||||
0
erminig/core/package.py
Normal file
0
erminig/core/package.py
Normal file
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import requests
|
import requests
|
||||||
from erminig.config import Config
|
from erminig.core.config import Config
|
||||||
|
|
||||||
|
|
||||||
def retry_on_failure():
|
def retry_on_failure():
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
import os
|
import os
|
||||||
import pwd
|
import pwd
|
||||||
import sqlite3
|
import sqlite3
|
||||||
from erminig.config import Config
|
from erminig.core.config import Config
|
||||||
|
|
||||||
|
|
||||||
def init_db():
|
def init_db():
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
# Libre comme l’air, stable comme un menhir, et salé comme le beurre.
|
# 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():
|
def test_db_path():
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ from unittest.mock import patch
|
||||||
|
|
||||||
|
|
||||||
# PATCH directement le décorateur run_as_user pour les tests
|
# 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):
|
def test_pakva_save_and_read(tmp_path):
|
||||||
from erminig.controllers.govel.pakva import Pakva # Importer après patch !
|
from erminig.controllers.govel.pakva import Pakva # Importer après patch !
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue