Files
git-operaciones/instalar-subir.sh

133 lines
4.5 KiB
Bash
Executable File

#!/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
# 📜 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"