[skip ci] chore: finalize local changes
This commit is contained in:
parent
a9f4ce0485
commit
5bf8bd280c
@ -1,3 +1,8 @@
|
||||
# Règles SSH & Automatisation — Flux local
|
||||
|
||||
- Interdiction de secrets en clair; secrets via `~/.4nk_template/.env` ou variables CI
|
||||
- Scripts SSH conservés exécutables, journaux non sensibles
|
||||
- Le flux local prime: agents exécutés avant merge/push/release; CI neutralisable via `CI_SKIP=true` et `[skip ci]`
|
||||
---
|
||||
alwaysApply: true
|
||||
---
|
||||
|
@ -25,6 +25,9 @@ Tous les projets issus de 4NK_project_template. Contrôle de l’alignement sur
|
||||
- Erreur bloquante si un path requis n’existe pas après sync.
|
||||
- Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles.
|
||||
|
||||
[note]
|
||||
Les validations CI peuvent être remplacées par l’exécution locale des agents (AUTO_FIX/SCOPE) lorsque `CI_SKIP=true` est activé. Conserver une PR de synthèse et la traçabilité dans le changelog.
|
||||
|
||||
[artefacts concernés]
|
||||
- .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md.
|
||||
# Synchronisation de template (4NK)
|
||||
@ -49,5 +52,8 @@ Tous les projets issus de 4NK_project_template. Contrôle de l’alignement sur
|
||||
- Erreur bloquante si un path requis n’existe pas après sync.
|
||||
- Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles.
|
||||
|
||||
[note]
|
||||
Les validations CI peuvent être remplacées par l’exécution locale des agents (AUTO_FIX/SCOPE) lorsque `CI_SKIP=true` est activé. Conserver une PR de synthèse et la traçabilité dans le changelog.
|
||||
|
||||
[artefacts concernés]
|
||||
- .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md.
|
||||
|
11
AGENTS.md
11
AGENTS.md
@ -399,3 +399,14 @@ Ce `AGENTS.md` mis à jour introduit l’**Agent Synchronisation de template** e
|
||||
|
||||
La matrice de coordination formalise les validations obligatoires pour chaque type de changement, garantissant cohérence structurelle, qualité documentaire, sécurité, traçabilité.
|
||||
Ainsi que la stabilité à long terme sur tous les projets issus de `4NK_project_template`.
|
||||
|
||||
---
|
||||
|
||||
## Exécution locale et neutralisation de la CI
|
||||
|
||||
- Les contrôles CI peuvent être remplacés par l’exécution locale des agents: `scripts/agents/run.sh` avec `AUTO_FIX=1`, `SCOPE=changed|all`.
|
||||
- La CI peut être neutralisée par défaut via `CI_SKIP=true` dans le workflow; ponctuellement via des commits `[skip ci]`.
|
||||
- Des hooks sont fournis pour automatiser le flux local:
|
||||
- `scripts/local/precommit.sh` et `scripts/local/prepush.sh`
|
||||
- installation: `bash scripts/local/install_hooks.sh`
|
||||
- Un conteneur unifié (runner+agents) permet une exécution reproductible: `docker-compose.ci.yml`.
|
||||
|
@ -93,7 +93,24 @@ AUTO_FIX=1 SCOPE=all scripts/agents/run.sh
|
||||
bash scripts/security/audit.sh || true
|
||||
bash scripts/release/guard.sh || true
|
||||
```
|
||||
- Agents utiles en premier passage: `documentation`, `quality-technique`, `open-source`, `securite`, `deploiement`
|
||||
|
||||
Ou installez-les automatiquement:
|
||||
|
||||
```bash
|
||||
bash scripts/local/install_hooks.sh
|
||||
```
|
||||
|
||||
- Agents utiles en premier passage: `documentation`, `quality-technique`, `open-source`, `securite`, `deploiement`
|
||||
|
||||
### Script de merge local (main/develop)
|
||||
|
||||
```bash
|
||||
# Merge de la branche courante vers main (valide localement avant)
|
||||
bash scripts/local/merge_branch.sh main
|
||||
|
||||
# Merge vers develop
|
||||
bash scripts/local/merge_branch.sh develop
|
||||
```
|
||||
|
||||
## 5. Qualité et CI
|
||||
|
||||
|
18
scripts/local/install_hooks.sh
Normal file
18
scripts/local/install_hooks.sh
Normal file
@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"/..
|
||||
HOOKS_DIR="$REPO_ROOT/.git/hooks"
|
||||
|
||||
mkdir -p "$HOOKS_DIR"
|
||||
install_hook() {
|
||||
local name="$1" src="$2"
|
||||
cp -f "$src" "$HOOKS_DIR/$name"
|
||||
chmod +x "$HOOKS_DIR/$name"
|
||||
echo "Installed hook: $name"
|
||||
}
|
||||
|
||||
install_hook pre-commit "$REPO_ROOT/scripts/local/precommit.sh"
|
||||
install_hook pre-push "$REPO_ROOT/scripts/local/prepush.sh"
|
||||
|
||||
echo "Hooks installés."
|
25
scripts/local/merge_branch.sh
Normal file
25
scripts/local/merge_branch.sh
Normal file
@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
TARGET_BRANCH="${1:-main}"
|
||||
SOURCE_BRANCH="${2:-}"
|
||||
|
||||
if [[ -z "$SOURCE_BRANCH" ]]; then
|
||||
SOURCE_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
|
||||
fi
|
||||
|
||||
if [[ "$SOURCE_BRANCH" == "$TARGET_BRANCH" ]]; then
|
||||
echo "Déjà sur $TARGET_BRANCH"; exit 0
|
||||
fi
|
||||
|
||||
# Valider localement avant merge
|
||||
AUTO_FIX="${AUTO_FIX:-1}" SCOPE="${SCOPE:-all}" scripts/agents/run.sh || true
|
||||
if [ -f scripts/security/audit.sh ]; then bash scripts/security/audit.sh || true; fi
|
||||
|
||||
git fetch origin --prune
|
||||
git checkout "$TARGET_BRANCH"
|
||||
git pull --ff-only origin "$TARGET_BRANCH" || true
|
||||
git merge --no-ff "$SOURCE_BRANCH" -m "[skip ci] merge: $SOURCE_BRANCH -> $TARGET_BRANCH"
|
||||
git push origin "$TARGET_BRANCH"
|
||||
|
||||
echo "Merge effectué: $SOURCE_BRANCH → $TARGET_BRANCH"
|
15
scripts/local/precommit.sh
Normal file
15
scripts/local/precommit.sh
Normal file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT_DIR/.."
|
||||
|
||||
# Lint Markdown (best effort)
|
||||
if command -v npx >/dev/null 2>&1; then
|
||||
npx -y markdownlint-cli "**/*.md" --ignore "archive/**" || true
|
||||
fi
|
||||
|
||||
# Agents rapides sur fichiers modifiés
|
||||
AUTO_FIX="${AUTO_FIX:-1}" SCOPE="${SCOPE:-changed}" scripts/agents/run.sh
|
||||
|
||||
echo "[pre-commit] OK"
|
20
scripts/local/prepush.sh
Normal file
20
scripts/local/prepush.sh
Normal file
@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT_DIR/.."
|
||||
|
||||
# Agents complets
|
||||
AUTO_FIX="${AUTO_FIX:-1}" SCOPE="${SCOPE:-all}" scripts/agents/run.sh
|
||||
|
||||
# Audit sécurité (best effort)
|
||||
if [ -f scripts/security/audit.sh ]; then
|
||||
bash scripts/security/audit.sh || true
|
||||
fi
|
||||
|
||||
# Release guard (dry-run logique)
|
||||
if [ -f scripts/release/guard.sh ]; then
|
||||
bash scripts/release/guard.sh || true
|
||||
fi
|
||||
|
||||
echo "[pre-push] OK"
|
20
scripts/local/release_local.sh
Normal file
20
scripts/local/release_local.sh
Normal file
@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
VERSION="${1:-}"
|
||||
if [[ -z "$VERSION" ]]; then
|
||||
echo "Usage: $0 vYYYY.MM.P" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT_DIR/.."
|
||||
|
||||
echo "$VERSION" > TEMPLATE_VERSION
|
||||
git add TEMPLATE_VERSION CHANGELOG.md 2>/dev/null || true
|
||||
git commit -m "[skip ci] chore(release): $VERSION" || true
|
||||
git tag -a "$VERSION" -m "release: $VERSION (latest)"
|
||||
git push || true
|
||||
git push origin "$VERSION"
|
||||
|
||||
echo "Release locale préparée: $VERSION"
|
Loading…
x
Reference in New Issue
Block a user