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
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user