From 517fd1a3e493bf6637aedc55209e878dea26622e Mon Sep 17 00:00:00 2001 From: Brendan Kellam Date: Thu, 18 Dec 2025 16:44:50 -0500 Subject: [PATCH] chore: Automated releases & bake SB version into code (#680) --- .env.development | 3 - .github/workflows/_gcp-deploy.yml | 2 +- .github/workflows/ghcr-publish.yml | 9 +- .github/workflows/release-sourcebot.yml | 99 +++++++++++++++---- CHANGELOG.md | 3 + Dockerfile | 20 ++-- entrypoint.sh | 24 +++-- packages/backend/src/instrument.ts | 4 +- packages/backend/src/posthog.ts | 5 +- packages/shared/src/env.client.ts | 2 - packages/shared/src/index.client.ts | 5 +- packages/shared/src/index.server.ts | 5 +- packages/shared/src/version.ts | 2 + .../[domain]/components/settingsDropdown.tsx | 4 +- .../web/src/app/api/(server)/version/route.ts | 4 +- packages/web/src/app/layout.tsx | 5 +- .../web/src/ee/features/audit/auditService.ts | 4 +- packages/web/src/lib/posthog.ts | 5 +- 18 files changed, 140 insertions(+), 65 deletions(-) create mode 100644 packages/shared/src/version.ts diff --git a/.env.development b/.env.development index 57d75115..0525dbd8 100644 --- a/.env.development +++ b/.env.development @@ -77,9 +77,6 @@ SOURCEBOT_TELEMETRY_DISABLED=true # Disables telemetry collection # Controls the number of concurrent indexing jobs that can run at once # INDEX_CONCURRENCY_MULTIPLE= -# Controls the version of the web app -# NEXT_PUBLIC_SOURCEBOT_VERSION= - # CONFIG_MAX_REPOS_NO_TOKEN= NODE_ENV=development # SOURCEBOT_TENANCY_MODE=single diff --git a/.github/workflows/_gcp-deploy.yml b/.github/workflows/_gcp-deploy.yml index 0454e5b6..691d7d00 100644 --- a/.github/workflows/_gcp-deploy.yml +++ b/.github/workflows/_gcp-deploy.yml @@ -54,7 +54,6 @@ jobs: ${{ env.IMAGE_PATH }}:${{ github.sha }} ${{ env.IMAGE_PATH }}:latest build-args: | - NEXT_PUBLIC_SOURCEBOT_VERSION=${{ github.ref_name }} NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT=${{ vars.NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT }} NEXT_PUBLIC_SENTRY_ENVIRONMENT=${{ vars.NEXT_PUBLIC_SENTRY_ENVIRONMENT }} NEXT_PUBLIC_SENTRY_WEBAPP_DSN=${{ vars.NEXT_PUBLIC_SENTRY_WEBAPP_DSN }} @@ -65,6 +64,7 @@ jobs: SENTRY_ORG=${{ vars.SENTRY_ORG }} SENTRY_WEBAPP_PROJECT=${{ vars.SENTRY_WEBAPP_PROJECT }} SENTRY_BACKEND_PROJECT=${{ vars.SENTRY_BACKEND_PROJECT }} + SENTRY_RELEASE=${{ github.ref_name }} - name: Deploy to GCP diff --git a/.github/workflows/ghcr-publish.yml b/.github/workflows/ghcr-publish.yml index 278f6fe5..d4f83b45 100644 --- a/.github/workflows/ghcr-publish.yml +++ b/.github/workflows/ghcr-publish.yml @@ -7,6 +7,12 @@ on: push: branches: ["main"] tags: ["v*.*.*"] + workflow_call: + inputs: + version: + description: 'Version tag (e.g., v4.10.5)' + required: false + type: string env: # Use docker.io for Docker Hub if empty @@ -40,6 +46,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v4 with: + ref: ${{ inputs.version || github.ref_name }} submodules: "true" # Extract metadata (tags, labels) for Docker @@ -77,8 +84,6 @@ jobs: cache-to: type=gha,mode=max,scope=${{ env.PLATFORM_PAIR }} platforms: ${{ matrix.platform }} outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true,annotation.org.opencontainers.image.description=Blazingly fast code search - build-args: | - NEXT_PUBLIC_SOURCEBOT_VERSION=${{ github.ref_name }} - name: Export digest run: | diff --git a/.github/workflows/release-sourcebot.yml b/.github/workflows/release-sourcebot.yml index 0e1319b0..abe45285 100644 --- a/.github/workflows/release-sourcebot.yml +++ b/.github/workflows/release-sourcebot.yml @@ -3,35 +3,82 @@ name: Release Sourcebot on: workflow_dispatch: inputs: - version: - description: "Version to release (e.g., 4.10.5)" + bump_type: + description: "Type of version bump to apply" required: true - type: string + type: choice + options: + - patch + - minor + - major + +concurrency: + group: release-sourcebot + cancel-in-progress: false jobs: release: runs-on: ubuntu-latest permissions: contents: write + outputs: + version: ${{ steps.calculate_version.outputs.version }} steps: - - name: Validate version format - run: | - VERSION="${{ inputs.version }}" - if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9._-]+)?(\+[a-zA-Z0-9._-]+)?$ ]]; then - echo "Error: Version must follow semantic versioning format (X.Y.Z)" - exit 1 - fi - - name: Checkout repository uses: actions/checkout@v4 with: ref: main fetch-depth: 0 + - name: Calculate new version + id: calculate_version + run: | + # Extract current version from CHANGELOG.md + CURRENT_VERSION=$(grep -oP '## \[\K[0-9]+\.[0-9]+\.[0-9]+' CHANGELOG.md | head -n 1) + + if [ -z "$CURRENT_VERSION" ]; then + echo "Error: Could not extract current version from CHANGELOG.md" + exit 1 + fi + + echo "Current version: $CURRENT_VERSION" + + # Parse version components + IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION" + + # Apply bump based on input + BUMP_TYPE="${{ inputs.bump_type }}" + case "$BUMP_TYPE" in + major) + MAJOR=$((MAJOR + 1)) + MINOR=0 + PATCH=0 + ;; + minor) + MINOR=$((MINOR + 1)) + PATCH=0 + ;; + patch) + PATCH=$((PATCH + 1)) + ;; + *) + echo "Error: Invalid bump type: $BUMP_TYPE" + exit 1 + ;; + esac + + NEW_VERSION="$MAJOR.$MINOR.$PATCH" + echo "New version: $NEW_VERSION" + + # Export to GITHUB_ENV for use in subsequent steps within this job + echo "VERSION=$NEW_VERSION" >> $GITHUB_ENV + + # Export to GITHUB_OUTPUT for use in other jobs + echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT + - name: Check if version already exists run: | - VERSION="${{ inputs.version }}" if grep -q "## \[$VERSION\]" CHANGELOG.md; then echo "Error: Version $VERSION already exists in CHANGELOG.md" exit 1 @@ -41,9 +88,8 @@ jobs: exit 1 fi - - name: Update CHANGELOG.md + - name: Update CHANGELOG.md and version.ts run: | - VERSION="${{ inputs.version }}" DATE=$(date +%Y-%m-%d) # Insert the new version header after the [Unreleased] line @@ -54,20 +100,26 @@ jobs: echo "Updated CHANGELOG.md with version $VERSION" cat CHANGELOG.md | head -n 15 + # Update version.ts + cat > packages/shared/src/version.ts << EOF + // This file is auto-generated by .github/workflows/release-sourcebot.yml + export const SOURCEBOT_VERSION = "v$VERSION"; + EOF + echo "Updated version.ts with version v$VERSION" + cat packages/shared/src/version.ts + - name: Configure git run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" - - name: Commit CHANGELOG + - name: Commit changes run: | - VERSION="${{ inputs.version }}" - git add CHANGELOG.md + git add CHANGELOG.md packages/shared/src/version.ts git commit -m "Release v$VERSION" - name: Create annotated tag run: | - VERSION="${{ inputs.version }}" git tag -a "v$VERSION" -m "sourcebot v$VERSION" - name: Push changes @@ -79,8 +131,17 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - VERSION="${{ inputs.version }}" gh release create "v$VERSION" \ --verify-tag \ --generate-notes \ --latest + + publish: + needs: release + uses: ./.github/workflows/ghcr-publish.yml + with: + version: v${{ needs.release.outputs.version }} + permissions: + contents: read + packages: write + id-token: write diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dc0f9cb..9bde4903 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 +- Bake Sourcebot version into code rather than relying on build arg. [#680](https://github.com/sourcebot-dev/sourcebot/pull/680) + ## [4.10.4] - 2025-12-18 ### Fixed diff --git a/Dockerfile b/Dockerfile index 7af3dfa1..5ea04e1b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,6 @@ # in the webapp. # @see: https://docs.docker.com/build/building/variables/#scoping -ARG NEXT_PUBLIC_SOURCEBOT_VERSION ARG NEXT_PUBLIC_SENTRY_ENVIRONMENT ARG NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT ARG NEXT_PUBLIC_SENTRY_WEBAPP_DSN @@ -51,8 +50,6 @@ RUN yarn workspace @sourcebot/query-language install FROM node-alpine AS web-builder ENV SKIP_ENV_VALIDATION=1 # ----------- -ARG NEXT_PUBLIC_SOURCEBOT_VERSION -ENV NEXT_PUBLIC_SOURCEBOT_VERSION=$NEXT_PUBLIC_SOURCEBOT_VERSION ARG NEXT_PUBLIC_SENTRY_ENVIRONMENT ENV NEXT_PUBLIC_SENTRY_ENVIRONMENT=$NEXT_PUBLIC_SENTRY_ENVIRONMENT ARG NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT @@ -72,7 +69,8 @@ ARG SENTRY_ORG ENV SENTRY_ORG=$SENTRY_ORG ARG SENTRY_WEBAPP_PROJECT ENV SENTRY_WEBAPP_PROJECT=$SENTRY_WEBAPP_PROJECT -ENV SENTRY_RELEASE=$NEXT_PUBLIC_SOURCEBOT_VERSION +ARG SENTRY_RELEASE +ENV SENTRY_RELEASE=$SENTRY_RELEASE # SMUAT = Source Map Upload Auth Token ARG SENTRY_SMUAT ENV SENTRY_SMUAT=$SENTRY_SMUAT @@ -102,8 +100,6 @@ ENV SKIP_ENV_VALIDATION=0 FROM node-alpine AS backend-builder ENV SKIP_ENV_VALIDATION=1 # ----------- -ARG NEXT_PUBLIC_SOURCEBOT_VERSION -ENV NEXT_PUBLIC_SOURCEBOT_VERSION=$NEXT_PUBLIC_SOURCEBOT_VERSION # 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 @@ -115,6 +111,8 @@ ENV SENTRY_BACKEND_PROJECT=$SENTRY_BACKEND_PROJECT # SMUAT = Source Map Upload Auth Token ARG SENTRY_SMUAT ENV SENTRY_SMUAT=$SENTRY_SMUAT +ARG SENTRY_RELEASE +ENV SENTRY_RELEASE=$SENTRY_RELEASE # ----------- WORKDIR /app @@ -132,12 +130,12 @@ RUN yarn workspace @sourcebot/backend install RUN yarn workspace @sourcebot/backend build # Upload source maps to Sentry if we have the necessary build-time args. -RUN if [ -n "$SENTRY_SMUAT" ] && [ -n "$SENTRY_ORG" ] && [ -n "$SENTRY_BACKEND_PROJECT" ] && [ -n "$NEXT_PUBLIC_SOURCEBOT_VERSION" ]; then \ +RUN if [ -n "$SENTRY_SMUAT" ] && [ -n "$SENTRY_ORG" ] && [ -n "$SENTRY_BACKEND_PROJECT" ] && [ -n "$SENTRY_RELEASE" ]; then \ apk add --no-cache curl; \ curl -sL https://sentry.io/get-cli/ | sh; \ sentry-cli login --auth-token $SENTRY_SMUAT; \ - sentry-cli sourcemaps inject --org $SENTRY_ORG --project $SENTRY_BACKEND_PROJECT --release $NEXT_PUBLIC_SOURCEBOT_VERSION ./packages/backend/dist; \ - sentry-cli sourcemaps upload --org $SENTRY_ORG --project $SENTRY_BACKEND_PROJECT --release $NEXT_PUBLIC_SOURCEBOT_VERSION ./packages/backend/dist; \ + sentry-cli sourcemaps inject --org $SENTRY_ORG --project $SENTRY_BACKEND_PROJECT --release $SENTRY_RELEASE ./packages/backend/dist; \ + sentry-cli sourcemaps upload --org $SENTRY_ORG --project $SENTRY_BACKEND_PROJECT --release $SENTRY_RELEASE ./packages/backend/dist; \ fi ENV SKIP_ENV_VALIDATION=0 @@ -146,8 +144,6 @@ ENV SKIP_ENV_VALIDATION=0 # ------ Runner ------ FROM node-alpine AS runner # ----------- -ARG NEXT_PUBLIC_SOURCEBOT_VERSION -ENV NEXT_PUBLIC_SOURCEBOT_VERSION=$NEXT_PUBLIC_SOURCEBOT_VERSION ARG NEXT_PUBLIC_SENTRY_ENVIRONMENT ENV NEXT_PUBLIC_SENTRY_ENVIRONMENT=$NEXT_PUBLIC_SENTRY_ENVIRONMENT ARG NEXT_PUBLIC_SENTRY_WEBAPP_DSN @@ -160,8 +156,6 @@ ARG NEXT_PUBLIC_LANGFUSE_BASE_URL ENV NEXT_PUBLIC_LANGFUSE_BASE_URL=$NEXT_PUBLIC_LANGFUSE_BASE_URL # ----------- -RUN echo "Sourcebot Version: $NEXT_PUBLIC_SOURCEBOT_VERSION" - WORKDIR /app ENV NODE_ENV=production ENV NEXT_TELEMETRY_DISABLED=1 diff --git a/entrypoint.sh b/entrypoint.sh index 4a5f05a3..eeea838b 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -63,8 +63,20 @@ else export REDIS_EMBEDDED="false" fi +# Extract version from version.ts +VERSION_FILE="/app/packages/shared/src/version.ts" +if [ -f "$VERSION_FILE" ]; then + SOURCEBOT_VERSION=$(grep -o '"v[^"]*"' "$VERSION_FILE" | tr -d '"') + # Validate extraction succeeded + if [ -z "$SOURCEBOT_VERSION" ]; then + echo -e "\e[33m[Warning] Failed to extract version from $VERSION_FILE. Setting to 'unknown'.\e[0m" >&2 + SOURCEBOT_VERSION="unknown" + fi +else + SOURCEBOT_VERSION="unknown" +fi -echo -e "\e[34m[Info] Sourcebot version: $NEXT_PUBLIC_SOURCEBOT_VERSION\e[0m" +echo -e "\e[34m[Info] Sourcebot version: $SOURCEBOT_VERSION\e[0m" if [ -n "$SOURCEBOT_TELEMETRY_DISABLED" ]; then # Validate that SOURCEBOT_TELEMETRY_DISABLED is either "true" or "false" @@ -157,7 +169,7 @@ if [ ! -f "$FIRST_RUN_FILE" ]; then "event": "install", "distinct_id": "'"$SOURCEBOT_INSTALL_ID"'", "properties": { - "sourcebot_version": "'"$NEXT_PUBLIC_SOURCEBOT_VERSION"'" + "sourcebot_version": "'"$SOURCEBOT_VERSION"'" } }' https://us.i.posthog.com/capture/ ) then echo -e "\e[33m[Warning] Failed to send install event.\e[0m" @@ -168,8 +180,8 @@ else PREVIOUS_VERSION=$(cat "$FIRST_RUN_FILE" | jq -r '.version') # If the version has changed, we assume an upgrade has occurred. - if [ "$PREVIOUS_VERSION" != "$NEXT_PUBLIC_SOURCEBOT_VERSION" ]; then - echo -e "\e[34m[Info] Upgraded from version $PREVIOUS_VERSION to $NEXT_PUBLIC_SOURCEBOT_VERSION\e[0m" + if [ "$PREVIOUS_VERSION" != "$SOURCEBOT_VERSION" ]; then + echo -e "\e[34m[Info] Upgraded from version $PREVIOUS_VERSION to $SOURCEBOT_VERSION\e[0m" if [ "$SOURCEBOT_TELEMETRY_DISABLED" = "false" ]; then if ! ( curl -L --output /dev/null --silent --fail --header "Content-Type: application/json" -d '{ @@ -178,7 +190,7 @@ else "distinct_id": "'"$SOURCEBOT_INSTALL_ID"'", "properties": { "from_version": "'"$PREVIOUS_VERSION"'", - "to_version": "'"$NEXT_PUBLIC_SOURCEBOT_VERSION"'" + "to_version": "'"$SOURCEBOT_VERSION"'" } }' https://us.i.posthog.com/capture/ ) then echo -e "\e[33m[Warning] Failed to send upgrade event.\e[0m" @@ -187,7 +199,7 @@ else fi fi -echo "{\"version\": \"$NEXT_PUBLIC_SOURCEBOT_VERSION\", \"install_id\": \"$SOURCEBOT_INSTALL_ID\"}" > "$FIRST_RUN_FILE" +echo "{\"version\": \"$SOURCEBOT_VERSION\", \"install_id\": \"$SOURCEBOT_INSTALL_ID\"}" > "$FIRST_RUN_FILE" # Start the database and wait for it to be ready before starting any other service if [ "$DATABASE_EMBEDDED" = "true" ]; then diff --git a/packages/backend/src/instrument.ts b/packages/backend/src/instrument.ts index 5e0faa28..ab37f297 100644 --- a/packages/backend/src/instrument.ts +++ b/packages/backend/src/instrument.ts @@ -1,5 +1,5 @@ import * as Sentry from "@sentry/node"; -import { createLogger } from "@sourcebot/shared"; +import { createLogger, SOURCEBOT_VERSION } from "@sourcebot/shared"; import { env } from "@sourcebot/shared/client"; const logger = createLogger('instrument'); @@ -7,7 +7,7 @@ const logger = createLogger('instrument'); if (!!env.NEXT_PUBLIC_SENTRY_BACKEND_DSN && !!env.NEXT_PUBLIC_SENTRY_ENVIRONMENT) { Sentry.init({ dsn: env.NEXT_PUBLIC_SENTRY_BACKEND_DSN, - release: env.NEXT_PUBLIC_SOURCEBOT_VERSION, + release: SOURCEBOT_VERSION, environment: env.NEXT_PUBLIC_SENTRY_ENVIRONMENT, }); } else { diff --git a/packages/backend/src/posthog.ts b/packages/backend/src/posthog.ts index 7034283f..48d5b8e0 100644 --- a/packages/backend/src/posthog.ts +++ b/packages/backend/src/posthog.ts @@ -1,5 +1,4 @@ -import { env as clientEnv } from "@sourcebot/shared/client"; -import { env } from "@sourcebot/shared"; +import { env, SOURCEBOT_VERSION } from "@sourcebot/shared"; import { PostHog } from 'posthog-node'; import { PosthogEvent, PosthogEventMap } from './posthogEvents.js'; @@ -24,7 +23,7 @@ export function captureEvent(event: E, properties: Posth event: event, properties: { ...properties, - sourcebot_version: clientEnv.NEXT_PUBLIC_SOURCEBOT_VERSION, + sourcebot_version: SOURCEBOT_VERSION, }, }); } diff --git a/packages/shared/src/env.client.ts b/packages/shared/src/env.client.ts index f9bb0f1f..2b6506b4 100644 --- a/packages/shared/src/env.client.ts +++ b/packages/shared/src/env.client.ts @@ -6,7 +6,6 @@ export const env = createEnv({ clientPrefix: "NEXT_PUBLIC_", client: { NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT: z.enum(SOURCEBOT_CLOUD_ENVIRONMENT).optional(), - NEXT_PUBLIC_SOURCEBOT_VERSION: z.string().default("unknown"), NEXT_PUBLIC_SENTRY_BACKEND_DSN: z.string().optional(), NEXT_PUBLIC_SENTRY_ENVIRONMENT: z.string().optional(), NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY: z.string().optional(), @@ -14,7 +13,6 @@ export const env = createEnv({ }, runtimeEnvStrict: { NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT: process.env.NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT, - NEXT_PUBLIC_SOURCEBOT_VERSION: process.env.NEXT_PUBLIC_SOURCEBOT_VERSION, 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, diff --git a/packages/shared/src/index.client.ts b/packages/shared/src/index.client.ts index 8d185ba6..8e2a161d 100644 --- a/packages/shared/src/index.client.ts +++ b/packages/shared/src/index.client.ts @@ -1,4 +1,7 @@ export * from "./constants.js"; export { env -} from "./env.client.js"; \ No newline at end of file +} from "./env.client.js"; +export { + SOURCEBOT_VERSION, +} from "./version.js"; \ No newline at end of file diff --git a/packages/shared/src/index.server.ts b/packages/shared/src/index.server.ts index fabe608e..0bd73a08 100644 --- a/packages/shared/src/index.server.ts +++ b/packages/shared/src/index.server.ts @@ -46,4 +46,7 @@ export { } from "./crypto.js"; export { getDBConnectionString, -} from "./db.js"; \ No newline at end of file +} from "./db.js"; +export { + SOURCEBOT_VERSION, +} from "./version.js"; \ No newline at end of file diff --git a/packages/shared/src/version.ts b/packages/shared/src/version.ts new file mode 100644 index 00000000..98174246 --- /dev/null +++ b/packages/shared/src/version.ts @@ -0,0 +1,2 @@ +// This file is auto-generated by .github/workflows/release-sourcebot.yml +export const SOURCEBOT_VERSION = "v4.10.4"; \ No newline at end of file diff --git a/packages/web/src/app/[domain]/components/settingsDropdown.tsx b/packages/web/src/app/[domain]/components/settingsDropdown.tsx index ec8ad0f0..4b05e5e7 100644 --- a/packages/web/src/app/[domain]/components/settingsDropdown.tsx +++ b/packages/web/src/app/[domain]/components/settingsDropdown.tsx @@ -32,7 +32,7 @@ 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 { env } from "@sourcebot/shared/client"; +import { SOURCEBOT_VERSION } from "@sourcebot/shared/client"; import posthog from "posthog-js"; import { useDomain } from "@/hooks/useDomain"; @@ -167,7 +167,7 @@ export const SettingsDropdown = ({
- version: {env.NEXT_PUBLIC_SOURCEBOT_VERSION} + version: {SOURCEBOT_VERSION}
diff --git a/packages/web/src/app/api/(server)/version/route.ts b/packages/web/src/app/api/(server)/version/route.ts index 08008e76..284ca160 100644 --- a/packages/web/src/app/api/(server)/version/route.ts +++ b/packages/web/src/app/api/(server)/version/route.ts @@ -1,4 +1,4 @@ -import { env } from "@sourcebot/shared/client"; +import { SOURCEBOT_VERSION } from "@sourcebot/shared"; import { GetVersionResponse } from "@/lib/types"; // Note: In Next.JS 14, GET methods with no params are cached by default at build time. @@ -10,6 +10,6 @@ export const dynamic = "force-dynamic"; export const GET = async () => { return Response.json({ - version: env.NEXT_PUBLIC_SOURCEBOT_VERSION, + version: SOURCEBOT_VERSION, } satisfies GetVersionResponse); } \ No newline at end of file diff --git a/packages/web/src/app/layout.tsx b/packages/web/src/app/layout.tsx index 1777b357..85196f74 100644 --- a/packages/web/src/app/layout.tsx +++ b/packages/web/src/app/layout.tsx @@ -6,8 +6,7 @@ import { PostHogProvider } from "./posthogProvider"; import { Toaster } from "@/components/ui/toaster"; import { TooltipProvider } from "@/components/ui/tooltip"; import { SessionProvider } from "next-auth/react"; -import { env } from "@sourcebot/shared"; -import { env as clientEnv } from "@sourcebot/shared/client"; +import { env, SOURCEBOT_VERSION } from "@sourcebot/shared"; import { PlanProvider } from "@/features/entitlements/planProvider"; import { getEntitlements } from "@sourcebot/shared"; @@ -43,7 +42,7 @@ export default function RootLayout({ // @note: the posthog api key doesn't need to be kept secret, // so we are safe to send it to the client. posthogApiKey={env.POSTHOG_PAPIK} - sourcebotVersion={clientEnv.NEXT_PUBLIC_SOURCEBOT_VERSION} + sourcebotVersion={SOURCEBOT_VERSION} sourcebotInstallId={env.SOURCEBOT_INSTALL_ID} > ): Promise { - const sourcebotVersion = process.env.NEXT_PUBLIC_SOURCEBOT_VERSION || 'unknown'; + const sourcebotVersion = SOURCEBOT_VERSION; try { const audit = await prisma.audit.create({ diff --git a/packages/web/src/lib/posthog.ts b/packages/web/src/lib/posthog.ts index 9adfba1b..2e91f436 100644 --- a/packages/web/src/lib/posthog.ts +++ b/packages/web/src/lib/posthog.ts @@ -1,6 +1,5 @@ import { PostHog } from 'posthog-node' -import { env } from '@sourcebot/shared' -import { env as clientEnv } from '@sourcebot/shared/client'; +import { env, SOURCEBOT_VERSION } from '@sourcebot/shared' import { RequestCookies } from 'next/dist/compiled/@edge-runtime/cookies'; import * as Sentry from "@sentry/nextjs"; import { PosthogEvent, PosthogEventMap } from './posthogEvents'; @@ -98,7 +97,7 @@ export async function captureEvent(event: E, properties: event, properties: { ...properties, - sourcebot_version: clientEnv.NEXT_PUBLIC_SOURCEBOT_VERSION, + sourcebot_version: SOURCEBOT_VERSION, install_id: env.SOURCEBOT_INSTALL_ID, $host: host, },