Compare commits
31 Commits
master
...
heads/dev-
Author | SHA1 | Date | |
---|---|---|---|
e7ef7e9439 | |||
667be5fa78 | |||
22ace2a948 | |||
b926417227 | |||
9f05c31e0d | |||
8ba17169be | |||
f9123097ef | |||
1076e43650 | |||
eec148c71f | |||
d0e0d06bb4 | |||
f9344e49cc | |||
92b6c2580e | |||
1a846b63f1 | |||
3cd729bb71 | |||
bfd833cc5b | |||
69bc6f984e | |||
cb55b82918 | |||
49749ed795 | |||
![]() |
b7308bec80 | ||
![]() |
dfe2135720 | ||
![]() |
179c4cd504 | ||
![]() |
3abab9c63b | ||
![]() |
e27867dd43 | ||
![]() |
02c470e3e0 | ||
![]() |
17c4fccbdf | ||
![]() |
fa87597d15 | ||
![]() |
9b9f238ab0 | ||
![]() |
d00e281a2a | ||
![]() |
3d596f8d19 | ||
![]() |
cfa9829d45 | ||
![]() |
1c54725cad |
1
.ci/tag.env
Normal file
1
.ci/tag.env
Normal file
@ -0,0 +1 @@
|
|||||||
|
DOCKER_TAG=dev-test-2
|
44
.gitea/workflows/dev-test.yml
Normal file
44
.gitea/workflows/dev-test.yml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
name: dev-test
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- dev-test
|
||||||
|
branches:
|
||||||
|
- 'dev-test*'
|
||||||
|
paths:
|
||||||
|
- '.ci/tag.env'
|
||||||
|
jobs:
|
||||||
|
build-and-push:
|
||||||
|
runs-on: docker
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
submodules: recursive
|
||||||
|
- name: Setup Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
- name: Login to Gitea Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: git.4nkweb.com
|
||||||
|
username: ${{ secrets.REGISTRY_USERNAME }}
|
||||||
|
password: ${{ secrets.REGISTRY_PASSWORD }}
|
||||||
|
- name: Sync submodules branches
|
||||||
|
run: |
|
||||||
|
bash scripts/sync_submodules.sh
|
||||||
|
- name: Build and push images
|
||||||
|
env:
|
||||||
|
REGISTRY: git.4nkweb.com
|
||||||
|
run: |
|
||||||
|
COMMIT_MSG=$(git log -1 --pretty=%B)
|
||||||
|
FROM_COMMIT=$(printf "%s" "$COMMIT_MSG" | sed -n 's/.*ci:[[:space:]]*docker_tag=\([^ ][^\n]*\).*/\1/p' | head -n1)
|
||||||
|
if [ -n "$FROM_COMMIT" ]; then
|
||||||
|
DOCKER_TAG="$FROM_COMMIT"
|
||||||
|
elif [ -f .ci/tag.env ]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
. .ci/tag.env
|
||||||
|
else
|
||||||
|
DOCKER_TAG="${GITHUB_REF_NAME:-dev-test}"
|
||||||
|
fi
|
||||||
|
bash scripts/build_and_push.sh "$DOCKER_TAG"
|
42
.gitea/workflows/dev.yml
Normal file
42
.gitea/workflows/dev.yml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
name: dev
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- '*'
|
||||||
|
jobs:
|
||||||
|
build-and-push:
|
||||||
|
runs-on: docker
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
submodules: recursive
|
||||||
|
- name: Set up SSH agent
|
||||||
|
uses: webfactory/ssh-agent@v0.9.1
|
||||||
|
with:
|
||||||
|
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
|
- name: Trust Gitea host and force SSH for git.4nkweb.com
|
||||||
|
run: |
|
||||||
|
ssh-keyscan -H git.4nkweb.com >> ~/.ssh/known_hosts
|
||||||
|
git config --global url.ssh://git@git.4nkweb.com/.insteadOf https://git.4nkweb.com/
|
||||||
|
- name: Setup Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
with:
|
||||||
|
buildkitd-flags: --allow-insecure-entitlement security.insecure --allow-insecure-entitlement network.host
|
||||||
|
- name: Login to Gitea Registry
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: git.4nkweb.com
|
||||||
|
username: ${{ secrets.USER }}
|
||||||
|
password: ${{ secrets.TOKEN }}
|
||||||
|
- name: Init submodules (ensure up-to-date)
|
||||||
|
run: |
|
||||||
|
git submodule sync --recursive
|
||||||
|
git submodule update --init --recursive
|
||||||
|
- name: Build and push images
|
||||||
|
env:
|
||||||
|
REGISTRY: git.4nkweb.com
|
||||||
|
run: |
|
||||||
|
DOCKER_TAG=$(git rev-parse --abbrev-ref HEAD)
|
||||||
|
bash scripts/build_and_push.sh "$DOCKER_TAG"
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -10,3 +10,5 @@ sdk_relay/
|
|||||||
sdk_signer/
|
sdk_signer/
|
||||||
sdk_signer_client/
|
sdk_signer_client/
|
||||||
sdk_storage/
|
sdk_storage/
|
||||||
|
blindbit-oracle/
|
||||||
|
sp-client/
|
||||||
|
68
.gitmodules
vendored
Normal file
68
.gitmodules
vendored
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
[submodule "bitcoin-core"]
|
||||||
|
path = modules/bitcoin-core
|
||||||
|
url = https://github.com/bitcoin/bitcoin.git
|
||||||
|
branch = master
|
||||||
|
[submodule "blindbit-oracle"]
|
||||||
|
path = modules/blindbit-oracle
|
||||||
|
url = https://github.com/setavenger/blindbit-oracle
|
||||||
|
branch = master
|
||||||
|
[submodule "sp-client"]
|
||||||
|
path = modules/sp-client
|
||||||
|
url = https://github.com/Sosthene00/sp-client.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "sdk_common"]
|
||||||
|
path = modules/sdk_common
|
||||||
|
url = https://git.4nkweb.com/4nk/sdk_common.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "sdk_client"]
|
||||||
|
path = modules/sdk_client
|
||||||
|
url = https://git.4nkweb.com/4nk/sdk_client.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "sdk_relay"]
|
||||||
|
path = modules/sdk_relay
|
||||||
|
url = https://git.4nkweb.com/4nk/sdk_relay.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "sdk_storage"]
|
||||||
|
path = modules/sdk_storage
|
||||||
|
url = https://git.4nkweb.com/4nk/sdk_storage.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "sdk-signer-client"]
|
||||||
|
path = modules/sdk-signer-client
|
||||||
|
url = https://git.4nkweb.com/4nk/sdk-signer-client.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "ihm_client"]
|
||||||
|
path = modules/ihm_client
|
||||||
|
url = https://git.4nkweb.com/4nk/ihm_client.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "4NK_node"]
|
||||||
|
path = deploy/4NK_node
|
||||||
|
url = git@git.4nkweb.com:4nk/4NK_node.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "4NK_IA"]
|
||||||
|
path = modules/4NK_IA
|
||||||
|
url = git@git.4nkweb.com:4nk/4NK_IA.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "projects/id_verif/id_verif"]
|
||||||
|
path = projects/id_verif/id_verif
|
||||||
|
url = git@git.4nkweb.com:4nk/id_verif.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "tor"]
|
||||||
|
path = modules/tor
|
||||||
|
url = https://github.com/torproject/tor.git
|
||||||
|
branch = main
|
||||||
|
[submodule "4NK_template"]
|
||||||
|
path = deploy/4NK_template
|
||||||
|
url = https://git.4nkweb.com/4nk/4NK_template.git
|
||||||
|
branch = main
|
||||||
|
[submodule "4NK_wallet"]
|
||||||
|
path = projects/4NK_wallet/4NK_wallet
|
||||||
|
url = https://git.4nkweb.com/4nk/4NK_wallet.git
|
||||||
|
branch = main
|
||||||
|
[submodule "lecoffre-front"]
|
||||||
|
path = projects/lecoffre/lecoffre-front
|
||||||
|
url = https://git.4nkweb.com/4nk/lecoffre-front.git
|
||||||
|
branch = dev
|
||||||
|
[submodule "lecoffre-back-mini"]
|
||||||
|
path = projects/lecoffre/lecoffre-back-mini
|
||||||
|
url = https://git.4nkweb.com/4nk/lecoffre-back-mini.git
|
||||||
|
branch = dev
|
10
CHANGELOG.md
Normal file
10
CHANGELOG.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Changelog - 4NK_dev
|
||||||
|
|
||||||
|
## [v2025.09.1] - 2025-09-10
|
||||||
|
- Normalisation des chemins des submodules (modules/, deploy/, projects/)
|
||||||
|
- Ajout CI dev-test (workflow Gitea) + scripts build/push
|
||||||
|
- Scripts de synchronisation et réajout des submodules
|
||||||
|
|
||||||
|
## [v2025.08.1] - 2025-08-28
|
||||||
|
- Initialisation des modules et standardisation agents
|
||||||
|
- Repos.csv + update_repos.sh
|
116
README.md
Normal file
116
README.md
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
# 4NK Development Environment
|
||||||
|
|
||||||
|
Ce dépôt contient l'environnement de développement complet pour l'écosystème 4NK, incluant tous les modules SDK, clients et services.
|
||||||
|
|
||||||
|
## 🏗️ Architecture
|
||||||
|
|
||||||
|
### Projets SDK (Rust)
|
||||||
|
- **sdk_common** : Bibliothèque commune avec types et utilitaires partagés
|
||||||
|
- **sdk_client** : Client SDK principal avec support WASM (migration flate2 en cours)
|
||||||
|
- **sdk_storage** : Service de stockage distribué
|
||||||
|
- **sdk_signer** : Service de signature avec interface TypeScript
|
||||||
|
|
||||||
|
### Clients (Node.js/TypeScript)
|
||||||
|
- **sdk_signer_client** : Client TypeScript pour sdk_signer
|
||||||
|
- **ihm_client** : Interface utilisateur web
|
||||||
|
|
||||||
|
### Services
|
||||||
|
- **4NK_node** : Infrastructure Docker complète avec Bitcoin, Tor, et services 4NK
|
||||||
|
- **sdk_relay** : Service de relais pour la communication P2P
|
||||||
|
|
||||||
|
### Outils
|
||||||
|
- **4NK_template** : Template Docker pour les nouveaux projets
|
||||||
|
- **4NK_wallet** : Application wallet
|
||||||
|
|
||||||
|
## 🚀 Démarrage rapide
|
||||||
|
|
||||||
|
### Prérequis
|
||||||
|
- Docker et Docker Compose v2
|
||||||
|
- Rust (latest stable)
|
||||||
|
- Node.js 18+
|
||||||
|
- Git
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
```bash
|
||||||
|
# Cloner le dépôt
|
||||||
|
git clone <repository-url>
|
||||||
|
cd 4NK_dev
|
||||||
|
|
||||||
|
# Configurer l'environnement
|
||||||
|
./setup_dev_env.sh
|
||||||
|
|
||||||
|
# Démarrer l'infrastructure
|
||||||
|
cd 4NK_node
|
||||||
|
./scripts/manage_services.sh start
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📦 Gestion des dépendances WASM
|
||||||
|
|
||||||
|
### État actuel
|
||||||
|
- **sdk_common** : ✅ Migré vers `flate2` (remplace `zstd`)
|
||||||
|
- **sdk_client** : 🔄 Stub WASM temporaire avec `flate2` (en attente de migration complète)
|
||||||
|
- **sdk_signer** : ✅ Compatible avec le stub WASM
|
||||||
|
|
||||||
|
### Migration en cours
|
||||||
|
1. **Phase 1** : ✅ Migration `sdk_common` vers `flate2`
|
||||||
|
2. **Phase 2** : 🔄 Migration `sdk_client` vers `k256` et `flate2`
|
||||||
|
3. **Phase 3** : ⏳ Intégration complète WASM
|
||||||
|
4. **Phase 4** : ⏳ Déploiement
|
||||||
|
|
||||||
|
## 🛠️ Développement
|
||||||
|
|
||||||
|
### Compilation des projets
|
||||||
|
```bash
|
||||||
|
# Compiler tous les projets Rust
|
||||||
|
for project in sdk_common sdk_client sdk_storage; do
|
||||||
|
cd $project && cargo build --release && cd ..
|
||||||
|
done
|
||||||
|
|
||||||
|
# Compiler les projets Node.js
|
||||||
|
for project in sdk_signer sdk_signer_client ihm_client; do
|
||||||
|
cd $project && npm install && npm run build && cd ..
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
### Gestion des services
|
||||||
|
```bash
|
||||||
|
# Arrêter tous les services
|
||||||
|
cd 4NK_node && ./scripts/manage_services.sh stop
|
||||||
|
|
||||||
|
# Nettoyer l'environnement
|
||||||
|
./scripts/manage_services.sh clean
|
||||||
|
|
||||||
|
# Redémarrer les services
|
||||||
|
./scripts/manage_services.sh start
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📚 Documentation
|
||||||
|
|
||||||
|
- [Résultats de compilation](COMPILATION_RESULTS.md) - Statut détaillé de tous les projets
|
||||||
|
- [Modules Docker](docs/modules.md) - Documentation des modules Docker
|
||||||
|
- [Changelog](CHANGELOG.md) - Historique des versions
|
||||||
|
|
||||||
|
## 🔧 Scripts utiles
|
||||||
|
|
||||||
|
- `setup_dev_env.sh` : Configuration de l'environnement de développement
|
||||||
|
- `update_repos.sh` : Mise à jour des dépôts depuis repos.csv
|
||||||
|
- `4NK_node/scripts/manage_services.sh` : Gestion des services Docker
|
||||||
|
|
||||||
|
## 📋 Structure des branches
|
||||||
|
|
||||||
|
- **main** : Branche principale pour 4NK_dev et 4NK_node
|
||||||
|
- **docker-support** : Branche de développement pour les SDKs et clients
|
||||||
|
- **dev** : Branche de développement pour certaines fonctionnalités
|
||||||
|
|
||||||
|
## 🤝 Contribution
|
||||||
|
|
||||||
|
1. Créer une branche depuis `docker-support` ou `main` selon le projet
|
||||||
|
2. Développer et tester localement
|
||||||
|
3. Pousser les modifications sur la branche appropriée
|
||||||
|
4. Créer une pull request
|
||||||
|
|
||||||
|
## 📄 Licence
|
||||||
|
|
||||||
|
MIT License - voir les fichiers LICENSE individuels dans chaque projet.
|
||||||
|
|
||||||
|
|
11
code.code-workspace
Normal file
11
code.code-workspace
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": ".."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "../../.4nk_template"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {}
|
||||||
|
}
|
1
deploy4NK_node
Submodule
1
deploy4NK_node
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 2f663d20a28ff0dc42ef0ebf29cc405329fd23a8
|
1
deploy4NK_template
Submodule
1
deploy4NK_template
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 6ced5d29231b711bd0c8eab591091c810d0147d7
|
13
docs/architecture.md
Normal file
13
docs/architecture.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Architecture
|
||||||
|
|
||||||
|
## Arborescence
|
||||||
|
|
||||||
|
- `modules/`: dépôts modulaires (SDK, clients, outils)
|
||||||
|
- `deploy/`: dépôts de déploiement (ex: `deploy/4NK_node`)
|
||||||
|
- `projects/<projet>/<repo>`: dépôts par projets (ex: `projects/lecoffre/...`)
|
||||||
|
|
||||||
|
## Principes
|
||||||
|
|
||||||
|
- Submodules décrits dans `.gitmodules` avec `path`, `url`, `branch`.
|
||||||
|
- CI centrale dans `/.gitea/workflows/` pour build/push Docker.
|
||||||
|
- Images taggées par `DOCKER_TAG`.
|
15
docs/ci.md
Normal file
15
docs/ci.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Intégration Continue (CI)
|
||||||
|
|
||||||
|
## Workflow
|
||||||
|
|
||||||
|
- Fichier: `.gitea/workflows/dev.yml`
|
||||||
|
- Trigger unique: push sur n’importe quelle branche (`*`).
|
||||||
|
|
||||||
|
## Résolution de DOCKER_TAG
|
||||||
|
|
||||||
|
- Nom de la branche courante (la branche est le `DOCKER_TAG`).
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
- Script: `scripts/build_and_push.sh <DOCKER_TAG>` (obligatoire)
|
||||||
|
- Parcourt les submodules; build/push si `Dockerfile` présent.
|
13
docs/development.md
Normal file
13
docs/development.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Développement local
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
- Git + accès SSH à `git.4nkweb.com`
|
||||||
|
- Docker + Buildx
|
||||||
|
|
||||||
|
## Commandes utiles
|
||||||
|
|
||||||
|
- Synchroniser submodules: `git submodule sync --recursive`
|
||||||
|
- Initialiser/mettre à jour: `git submodule update --init --recursive`
|
||||||
|
- Déclencher CI via branche: `scripts/commit_tag_env.sh <tag>`
|
||||||
|
- Taguer tous les repos: `scripts/tag.sh <tag>`
|
6
docs/docker_registry.md
Normal file
6
docs/docker_registry.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Registry Docker
|
||||||
|
|
||||||
|
- Registry: `git.4nkweb.com`
|
||||||
|
- Namespace: `4nk`
|
||||||
|
- Tagging: basé sur `DOCKER_TAG` (obligatoire)
|
||||||
|
- Politique: ne jamais utiliser ni modifier un tag Docker `dev`.
|
15
docs/faq.md
Normal file
15
docs/faq.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# FAQ
|
||||||
|
|
||||||
|
## Est-ce que la CI s’applique aux submodules ?
|
||||||
|
|
||||||
|
- Oui pour le build/push Docker (via 4NK_dev), non pour déclencher leur CI interne.
|
||||||
|
|
||||||
|
## Comment choisir le tag d’image ?
|
||||||
|
|
||||||
|
- Message de commit: `ci: docker_tag=<valeur>`
|
||||||
|
- Ou `.ci/tag.env` via branche dédiée
|
||||||
|
- Ou nom de la branche
|
||||||
|
|
||||||
|
## Le tag Docker `dev` est-il utilisé ?
|
||||||
|
|
||||||
|
- Non. Il ne doit jamais être utilisé ni modifié.
|
24
docs/index.md
Normal file
24
docs/index.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# 4NK_dev — Documentation du projet
|
||||||
|
|
||||||
|
## Objectif du dépôt
|
||||||
|
|
||||||
|
- Dépôt agrégateur des projets 4NK via submodules Git.
|
||||||
|
- Normalise l’arborescence: `modules/`, `deploy/`, `projects/<projet>/<repo>`.
|
||||||
|
- Centralise CI de build/push d’images Docker pour chaque submodule éligible.
|
||||||
|
|
||||||
|
## Contenu de la documentation
|
||||||
|
|
||||||
|
- Architecture: voir `architecture.md`
|
||||||
|
- Submodules: voir `submodules.md`
|
||||||
|
- CI et publication Docker: voir `ci.md`
|
||||||
|
- Registry et tags: voir `docker_registry.md`
|
||||||
|
- Versioning et release: voir `release_versioning.md`
|
||||||
|
- Développement local: voir `development.md`
|
||||||
|
- Scripts utilitaires: voir `scripts.md`
|
||||||
|
- FAQ: voir `faq.md`
|
||||||
|
|
||||||
|
## Conventions
|
||||||
|
|
||||||
|
- Lint Markdown appliqué.
|
||||||
|
- Pas d’exemples dans la documentation.
|
||||||
|
- Les changements doivent toujours être décrits dans `CHANGELOG.md` et `VERSION`.
|
@ -1,37 +0,0 @@
|
|||||||
# Modules Docker (4NK_dev)
|
|
||||||
|
|
||||||
## 4NK_node
|
|
||||||
- S’appuie sur le `docker-compose.yml` existant dans `4NK_node/`.
|
|
||||||
- Scripts:
|
|
||||||
- `modules/4NK_node/build.sh` : construit les services avec `docker compose build`.
|
|
||||||
- `modules/4NK_node/up.sh` : démarre les services en détaché.
|
|
||||||
- `modules/4NK_node/down.sh` : arrête et nettoie les services.
|
|
||||||
- `modules/4NK_node/logs.sh` : affiche les logs (suivi).
|
|
||||||
- `modules/4NK_node/clean.sh` : down -v + prune d’images.
|
|
||||||
- Version/tag: lit `4NK_node/VERSION` si présent, sinon utilise `git describe` pour définir `COMPOSE_PROJECT_NAME`.
|
|
||||||
|
|
||||||
## 4NK_template
|
|
||||||
- Dockerfile multi-stage Node fourni dans `modules/4NK_template/Dockerfile`.
|
|
||||||
- Scripts:
|
|
||||||
- `modules/4NK_template/build.sh` : build de l’image à partir de `4NK_template/`.
|
|
||||||
- `modules/4NK_template/run.sh` : exécute l’image, mappe le port 3000.
|
|
||||||
- `modules/4NK_template/clean.sh` : supprime l’image construite et fait un prune.
|
|
||||||
- Version/tag: lit `4NK_template/VERSION` si présent, sinon `git describe`.
|
|
||||||
|
|
||||||
## Prérequis
|
|
||||||
- Docker et Docker Compose (plugin) installés.
|
|
||||||
|
|
||||||
## Utilisation (séquentielle)
|
|
||||||
1. Construire 4NK_node
|
|
||||||
- `bash modules/4NK_node/build.sh`
|
|
||||||
2. Démarrer 4NK_node
|
|
||||||
- `bash modules/4NK_node/up.sh`
|
|
||||||
3. Construire 4NK_template
|
|
||||||
- `bash modules/4NK_template/build.sh`
|
|
||||||
4. Lancer 4NK_template
|
|
||||||
- `bash modules/4NK_template/run.sh`
|
|
||||||
5. Logs 4NK_node
|
|
||||||
- `bash modules/4NK_node/logs.sh`
|
|
||||||
6. Arrêt 4NK_node
|
|
||||||
- `bash modules/4NK_node/down.sh`
|
|
||||||
|
|
7
docs/release_versioning.md
Normal file
7
docs/release_versioning.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Versioning & Release
|
||||||
|
|
||||||
|
- Fichier `VERSION` et `CHANGELOG.md` à jour à chaque modification significative.
|
||||||
|
- Tags Git:
|
||||||
|
- `dev`: pointe sur la tête de la branche `dev` (ne pas utiliser en Docker)
|
||||||
|
- Tags de CI: `dev-test*` selon besoin
|
||||||
|
- Politique Docker: images taggées par `DOCKER_TAG` uniquement.
|
16
docs/scripts.md
Normal file
16
docs/scripts.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# Scripts
|
||||||
|
|
||||||
|
## build_and_push.sh
|
||||||
|
|
||||||
|
- Usage: `scripts/build_and_push.sh <DOCKER_TAG>` (obligatoire)
|
||||||
|
- Construit et pousse chaque submodule avec `Dockerfile`.
|
||||||
|
|
||||||
|
## tag.sh
|
||||||
|
|
||||||
|
- Usage: `scripts/tag.sh [TAG_NAME]` (défaut `dev-test`)
|
||||||
|
- Pose le tag sur le dépôt racine et tous les submodules.
|
||||||
|
|
||||||
|
## commit_tag_env.sh
|
||||||
|
|
||||||
|
- Usage: `scripts/commit_tag_env.sh <TAG_NAME>`
|
||||||
|
- Crée/checkout une branche du même nom et écrit `.ci/tag.env`.
|
11
docs/submodules.md
Normal file
11
docs/submodules.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Submodules
|
||||||
|
|
||||||
|
## Déclaration
|
||||||
|
|
||||||
|
- Chaque sous-dépôt est déclaré dans `.gitmodules` avec `path`, `url`, `branch`.
|
||||||
|
|
||||||
|
## Bonnes pratiques
|
||||||
|
|
||||||
|
- Exécuter `git submodule sync --recursive` après modification de `.gitmodules`.
|
||||||
|
- Utiliser `git submodule update --init --recursive` pour initialiser.
|
||||||
|
- Éviter les chemins ambigus; respecter `modules/`, `deploy/`, `projects/<projet>/<repo>`.
|
1
modules/4NK_IA
Submodule
1
modules/4NK_IA
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 0c8c0f1c390f4109a192c32f1da3fba07a204d12
|
1
modules/bitcoin-core
Submodule
1
modules/bitcoin-core
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 2c8a478db4b84e03cc376e52f463b828ab9366f6
|
1
modules/blindbit-oracle
Submodule
1
modules/blindbit-oracle
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit a6a5e879ca0198931cbc6e5a1a8a76d9b653c532
|
1
modules/ihm_client
Submodule
1
modules/ihm_client
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit c8ac815e2bc1673468d476058137663b585600de
|
1
modules/sdk-signer-client
Submodule
1
modules/sdk-signer-client
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 1c9c625bb6641ee7e12c81244553082d5e5c17ff
|
1
modules/sdk_client
Submodule
1
modules/sdk_client
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit c09135c4eb785fa5ef242cd106bb1e628d5f68fa
|
1
modules/sdk_common
Submodule
1
modules/sdk_common
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit e205229e9219f6c3ad322a462903d2a740731aa3
|
1
modules/sdk_relay
Submodule
1
modules/sdk_relay
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit a056d44cbf61f75f7c71add30d94e30168de7018
|
1
modules/sdk_signer
Submodule
1
modules/sdk_signer
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 83b21cb815458a6b662eb7d4d76f4fac25ca9b29
|
1
modules/sdk_storage
Submodule
1
modules/sdk_storage
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 120a3dc8d0b8398a4c83e27e24eff14c76f66a8f
|
1
modules/sp-client
Submodule
1
modules/sp-client
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit b1710e7d16592e52a2a77618ceb4d56d5d51db8e
|
1
modules/tor
Submodule
1
modules/tor
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 27d4ba90f6dbf0c80d518a358b9600ae789509e4
|
1
proect/id_verif/id_verif
Submodule
1
proect/id_verif/id_verif
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 9e2d56383b1ddea92149f2e201cad630d5e57b30
|
1
project/4NK_wallet/4NK_wallet
Submodule
1
project/4NK_wallet/4NK_wallet
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 6e505b2f32467af5852928215d2dc18d26917824
|
1
project/lecoffre/lecoffre-back-mini
Submodule
1
project/lecoffre/lecoffre-back-mini
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit cfa9514be9a5e4deae9dccb2fe03780b8707ea43
|
1
project/lecoffre/lecoffre-front
Submodule
1
project/lecoffre/lecoffre-front
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit a78666b4a985e4e3e4deb19f4cbb10e4e4202c9b
|
11
repos.csv
11
repos.csv
@ -1,11 +0,0 @@
|
|||||||
name,url,type,target,directory
|
|
||||||
sdk_storage,https://git.4nkweb.com/4nk/sdk_storage.git,branch,docker-support,sdk_storage
|
|
||||||
sdk_signer_client,https://git.4nkweb.com/4nk/sdk_signer_client.git,create_from,master->docker-support,sdk_signer_client
|
|
||||||
sdk_signer,https://git.4nkweb.com/4nk/sdk_signer.git,branch,docker-support,sdk_signer
|
|
||||||
ihm_client,https://git.4nkweb.com/4nk/ihm_client.git,branch,docker-support,ihm_client
|
|
||||||
sdk_relay,https://git.4nkweb.com/4nk/sdk_relay.git,branch,docker-support,sdk_relay
|
|
||||||
sdk_common,https://git.4nkweb.com/4nk/sdk_common.git,branch,docker-support,sdk_common
|
|
||||||
4NK_wallet,https://git.4nkweb.com/4nk/4NK_wallet.git,create_from,main->docker-support,4NK_wallet
|
|
||||||
sdk_client,https://git.4nkweb.com/4nk/sdk_client.git,branch,docker-support,sdk_client
|
|
||||||
4NK_template,https://git.4nkweb.com/4nk/4NK_template.git,branch,main,4NK_template
|
|
||||||
4NK_node,git@git.4nkweb.com:4nk/4NK_node.git,branch,main,4NK_node
|
|
|
84
scripts/build_and_push.sh
Normal file
84
scripts/build_and_push.sh
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
REGISTRY=${REGISTRY:-git.4nkweb.com}
|
||||||
|
NAMESPACE=${NAMESPACE:-4nk}
|
||||||
|
# Support d'un paramètre positionnel prioritaire pour le tag
|
||||||
|
if [ "${1:-}" != "" ]; then
|
||||||
|
DOCKER_TAG="$1"
|
||||||
|
fi
|
||||||
|
if [ -z "${DOCKER_TAG:-}" ]; then
|
||||||
|
echo "[docker][erreur] DOCKER_TAG non défini (obligatoire). Fournissez-le en argument ou via l'environnement." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[docker] registry=${REGISTRY} namespace=${NAMESPACE} tag=${DOCKER_TAG}"
|
||||||
|
|
||||||
|
if ! command -v docker >/dev/null 2>&1; then
|
||||||
|
echo "[docker][erreur] docker introuvable" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f .gitmodules ]; then
|
||||||
|
echo "[docker][erreur] .gitmodules introuvable dans $(pwd)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prépare le répertoire de logs
|
||||||
|
LOG_DIR="log/ci/${DOCKER_TAG}"
|
||||||
|
mkdir -p "${LOG_DIR}"
|
||||||
|
SUMMARY_FILE="${LOG_DIR}/summary.txt"
|
||||||
|
: > "${SUMMARY_FILE}"
|
||||||
|
|
||||||
|
# Parcourt les submodules déclarés
|
||||||
|
mapfile -t submodules < <(git config -f .gitmodules --name-only --get-regexp 'submodule\..*\.path' | sed -E 's/\.path$//')
|
||||||
|
|
||||||
|
for name in "${submodules[@]}"; do
|
||||||
|
path=$(git config -f .gitmodules --get "${name}.path" || true)
|
||||||
|
url=$(git config -f .gitmodules --get "${name}.url" || true)
|
||||||
|
branch=$(git config -f .gitmodules --get "${name}.branch" || echo "master")
|
||||||
|
|
||||||
|
if [ -z "${path}" ] || [ -z "${url}" ]; then
|
||||||
|
echo "[docker][warn] entrée incomplète pour ${name}, ignoré" >&2
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
image_name=$(basename "${path}")
|
||||||
|
full_ref="${REGISTRY}/${NAMESPACE}/${image_name}:${DOCKER_TAG}"
|
||||||
|
|
||||||
|
if [ ! -d "${path}" ]; then
|
||||||
|
echo "[docker][warn] sous-dossier ${path} manquant, on saute" >&2
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "${path}/Dockerfile" ]; then
|
||||||
|
echo "[docker] aucun Dockerfile dans ${path}, ignoré"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_file="${LOG_DIR}/$(basename "${path}").log"
|
||||||
|
echo "[docker] build ${full_ref} depuis ${path} (branche ${branch}) | log: ${log_file}"
|
||||||
|
{
|
||||||
|
echo "== BUILD ${full_ref} =="
|
||||||
|
date -Is
|
||||||
|
docker buildx build \
|
||||||
|
--pull \
|
||||||
|
--ssh default \
|
||||||
|
--progress=plain \
|
||||||
|
--tag "${full_ref}" \
|
||||||
|
"${path}"
|
||||||
|
} 2>&1 | tee -a "${log_file}"
|
||||||
|
|
||||||
|
echo "[docker] push ${full_ref} | log: ${log_file}"
|
||||||
|
{
|
||||||
|
echo "== PUSH ${full_ref} =="
|
||||||
|
date -Is
|
||||||
|
docker push "${full_ref}"
|
||||||
|
} 2>&1 | tee -a "${log_file}"
|
||||||
|
|
||||||
|
echo "${full_ref} ${log_file}" >> "${SUMMARY_FILE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "[docker] terminé"
|
||||||
|
echo "[docker] récapitulatif: ${SUMMARY_FILE}"
|
39
scripts/commit_tag_env.sh
Normal file
39
scripts/commit_tag_env.sh
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# Usage: ./scripts/commit_tag_env.sh <TAG_NAME>
|
||||||
|
|
||||||
|
if [ $# -lt 1 ]; then
|
||||||
|
echo "[ci] usage: $0 <TAG_NAME>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
TAG_NAME="$1"
|
||||||
|
ROOT_DIR="/home/desk/code/4NK_dev"
|
||||||
|
TAG_BRANCH="$TAG_NAME"
|
||||||
|
|
||||||
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
|
echo "[ci] préparer la branche ${TAG_BRANCH} (source dev si besoin)"
|
||||||
|
git fetch origin --prune >/dev/null 2>&1 || true
|
||||||
|
|
||||||
|
if git show-ref --verify --quiet "refs/heads/${TAG_BRANCH}"; then
|
||||||
|
git checkout "${TAG_BRANCH}"
|
||||||
|
else
|
||||||
|
if git ls-remote --exit-code --heads origin "${TAG_BRANCH}" >/dev/null 2>&1; then
|
||||||
|
git checkout -b "${TAG_BRANCH}" "origin/${TAG_BRANCH}"
|
||||||
|
else
|
||||||
|
git checkout -B "${TAG_BRANCH}" "origin/dev"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[ci] écrire .ci/tag.env avec DOCKER_TAG=${TAG_NAME}"
|
||||||
|
mkdir -p .ci
|
||||||
|
printf "DOCKER_TAG=%s\n" "$TAG_NAME" > .ci/tag.env
|
||||||
|
|
||||||
|
git add .ci/tag.env
|
||||||
|
git commit -m "ci(tag): set DOCKER_TAG=${TAG_NAME} in .ci/tag.env"
|
||||||
|
git push origin "HEAD:refs/heads/${TAG_BRANCH}"
|
||||||
|
|
||||||
|
echo "[ci] terminé: branche ${TAG_BRANCH} mise à jour"
|
6
scripts/readd_submodules.sh
Normal file
6
scripts/readd_submodules.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
|
||||||
|
git submodule update --init --recursive
|
||||||
|
echo "[readd] git submodule update --init --recursive terminé"
|
48
scripts/sync_submodules.sh
Normal file
48
scripts/sync_submodules.sh
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
echo "[sync] lecture des submodules depuis .gitmodules"
|
||||||
|
|
||||||
|
if [ ! -f .gitmodules ]; then
|
||||||
|
echo "[sync][erreur] .gitmodules introuvable dans $(pwd)" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Récupère la liste des sous-modules (noms logiques)
|
||||||
|
mapfile -t submodules < <(git config -f .gitmodules --name-only --get-regexp 'submodule\..*\.path' | sed -E 's/\.path$//')
|
||||||
|
|
||||||
|
for name in "${submodules[@]}"; do
|
||||||
|
path=$(git config -f .gitmodules --get "${name}.path" || true)
|
||||||
|
url=$(git config -f .gitmodules --get "${name}.url" || true)
|
||||||
|
branch=$(git config -f .gitmodules --get "${name}.branch" || echo "master")
|
||||||
|
|
||||||
|
if [ -z "${path}" ] || [ -z "${url}" ]; then
|
||||||
|
echo "[sync][warn] entrée incomplète pour ${name}, ignoré" >&2
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[sync] => ${path} (${url}) branch=${branch}"
|
||||||
|
|
||||||
|
if [ ! -d "${path}/.git" ]; then
|
||||||
|
echo "[sync] init submodule ${path}"
|
||||||
|
git submodule update --init --recursive -- "${path}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[sync] fetch ${path}"
|
||||||
|
git -C "${path}" fetch --all --prune
|
||||||
|
|
||||||
|
echo "[sync] checkout ${branch} dans ${path}"
|
||||||
|
if ! git -C "${path}" checkout "${branch}" 2>/dev/null; then
|
||||||
|
if git -C "${path}" rev-parse --verify "origin/${branch}" >/dev/null 2>&1; then
|
||||||
|
git -C "${path}" checkout -b "${branch}" "origin/${branch}"
|
||||||
|
else
|
||||||
|
echo "[sync][warn] branche ${branch} introuvable pour ${path}, on reste sur la branche courante" >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "[sync] pull ${path}"
|
||||||
|
git -C "${path}" pull --ff-only || true
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "[sync] terminé"
|
91
scripts/tag.sh
Normal file
91
scripts/tag.sh
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
IFS=$'\n\t'
|
||||||
|
|
||||||
|
# Usage: ./tag.sh [TAG_NAME]
|
||||||
|
# Par défaut, TAG_NAME="dev-test"
|
||||||
|
|
||||||
|
TAG_NAME="${1:-dev-test}"
|
||||||
|
ROOT_DIR="/home/desk/code/4NK_dev"
|
||||||
|
|
||||||
|
print_info() { echo "[tag] $*"; }
|
||||||
|
print_warn() { echo "[tag][warn] $*"; }
|
||||||
|
|
||||||
|
delete_tag_if_exists() {
|
||||||
|
local tag="$1"
|
||||||
|
if git show-ref --tags --quiet --verify "refs/tags/${tag}"; then
|
||||||
|
git tag -d "${tag}" >/dev/null || true
|
||||||
|
git push origin ":refs/tags/${tag}" >/dev/null || true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
ensure_branch_checked_out() {
|
||||||
|
local branch="$1"
|
||||||
|
if git rev-parse --verify "origin/${branch}" >/dev/null 2>&1; then
|
||||||
|
git checkout "${branch}" >/dev/null 2>&1 || git checkout -b "${branch}" "origin/${branch}" >/dev/null 2>&1 || true
|
||||||
|
git pull --ff-only >/dev/null 2>&1 || true
|
||||||
|
else
|
||||||
|
print_info "branche ${branch} introuvable, utilisation de la branche courante"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
tag_current_repo() {
|
||||||
|
local tag="$1"
|
||||||
|
local ref_sha
|
||||||
|
ref_sha=$(git rev-parse --verify HEAD)
|
||||||
|
delete_tag_if_exists "${tag}"
|
||||||
|
git tag -a "${tag}" -m "CI ${tag} trigger" "${ref_sha}"
|
||||||
|
git push origin "refs/tags/${tag}"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_submodule_names() {
|
||||||
|
git config -f .gitmodules --name-only --get-regexp 'submodule\..*\.path' | sed -E 's/\.path$//'
|
||||||
|
}
|
||||||
|
|
||||||
|
tag_root_repo() {
|
||||||
|
cd "${ROOT_DIR}"
|
||||||
|
print_info "repository racine: $(basename "${ROOT_DIR}") -> ${TAG_NAME}"
|
||||||
|
local dev_head
|
||||||
|
dev_head=$(git rev-parse --verify refs/heads/dev)
|
||||||
|
delete_tag_if_exists "${TAG_NAME}"
|
||||||
|
git tag -a "${TAG_NAME}" -m "CI ${TAG_NAME} trigger" "${dev_head}"
|
||||||
|
git push origin "refs/tags/${TAG_NAME}"
|
||||||
|
}
|
||||||
|
|
||||||
|
tag_submodules() {
|
||||||
|
print_info "lecture des submodules depuis .gitmodules"
|
||||||
|
local names
|
||||||
|
mapfile -t names < <(get_submodule_names)
|
||||||
|
for name in "${names[@]}"; do
|
||||||
|
local sm_path sm_url sm_branch
|
||||||
|
sm_path=$(git config -f .gitmodules --get "${name}.path" || true)
|
||||||
|
sm_url=$(git config -f .gitmodules --get "${name}.url" || true)
|
||||||
|
sm_branch=$(git config -f .gitmodules --get "${name}.branch" || echo dev)
|
||||||
|
|
||||||
|
if [ -z "${sm_path}" ] || [ -z "${sm_url}" ]; then
|
||||||
|
print_warn "entrée incomplète: ${name}, ignorée"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [ ! -d "${sm_path}" ]; then
|
||||||
|
print_warn "dossier manquant: ${sm_path}, on saute"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_info "${sm_path} (${sm_url}) -> ${TAG_NAME} sur branche ${sm_branch}"
|
||||||
|
(
|
||||||
|
cd "${sm_path}"
|
||||||
|
git fetch --all --prune >/dev/null 2>&1 || true
|
||||||
|
ensure_branch_checked_out "${sm_branch}"
|
||||||
|
tag_current_repo "${TAG_NAME}"
|
||||||
|
) || print_warn "échec sur ${sm_path}, on continue"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
cd "${ROOT_DIR}"
|
||||||
|
tag_root_repo
|
||||||
|
tag_submodules
|
||||||
|
print_info "terminé: ${TAG_NAME} posé sur le repo racine et submodules accessibles"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
26
tests/ci_dev_test.md
Normal file
26
tests/ci_dev_test.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Plan de tests CI "dev-test"
|
||||||
|
|
||||||
|
## Objectifs
|
||||||
|
|
||||||
|
- Vérifier que le tag `dev-test` déclenche le workflow.
|
||||||
|
- Vérifier la synchronisation des submodules sur leurs branches.
|
||||||
|
- Vérifier la construction et le push des images Docker pour les submodules avec `Dockerfile`.
|
||||||
|
|
||||||
|
## Pré-requis
|
||||||
|
|
||||||
|
- Secrets `REGISTRY_USERNAME` et `REGISTRY_PASSWORD` configurés.
|
||||||
|
- Accès au registry `git.4nkweb.com`.
|
||||||
|
|
||||||
|
## Scénarios
|
||||||
|
|
||||||
|
1. Tag `dev-test` sur le dépôt parent
|
||||||
|
- Attendu: workflow lancé, logs de sync visibles.
|
||||||
|
2. Submodule avec `Dockerfile`
|
||||||
|
- Attendu: image buildée et poussée avec tag `dev-test`.
|
||||||
|
3. Submodule sans `Dockerfile`
|
||||||
|
- Attendu: ignoré proprement.
|
||||||
|
|
||||||
|
## Vérifications
|
||||||
|
|
||||||
|
- Présence des images `git.4nkweb.com/4nk/<submodule>:dev-test` dans le registry.
|
||||||
|
- Logs d’exécution sans erreurs fatales.
|
@ -1,38 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
CSV_FILE="repos.csv"
|
|
||||||
IFS=,
|
|
||||||
while read -r name url type target directory; do
|
|
||||||
if [ "$name" = "name" ]; then continue; fi
|
|
||||||
echo "\n[Repo] $name -> $directory"
|
|
||||||
if [ ! -d "$directory" ]; then
|
|
||||||
echo "[Clone] $url"
|
|
||||||
git clone --progress "$url" "$directory" || true
|
|
||||||
fi
|
|
||||||
echo "[Fetch] $directory"
|
|
||||||
git -C "$directory" fetch --all --prune --tags --progress || true
|
|
||||||
case "$type" in
|
|
||||||
branch)
|
|
||||||
echo "[Checkout] $target"
|
|
||||||
if git -C "$directory" show-ref --verify --quiet "refs/remotes/origin/$target"; then
|
|
||||||
git -C "$directory" checkout "$target" 2>/dev/null || git -C "$directory" checkout -B "$target" "origin/$target"
|
|
||||||
git -C "$directory" reset --hard "origin/$target"
|
|
||||||
else
|
|
||||||
echo "[Warn] Branche $target introuvable pour $name"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
create_from)
|
|
||||||
base="${target%%->*}"
|
|
||||||
newb="${target##*->}"
|
|
||||||
echo "[Create] $newb depuis $base"
|
|
||||||
if git -C "$directory" show-ref --verify --quiet "refs/remotes/origin/$base"; then
|
|
||||||
git -C "$directory" checkout -B "$newb" "origin/$base"
|
|
||||||
else
|
|
||||||
echo "[Error] Base $base introuvable pour $name"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "[Warn] Type inconnu: $type"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done < "$CSV_FILE"
|
|
Loading…
x
Reference in New Issue
Block a user