Les choses sérieuses commencent

This commit is contained in:
L0m1g 2025-04-29 17:15:19 +02:00
parent 7a9fe18463
commit c63f62721b
41 changed files with 1270 additions and 0 deletions

55
doc/architecture.md Normal file
View file

@ -0,0 +1,55 @@
# Architecture Erminig
---
## Vue Globale
Erminig est une forge artisanale en 3 piliers :
- **Evezh** : Veille logicielle, détection de nouvelles versions.
- **Govel** : Construction et maintenance des paquets à partir des fichiers Pakva.
- **Keo** : Gestion du dépôt de paquets et mise à disposition publique.
Chaque module est indépendant, mais communique par base de données et sockets.
---
## Détails
| Module | Rôle | Langage | Communication |
|:-------|:-----|:--------|:---------------|
| Evezh | Check des versions upstream | Python 3.13 | SQLite |
| Govel | Build + révision + création Pakva | Python 3.13 | SQLite, fichiers système |
| Keo | Mirroir de paquets `.bzh` | À venir | SQLite, HTTP (futur) |
---
## Dossiers critiques
| Dossier | Contenu |
|:--------|:--------|
| `/var/lib/erminig` | Données persistantes (db, Pakva, builds, etc.) |
| `/var/cache/erminig` | Temporaire (compilations, archives, logs) |
| `/opt/erminig` | Sources du projet installées |
---
## Principes
- **KISS** : Keep it simple, stupid.
- **Séparation stricte** entre utilisateur système (`pak`) et root.
- **Aucune dépendance inutile.**
- **Logs clairs** pour tout ce qui est critique.
- **Architecture modulaire.**
---
# Motto
> **Un système simple.
> Une forge robuste.
> Un esprit libre.**
---
# FIN

6
doc/bugs.md Normal file
View file

@ -0,0 +1,6 @@
[gcc] Erreur HTTP : HTTPSConnectionPool(host='ftp.mpi-inf.mpg.de', port=443): Max retries exceeded with url: /mirrors/gnu/mirror/gcc.gnu.org/pub/gcc/releases/ (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fc45e207ed0>: Failed to resolve 'ftp.mpi-inf.mpg.de' ([Errno -5] No address associated with hostname)"))
[gcc] Aucune version détectée.
-----

69
doc/roadmap.md Normal file
View file

@ -0,0 +1,69 @@
# Roadmap Erminig
---
## 1. Stabilisation du Cœur
- Finaliser `evezh` (veille versions)
- Finaliser `govel` (build)
- Finaliser `pakva` (formules)
- Finaliser `keo` (mirroir)
- Freeze code sauf bugfixes.
---
## 2. Documentation Interne
- `/doc/architecture.md` : Décrire les modules.
- `/doc/usage.md` : Exemples de commandes.
- `/doc/rules.md` : Bonnes pratiques de dev (ex : jamais builder en root).
---
## 3. Automatisation
- Script `evezh sync && govel build --all`
- Script `init-db.sh` pour première installation.
---
## 4. Versionning
- Commencer à versionner dès premier gel :
- `0.1.0` : Forge fonctionnelle (check + build ok)
- `0.2.0` : Ajout du mirroir Keo
- `0.3.0` : Ajout communication sockets entre modules
- `1.0.0` : Première release publique
---
## 5. Tests Simples
- Tests manuels à chaque changement critique.
- (Optionnel plus tard : sanity-checks automatiques sur `.Pakva`, db, build).
---
## 6. Releases
- Utiliser git tags :
- `v0.1.0`, `v0.2.0`, `v0.3.0`, `v1.0.0`
- Archiver les builds, backups réguliers de `/var/lib/erminig` et `/var/cache/erminig`.
---
## 7. Écosystème Ouvert (Optionnel)
- Documenter comment contribuer un `.Pakva`
- (Peut devenir communautaire si volonté future.)
---
# Mantra
> **Simple. Robuste. Artisan. Libre.**
---
# Forge On.

78
doc/specs-pakva.md Normal file
View file

@ -0,0 +1,78 @@
# Specifications du format PAKVA v0.1
Le fichier **PAKVA** est un fichier qui définit les spécifications d'un logiciel. Il est utilisé par **evezh** pour
chercher les dernières versions disponibles pour un logiciel et par **govel** pour construire les paquets.
La syntaxe des fichiers **PAKVA** est prévue pour etre lisible en python et en bash.
Ce document décrit les différentes clés, fonctions et macros disponibles.
## Structure générale
Les lignes commençant par # sont des commentaires
la syntaxe est de type clé=valeur (avec ou sans guillemets)
les tableaux sont en style bash clé=(val1 val2 val3)
les fonction sont en style bash fonction(){}
### Clés disponibles
**PAKVA** dispose de nombreuses clé disponibles :
| Clé | Type | Obligatoire | Description |
| :---| :--- | :---------- | :---------- |
| `name` | string | oui | Nom du paquet principal |
| `basename` | string | non | Nom utilisé pour les archives/source/builddir (défaut = $name) |
| `description` | string | non | Description du paquet |
| `packager` | string | non | Packager du paquet |
| `version` | string | oui | Version du logiciel |
| `revision` | int | non | Révision locale |
| `url` | string | non | Page d'accueil du logiciel |
| `source` | array | oui | Sources du paquets |
| `license` | string | non | Licence du logiciel |
| `depends` | array | oui | Dépendances d'utilisation |
| `make_depends` | array | non | Dépendances de construction |
| `check_depends` | array | non | Dépendances de test |
### Fonctions disponibles
| Fonction | Obligatoire | Instructions |
| :------- | :---------- | :---------- |
| `build()` | oui | Compilation |
| `check()` | non | Tests |
| `pak()` | oui | Packaging |
| `pre_install()` | non | Avant installation |
| `post_install()` | non | Après installation |
| `pre_upgrade()` | non | Avant mise à jour |
| `post_upgrade()` | non | Après mise à jour |
| `pre_remove()` | non | Avant suppression |
| `post_remove()` | non | Après suppression |
### Multi Packaging
On peut packager plus d'un paquet à partir d'un seul fichier **PAKVA**, et c'est assez simple.
la syntaxe devient :
`pak:<name>()`
`pre_install:<name>()`
`post_install:<name>()`
`pre_upgrade:<name>()`
`post_upgrade:<name>()`
`pre_remove:<name>()`
`post_remove:<name>()`
### Macros disponibles
| Macro | Description |
| :---- | :---------- |
| `$PAK` | Dossier global d'installation |
| `$SRC` | Dossier d'extraction des sources |
| `$TMP` | Dossier temporaire pour chaque `pak:<name>` |
| `name, $version, $revision, $basename` | Metadonnées du paquet principal |
| `pakname` | nom du paquet courant dans un `pak:<name>` |