This commit is contained in:
2026-08-18 09:37:59 +02:00
parent 8726ce1a45
commit ab5c611338
5 changed files with 112 additions and 74 deletions
+44 -40
View File
@@ -11,22 +11,23 @@ Verwendung:
Beispiele:
./release.sh 3.3
./release.sh v3.3
./release.sh V3.3
./release.sh 3.3.1
Ablauf:
1. git add -A
2. git commit -m "V<version>"
3. git push über origin/SSH
4. build-and-push-gitea.sh
5. Docker-Image mit Versionstag pushen
6. denselben Stand zusätzlich als :latest markieren
3. git push origin <branch>
4. Docker-Build + Push nach Gitea
5. Versionstag + latest
Voraussetzungen:
- origin zeigt per SSH auf Gitea, z.B.
git@git.d-razz.de:mboehmlaender/fixfin.git
- Docker-Registry einmalig für root angemeldet:
sudo docker login git.d-razz.de
- Git-Push funktioniert über deinen konfigurierten origin-Remote.
- Docker kann als aktueller Benutzer ausgeführt werden:
docker ps
- Einmalig bei der Gitea Registry anmelden:
docker login git.d-razz.de -u michael
EOF
}
@@ -37,13 +38,12 @@ if [[ -z "${VERSION_RAW}" ]]; then
exit 1
fi
# V/v am Anfang entfernen und anschließend einheitlich als Vx.x verwenden.
VERSION="${VERSION_RAW#V}"
VERSION="${VERSION#v}"
if [[ ! "${VERSION}" =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then
echo "FEHLER: Ungültige Version '${VERSION_RAW}'."
echo "Erwartet z.B. 3.3, V3.3 oder 3.3.1"
echo "Erwartet z.B. 3.3, v3.3, V3.3 oder 3.3.1"
exit 1
fi
@@ -55,6 +55,23 @@ command -v git >/dev/null 2>&1 || {
exit 1
}
command -v docker >/dev/null 2>&1 || {
echo "FEHLER: docker wurde nicht gefunden."
exit 1
}
docker info >/dev/null 2>&1 || {
echo "FEHLER: Docker ist für den aktuellen Benutzer nicht erreichbar."
echo
echo "Teste:"
echo " docker ps"
echo
echo "Falls Permission denied:"
echo " sudo usermod -aG docker $USER"
echo " newgrp docker"
exit 1
}
[[ -x "${BUILD_SCRIPT}" ]] || {
echo "FEHLER: ${BUILD_SCRIPT} fehlt oder ist nicht ausführbar."
echo "Fix:"
@@ -76,30 +93,30 @@ if [[ -z "${REMOTE}" ]]; then
exit 1
fi
# Registry-Host und owner/repo automatisch aus einem SSH-Remote ableiten.
# Unterstützt:
# git@host:owner/repo.git
# ssh://git@host/owner/repo.git
# owner/repo + Registry aus SSH- oder HTTPS-Remote ableiten.
# Unterstützt z.B.:
# git@git.d-razz.de:michael/fixfin.git
# ssh://git@git.d-razz.de/michael/fixfin.git
# https://git.d-razz.de/michael/fixfin.git
if [[ "${REMOTE}" =~ ^git@([^:]+):(.+)$ ]]; then
REGISTRY="${BASH_REMATCH[1]}"
IMAGE_PATH="${BASH_REMATCH[2]}"
elif [[ "${REMOTE}" =~ ^ssh://git@([^/]+)/(.+)$ ]]; then
REGISTRY="${BASH_REMATCH[1]}"
IMAGE_PATH="${BASH_REMATCH[2]}"
elif [[ "${REMOTE}" =~ ^https?://([^/]+)/(.+)$ ]]; then
REGISTRY="${BASH_REMATCH[1]}"
IMAGE_PATH="${BASH_REMATCH[2]}"
else
echo "FEHLER: origin ist kein unterstützter SSH-Remote:"
echo "FEHLER: origin konnte nicht ausgewertet werden:"
echo " ${REMOTE}"
echo
echo "Erwartet z.B.:"
echo " git@git.d-razz.de:mboehmlaender/fixfin.git"
exit 1
fi
IMAGE_PATH="${IMAGE_PATH%.git}"
# Sicherheitsprüfung
if [[ ! "${IMAGE_PATH}" =~ ^[^/]+/[^/]+$ ]]; then
echo "FEHLER: owner/repo konnte aus dem Remote nicht sicher ermittelt werden:"
echo "FEHLER: owner/repo konnte nicht sicher ermittelt werden:"
echo " ${IMAGE_PATH}"
exit 1
fi
@@ -120,10 +137,10 @@ echo "Repository : ${REMOTE}"
echo "Branch : ${BRANCH}"
echo "Registry : ${REGISTRY}"
echo "Image : ${REGISTRY}/${IMAGE_PATH}"
echo "Tag : ${IMAGE_TAG} + latest"
echo "Tags : ${IMAGE_TAG}, latest"
echo
echo ">>> Prüfe SSH-Zugriff auf origin ..."
echo ">>> Prüfe Git-Remote ..."
git ls-remote origin HEAD >/dev/null
echo ">>> Stage Änderungen ..."
@@ -139,28 +156,16 @@ fi
echo ">>> Commit ${COMMIT_MESSAGE} ..."
git commit -m "${COMMIT_MESSAGE}"
echo ">>> Git Push über SSH ..."
echo ">>> Git Push ..."
git push origin "${BRANCH}"
echo
echo ">>> Docker Registry Authentifizierung prüfen ..."
# sudo wird hier einmal initialisiert. Docker-Registry-Credentials liegen
# danach dauerhaft in der Docker-Konfiguration des root-Benutzers, sofern
# zuvor 'sudo docker login <registry>' ausgeführt wurde.
sudo -v
echo
echo ">>> Build + Push ${IMAGE_TAG} ..."
sudo "${BUILD_SCRIPT}" \
echo ">>> Docker Build + Push ..."
"${BUILD_SCRIPT}" \
"${REGISTRY}" \
"${IMAGE_PATH}" \
"${IMAGE_TAG}"
echo
echo ">>> Markiere denselben Image-Stand zusätzlich als latest ..."
sudo docker buildx imagetools create \
--tag "${REGISTRY}/${IMAGE_PATH}:latest" \
"${REGISTRY}/${IMAGE_PATH}:${IMAGE_TAG}"
"${IMAGE_TAG}" \
"latest"
echo
echo "============================================================"
@@ -173,4 +178,3 @@ echo
echo "Docker:"
echo " ${REGISTRY}/${IMAGE_PATH}:${IMAGE_TAG}"
echo " ${REGISTRY}/${IMAGE_PATH}:latest"
echo