chore(release): v0.5.1-beta — push Docker image to Gitea Container Registry
CI / test (push) Has been cancelled
CI / test (push) Has been cancelled
- bin/build-and-push.sh: baut + pusht Image in die Gitea-Registry unter git.pkop.de/vibecode/watchlist:<version> - bin/get-version.py: liest __version__ aus app/__init__.py (single source of truth, kein Quoting-Wahnsinn in Bash) - bin/build-image.sh + write-manifest.sh nutzen den neuen Helper - dist/README.md: erklärt die Registry-Policy (kein Tar im Repo) - load-image.sh entfernt — Tars gibt's nicht mehr - .gitignore: dist/*.tar + manifest.json ausschließen, dist/README.md bleibt dokumentiert - docker-compose.yml: Hinweis auf Registry-Image - CI-Workflow: vereinfacht, Push läuft lokal (idempotent) - Version auf 0.5.1-beta gebumpt Verifiziert end-to-end: bin/build-and-push.sh -> Image in Gitea-Registry docker rmi ... -> lokal weg docker pull ... -> aus Registry gezogen docker run ... -> startet, version 0.5.1-beta, 8 unique Items
This commit is contained in:
Executable
+38
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env bash
|
||||
# Baut das Image und pusht es in die Gitea Container Registry.
|
||||
# Verwendung:
|
||||
# bin/build-and-push.sh # Version aus app/__init__.py
|
||||
# VERSION=0.6.0 bin/build-and-push.sh # explizite Version
|
||||
# bin/build-and-push.sh --load # baut + laedt nur (kein Push)
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
if [ -z "${VERSION:-}" ]; then
|
||||
VERSION=$(python3 bin/get-version.py)
|
||||
fi
|
||||
|
||||
# Gitea-Registry-Pfad. Wichtig: lowercase, weil Docker-Repository-Namen
|
||||
# kleingeschrieben sein muessen (Gitea-Owner kann gross sein, Docker nicht).
|
||||
REGISTRY="${REGISTRY:-git.pkop.de}"
|
||||
OWNER_LC=$(echo "${OWNER:-Vibecode}" | tr '[:upper:]' '[:lower:]')
|
||||
REPO_LC=$(echo "${REPO:-watchlist}" | tr '[:upper:]' '[:lower:]')
|
||||
LOCAL_TAG="watchstack:${VERSION}"
|
||||
REMOTE_TAG="${REGISTRY}/${OWNER_LC}/${REPO_LC}:${VERSION}"
|
||||
|
||||
echo ">> Building ${LOCAL_TAG}"
|
||||
docker build -t "${LOCAL_TAG}" .
|
||||
|
||||
echo ">> Tagging as ${REMOTE_TAG}"
|
||||
docker tag "${LOCAL_TAG}" "${REMOTE_TAG}"
|
||||
|
||||
if [ "${1:-}" = "--load" ]; then
|
||||
echo ">> Loaded into local Docker. Skipping push."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ">> Pushing to ${REMOTE_TAG}"
|
||||
docker push "${REMOTE_TAG}"
|
||||
|
||||
echo ">> Done."
|
||||
echo " Pull with: docker pull ${REMOTE_TAG}"
|
||||
echo " Run with: docker run -d --name watchstack -p 8000:8000 -v watchstack-data:/data ${REMOTE_TAG}"
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env bash
|
||||
# Baut das Docker-Image und legt es als versionierten Tar in dist/ ab.
|
||||
# Verwendung:
|
||||
# bin/build-image.sh # baut mit Version aus app/__init__.py
|
||||
# bin/build-image.sh --load # baut + laedt direkt in lokales Docker
|
||||
# VERSION=0.6.0 bin/build-image.sh # baut mit expliziter Version
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
# Version aus app/__init__.py lesen, falls nicht via env ueberschrieben
|
||||
if [ -z "${VERSION:-}" ]; then
|
||||
VERSION=$(python3 bin/get-version.py)
|
||||
fi
|
||||
IMAGE="watchstack:${VERSION}"
|
||||
TAR="dist/watchstack-${VERSION}.docker.tar"
|
||||
|
||||
mkdir -p dist
|
||||
echo ">> Building ${IMAGE}"
|
||||
docker build -t "${IMAGE}" .
|
||||
|
||||
if [ "${1:-}" = "--load" ]; then
|
||||
echo ">> Loaded into local Docker as ${IMAGE}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ">> Saving to ${TAR}"
|
||||
docker save -o "${TAR}" "${IMAGE}"
|
||||
|
||||
# Manifest schreiben
|
||||
bash bin/write-manifest.sh >/dev/null
|
||||
echo ">> Wrote dist/manifest.json"
|
||||
|
||||
echo ">> Done. Size:"
|
||||
du -h "${TAR}"
|
||||
echo
|
||||
echo "Hinweis: Statt Tar ins Repo zu legen wird das Image normalerweise"
|
||||
echo "in die Gitea Container Registry gepusht -> bin/build-and-push.sh"
|
||||
echo ""
|
||||
echo "Lokal nutzbar via:"
|
||||
echo " docker load -i ${TAR}"
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Liest die Version aus app/__init__.py (single source of truth).
|
||||
Verwendung: VERSION=$(python3 bin/get-version.py)
|
||||
"""
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
text = (Path(__file__).parent.parent / "app" / "__init__.py").read_text()
|
||||
m = re.search(r'__version__\s*=\s*["\'](.+?)["\']', text)
|
||||
if not m:
|
||||
sys.exit("__version__ nicht gefunden")
|
||||
print(m.group(1))
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
# Schreibt dist/manifest.json mit Build-Metadaten.
|
||||
# Wird von bin/build-image.sh aufgerufen; kann auch solo laufen.
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
if [ -z "${VERSION:-}" ]; then
|
||||
VERSION=$(python3 bin/get-version.py)
|
||||
fi
|
||||
GIT_SHA=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||
GIT_TAG=$(git describe --tags --exact-match 2>/dev/null || echo "")
|
||||
BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
mkdir -p dist
|
||||
cat > dist/manifest.json <<EOF
|
||||
{
|
||||
"name": "watchstack",
|
||||
"version": "${VERSION}",
|
||||
"git_sha": "${GIT_SHA}",
|
||||
"git_tag": "${GIT_TAG}",
|
||||
"build_date": "${BUILD_DATE}",
|
||||
"image": "watchstack:${VERSION}",
|
||||
"tarball": "dist/watchstack-${VERSION}.docker.tar",
|
||||
"license": "Apache-2.0",
|
||||
"source": "https://git.pkop.de/Vibecode/watchlist"
|
||||
}
|
||||
EOF
|
||||
echo ">> Wrote dist/manifest.json"
|
||||
cat dist/manifest.json
|
||||
Reference in New Issue
Block a user