fix: show commit SHA in startup banners

This commit is contained in:
3252a8
2026-05-17 22:11:17 +03:00
parent 3676bf1ae7
commit e2038085ca
5 changed files with 34 additions and 2 deletions
+2
View File
@@ -0,0 +1,2 @@
*.sh text eol=lf
deploy/docker/frontend/*.sh text eol=lf
+19 -1
View File
@@ -1,5 +1,6 @@
import os
import sys
from pathlib import Path
from urllib.parse import urlsplit
_BANNER_TEMPLATE = """
@@ -16,12 +17,25 @@ _BANNER_TEMPLATE = """
{details}
https://github.com/3252a8/remnawave-minishop
"""
_APP_ROOT = Path(__file__).resolve().parents[1]
def _env(name: str, default: str = "-") -> str:
return os.getenv(name) or default
def _build_commit() -> str:
for env_name in ("REMNAWAVE_MINISHOP_COMMIT", "GIT_COMMIT", "COMMIT_SHA"):
value = os.getenv(env_name)
if value:
return value.strip()[:40] or "-"
try:
value = (_APP_ROOT / ".build-commit").read_text(encoding="utf-8").strip()
except OSError:
return "-"
return value[:40] or "-"
def _bool_env(name: str) -> str:
value = _env(name, "").lower()
if value in {"1", "true", "yes", "on"}:
@@ -55,7 +69,11 @@ def _detail_line(text: str) -> str:
def _service_details(service: str) -> str:
image_tag = _env("IMAGE_TAG", "local")
log_level = _env("LOG_LEVEL", "INFO")
common = [f"image tag :: {image_tag}", f"log level :: {log_level}"]
common = [
f"image tag :: {image_tag}",
f"commit :: {_build_commit()}",
f"log level :: {log_level}",
]
if service == "backend":
lines = [
*common,
+5 -1
View File
@@ -27,7 +27,8 @@ RUN set -eu; \
version="dev+unknown"; \
fi; \
if [ -n "$dirty" ]; then version="${version}-dirty"; fi; \
printf '%s' "$version" > /build-version
printf '%s' "$version" > /build-version; \
printf '%s' "${sha:-unknown}" > /build-commit
FROM python:3.12-slim AS python-base
@@ -48,6 +49,7 @@ COPY backend ./backend
COPY locales ./locales
COPY data ./data
COPY --from=version-builder /build-version /app/.build-version
COPY --from=version-builder /build-commit /app/.build-commit
RUN mkdir -p /app/logs /app/data && chown -R appuser:appuser /app/logs /app/data
USER appuser
@@ -97,12 +99,14 @@ LABEL org.opencontainers.image.source="https://github.com/3252a8/remnawave-minis
COPY deploy/docker/frontend/nginx.conf /etc/nginx/conf.d/default.conf
COPY deploy/docker/frontend/00-startup-banner.sh /docker-entrypoint.d/00-startup-banner.sh
COPY --from=version-builder /build-commit /build-commit
COPY backend/bot/app/web/templates/subscription_webapp.html /usr/share/nginx/html/index.html
COPY --from=frontend-builder /app/backend/bot/app/web/templates/subscription_webapp.css /usr/share/nginx/html/subscription_webapp.css
COPY --from=frontend-builder /app/backend/bot/app/web/templates/subscription_webapp.js /usr/share/nginx/html/subscription_webapp.js
COPY --from=frontend-builder /app/backend/bot/app/web/templates/subscription_webapp.min.*.js /usr/share/nginx/html/
RUN set -eu; \
find /docker-entrypoint.d -type f -name '*.sh' -exec sed -i 's/\r$//' {} +; \
HASHED=$(ls /usr/share/nginx/html/subscription_webapp.min.*.js 2>/dev/null | sort | tail -n1 | xargs -n1 basename || true); \
JS_NAME="${HASHED:-subscription_webapp.js}"; \
sed -i \
@@ -1,5 +1,10 @@
#!/bin/sh
PUBLISHED="${FRONTEND_PUBLIC:-127.0.0.1:${FRONTEND_PORT:-8082}->80}"
BUILD_COMMIT="${REMNAWAVE_MINISHOP_COMMIT:-${GIT_COMMIT:-${COMMIT_SHA:-}}}"
if [ -z "$BUILD_COMMIT" ] && [ -r /build-commit ]; then
BUILD_COMMIT="$(cat /build-commit)"
fi
BUILD_COMMIT="${BUILD_COMMIT:-unknown}"
cat <<EOF
@@ -14,6 +19,7 @@ cat <<EOF
container :: FRONTEND
image tag :: ${IMAGE_TAG:-local}
commit :: ${BUILD_COMMIT}
listen :: :80
published :: ${PUBLISHED}
upstream :: backend:8081
+2
View File
@@ -22,6 +22,7 @@ class StartupBannerTests(unittest.TestCase):
service,
{
"IMAGE_TAG": "test-tag",
"REMNAWAVE_MINISHOP_COMMIT": "abc1234",
"POSTGRES_HOST": "postgres",
"POSTGRES_DB": "postgres",
"REDIS_URL": "redis://redis:6379/0",
@@ -29,6 +30,7 @@ class StartupBannerTests(unittest.TestCase):
)
self.assertIn(f"container :: {service.upper()}", output)
self.assertIn("image tag :: test-tag", output)
self.assertIn("commit :: abc1234", output)
self.assertIn("remnawave-minishop", output)
self.assertIn("███", output)
self.assertNotIn("в", output)