scripte/git_gitea_upload.sh

116 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
GITEA_URL="https://gitea.kasimirat.de"
GITEA_USER="thomas"
GITEA_TOKEN="289ac11a4ad2938fa34e6baa29bec74bdbcbb57b"
read -p "Pfad zum lokalen Verzeichnis (z für Abbruch): " DIR
[[ "$DIR" =~ ^[zZ]$ ]] && exit 0
if [ ! -d "$DIR" ]; then
echo "Verzeichnis nicht gefunden!"
exit 1
fi
cd "$DIR"
read -p "Repo-Name auf Gitea (z für Abbruch): " REPO
[[ "$REPO" =~ ^[zZ]$ ]] && exit 0
REPO_VALID=$(echo "$REPO" | sed 's/ /-/g')
if [[ ! "$REPO_VALID" =~ ^[A-Za-z0-9._-]+$ ]]; then
echo "Ungültiger Repo-Name! Nur Buchstaben, Zahlen, Bindestrich (-), Unterstrich (_) und Punkt (.) sind erlaubt."
exit 1
fi
# Prüfe, ob das Repo schon existiert
EXISTS=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$GITEA_URL/api/v1/repos/$GITEA_USER/$REPO_VALID" | grep '"id"')
if [ -z "$EXISTS" ]; then
# Repo per API anlegen
ANTWORT=$(curl -s -X POST -H "Content-Type: application/json" -H "Authorization: token $GITEA_TOKEN" \
-d '{"name":"'$REPO_VALID'","private":false}' "$GITEA_URL/api/v1/user/repos")
if echo "$ANTWORT" | grep -q '"id"'; then
echo "Gitea-Repo $REPO_VALID wurde angelegt."
else
echo "Fehler beim Anlegen des Repos: $ANTWORT"
exit 1
fi
NEWREPO=1
else
echo "Repo $REPO_VALID existiert bereits, es wird ein Commit & Push durchgeführt."
NEWREPO=0
fi
# Git-Repo initialisieren (falls noch nicht vorhanden)
if [ ! -d .git ]; then
git init -b main
fi
git remote remove origin 2>/dev/null
GITURL="$GITEA_URL/$GITEA_USER/$REPO_VALID.git"
git remote add origin "$GITURL"
echo "Füge Dateien zum Commit hinzu..."
git add .
git status
read -p "Commit-Message: " MSG
[[ "$MSG" =~ ^[zZ]$ ]] && exit 0
echo "Erstelle Commit..."
git commit -m "$MSG"
# Prüfe, ob Dateien im Commit enthalten sind
COMMITS=$(git log --stat -1)
if echo "$COMMITS" | grep -q 'files changed'; then
echo "Commit enthält Dateien."
else
echo "Warnung: Commit enthält keine Dateien! Prüfe, ob .gitignore alles ausschließt oder das Verzeichnis leer ist."
fi
git branch -M main 2>/dev/null
echo "Pushe auf Gitea..."
git push -u origin main
# Setze Standard-Branch auf main per Gitea-API (nur bei Neuanlage)
if [ "$NEWREPO" = "1" ]; then
curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: token $GITEA_TOKEN" \
-d '{"default_branch":"main"}' "$GITEA_URL/api/v1/repos/$GITEA_USER/$REPO_VALID" > /dev/null
echo "Upload abgeschlossen. Repo: $GITURL (neu angelegt, Standard-Branch: main)"
else
echo "Upload abgeschlossen. Repo: $GITURL (bestehendes Repo aktualisiert)"
fi
# Prüfe, ob der Branch 'main' auf Gitea existiert und Dateien enthält
BRANCHINFO=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$GITEA_URL/api/v1/repos/$GITEA_USER/$REPO_VALID/branches/main")
if echo "$BRANCHINFO" | grep -q '"name":"main"'; then
TREEURL=$(echo "$BRANCHINFO" | grep -o '"url":"[^"]*"' | head -1 | cut -d'"' -f4)
if [ -n "$TREEURL" ]; then
TREE=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$TREEURL")
if echo "$TREE" | grep -q '"type":"blob"'; then
echo "Branch 'main' auf Gitea enthält Dateien."
else
echo "Warnung: Branch 'main' auf Gitea ist leer! Prüfe, ob Dateien gepusht wurden."
fi
fi
else
echo "Warnung: Der Branch 'main' existiert auf Gitea nicht! Prüfe, ob du auf den richtigen Branch gepusht hast."
fi
# Anleitung für das manuelle Umstellen des Standard-Branches in Gitea:
: <<'GITEA_BRANCH_HELP'
So stellst du den Standard-Branch in Gitea auf 'main' um:
1. Öffne das Repository im Gitea-Webinterface.
2. Klicke oben rechts auf 'Settings'.
3. Scrolle nach unten und suche das Feld 'Default Branch'.
4. Wähle im Dropdown 'main' aus.
5. Klicke auf 'Save' oder 'Speichern'.
Jetzt ist 'main' der Standard-Branch und wird beim Öffnen des Repos angezeigt.
GITEA_BRANCH_HELP
# Setze Standard-Branch auf main per Gitea-API (nur bei Neuanlage)
if [ "$NEWREPO" = "1" ]; then
curl -s -X PATCH -H "Content-Type: application/json" -H "Authorization: token $GITEA_TOKEN" \
-d '{"default_branch":"main"}' "$GITEA_URL/api/v1/repos/$GITEA_USER/$REPO_VALID" > /dev/null
echo "Upload abgeschlossen. Repo: $GITURL (neu angelegt, Standard-Branch: main)"
else
echo "Upload abgeschlossen. Repo: $GITURL (bestehendes Repo aktualisiert)"
fi