From 90d6b8dd1e5a27b7a60bd43889ef33a665f1bee4 Mon Sep 17 00:00:00 2001 From: Vadim Date: Mon, 2 Feb 2026 01:03:58 +0700 Subject: [PATCH] fix(docker): auto-read version from package.json in all Dockerfiles Key Dockerfile was missing NEXT_PUBLIC_VERSION, GIT_SHA, and BUILD_TIME build args entirely. All three Dockerfiles had stale hardcoded fallback 0.1.0 as the version default, meaning Railway builds never reported the correct version. Now all Dockerfiles extract version from the app's package.json at build time via .env.local, with build arg override still supported. Health endpoints use "unknown" as fallback instead of stale version strings. Co-Authored-By: Claude Opus 4.5 --- apps/developers/Dockerfile | 14 +++++++++----- apps/developers/src/app/api/health/route.ts | 2 +- apps/hub/Dockerfile | 15 +++++++++------ apps/hub/src/app/api/health/route.ts | 2 +- apps/key/Dockerfile | 17 +++++++++++++++-- apps/key/src/app/api/health/route.ts | 2 +- 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/apps/developers/Dockerfile b/apps/developers/Dockerfile index 8d185e9..8aec870 100644 --- a/apps/developers/Dockerfile +++ b/apps/developers/Dockerfile @@ -16,14 +16,18 @@ ARG BUILD_TIME ARG NEXT_PUBLIC_ENV=production ARG RAILWAY_GIT_COMMIT_SHA -ARG NEXT_PUBLIC_VERSION=0.1.0 +ARG NEXT_PUBLIC_VERSION ENV NEXT_PUBLIC_ENV=$NEXT_PUBLIC_ENV -ENV NEXT_PUBLIC_GIT_SHA=$RAILWAY_GIT_COMMIT_SHA -ENV NEXT_PUBLIC_VERSION=$NEXT_PUBLIC_VERSION -ENV NEXT_PUBLIC_BUILD_TIME=$BUILD_TIME -RUN bun turbo run build --filter=@villa/developers +# Extract version from package.json if not provided via build arg +RUN export NEXT_PUBLIC_VERSION="${NEXT_PUBLIC_VERSION:-$(node -p "require('./apps/developers/package.json').version")}" && \ + export NEXT_PUBLIC_GIT_SHA="${RAILWAY_GIT_COMMIT_SHA:-unknown}" && \ + export NEXT_PUBLIC_BUILD_TIME="${BUILD_TIME:-$(date -u +%FT%T.000Z)}" && \ + echo "NEXT_PUBLIC_VERSION=$NEXT_PUBLIC_VERSION" >> apps/developers/.env.local && \ + echo "NEXT_PUBLIC_GIT_SHA=$NEXT_PUBLIC_GIT_SHA" >> apps/developers/.env.local && \ + echo "NEXT_PUBLIC_BUILD_TIME=$NEXT_PUBLIC_BUILD_TIME" >> apps/developers/.env.local && \ + bun turbo run build --filter=@villa/developers FROM node:20-alpine AS runner WORKDIR /app diff --git a/apps/developers/src/app/api/health/route.ts b/apps/developers/src/app/api/health/route.ts index 991baad..dd8820a 100644 --- a/apps/developers/src/app/api/health/route.ts +++ b/apps/developers/src/app/api/health/route.ts @@ -4,7 +4,7 @@ export const dynamic = "force-dynamic"; export const revalidate = 0; function getBuildInfo() { - const version = process.env.NEXT_PUBLIC_VERSION || "0.3.0-rc.1.1"; + const version = process.env.NEXT_PUBLIC_VERSION || "unknown"; const sha = process.env.NEXT_PUBLIC_GIT_SHA || "unknown"; const buildHash = process.env.NEXT_PUBLIC_BUILD_HASH || diff --git a/apps/hub/Dockerfile b/apps/hub/Dockerfile index 5ea8612..541339f 100644 --- a/apps/hub/Dockerfile +++ b/apps/hub/Dockerfile @@ -22,7 +22,7 @@ ARG NEXT_PUBLIC_ENV=production ARG NEXT_PUBLIC_DOMAIN=villa.cash ARG RAILWAY_GIT_COMMIT_SHA -ARG NEXT_PUBLIC_VERSION=0.1.0 +ARG NEXT_PUBLIC_VERSION ENV NEXT_PUBLIC_CHAIN_ID=$NEXT_PUBLIC_CHAIN_ID ENV NEXT_PUBLIC_PORTO_ENV=$NEXT_PUBLIC_PORTO_ENV @@ -31,11 +31,14 @@ ENV NEXT_PUBLIC_APP_URL=$NEXT_PUBLIC_APP_URL ENV NEXT_PUBLIC_ENV=$NEXT_PUBLIC_ENV ENV NEXT_PUBLIC_DOMAIN=$NEXT_PUBLIC_DOMAIN -ENV NEXT_PUBLIC_GIT_SHA=$RAILWAY_GIT_COMMIT_SHA -ENV NEXT_PUBLIC_VERSION=$NEXT_PUBLIC_VERSION -ENV NEXT_PUBLIC_BUILD_TIME=$BUILD_TIME - -RUN bun turbo run build --filter=@villa/hub +# Extract version from package.json if not provided via build arg +RUN export NEXT_PUBLIC_VERSION="${NEXT_PUBLIC_VERSION:-$(node -p "require('./apps/hub/package.json').version")}" && \ + export NEXT_PUBLIC_GIT_SHA="${RAILWAY_GIT_COMMIT_SHA:-unknown}" && \ + export NEXT_PUBLIC_BUILD_TIME="${BUILD_TIME:-$(date -u +%FT%T.000Z)}" && \ + echo "NEXT_PUBLIC_VERSION=$NEXT_PUBLIC_VERSION" >> apps/hub/.env.local && \ + echo "NEXT_PUBLIC_GIT_SHA=$NEXT_PUBLIC_GIT_SHA" >> apps/hub/.env.local && \ + echo "NEXT_PUBLIC_BUILD_TIME=$NEXT_PUBLIC_BUILD_TIME" >> apps/hub/.env.local && \ + bun turbo run build --filter=@villa/hub FROM node:20-alpine AS runner WORKDIR /app diff --git a/apps/hub/src/app/api/health/route.ts b/apps/hub/src/app/api/health/route.ts index 991baad..dd8820a 100644 --- a/apps/hub/src/app/api/health/route.ts +++ b/apps/hub/src/app/api/health/route.ts @@ -4,7 +4,7 @@ export const dynamic = "force-dynamic"; export const revalidate = 0; function getBuildInfo() { - const version = process.env.NEXT_PUBLIC_VERSION || "0.3.0-rc.1.1"; + const version = process.env.NEXT_PUBLIC_VERSION || "unknown"; const sha = process.env.NEXT_PUBLIC_GIT_SHA || "unknown"; const buildHash = process.env.NEXT_PUBLIC_BUILD_HASH || diff --git a/apps/key/Dockerfile b/apps/key/Dockerfile index 2af7e20..9efc776 100644 --- a/apps/key/Dockerfile +++ b/apps/key/Dockerfile @@ -14,9 +14,22 @@ ENV NEXT_TELEMETRY_DISABLED=1 ENV NODE_ENV=production ARG NEXT_PUBLIC_CHAIN_ID=84532 -ENV NEXT_PUBLIC_CHAIN_ID=$NEXT_PUBLIC_CHAIN_ID +ARG NEXT_PUBLIC_ENV=production +ARG RAILWAY_GIT_COMMIT_SHA +ARG NEXT_PUBLIC_VERSION +ARG BUILD_TIME -RUN bun turbo run build --filter=@villa/key +ENV NEXT_PUBLIC_CHAIN_ID=$NEXT_PUBLIC_CHAIN_ID +ENV NEXT_PUBLIC_ENV=$NEXT_PUBLIC_ENV + +# Extract version from package.json if not provided via build arg +RUN export NEXT_PUBLIC_VERSION="${NEXT_PUBLIC_VERSION:-$(node -p "require('./apps/key/package.json').version")}" && \ + export NEXT_PUBLIC_GIT_SHA="${RAILWAY_GIT_COMMIT_SHA:-unknown}" && \ + export NEXT_PUBLIC_BUILD_TIME="${BUILD_TIME:-$(date -u +%FT%T.000Z)}" && \ + echo "NEXT_PUBLIC_VERSION=$NEXT_PUBLIC_VERSION" >> apps/key/.env.local && \ + echo "NEXT_PUBLIC_GIT_SHA=$NEXT_PUBLIC_GIT_SHA" >> apps/key/.env.local && \ + echo "NEXT_PUBLIC_BUILD_TIME=$NEXT_PUBLIC_BUILD_TIME" >> apps/key/.env.local && \ + bun turbo run build --filter=@villa/key FROM node:20-alpine AS runner WORKDIR /app diff --git a/apps/key/src/app/api/health/route.ts b/apps/key/src/app/api/health/route.ts index 991baad..dd8820a 100644 --- a/apps/key/src/app/api/health/route.ts +++ b/apps/key/src/app/api/health/route.ts @@ -4,7 +4,7 @@ export const dynamic = "force-dynamic"; export const revalidate = 0; function getBuildInfo() { - const version = process.env.NEXT_PUBLIC_VERSION || "0.3.0-rc.1.1"; + const version = process.env.NEXT_PUBLIC_VERSION || "unknown"; const sha = process.env.NEXT_PUBLIC_GIT_SHA || "unknown"; const buildHash = process.env.NEXT_PUBLIC_BUILD_HASH ||