scripte/git_gitea_menu.sh

123 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
GITEA_URL="https://gitea.kasimirat.de"
GITEA_USER="thomas"
GITEA_TOKEN="289ac11a4ad2938fa34e6baa29bec74bdbcbb57b"
validate_repo_name() {
local name="$1"
# Leerzeichen durch Bindestrich ersetzen
name="${name// /-}"
# Prüfen auf erlaubte Zeichen
if [[ ! "$name" =~ ^[A-Za-z0-9._-]+$ ]]; then
echo "Ungültiger Repo-Name! Nur Buchstaben, Zahlen, Bindestrich (-), Unterstrich (_) und Punkt (.) sind erlaubt."
return 1
fi
echo "$name"
}
while true; do
clear
echo "==== Git & Gitea Menü ===="
echo "1) Repository klonen"
echo "2) Status anzeigen"
echo "3) Pull"
echo "4) Push"
echo "5) Branch wechseln"
echo "6) Commit"
echo "7) Gitea: Repo-Liste anzeigen"
echo "8) Gitea: Neues Repo anlegen"
echo "9) Gitea: Issue anzeigen"
echo "10) Gitea: Issue erstellen"
echo "q) Beenden"
echo
read -p "Bitte Auswahl eingeben: " auswahl
case $auswahl in
1)
read -p "Repo-URL (z.B. https://gitea.kasimirat.de/thomas/repo.git, z für zurück): " url
[[ "$url" =~ ^[zZ]$ ]] && continue
repo_name=$(basename -s .git "$url")
valid_name=$(validate_repo_name "$repo_name") || { read -p "Weiter mit Enter..."; continue; }
url_valid=$(echo "$url" | sed "s|$repo_name|$valid_name|")
git clone "$url_valid"
read -p "Weiter mit Enter..."
;;
2)
git status
read -p "Weiter mit Enter... (z für zurück)" z; [[ "$z" =~ ^[zZ]$ ]] && continue
;;
3)
git pull
read -p "Weiter mit Enter... (z für zurück)" z; [[ "$z" =~ ^[zZ]$ ]] && continue
;;
4)
git push
read -p "Weiter mit Enter... (z für zurück)" z; [[ "$z" =~ ^[zZ]$ ]] && continue
;;
5)
git branch
read -p "Branch-Name (z für zurück): " br
[[ "$br" =~ ^[zZ]$ ]] && continue
git checkout "$br"
read -p "Weiter mit Enter..."
;;
6)
git status
read -p "Commit-Message (z für zurück): " msg
[[ "$msg" =~ ^[zZ]$ ]] && continue
git add .
git commit -m "$msg"
read -p "Weiter mit Enter..."
;;
7)
curl -s -H "Authorization: token $GITEA_TOKEN" "$GITEA_URL/api/v1/user/repos" | jq '.[] | .full_name'
read -p "Weiter mit Enter... (z für zurück)" z; [[ "$z" =~ ^[zZ]$ ]] && continue
;;
8)
read -p "Neuer Repo-Name (z für zurück): " repo
[[ "$repo" =~ ^[zZ]$ ]] && continue
valid_name=$(validate_repo_name "$repo") || { read -p "Weiter mit Enter..."; continue; }
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: token $GITEA_TOKEN" \
-d '{"name":"'$valid_name'","private":false}' "$GITEA_URL/api/v1/user/repos" > /dev/null
echo "Repository mit dem Namen $valid_name wurde angelegt."
read -p "Weiter mit Enter..."
;;
9)
read -p "Repo (z.B. thomas/repo, z für zurück): " repo
[[ "$repo" =~ ^[zZ]$ ]] && continue
user_part=$(echo "$repo" | cut -d'/' -f1)
repo_part=$(echo "$repo" | cut -d'/' -f2)
valid_repo_part=$(validate_repo_name "$repo_part") || { read -p "Weiter mit Enter..."; continue; }
repo_valid="$user_part/$valid_repo_part"
read -p "Issue-Nummer (z für zurück): " num
[[ "$num" =~ ^[zZ]$ ]] && continue
curl -s -H "Authorization: token $GITEA_TOKEN" "$GITEA_URL/api/v1/repos/$repo_valid/issues/$num" | jq
read -p "Weiter mit Enter..."
;;
10)
read -p "Repo (z.B. thomas/repo, z für zurück): " repo
[[ "$repo" =~ ^[zZ]$ ]] && continue
user_part=$(echo "$repo" | cut -d'/' -f1)
repo_part=$(echo "$repo" | cut -d'/' -f2)
valid_repo_part=$(validate_repo_name "$repo_part") || { read -p "Weiter mit Enter..."; continue; }
repo_valid="$user_part/$valid_repo_part"
read -p "Titel (z für zurück): " titel
[[ "$titel" =~ ^[zZ]$ ]] && continue
read -p "Beschreibung (z für zurück): " desc
[[ "$desc" =~ ^[zZ]$ ]] && continue
curl -s -X POST -H "Content-Type: application/json" -H "Authorization: token $GITEA_TOKEN" \
-d '{"title":"'$titel'","body":"'$desc'"}' "$GITEA_URL/api/v1/repos/$repo_valid/issues" > /dev/null
echo "Issue erstellt."
read -p "Weiter mit Enter..."
;;
q)
echo "Beende Menü."
exit 0
;;
*)
echo "Ungültige Auswahl."
read -p "Weiter mit Enter..."
;;
esac
done