7eb7b3d0c8
Snapshot de WIP acumulado de sesiones previas antes de merge wave 1 del flow 0008 (kanban_cpp + agent_runner_api + DoD schema). Incluye: - dev/flows/0008-kanban-cpp-and-agent-workflows.md - dev/issues/0112-0119*.md (7 sub-issues) - WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
122 lines
3.2 KiB
Bash
Executable File
122 lines
3.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# integrate-worktrees.sh — Integra branches de worktrees a master con --no-ff
|
|
#
|
|
# Uso: ./integrate-worktrees.sh <slug-1> <slug-2> ...
|
|
# Ejemplo: ./integrate-worktrees.sh 0026-split-runtime 0027-prune-config-schema
|
|
#
|
|
# Para cada slug:
|
|
# 1. git merge --no-ff issue/<slug> a master
|
|
# 2. Verificar que master compila después del merge
|
|
# 3. Si hay conflict o fallo de build, PARAR inmediatamente
|
|
#
|
|
# Los slugs deben pasarse en el orden correcto (waves ya resueltas).
|
|
# NO hace push — eso lo decide el usuario.
|
|
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$(git rev-parse --show-toplevel)"
|
|
|
|
if [ $# -eq 0 ]; then
|
|
echo "ERROR: se necesita al menos un slug"
|
|
echo "Uso: $0 <slug-1> <slug-2> ..."
|
|
exit 1
|
|
fi
|
|
|
|
# Asegurar que estamos en master
|
|
echo "=== Cambiando a master ==="
|
|
cd "$REPO_ROOT"
|
|
git checkout master
|
|
|
|
MERGED=0
|
|
FAILED_AT=""
|
|
|
|
for slug in "$@"; do
|
|
branch="issue/${slug}"
|
|
|
|
echo ""
|
|
echo "=== Integrando: ${branch} ==="
|
|
|
|
# Verificar que la branch existe
|
|
if ! git show-ref --verify --quiet "refs/heads/${branch}"; then
|
|
echo "FAIL: branch ${branch} no existe"
|
|
FAILED_AT="$slug"
|
|
break
|
|
fi
|
|
|
|
# Merge --no-ff
|
|
if ! git merge --no-ff "$branch" -m "merge: ${branch} — implementación paralela"; then
|
|
echo ""
|
|
echo "CONFLICT: merge de ${branch} tiene conflictos"
|
|
echo "Resolver manualmente y luego continuar con los slugs restantes"
|
|
echo ""
|
|
echo "Para resolver:"
|
|
echo " 1. git status (ver archivos en conflicto)"
|
|
echo " 2. Resolver conflictos en cada archivo"
|
|
echo " 3. git add <archivos>"
|
|
echo " 4. git commit"
|
|
echo ""
|
|
echo "Slugs pendientes después de ${slug}:"
|
|
FOUND=0
|
|
for remaining in "$@"; do
|
|
if [ "$FOUND" -eq 1 ]; then
|
|
echo " - ${remaining}"
|
|
fi
|
|
if [ "$remaining" = "$slug" ]; then
|
|
FOUND=1
|
|
fi
|
|
done
|
|
exit 1
|
|
fi
|
|
|
|
echo "MERGED: ${branch}"
|
|
|
|
# Verificar que master sigue compilando (si BUILD_CMD esta definido)
|
|
if [ -n "${BUILD_CMD:-}" ]; then
|
|
echo "--- Verificando build post-merge ($BUILD_CMD) ---"
|
|
if ! (cd "$REPO_ROOT" && bash -c "$BUILD_CMD" 2>&1); then
|
|
echo ""
|
|
echo "FAIL: master no compila despues de mergear ${branch}"
|
|
echo "Revertir con: git reset --hard HEAD~1"
|
|
echo "Investigar el problema antes de continuar."
|
|
FAILED_AT="$slug"
|
|
break
|
|
fi
|
|
echo "OK: build post-merge exitoso"
|
|
else
|
|
echo "--- Build post-merge SKIPPED (BUILD_CMD no definido) ---"
|
|
fi
|
|
|
|
MERGED=$((MERGED + 1))
|
|
done
|
|
|
|
echo ""
|
|
echo "=== Resumen de integración ==="
|
|
echo "Mergeados: ${MERGED} de $#"
|
|
|
|
if [ -n "$FAILED_AT" ]; then
|
|
echo "Falló en: ${FAILED_AT}"
|
|
echo ""
|
|
echo "Worktrees NO limpiados (resolver primero el fallo)"
|
|
exit 1
|
|
fi
|
|
|
|
# Limpieza de worktrees y branches
|
|
echo ""
|
|
echo "=== Limpieza ==="
|
|
for slug in "$@"; do
|
|
path="${REPO_ROOT}/worktrees/${slug}"
|
|
branch="issue/${slug}"
|
|
|
|
if [ -d "$path" ]; then
|
|
git worktree remove "$path" 2>/dev/null && echo "REMOVED: worktree ${path}" || echo "WARN: no se pudo eliminar worktree ${path}"
|
|
fi
|
|
|
|
git branch -d "$branch" 2>/dev/null && echo "DELETED: branch ${branch}" || echo "WARN: no se pudo eliminar branch ${branch}"
|
|
done
|
|
|
|
echo ""
|
|
echo "=== Integración completa ==="
|
|
echo "Master tiene ${MERGED} merges nuevos."
|
|
echo ""
|
|
echo "Para publicar: git push"
|