diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 707ed6534..b391ccf88 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -76,6 +76,8 @@ jobs: labels: ${{ steps.meta.outputs.labels }} build-args: | NEXT_PUBLIC_GA4_MEASUREMENT_ID=${{ secrets.GA4_MEASUREMENT_ID }} + NEXT_PUBLIC_BUILD_HASH=${{ github.sha }} + NEXT_PUBLIC_BUILD_REF_NAME=${{ github.ref_name }} # Enable build cache (future) #cache-from: type=gha #cache-to: type=gha,mode=max diff --git a/Dockerfile b/Dockerfile index 1cae4c3eb..e2047dce3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,6 +22,12 @@ RUN npm ci FROM base AS builder WORKDIR /app +# Optional build version arguments at build time +ARG NEXT_PUBLIC_BUILD_HASH +ENV NEXT_PUBLIC_BUILD_HASH=${NEXT_PUBLIC_BUILD_HASH} +ARG NEXT_PUBLIC_BUILD_REF_NAME +ENV NEXT_PUBLIC_BUILD_REF_NAME=${NEXT_PUBLIC_BUILD_REF_NAME} + # Optional argument to configure GA4 at build time (see: docs/deploy-analytics.md) ARG NEXT_PUBLIC_GA4_MEASUREMENT_ID ENV NEXT_PUBLIC_GA4_MEASUREMENT_ID=${NEXT_PUBLIC_GA4_MEASUREMENT_ID} diff --git a/next.config.mjs b/next.config.mjs index bafd77c19..0e4602f25 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,7 +1,17 @@ +import { execSync } from 'node:child_process'; import { readFile } from 'node:fs/promises'; -// Build information -process.env.NEXT_PUBLIC_BUILD_HASH = 'big-agi-2-dev'; +// Build information: from CI, or git commit hash +let buildHash = process.env.NEXT_PUBLIC_BUILD_HASH || process.env.GITHUB_SHA || process.env.VERCEL_GIT_COMMIT_SHA; // Docker, GitHub Actions, Vercel +try { + // fallback to local git commit hash + if (!buildHash) + buildHash = execSync('git rev-parse --short HEAD').toString().trim(); +} catch { + // final fallback + buildHash = '2-dev'; +} +process.env.NEXT_PUBLIC_BUILD_HASH = (buildHash || '').slice(0, 10); process.env.NEXT_PUBLIC_BUILD_PKGVER = JSON.parse('' + await readFile(new URL('./package.json', import.meta.url))).version; process.env.NEXT_PUBLIC_BUILD_TIMESTAMP = new Date().toISOString(); console.log(` 🧠 \x1b[1mbig-AGI\x1b[0m v${process.env.NEXT_PUBLIC_BUILD_PKGVER} (@${process.env.NEXT_PUBLIC_BUILD_HASH})`);