gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1471Shell 173Rust 105Markdown 943545 Definiciones

espejar-repos: mostrar el error de `gh` y cortar ante el límite de la API

Corrida real contra gioser: los 21 repos fallaron al crearse y el guión dijo «no se pudo crear» A
SECAS, porque mandaba el stderr de `gh` a /dev/null. La causa era el LÍMITE DE LA API DE GITHUB
agotado —que se resuelve esperando— y sin el mensaje eso parecía un problema de permisos, de nombre o
del propio guión: hubo que reproducirlo a mano para enterarse de algo que la herramienta ya sabía.

Dos arreglos:

· El error de `gh` se muestra, recortado a su primera línea.
· Ante «rate limit» se CORTA en el primero: los 20 restantes van a fallar igual y cada intento gasta
  cuota. Dice a qué hora se repone (leído de `gh api rate_limit`) y recuerda que reintentar es
  seguro, porque el guión es idempotente.

No quedó estado parcial de la corrida fallida: el `pushurl` se agrega DESPUÉS de crear el repo, así
que los 21 clones siguen con su remoto original intacto. Verificado en tres de ellos.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RomoxEGZUhaT4pob1QSX5x

1fc9de6a01af08537fdf7526cbfa877f2b664f7c · por Sergio · (hace 1 mes) · padre df1230d2a · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +20 −2

diff --git a/scripts/mudanza/espejar-repos.sh b/scripts/mudanza/espejar-repos.sh
index d85a5d47..ea39ab26 100755
--- a/scripts/mudanza/espejar-repos.sh
+++ b/scripts/mudanza/espejar-repos.sh
@@ -146,8 +146,26 @@ for c in "${CANDIDATOS[@]}"; do
   [ "$APPLY" = 1 ] || continue
 
   if ! gh repo view "$OWNER/$nombre" >/dev/null 2>&1; then
-    if ! gh repo create "$OWNER/$nombre" --private >/dev/null 2>&1; then
-      echo "      ✗ no se pudo crear $OWNER/$nombre"; fallos=$((fallos+1)); continue
+    # ⚠ El error de `gh` se MUESTRA. La primera versión lo mandaba a /dev/null y decía «no se pudo
+    # crear» a secas: los 21 fallaron y el guión no daba ni una pista de por qué. Era el límite de
+    # la API de GitHub agotado —cosa que se resuelve esperando— y sin el mensaje eso parecía un
+    # problema de permisos, de nombre o del propio guión. Un fallo sin su motivo obliga a
+    # reproducirlo a mano para enterarse de algo que la herramienta ya sabía.
+    err="$(gh repo create "$OWNER/$nombre" --private 2>&1)"
+    if [ $? -ne 0 ] || [ -n "${err##*}" ] && ! gh repo view "$OWNER/$nombre" >/dev/null 2>&1; then
+      echo "      ✗ no se pudo crear $OWNER/$nombre: ${err%%$'\n'*}"
+      fallos=$((fallos+1))
+      # Contra el límite de la API no sirve seguir intentando: los 20 restantes van a fallar igual y
+      # cada intento gasta cuota. Se corta y se dice cuándo se puede reintentar.
+      case "$err" in *"rate limit"*|*"RATE_LIMITED"*)
+        reset="$(gh api rate_limit --jq '.resources.graphql.reset // .resources.core.reset' 2>/dev/null)"
+        echo
+        echo "  ✗ LÍMITE DE LA API DE GITHUB AGOTADO — no se intenta con los demás."
+        [ -n "$reset" ] && echo "     se repone a las $(date -d "@$reset" +%H:%M 2>/dev/null)."
+        echo "     Reintentá con el mismo comando: es idempotente, no repite lo ya hecho."
+        exit 1;;
+      esac
+      continue
     fi
     echo "      · repo privado creado"
   fi