#!/bin/bash set -e echo "🔧 Instalación del comando git subir" # 📦 Verificar openssl if ! command -v openssl &> /dev/null; then echo "⚠️ openssl no está instalado. Instalando..." if command -v apt &> /dev/null; then sudo apt update && sudo apt install -y openssl elif command -v pacman &> /dev/null; then sudo pacman -Sy --noconfirm openssl else echo "❌ No se pudo instalar openssl automáticamente. Instalalo manualmente." exit 1 fi fi # 📁 Crear carpeta mkdir -p "$HOME/.scripts" # 🔄 Reconfigurar si existen credenciales if [[ -f "$HOME/.scripts/.env" || -f "$HOME/.scripts/.env.enc" ]]; then read -p "⚠️ Ya existen credenciales. ¿Querés reconfigurarlas? (s/n): " reconfig [[ "$reconfig" != "s" ]] && echo "🚫 Instalación cancelada." && exit 0 fi # 🔐 Solicitar credenciales read -p "👤 Usuario de Gitea: " GITEA_USER read -s -p "🔑 Token o contraseña: " GITEA_TOKEN echo "" read -p "🌐 URL base de la API de Gitea (ej: https://gitea.midominio.org): " GITEA_API_URL # 🔎 Verificar credenciales response=$(curl -s -u "$GITEA_USER:$GITEA_TOKEN" "$GITEA_API_URL/api/v1/user") if ! echo "$response" | grep -q '"login":"'"$GITEA_USER"'"'; then echo "❌ Credenciales inválidas. Abortando instalación." exit 1 fi # 🔐 Cifrar si desea read -p "¿Querés guardar las credenciales cifradas con openssl? (s/n): " cifrar if [[ "$cifrar" == "s" ]]; then echo "🔐 Ingresá una contraseña para cifrar:" read -s passphrase echo -e "GITEA_USER=$GITEA_USER\nGITEA_TOKEN=$GITEA_TOKEN\nGITEA_API_URL=$GITEA_API_URL" | \ openssl enc -aes-256-cbc -pbkdf2 -salt -out "$HOME/.scripts/.env.enc" -pass pass:"$passphrase" rm -f "$HOME/.scripts/.env" echo "✅ Credenciales cifradas guardadas." else echo -e "GITEA_USER=$GITEA_USER\nGITEA_TOKEN=$GITEA_TOKEN\nGITEA_API_URL=$GITEA_API_URL" > "$HOME/.scripts/.env" chmod 600 "$HOME/.scripts/.env" rm -f "$HOME/.scripts/.env.enc" echo "⚠️ Credenciales guardadas sin cifrar." fi # 📍 Verificar si estamos en un repositorio Git if ! git rev-parse --is-inside-work-tree &> /dev/null; then echo "📁 Este directorio no es un repositorio Git." read -p "¿Querés inicializarlo ahora? (s/n): " init_repo if [[ "$init_repo" == "s" ]]; then git init read -p "📦 Ingresá el nombre del repositorio remoto (ej: git-operaciones.git): " repo_nombre remote_url="$GITEA_API_URL/$GITEA_USER/$repo_nombre" git remote add origin "$remote_url" echo "✅ Repositorio inicializado y remoto configurado: $remote_url" else echo "🚫 Instalación cancelada. Ejecutá desde un repositorio Git válido." exit 1 fi fi # 📜 Script principal cat <<'EOF' > "$HOME/.scripts/git-subir.sh" #!/bin/bash set -e # 🔐 Cargar credenciales if [[ -f "$HOME/.scripts/.env.enc" ]]; then echo "🔐 Ingresá la contraseña para descifrar tus credenciales:" read -s passphrase openssl enc -aes-256-cbc -pbkdf2 -d -in "$HOME/.scripts/.env.enc" -pass pass:"$passphrase" > /tmp/.env.dec source /tmp/.env.dec rm /tmp/.env.dec elif [[ -f "$HOME/.scripts/.env" ]]; then source "$HOME/.scripts/.env" else echo "❌ No se encontraron credenciales. Ejecutá instalar-subir.sh primero." exit 1 fi remote_url=$(git remote get-url origin | sed 's|https://||') auth_url="https://$GITEA_USER:$GITEA_TOKEN@$remote_url" function marco() { echo -e "╔════════════════════════════════╗" echo -e "║ $1" echo -e "╚════════════════════════════════╝" } # 📦 Detectar cambios sin commitear if ! git diff-index --quiet HEAD; then echo "📦 Se detectaron cambios sin commitear:" git status -s read -p "¿Querés hacer commit automático de estos cambios? (s/n): " auto_commit if [[ "$auto_commit" == "s" ]]; then read -p "📝 Ingresá el mensaje de commit: " mensaje git add . git commit -m "$mensaje" echo "✅ Commit realizado." fi fi # 🚀 Intentar push echo "🚀 Subiendo archivos al repositorio remoto..." if ! git push "$auth_url"; then echo "⚠️ Push fallido. Intentando pull con --allow-unrelated-histories..." git pull "$auth_url" --allow-unrelated-histories || true conflictos=$(git diff --name-only --diff-filter=U) if [[ -n "$conflictos" ]]; then echo "🚨 Conflictos detectados:" echo "$conflictos" read -p "¿Hacer merge automático? (s/n): " merge_auto if [[ "$merge_auto" == "s" ]]; then git add . git commit -m "🔀 Merge automático" else echo "❌ Merge cancelado. Resolvé los conflictos manualmente." exit 1 fi fi git push "$auth_url" fi echo "🎉 Push completado." EOF chmod +x "$HOME/.scripts/git-subir.sh" # 🔗 Alias global echo "Creando alias git-subir..." echo -e "#!/bin/bash\nexec \"$HOME/.scripts/git-subir.sh\" \"\$@\"" | sudo tee /usr/local/bin/git-subir > /dev/null sudo chmod +x /usr/local/bin/git-subir echo "✅ Instalación completa. Usá el comando: git subir"