[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
|
case $RESULT in
|
||||||
0)
|
0)
|
||||||
echo "Proyecto creado exitosamente en Forgejo."
|
echo "Proyecto creado exitosamente en Forgejo."
|
||||||
if [ -n "$PROJECT_PATH" ]; then
|
if [ -f "$HOME/.developer/${PROJECT_NAME}.repo" ]; then
|
||||||
echo "El repositorio local ha sido configurado y enlazado con Forgejo."
|
|
||||||
REPO_URL=$(cat "$HOME/.developer/${PROJECT_NAME}.repo")
|
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
|
else
|
||||||
REPO_URL=$(cat "$HOME/.developer/${PROJECT_NAME}.repo")
|
echo "AVISO: No se pudo obtener la URL del repositorio."
|
||||||
echo "URL del repositorio: $REPO_URL"
|
|
||||||
echo "Para clonar el repositorio:"
|
|
||||||
echo " git clone $REPO_URL"
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
10)
|
10)
|
||||||
|
@ -157,10 +160,52 @@ case $RESULT in
|
||||||
12)
|
12)
|
||||||
echo "Error: Token de Forgejo no disponible o inválido."
|
echo "Error: Token de Forgejo no disponible o inválido."
|
||||||
echo "Por favor, verifique o actualice su token en: $FORGEJO_CONFIG_FILE"
|
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)
|
13)
|
||||||
echo "Error: No se pudo crear el proyecto en Forgejo."
|
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)."
|
echo "Error desconocido (código $RESULT)."
|
||||||
|
|
|
@ -316,6 +316,12 @@ function forgejo_create_project() {
|
||||||
# Si el archivo no existe, preguntar por token
|
# Si el archivo no existe, preguntar por token
|
||||||
if [ -t 0 ]; then # Solo si es terminal interactiva
|
if [ -t 0 ]; then # Solo si es terminal interactiva
|
||||||
echo "Archivo de configuración de Forgejo no encontrado."
|
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
|
read -p "Ingrese su token de acceso de Forgejo: " FORGEJO_TOKEN
|
||||||
echo "FORGEJO_TOKEN=$FORGEJO_TOKEN" > "$FORGEJO_CONFIG_FILE"
|
echo "FORGEJO_TOKEN=$FORGEJO_TOKEN" > "$FORGEJO_CONFIG_FILE"
|
||||||
chmod 600 "$FORGEJO_CONFIG_FILE" # Restricción de permisos por seguridad
|
chmod 600 "$FORGEJO_CONFIG_FILE" # Restricción de permisos por seguridad
|
||||||
|
@ -338,17 +344,48 @@ function forgejo_create_project() {
|
||||||
# Preparar datos para la API
|
# Preparar datos para la API
|
||||||
local API_DATA="{\"name\":\"$PROJECT_NAME\",\"description\":\"$PROJECT_DESC\",\"private\":$([ "$VISIBILITY" == "private" ] && echo "true" || echo "false")}"
|
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
|
# Llamar a la API de Forgejo para crear el repositorio
|
||||||
local API_RESPONSE=$(curl -s -X POST "$FORGEJO_API_URL/user/repos" \
|
local API_RESPONSE=$(curl -s -X POST "$FORGEJO_API_URL/user/repos" \
|
||||||
-H "Authorization: token $FORGEJO_TOKEN" \
|
-H "Authorization: token $FORGEJO_TOKEN" \
|
||||||
-H "Content-Type: application/json" \
|
-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
|
# Verificar respuesta
|
||||||
if echo "$API_RESPONSE" | grep -q "\"id\":[0-9]*"; then
|
if echo "$API_RESPONSE" | grep -q "\"id\":[0-9]*"; then
|
||||||
local REPO_URL=$(echo "$API_RESPONSE" | grep -o '"clone_url":"[^"]*"' | cut -d'"' -f4)
|
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
|
# Si se proporcionó una ruta local, configurar el repositorio
|
||||||
if [ -n "$PROJECT_PATH" ] && [ -d "$PROJECT_PATH" ]; then
|
if [ -n "$PROJECT_PATH" ] && [ -d "$PROJECT_PATH" ]; then
|
||||||
|
|
Loading…
Reference in a new issue