forked from viewit/KX-Bridge-Release
feat: pull image from registry instead of local build, ask stable/nightly
start.sh now pulls gitea.it-drui.de/viewit/kx-bridge:latest or :nightly depending on user choice (interactive prompt or ./start.sh <channel> argument), instead of building the image locally from source.
This commit is contained in:
64
start.sh
64
start.sh
@ -1,10 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# start.sh – KX-Bridge starten (baut Docker-Image automatisch wenn nötig)
|
# start.sh – KX-Bridge starten (zieht das fertige Image aus der Registry)
|
||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
IMAGE_BASE="gitea.it-drui.de/viewit/kx-bridge"
|
||||||
|
|
||||||
# .env anlegen falls nicht vorhanden
|
# .env anlegen falls nicht vorhanden
|
||||||
if [[ ! -f .env ]]; then
|
if [[ ! -f .env ]]; then
|
||||||
if [[ -f .env.example ]]; then
|
if [[ -f .env.example ]]; then
|
||||||
@ -30,38 +32,38 @@ if ! docker info > /dev/null 2>&1; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Prüfen ob Build nötig ist
|
# Release-Kanal abfragen
|
||||||
NEEDS_BUILD=0
|
CHANNEL=""
|
||||||
if ! docker image inspect kx-bridge:latest > /dev/null 2>&1; then
|
if [[ "${1:-}" == "stable" || "${1:-}" == "nightly" ]]; then
|
||||||
echo "[start] Image nicht vorhanden – baue kx-bridge:latest ..."
|
CHANNEL="$1"
|
||||||
NEEDS_BUILD=1
|
|
||||||
else
|
else
|
||||||
# Image-Erstellungszeit in Unix-Sekunden
|
echo ""
|
||||||
IMAGE_TS=$(docker inspect --format='{{.Created}}' kx-bridge:latest \
|
echo " Welchen Release-Kanal möchtest du starten?"
|
||||||
| python3 -c "import sys,datetime; s=sys.stdin.read().strip(); \
|
echo " 1) stable (empfohlen)"
|
||||||
s=s[:26].rstrip('Z').replace('T',' '); \
|
echo " 2) nightly (getestete Vorabversion)"
|
||||||
print(int(datetime.datetime.fromisoformat(s).replace(tzinfo=datetime.timezone.utc).timestamp()))" 2>/dev/null || echo 0)
|
echo -n " Auswahl [1]: "
|
||||||
|
read -r CHOICE
|
||||||
for f in Dockerfile \
|
case "$CHOICE" in
|
||||||
bridge/kobrax_moonraker_bridge.py \
|
2) CHANNEL="nightly" ;;
|
||||||
bridge/kobrax_client.py \
|
*) CHANNEL="stable" ;;
|
||||||
bridge/env_loader.py \
|
esac
|
||||||
bridge/requirements.txt \
|
|
||||||
bridge/anycubic_slicer.crt \
|
|
||||||
bridge/anycubic_slicer.key; do
|
|
||||||
if [[ -f "$f" ]]; then
|
|
||||||
FILE_TS=$(python3 -c "import os; print(int(os.path.getmtime('$f')))" 2>/dev/null || echo 0)
|
|
||||||
if [[ $FILE_TS -gt $IMAGE_TS ]]; then
|
|
||||||
echo "[start] '$f' ist neuer als das Image – baue neu ..."
|
|
||||||
NEEDS_BUILD=1
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ $NEEDS_BUILD -eq 1 ]]; then
|
if [[ "$CHANNEL" == "nightly" ]]; then
|
||||||
docker build -t kx-bridge:latest .
|
IMAGE_TAG="nightly"
|
||||||
|
else
|
||||||
|
IMAGE_TAG="latest"
|
||||||
|
fi
|
||||||
|
IMAGE="$IMAGE_BASE:$IMAGE_TAG"
|
||||||
|
|
||||||
|
echo "[start] Kanal: $CHANNEL → Image: $IMAGE"
|
||||||
|
echo "[start] Ziehe aktuelles Image ..."
|
||||||
|
docker pull "$IMAGE"
|
||||||
|
|
||||||
|
# docker-compose.yml auf den gewählten Kanal umschreiben (nur die image-Zeile)
|
||||||
|
if [[ -f docker-compose.yml ]]; then
|
||||||
|
sed -i.bak -E "s#^(\s*image:\s*).*#\1$IMAGE#" docker-compose.yml
|
||||||
|
rm -f docker-compose.yml.bak
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Container starten
|
# Container starten
|
||||||
@ -70,7 +72,7 @@ docker-compose down 2>/dev/null || true
|
|||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo " ✓ KX-Bridge läuft"
|
echo " ✓ KX-Bridge läuft ($CHANNEL)"
|
||||||
echo " Web-UI : http://$(hostname -I | awk '{print $1}'):7125"
|
echo " Web-UI : http://$(hostname -I | awk '{print $1}'):7125"
|
||||||
echo " Logs : docker-compose logs -f"
|
echo " Logs : docker-compose logs -f"
|
||||||
echo " Stop : docker-compose down"
|
echo " Stop : docker-compose down"
|
||||||
|
|||||||
Reference in New Issue
Block a user