[REMOVED] Eliminar función de creación de proyectos Forgejo en developers.lib
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f47f2ac199
commit
397569acbe
1 changed files with 0 additions and 175 deletions
|
@ -290,178 +290,3 @@ function developer_restore() {
|
|||
|
||||
}
|
||||
|
||||
# Función para crear un proyecto Git en Forgejo
|
||||
# $1: nombre del proyecto
|
||||
# $2: descripción del proyecto
|
||||
# $3: tipo de visibilidad (private/public) [por defecto: private]
|
||||
# $4: ruta local del proyecto (opcional)
|
||||
# Return: 0 si se crea correctamente, otro valor en caso de error
|
||||
local PROJECT_NAME=$1
|
||||
local PROJECT_DESC=$2
|
||||
local VISIBILITY=${3:-private} # Por defecto private si no se especifica
|
||||
local PROJECT_PATH=$4
|
||||
|
||||
# Verificar parámetros obligatorios
|
||||
if [ -z "$PROJECT_NAME" ] || [ -z "$PROJECT_DESC" ]; then
|
||||
return 10 # Error: faltan parámetros obligatorios
|
||||
fi
|
||||
|
||||
# Verificar que el archivo de configuración de Forgejo existe
|
||||
if [ ! -f "$FORGEJO_CONFIG_FILE" ]; then
|
||||
mkdir -p "$(dirname "$FORGEJO_CONFIG_FILE")"
|
||||
# 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:"
|
||||
local FORGEJO_BASE_URL=$(echo "$FORGEJO_API_URL" | sed -E 's|/api/v1||')
|
||||
echo "1. Inicie sesión en $FORGEJO_BASE_URL"
|
||||
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
|
||||
else
|
||||
return 11 # Error: no existe configuración y no es interactivo
|
||||
fi
|
||||
fi
|
||||
|
||||
# Cargar token de Forgejo
|
||||
source "$FORGEJO_CONFIG_FILE"
|
||||
if [ -z "$FORGEJO_TOKEN" ]; then
|
||||
return 12 # Error: token no disponible
|
||||
fi
|
||||
|
||||
# Verificar visibilidad válida
|
||||
if [ "$VISIBILITY" != "private" ] && [ "$VISIBILITY" != "public" ]; then
|
||||
VISIBILITY="private" # Establecer valor por defecto si es inválido
|
||||
fi
|
||||
|
||||
# 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 - Con timeout y manejo de errores de conexión
|
||||
echo "DEBUG: Verificando acceso a la API en: $FORGEJO_API_URL/version" >&2
|
||||
|
||||
# Verificar primero el host base
|
||||
local BASE_URL=$(echo "$FORGEJO_API_URL" | sed -E 's|https?://([^/]+)/.*|\1|')
|
||||
|
||||
if ! ping -c 1 -W 2 "$BASE_URL" >/dev/null 2>&1; then
|
||||
echo "ERROR: No se puede alcanzar el servidor $BASE_URL" >&2
|
||||
echo "{\"error\":\"No se puede conectar con el servidor $BASE_URL. Verifique su conexión y la URL.\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
return 13
|
||||
fi
|
||||
|
||||
echo "DEBUG: Verificando puertos alternativos..." >&2
|
||||
|
||||
# Prueba conexión HTTP puerto 80 primero
|
||||
if nc -z -w 2 "$BASE_URL" 80 2>/dev/null; then
|
||||
echo "DEBUG: Puerto 80 (HTTP) accesible" >&2
|
||||
|
||||
# Intenta versión HTTP explícitamente
|
||||
local HTTP_API_URL=$(echo "$FORGEJO_API_URL" | sed 's|^https://|http://|')
|
||||
local API_RESPONSE=$(curl -s -v --connect-timeout 5 --max-time 10 "$HTTP_API_URL/version" 2>/tmp/curl_verbose.log || echo "")
|
||||
|
||||
if [ -n "$API_RESPONSE" ] && echo "$API_RESPONSE" | grep -q "version"; then
|
||||
echo "DEBUG: API accesible vía HTTP (puerto 80)" >&2
|
||||
# Reemplazar URL por HTTP para el resto de la función
|
||||
FORGEJO_API_URL="$HTTP_API_URL"
|
||||
else
|
||||
echo "ERROR: Servidor accesible pero la API no responde correctamente por HTTP" >&2
|
||||
echo "{\"error\":\"Servidor accesible en puerto 80, pero la API no responde correctamente. Verifique la configuración del servidor.\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
cat /tmp/curl_verbose.log >> "$HOME/.developer/${PROJECT_NAME}.error" 2>/dev/null
|
||||
return 13
|
||||
fi
|
||||
elif nc -z -w 2 "$BASE_URL" 443 2>/dev/null; then
|
||||
echo "DEBUG: Puerto 443 (HTTPS) accesible, pero posibles problemas con certificado o API" >&2
|
||||
|
||||
# Intenta con HTTPS pero ignorando errores de certificado
|
||||
local API_RESPONSE=$(curl -s -v -k --connect-timeout 5 --max-time 10 "$FORGEJO_API_URL/version" 2>/tmp/curl_verbose.log || echo "")
|
||||
|
||||
if [ -n "$API_RESPONSE" ] && echo "$API_RESPONSE" | grep -q "version"; then
|
||||
echo "DEBUG: API accesible vía HTTPS inseguro (ignorando certificado)" >&2
|
||||
# Continuar pero usando -k para ignorar certificados
|
||||
export FORGEJO_CURL_OPTS="-k"
|
||||
else
|
||||
echo "ERROR: Servidor HTTPS accesible pero la API no responde correctamente" >&2
|
||||
echo "{\"error\":\"Servidor accesible en puerto 443, pero la API no responde. Posibles problemas de certificado o configuración.\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
cat /tmp/curl_verbose.log >> "$HOME/.developer/${PROJECT_NAME}.error" 2>/dev/null
|
||||
return 13
|
||||
fi
|
||||
else
|
||||
echo "ERROR: No se puede acceder a los puertos HTTP (80) ni HTTPS (443) en $BASE_URL" >&2
|
||||
echo "{\"error\":\"Servidor accesible por ping pero no responde en los puertos web (80/443).\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
return 13
|
||||
fi
|
||||
|
||||
# Verificar token con timeout y manejo de errores
|
||||
echo "DEBUG: Verificando token con API en: $FORGEJO_API_URL/user" >&2
|
||||
local TOKEN_CHECK=$(curl ${FORGEJO_CURL_OPTS:-} -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_API_URL/user" 2>/dev/null || echo "000")
|
||||
if [ "$TOKEN_CHECK" != "200" ]; then
|
||||
if [ "$TOKEN_CHECK" == "401" ]; then
|
||||
echo "ERROR: Token inválido o sin permisos suficientes. Código: 401" >&2
|
||||
echo "{\"error\":\"Token inválido o sin permisos suficientes. Genere un nuevo token con permisos 'repo'\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
elif [ "$TOKEN_CHECK" == "000" ]; then
|
||||
echo "ERROR: No se pudo verificar el token. Error de conectividad" >&2
|
||||
echo "{\"error\":\"No se pudo verificar el token. Error de conectividad con el servidor\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
else
|
||||
echo "ERROR: Token inválido o sin acceso. Código: $TOKEN_CHECK" >&2
|
||||
echo "{\"error\":\"Token inválido o sin acceso. Código: $TOKEN_CHECK\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
fi
|
||||
return 12
|
||||
fi
|
||||
|
||||
# Llamar a la API de Forgejo para crear el repositorio
|
||||
echo "DEBUG: Enviando solicitud de creación de repositorio..." >&2
|
||||
local API_RESPONSE=$(curl ${FORGEJO_CURL_OPTS:-} -s -X POST --connect-timeout 10 --max-time 30 "$FORGEJO_API_URL/user/repos" \
|
||||
-H "Authorization: token $FORGEJO_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "$API_DATA" 2>/tmp/curl_error.log || echo '{"error":"Falló la comunicación con el servidor"}')
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
cd "$PROJECT_PATH"
|
||||
# Verificar si ya es un repositorio git
|
||||
if [ -d ".git" ]; then
|
||||
# Añadir el remoto
|
||||
git remote add origin "$REPO_URL"
|
||||
git push -u origin main || git push -u origin master
|
||||
else
|
||||
# Inicializar el repositorio y hacer primer commit si no existe
|
||||
git init
|
||||
git add .
|
||||
git commit -m "[INIT] Proyecto $PROJECT_NAME"
|
||||
git remote add origin "$REPO_URL"
|
||||
git push -u origin main
|
||||
fi
|
||||
fi
|
||||
|
||||
return 0 # Éxito
|
||||
else
|
||||
# Guardar mensaje de error
|
||||
echo "$API_RESPONSE" > "$HOME/.developer/${PROJECT_NAME}.error"
|
||||
return 13 # Error: falló la creación del repositorio
|
||||
fi
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue