fix: include git tag context in startup banners

This commit is contained in:
3252a8
2026-05-17 22:20:45 +03:00
parent e2038085ca
commit 820548cb2d
4 changed files with 78 additions and 7 deletions
+34 -6
View File
@@ -24,16 +24,44 @@ def _env(name: str, default: str = "-") -> str:
return os.getenv(name) or default return os.getenv(name) or default
def _build_file(name: str, default: str = "-") -> str:
try:
value = (_APP_ROOT / name).read_text(encoding="utf-8").strip()
except OSError:
return default
return value or default
def _build_commit() -> str: def _build_commit() -> str:
for env_name in ("REMNAWAVE_MINISHOP_COMMIT", "GIT_COMMIT", "COMMIT_SHA"): for env_name in ("REMNAWAVE_MINISHOP_COMMIT", "GIT_COMMIT", "COMMIT_SHA"):
value = os.getenv(env_name) value = os.getenv(env_name)
if value: if value:
return value.strip()[:40] or "-" return value.strip()[:40] or "-"
try: return _build_file(".build-commit")[:40] or "-"
value = (_APP_ROOT / ".build-commit").read_text(encoding="utf-8").strip()
except OSError:
return "-" def _build_tag() -> str:
return value[:40] or "-" for env_name in ("REMNAWAVE_MINISHOP_TAG", "GIT_TAG", "BUILD_TAG"):
value = os.getenv(env_name)
if value:
return value.strip()[:40] or "-"
return _build_file(".build-tag")[:40] or "-"
def _image_tag_display(image_tag: str) -> str:
normalized = image_tag.lower()
build_tag = _build_tag()
build_commit = _build_commit()
if normalized == "latest" and build_tag != "-":
return f"latest-{build_tag}"
if normalized == "dev":
if build_tag != "-" and build_commit != "-":
return f"dev-{build_tag}+{build_commit}"
if build_tag != "-":
return f"dev-{build_tag}"
if build_commit != "-":
return f"dev+{build_commit}"
return image_tag
def _bool_env(name: str) -> str: def _bool_env(name: str) -> str:
@@ -70,7 +98,7 @@ 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 = [ common = [
f"image tag :: {image_tag}", f"image tag :: {_image_tag_display(image_tag)}",
f"commit :: {_build_commit()}", f"commit :: {_build_commit()}",
f"log level :: {log_level}", f"log level :: {log_level}",
] ]
+3
View File
@@ -28,6 +28,7 @@ RUN set -eu; \
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' "${tag:-unknown}" > /build-tag; \
printf '%s' "${sha:-unknown}" > /build-commit printf '%s' "${sha:-unknown}" > /build-commit
@@ -49,6 +50,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-tag /app/.build-tag
COPY --from=version-builder /build-commit /app/.build-commit 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
@@ -99,6 +101,7 @@ 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-tag /build-tag
COPY --from=version-builder /build-commit /build-commit 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
+19 -1
View File
@@ -1,10 +1,28 @@
#!/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}"
IMAGE_TAG_VALUE="${IMAGE_TAG:-local}"
BUILD_TAG="${REMNAWAVE_MINISHOP_TAG:-${GIT_TAG:-${BUILD_TAG:-}}}"
if [ -z "$BUILD_TAG" ] && [ -r /build-tag ]; then
BUILD_TAG="$(cat /build-tag)"
fi
BUILD_TAG="${BUILD_TAG:-unknown}"
BUILD_COMMIT="${REMNAWAVE_MINISHOP_COMMIT:-${GIT_COMMIT:-${COMMIT_SHA:-}}}" BUILD_COMMIT="${REMNAWAVE_MINISHOP_COMMIT:-${GIT_COMMIT:-${COMMIT_SHA:-}}}"
if [ -z "$BUILD_COMMIT" ] && [ -r /build-commit ]; then if [ -z "$BUILD_COMMIT" ] && [ -r /build-commit ]; then
BUILD_COMMIT="$(cat /build-commit)" BUILD_COMMIT="$(cat /build-commit)"
fi fi
BUILD_COMMIT="${BUILD_COMMIT:-unknown}" BUILD_COMMIT="${BUILD_COMMIT:-unknown}"
DISPLAY_IMAGE_TAG="$IMAGE_TAG_VALUE"
if [ "$IMAGE_TAG_VALUE" = "latest" ] && [ "$BUILD_TAG" != "unknown" ]; then
DISPLAY_IMAGE_TAG="latest-${BUILD_TAG}"
elif [ "$IMAGE_TAG_VALUE" = "dev" ]; then
if [ "$BUILD_TAG" != "unknown" ] && [ "$BUILD_COMMIT" != "unknown" ]; then
DISPLAY_IMAGE_TAG="dev-${BUILD_TAG}+${BUILD_COMMIT}"
elif [ "$BUILD_TAG" != "unknown" ]; then
DISPLAY_IMAGE_TAG="dev-${BUILD_TAG}"
elif [ "$BUILD_COMMIT" != "unknown" ]; then
DISPLAY_IMAGE_TAG="dev+${BUILD_COMMIT}"
fi
fi
cat <<EOF cat <<EOF
@@ -18,7 +36,7 @@ cat <<EOF
╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝
container :: FRONTEND container :: FRONTEND
image tag :: ${IMAGE_TAG:-local} image tag :: ${DISPLAY_IMAGE_TAG}
commit :: ${BUILD_COMMIT} commit :: ${BUILD_COMMIT}
listen :: :80 listen :: :80
published :: ${PUBLISHED} published :: ${PUBLISHED}
+22
View File
@@ -22,6 +22,7 @@ class StartupBannerTests(unittest.TestCase):
service, service,
{ {
"IMAGE_TAG": "test-tag", "IMAGE_TAG": "test-tag",
"REMNAWAVE_MINISHOP_TAG": "v3.4.0",
"REMNAWAVE_MINISHOP_COMMIT": "abc1234", "REMNAWAVE_MINISHOP_COMMIT": "abc1234",
"POSTGRES_HOST": "postgres", "POSTGRES_HOST": "postgres",
"POSTGRES_DB": "postgres", "POSTGRES_DB": "postgres",
@@ -35,6 +36,27 @@ class StartupBannerTests(unittest.TestCase):
self.assertIn("███", output) self.assertIn("███", output)
self.assertNotIn("в", output) self.assertNotIn("в", output)
def test_startup_banner_expands_latest_and_dev_tags(self):
latest_output = _render(
"backend",
{
"IMAGE_TAG": "latest",
"REMNAWAVE_MINISHOP_TAG": "v3.4.0",
"REMNAWAVE_MINISHOP_COMMIT": "abc1234",
},
)
self.assertIn("image tag :: latest-v3.4.0", latest_output)
dev_output = _render(
"backend",
{
"IMAGE_TAG": "dev",
"REMNAWAVE_MINISHOP_TAG": "v3.4.0",
"REMNAWAVE_MINISHOP_COMMIT": "abc1234",
},
)
self.assertIn("image tag :: dev-v3.4.0+abc1234", dev_output)
class StartupBannerServiceDetailsTests(unittest.TestCase): class StartupBannerServiceDetailsTests(unittest.TestCase):
def test_backend_lists_ports_postgres_and_redis(self): def test_backend_lists_ports_postgres_and_redis(self):