Files
MAX/git-push.sh

49 lines
1.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# Пуш в Gitea без ввода пароля. Читает GITEA_USER, GITEA_PASSWORD, GITEA_URL из .env.
# Использование: ./git-push.sh или ./git-push.sh origin main
set -e
cd "$(dirname "$0")"
if [[ ! -f .env ]]; then
echo "Файл .env не найден." >&2
exit 1
fi
GITEA_USER= GITEA_PASSWORD= GITEA_URL=
while IFS= read -r line; do
line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
[[ -z "$line" || "$line" =~ ^# ]] && continue
if [[ "$line" =~ ^GITEA_USER=(.*)$ ]]; then
GITEA_USER="${BASH_REMATCH[1]}"
elif [[ "$line" =~ ^GITEA_PASSWORD=(.*)$ ]]; then
GITEA_PASSWORD="${BASH_REMATCH[1]}"
elif [[ "$line" =~ ^GITEA_URL=(.*)$ ]]; then
GITEA_URL="${BASH_REMATCH[1]}"
fi
done < .env
[[ -z "$GITEA_USER" || -z "$GITEA_URL" ]] && { echo "В .env задайте GITEA_USER и GITEA_URL." >&2; exit 1; }
GITEA_URL="${GITEA_URL%/}"
# Путь репо из текущего remote (например negodiy/MAX.git)
REMOTE_PATH=$(git remote get-url origin 2>/dev/null | sed -n 's|.*://[^/]*/||p')
[[ -z "$REMOTE_PATH" ]] && REMOTE_PATH="negodiy/MAX.git"
# URL-кодирование пароля (безопасно для спецсимволов)
ENCODED_PASS=$(printf '%s' "$GITEA_PASSWORD" | python3 -c "import sys, urllib.parse; print(urllib.parse.quote(sys.stdin.read(), safe=''))" 2>/dev/null || echo "$GITEA_PASSWORD")
HOST="${GITEA_URL#*://}"
ORIGIN_PLAIN="${GITEA_URL}/${REMOTE_PATH}"
# Протокол (http или https) + :// + user:pass@ + host/path
ORIGIN_WITH_CREDS="${GITEA_URL%%://*}://${GITEA_USER}:${ENCODED_PASS}@${HOST}/${REMOTE_PATH}"
git remote set-url origin "$ORIGIN_WITH_CREDS"
if (($#)); then
git push "$@"
else
git push -u origin main
fi
git remote set-url origin "$ORIGIN_PLAIN"
echo "Готово. Пароль из remote убран."