mirror of
https://github.com/BetterCorp/BetterFrame.git
synced 2026-05-26 16:56:33 +00:00
fix(version): derive server version from git at Docker build time
Coolify pulls from GitHub and runs docker compose build — no guaranteed env vars like SOURCE_COMMIT. Previous approach relied on ARG/ENV passthrough that silently defaulted to "dev". Fix: install git in the builder stage, COPY .git into context, run git describe --tags --always to derive the version, write it to /app/server/.bf-version. version.ts reads this file as a fallback between env vars and the "dev" literal. Chain: BF_SERVER_VERSION env → BF_BUILD_VERSION env → .bf-version file → COOLIFY_GIT_COMMIT env → SOURCE_COMMIT env → "dev". Also: fix .gitignore for rauc-signing/ (was under wrong path).
This commit is contained in:
parent
653f2ce910
commit
7d81891b0e
4 changed files with 29 additions and 10 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -42,4 +42,5 @@ npm-debug.log*
|
|||
# Misc
|
||||
*.tgz
|
||||
*.tsbuildinfo
|
||||
/old-python/
|
||||
# RAUC signing keys (generated locally, secrets set in GitHub Actions)
|
||||
rauc-signing/
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ FROM node:24-trixie-slim AS builder
|
|||
|
||||
WORKDIR /app
|
||||
|
||||
# Build deps for argon2 + bsb-plugin-cli
|
||||
# Build deps for argon2 + bsb-plugin-cli + git for version stamping
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
build-essential python3 \
|
||||
build-essential python3 git \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY package.json package-lock.json ./
|
||||
|
|
@ -21,11 +21,20 @@ COPY server ./server
|
|||
WORKDIR /app/server
|
||||
RUN npm run build
|
||||
|
||||
# Derive version from git. Coolify clones the repo with .git intact so
|
||||
# git describe / rev-parse work. Falls back to package.json version if
|
||||
# .git is missing (e.g. if a .dockerignore later excludes it).
|
||||
COPY .git /app/.git
|
||||
RUN cd /app && \
|
||||
GIT_VER="$(git describe --tags --always --dirty 2>/dev/null || echo '')" && \
|
||||
if [ -z "$GIT_VER" ]; then GIT_VER="$(git rev-parse --short HEAD 2>/dev/null || echo '')"; fi && \
|
||||
if [ -z "$GIT_VER" ]; then GIT_VER="$(node -p 'require("./package.json").version' 2>/dev/null || echo 'dev')"; fi && \
|
||||
echo "$GIT_VER" > /app/server/.bf-version && \
|
||||
echo "Baked version: $GIT_VER"
|
||||
|
||||
# ---- Runtime image ----
|
||||
FROM node:24-trixie-slim
|
||||
|
||||
ARG BF_SERVER_VERSION=
|
||||
|
||||
# ffmpeg for camera snapshot capture (optional but needed for /admin/entities/:id/snapshot)
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates ffmpeg wget \
|
||||
|
|
@ -53,6 +62,5 @@ USER betterframe
|
|||
WORKDIR /app/server
|
||||
|
||||
ENV NODE_OPTIONS=--import=tsx
|
||||
ENV BF_SERVER_VERSION=${BF_SERVER_VERSION}
|
||||
|
||||
CMD ["node", "--import", "tsx", "/app/node_modules/@bsb/base/lib/scripts/bsb-plugin-cli.js", "start"]
|
||||
|
|
|
|||
|
|
@ -18,8 +18,7 @@ services:
|
|||
context: .
|
||||
dockerfile: deploy/docker/Dockerfile.server
|
||||
args:
|
||||
BF_SERVER_VERSION: ${BF_SERVER_VERSION:-${SOURCE_COMMIT:-dev}}
|
||||
SOURCE_COMMIT: ${SOURCE_COMMIT:-}
|
||||
BF_SERVER_VERSION: ${BF_SERVER_VERSION:-${COOLIFY_GIT_COMMIT:-${SOURCE_COMMIT:-dev}}}
|
||||
container_name: betterframe-server
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
|
|
@ -28,8 +27,7 @@ services:
|
|||
- BF_SQLITE_PATH=/var/lib/betterframe/betterframe.db
|
||||
- BF_NODERED_URL=http://nodered:1880
|
||||
- BF_SELF_URL=http://server:18080
|
||||
- BF_SERVER_VERSION=${BF_SERVER_VERSION:-${SOURCE_COMMIT:-dev}}
|
||||
- SOURCE_COMMIT=${SOURCE_COMMIT:-}
|
||||
- BF_SERVER_VERSION=${BF_SERVER_VERSION:-${COOLIFY_GIT_COMMIT:-${SOURCE_COMMIT:-dev}}}
|
||||
volumes:
|
||||
- betterframe-data:/var/lib/betterframe
|
||||
expose:
|
||||
|
|
|
|||
|
|
@ -1,7 +1,19 @@
|
|||
import { readFileSync } from "node:fs";
|
||||
|
||||
const BAKED_VERSION = (() => {
|
||||
try {
|
||||
const v = readFileSync("/app/server/.bf-version", "utf8").trim();
|
||||
return v && v !== "dev" ? v : null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
})();
|
||||
|
||||
export function serverVersion(): string {
|
||||
return (
|
||||
process.env.BF_SERVER_VERSION
|
||||
|| process.env.BF_BUILD_VERSION
|
||||
|| BAKED_VERSION
|
||||
|| process.env.COOLIFY_GIT_COMMIT
|
||||
|| process.env.SOURCE_COMMIT
|
||||
|| "dev"
|
||||
|
|
|
|||
Loading…
Reference in a new issue