132 lines
4.5 KiB
Bash
Executable File
132 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 -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 -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"
|