From 29effc26c7ee8d1260366e3a642793854d49c63d Mon Sep 17 00:00:00 2001 From: Debian Date: Thu, 28 Aug 2025 12:05:22 +0000 Subject: [PATCH] [skip ci] chore(agents): centralisation via 4NK_template (hooks+doc) --- docs/AGENTS_INTEGRATION.md | 6 ++++++ scripts/local/install_hooks.sh | 19 +++++++++++++++++++ scripts/local/merge_branch.sh | 25 +++++++++++++++++++++++++ scripts/local/precommit.sh | 11 +++++++++++ scripts/local/prepush.sh | 21 +++++++++++++++++++++ scripts/local/release_local.sh | 20 ++++++++++++++++++++ 6 files changed, 102 insertions(+) create mode 100644 docs/AGENTS_INTEGRATION.md create mode 100755 scripts/local/install_hooks.sh create mode 100755 scripts/local/merge_branch.sh create mode 100755 scripts/local/precommit.sh create mode 100755 scripts/local/prepush.sh create mode 100755 scripts/local/release_local.sh diff --git a/docs/AGENTS_INTEGRATION.md b/docs/AGENTS_INTEGRATION.md new file mode 100644 index 0000000..ac4b41d --- /dev/null +++ b/docs/AGENTS_INTEGRATION.md @@ -0,0 +1,6 @@ +# Intégration des agents 4NK_template + +- Hooks centralisés: pre-commit / pre-push via ../4NK_template (Docker). +- Pré-requis: ~/.4nk_template/.env monté en RO dans le conteneur. +- Exécution: scripts/local/precommit.sh ou git push (déclenche pre-push). +- Rapports: tests/reports/agents/. diff --git a/scripts/local/install_hooks.sh b/scripts/local/install_hooks.sh new file mode 100755 index 0000000..bd0f600 --- /dev/null +++ b/scripts/local/install_hooks.sh @@ -0,0 +1,19 @@ +#!/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" +} + +# Hooks qui délèguent aux agents via l'image Docker du template sur le projet courant +install_hook pre-commit "$REPO_ROOT/scripts/local/precommit.sh" +install_hook pre-push "$REPO_ROOT/scripts/local/prepush.sh" + +echo "Hooks installés (mode agents via 4NK_template)." diff --git a/scripts/local/merge_branch.sh b/scripts/local/merge_branch.sh new file mode 100755 index 0000000..9275299 --- /dev/null +++ b/scripts/local/merge_branch.sh @@ -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" diff --git a/scripts/local/precommit.sh b/scripts/local/precommit.sh new file mode 100755 index 0000000..b2b502c --- /dev/null +++ b/scripts/local/precommit.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Exécuter les agents depuis l'image Docker de 4NK_template sur le projet courant +PROJECT_DIR="$(git rev-parse --show-toplevel)" +TEMPLATE_DIR="$(cd "${PROJECT_DIR}/../4NK_template" && pwd)" + +mkdir -p "${PROJECT_DIR}/tests/reports/agents" +"${TEMPLATE_DIR}/scripts/local/run_agents_for_project.sh" "${PROJECT_DIR}" "tests/reports/agents" + +echo "[pre-commit] OK (agents via 4NK_template)" diff --git a/scripts/local/prepush.sh b/scripts/local/prepush.sh new file mode 100755 index 0000000..7cb8c7d --- /dev/null +++ b/scripts/local/prepush.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Exécuter les agents depuis l'image Docker de 4NK_template sur le projet courant +PROJECT_DIR="$(git rev-parse --show-toplevel)" +TEMPLATE_DIR="$(cd "${PROJECT_DIR}/../4NK_template" && pwd)" + +mkdir -p "${PROJECT_DIR}/tests/reports/agents" +"${TEMPLATE_DIR}/scripts/local/run_agents_for_project.sh" "${PROJECT_DIR}" "tests/reports/agents" + +# Audit sécurité (best effort) dans le contexte du projet +if [ -f "${PROJECT_DIR}/scripts/security/audit.sh" ]; then + (cd "${PROJECT_DIR}" && bash scripts/security/audit.sh) || true +fi + +# Release guard (dry-run logique) dans le contexte du projet +if [ -f "${PROJECT_DIR}/scripts/release/guard.sh" ]; then + (cd "${PROJECT_DIR}" && bash scripts/release/guard.sh) || true +fi + +echo "[pre-push] OK (agents via 4NK_template)" diff --git a/scripts/local/release_local.sh b/scripts/local/release_local.sh new file mode 100755 index 0000000..e3f48ed --- /dev/null +++ b/scripts/local/release_local.sh @@ -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"