diff --git a/.github/workflows/_build.yml b/.github/workflows/_build.yml index cd6655bbd..0256cba9f 100644 --- a/.github/workflows/_build.yml +++ b/.github/workflows/_build.yml @@ -107,6 +107,8 @@ jobs: uses: docker/build-push-action@v6 with: context: . + build-args: | + NEXT_PUBLIC_BUILD_COMMIT_SHA=${{ github.sha }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha,scope=${{ env.PLATFORM_PAIR }} cache-to: type=gha,mode=max,scope=${{ env.PLATFORM_PAIR }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d8b56994..5700cddb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed +- Changed the settings dropdown to display the commit SHA on which the deployment was built against. [#868](https://github.com/sourcebot-dev/sourcebot/pull/868) + ### Fixed - Fixed issue where anonymous access on a Sourcebot instance with a unlimited seat license and anonymous access enabled would result in a "not authenticated" message being displayed. [#866](https://github.com/sourcebot-dev/sourcebot/pull/866) diff --git a/Dockerfile b/Dockerfile index 23d057f6d..742143735 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,6 +13,7 @@ ARG NEXT_PUBLIC_SENTRY_WEBAPP_DSN ARG NEXT_PUBLIC_SENTRY_BACKEND_DSN ARG NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY ARG NEXT_PUBLIC_LANGFUSE_BASE_URL +ARG NEXT_PUBLIC_BUILD_COMMIT_SHA FROM node:24-alpine3.23 AS node-alpine FROM golang:1.23.4-alpine3.19 AS go-alpine @@ -57,6 +58,8 @@ ARG NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY ENV NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY=$NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY ARG NEXT_PUBLIC_LANGFUSE_BASE_URL ENV NEXT_PUBLIC_LANGFUSE_BASE_URL=$NEXT_PUBLIC_LANGFUSE_BASE_URL +ARG NEXT_PUBLIC_BUILD_COMMIT_SHA +ENV NEXT_PUBLIC_BUILD_COMMIT_SHA=$NEXT_PUBLIC_BUILD_COMMIT_SHA # To upload source maps to Sentry, we need to set the following build-time args. # It's important that we don't set these for oss builds, otherwise the Sentry @@ -151,6 +154,8 @@ ARG NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY ENV NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY=$NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY ARG NEXT_PUBLIC_LANGFUSE_BASE_URL ENV NEXT_PUBLIC_LANGFUSE_BASE_URL=$NEXT_PUBLIC_LANGFUSE_BASE_URL +ARG NEXT_PUBLIC_BUILD_COMMIT_SHA +ENV NEXT_PUBLIC_BUILD_COMMIT_SHA=$NEXT_PUBLIC_BUILD_COMMIT_SHA # ----------- WORKDIR /app diff --git a/packages/shared/src/env.client.ts b/packages/shared/src/env.client.ts index 62f6ac541..ae9eae94d 100644 --- a/packages/shared/src/env.client.ts +++ b/packages/shared/src/env.client.ts @@ -7,13 +7,15 @@ export const env = createEnv({ NEXT_PUBLIC_SENTRY_BACKEND_DSN: z.string().optional(), NEXT_PUBLIC_SENTRY_ENVIRONMENT: z.string().optional(), NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY: z.string().optional(), - NEXT_PUBLIC_LANGFUSE_BASE_URL: z.string().optional() + NEXT_PUBLIC_LANGFUSE_BASE_URL: z.string().optional(), + NEXT_PUBLIC_BUILD_COMMIT_SHA: z.string().optional(), }, runtimeEnvStrict: { NEXT_PUBLIC_SENTRY_BACKEND_DSN: process.env.NEXT_PUBLIC_SENTRY_BACKEND_DSN, NEXT_PUBLIC_SENTRY_ENVIRONMENT: process.env.NEXT_PUBLIC_SENTRY_ENVIRONMENT, NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY: process.env.NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY, NEXT_PUBLIC_LANGFUSE_BASE_URL: process.env.NEXT_PUBLIC_LANGFUSE_BASE_URL, + NEXT_PUBLIC_BUILD_COMMIT_SHA: process.env.NEXT_PUBLIC_BUILD_COMMIT_SHA, }, emptyStringAsUndefined: true, skipValidation: process.env.SKIP_ENV_VALIDATION === "1", diff --git a/packages/web/src/app/[domain]/components/settingsDropdown.tsx b/packages/web/src/app/[domain]/components/settingsDropdown.tsx index 4b05e5e77..0dc7b8ff8 100644 --- a/packages/web/src/app/[domain]/components/settingsDropdown.tsx +++ b/packages/web/src/app/[domain]/components/settingsDropdown.tsx @@ -32,9 +32,10 @@ import { useKeymapType } from "@/hooks/useKeymapType" import { useSession } from "next-auth/react"; import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { signOut } from "next-auth/react" -import { SOURCEBOT_VERSION } from "@sourcebot/shared/client"; +import { SOURCEBOT_VERSION, env } from "@sourcebot/shared/client"; import posthog from "posthog-js"; import { useDomain } from "@/hooks/useDomain"; +import Link from "next/link"; interface SettingsDropdownProps { menuButtonClassName?: string; @@ -167,7 +168,15 @@ export const SettingsDropdown = ({
- version: {SOURCEBOT_VERSION} + Version: {SOURCEBOT_VERSION} + {env.NEXT_PUBLIC_BUILD_COMMIT_SHA && ( + + ({env.NEXT_PUBLIC_BUILD_COMMIT_SHA.substring(0, 7)}) + + )}