[IMPROVED] Depuración y manejo de errores en la función forgejo_create_project
- Añadidas verificaciones preliminares de conectividad a la API - Validación del token antes de crear el repositorio - Mejor extracción de URL (con fallback a html_url) - Instrucciones detalladas para generar token en Forgejo - Diagnóstico mejorado cuando falla la creación del proyecto 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
07c4be3c19
commit
46d3be29ed
2 changed files with 93 additions and 11 deletions
|
@ -136,15 +136,18 @@ RESULT=$?
|
|||
case $RESULT in
|
||||
0)
|
||||
echo "Proyecto creado exitosamente en Forgejo."
|
||||
if [ -n "$PROJECT_PATH" ]; then
|
||||
echo "El repositorio local ha sido configurado y enlazado con Forgejo."
|
||||
if [ -f "$HOME/.developer/${PROJECT_NAME}.repo" ]; then
|
||||
REPO_URL=$(cat "$HOME/.developer/${PROJECT_NAME}.repo")
|
||||
echo "URL del repositorio: $REPO_URL"
|
||||
if [ -n "$PROJECT_PATH" ]; then
|
||||
echo "El repositorio local ha sido configurado y enlazado con Forgejo."
|
||||
echo "URL del repositorio: $REPO_URL"
|
||||
else
|
||||
echo "URL del repositorio: $REPO_URL"
|
||||
echo "Para clonar el repositorio:"
|
||||
echo " git clone $REPO_URL"
|
||||
fi
|
||||
else
|
||||
REPO_URL=$(cat "$HOME/.developer/${PROJECT_NAME}.repo")
|
||||
echo "URL del repositorio: $REPO_URL"
|
||||
echo "Para clonar el repositorio:"
|
||||
echo " git clone $REPO_URL"
|
||||
echo "AVISO: No se pudo obtener la URL del repositorio."
|
||||
fi
|
||||
;;
|
||||
10)
|
||||
|
@ -157,10 +160,52 @@ case $RESULT in
|
|||
12)
|
||||
echo "Error: Token de Forgejo no disponible o inválido."
|
||||
echo "Por favor, verifique o actualice su token en: $FORGEJO_CONFIG_FILE"
|
||||
|
||||
# Verificar mensaje de error
|
||||
if [ -f "$HOME/.developer/${PROJECT_NAME}.error" ]; then
|
||||
echo "Detalles del error:"
|
||||
cat "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Para generar un nuevo token en Forgejo:"
|
||||
echo "1. Inicie sesión en $FORGEJO_API_URL (sin '/api/v1')"
|
||||
echo "2. Vaya a Configuración → Aplicaciones"
|
||||
echo "3. Genere un nuevo token de acceso personal"
|
||||
echo "4. Asegúrese de darle permisos de lectura/escritura para repositorios"
|
||||
;;
|
||||
13)
|
||||
echo "Error: No se pudo crear el proyecto en Forgejo."
|
||||
echo "Detalles del error disponibles en: $HOME/.developer/${PROJECT_NAME}.error"
|
||||
echo "Comprobando posibles problemas:"
|
||||
|
||||
# Verificar configuración
|
||||
if [ -f "$FORGEJO_CONFIG_FILE" ]; then
|
||||
echo "✓ Archivo de configuración encontrado en: $FORGEJO_CONFIG_FILE"
|
||||
echo "✓ Verificando token..."
|
||||
# No mostramos el token por seguridad, solo si existe
|
||||
grep -q "FORGEJO_TOKEN=" "$FORGEJO_CONFIG_FILE" && echo " ✓ Token encontrado" || echo " ✗ Token no encontrado"
|
||||
else
|
||||
echo "✗ Archivo de configuración no encontrado"
|
||||
fi
|
||||
|
||||
# Verificar conectividad
|
||||
echo "✓ Probando conectividad con Forgejo..."
|
||||
FORGEJO_HOST=$(echo "$FORGEJO_API_URL" | sed 's|^https\?://||' | cut -d'/' -f1)
|
||||
ping -c 1 "$FORGEJO_HOST" > /dev/null 2>&1 && echo " ✓ Conectividad OK" || echo " ✗ No se puede conectar con el servidor"
|
||||
|
||||
# Verificar errores de curl
|
||||
if [ -f "/tmp/curl_error.log" ]; then
|
||||
echo "✓ Detalles de la solicitud:"
|
||||
cat /tmp/curl_error.log
|
||||
fi
|
||||
|
||||
# Verificar mensaje de error
|
||||
if [ -f "$HOME/.developer/${PROJECT_NAME}.error" ]; then
|
||||
echo "✓ Respuesta de error del servidor:"
|
||||
cat "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
else
|
||||
echo "✗ No se guardó respuesta de error"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Error desconocido (código $RESULT)."
|
||||
|
|
|
@ -316,6 +316,12 @@ function forgejo_create_project() {
|
|||
# Si el archivo no existe, preguntar por token
|
||||
if [ -t 0 ]; then # Solo si es terminal interactiva
|
||||
echo "Archivo de configuración de Forgejo no encontrado."
|
||||
echo ""
|
||||
echo "Para generar un token en Forgejo:"
|
||||
echo "1. Inicie sesión en $FORGEJO_API_URL (sin '/api/v1')"
|
||||
echo "2. Vaya a Configuración → Aplicaciones"
|
||||
echo "3. Genere un nuevo token de acceso personal con permisos de 'repo'"
|
||||
echo ""
|
||||
read -p "Ingrese su token de acceso de Forgejo: " FORGEJO_TOKEN
|
||||
echo "FORGEJO_TOKEN=$FORGEJO_TOKEN" > "$FORGEJO_CONFIG_FILE"
|
||||
chmod 600 "$FORGEJO_CONFIG_FILE" # Restricción de permisos por seguridad
|
||||
|
@ -338,17 +344,48 @@ function forgejo_create_project() {
|
|||
# Preparar datos para la API
|
||||
local API_DATA="{\"name\":\"$PROJECT_NAME\",\"description\":\"$PROJECT_DESC\",\"private\":$([ "$VISIBILITY" == "private" ] && echo "true" || echo "false")}"
|
||||
|
||||
# Comprobar si podemos acceder a la API
|
||||
local API_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$FORGEJO_API_URL/version")
|
||||
if [ "$API_STATUS" != "200" ]; then
|
||||
echo "ERROR: No se puede acceder a la API de Forgejo. Código de estado: $API_STATUS" >&2
|
||||
echo "{\"error\":\"No se puede acceder a la API. Código: $API_STATUS\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
return 13
|
||||
fi
|
||||
|
||||
# Verificar token
|
||||
local TOKEN_CHECK=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_API_URL/user")
|
||||
if [ "$TOKEN_CHECK" != "200" ]; then
|
||||
echo "ERROR: Token inválido o sin acceso. Código de estado: $TOKEN_CHECK" >&2
|
||||
echo "{\"error\":\"Token inválido o sin acceso. Código: $TOKEN_CHECK\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
return 12
|
||||
fi
|
||||
|
||||
# Llamar a la API de Forgejo para crear el repositorio
|
||||
local API_RESPONSE=$(curl -s -X POST "$FORGEJO_API_URL/user/repos" \
|
||||
-H "Authorization: token $FORGEJO_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$API_DATA")
|
||||
|
||||
-d "$API_DATA" 2>/tmp/curl_error.log)
|
||||
|
||||
echo "DEBUG: Respuesta API: $API_RESPONSE" >&2
|
||||
|
||||
# Verificar respuesta
|
||||
if echo "$API_RESPONSE" | grep -q "\"id\":[0-9]*"; then
|
||||
local REPO_URL=$(echo "$API_RESPONSE" | grep -o '"clone_url":"[^"]*"' | cut -d'"' -f4)
|
||||
|
||||
echo "$REPO_URL" > "$HOME/.developer/${PROJECT_NAME}.repo"
|
||||
if [ -n "$REPO_URL" ]; then
|
||||
echo "$REPO_URL" > "$HOME/.developer/${PROJECT_NAME}.repo"
|
||||
else
|
||||
# Extraer HTML URL como fallback
|
||||
REPO_URL=$(echo "$API_RESPONSE" | grep -o '"html_url":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||||
|
||||
if [ -n "$REPO_URL" ]; then
|
||||
echo "$REPO_URL" > "$HOME/.developer/${PROJECT_NAME}.repo"
|
||||
else
|
||||
echo "ERROR: No se pudo extraer la URL del repositorio." >&2
|
||||
echo "$API_RESPONSE" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
return 14
|
||||
fi
|
||||
fi
|
||||
|
||||
# Si se proporcionó una ruta local, configurar el repositorio
|
||||
if [ -n "$PROJECT_PATH" ] && [ -d "$PROJECT_PATH" ]; then
|
||||
|
|
Loading…
Reference in a new issue