fix: show commit SHA in startup banners
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
*.sh text eol=lf
|
||||||
|
deploy/docker/frontend/*.sh text eol=lf
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
from urllib.parse import urlsplit
|
from urllib.parse import urlsplit
|
||||||
|
|
||||||
_BANNER_TEMPLATE = """
|
_BANNER_TEMPLATE = """
|
||||||
@@ -16,12 +17,25 @@ _BANNER_TEMPLATE = """
|
|||||||
{details}
|
{details}
|
||||||
https://github.com/3252a8/remnawave-minishop
|
https://github.com/3252a8/remnawave-minishop
|
||||||
"""
|
"""
|
||||||
|
_APP_ROOT = Path(__file__).resolve().parents[1]
|
||||||
|
|
||||||
|
|
||||||
def _env(name: str, default: str = "-") -> str:
|
def _env(name: str, default: str = "-") -> str:
|
||||||
return os.getenv(name) or default
|
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:
|
def _bool_env(name: str) -> str:
|
||||||
value = _env(name, "").lower()
|
value = _env(name, "").lower()
|
||||||
if value in {"1", "true", "yes", "on"}:
|
if value in {"1", "true", "yes", "on"}:
|
||||||
@@ -55,7 +69,11 @@ def _detail_line(text: str) -> str:
|
|||||||
def _service_details(service: str) -> str:
|
def _service_details(service: str) -> str:
|
||||||
image_tag = _env("IMAGE_TAG", "local")
|
image_tag = _env("IMAGE_TAG", "local")
|
||||||
log_level = _env("LOG_LEVEL", "INFO")
|
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":
|
if service == "backend":
|
||||||
lines = [
|
lines = [
|
||||||
*common,
|
*common,
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ RUN set -eu; \
|
|||||||
version="dev+unknown"; \
|
version="dev+unknown"; \
|
||||||
fi; \
|
fi; \
|
||||||
if [ -n "$dirty" ]; then version="${version}-dirty"; 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
|
FROM python:3.12-slim AS python-base
|
||||||
@@ -48,6 +49,7 @@ COPY backend ./backend
|
|||||||
COPY locales ./locales
|
COPY locales ./locales
|
||||||
COPY data ./data
|
COPY data ./data
|
||||||
COPY --from=version-builder /build-version /app/.build-version
|
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
|
RUN mkdir -p /app/logs /app/data && chown -R appuser:appuser /app/logs /app/data
|
||||||
|
|
||||||
USER appuser
|
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/nginx.conf /etc/nginx/conf.d/default.conf
|
||||||
COPY deploy/docker/frontend/00-startup-banner.sh /docker-entrypoint.d/00-startup-banner.sh
|
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 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.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.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/
|
COPY --from=frontend-builder /app/backend/bot/app/web/templates/subscription_webapp.min.*.js /usr/share/nginx/html/
|
||||||
|
|
||||||
RUN set -eu; \
|
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); \
|
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}"; \
|
JS_NAME="${HASHED:-subscription_webapp.js}"; \
|
||||||
sed -i \
|
sed -i \
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
PUBLISHED="${FRONTEND_PUBLIC:-127.0.0.1:${FRONTEND_PORT:-8082}->80}"
|
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
|
cat <<EOF
|
||||||
|
|
||||||
@@ -14,6 +19,7 @@ cat <<EOF
|
|||||||
|
|
||||||
container :: FRONTEND
|
container :: FRONTEND
|
||||||
image tag :: ${IMAGE_TAG:-local}
|
image tag :: ${IMAGE_TAG:-local}
|
||||||
|
commit :: ${BUILD_COMMIT}
|
||||||
listen :: :80
|
listen :: :80
|
||||||
published :: ${PUBLISHED}
|
published :: ${PUBLISHED}
|
||||||
upstream :: backend:8081
|
upstream :: backend:8081
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ class StartupBannerTests(unittest.TestCase):
|
|||||||
service,
|
service,
|
||||||
{
|
{
|
||||||
"IMAGE_TAG": "test-tag",
|
"IMAGE_TAG": "test-tag",
|
||||||
|
"REMNAWAVE_MINISHOP_COMMIT": "abc1234",
|
||||||
"POSTGRES_HOST": "postgres",
|
"POSTGRES_HOST": "postgres",
|
||||||
"POSTGRES_DB": "postgres",
|
"POSTGRES_DB": "postgres",
|
||||||
"REDIS_URL": "redis://redis:6379/0",
|
"REDIS_URL": "redis://redis:6379/0",
|
||||||
@@ -29,6 +30,7 @@ class StartupBannerTests(unittest.TestCase):
|
|||||||
)
|
)
|
||||||
self.assertIn(f"container :: {service.upper()}", output)
|
self.assertIn(f"container :: {service.upper()}", output)
|
||||||
self.assertIn("image tag :: test-tag", output)
|
self.assertIn("image tag :: test-tag", output)
|
||||||
|
self.assertIn("commit :: abc1234", output)
|
||||||
self.assertIn("remnawave-minishop", output)
|
self.assertIn("remnawave-minishop", output)
|
||||||
self.assertIn("███", output)
|
self.assertIn("███", output)
|
||||||
self.assertNotIn("в", output)
|
self.assertNotIn("в", output)
|
||||||
|
|||||||
Reference in New Issue
Block a user