diff --git a/.env.development b/.env.development index 04a53752..330a591d 100644 --- a/.env.development +++ b/.env.development @@ -29,7 +29,6 @@ SOURCEBOT_PUBLIC_KEY_PATH=${PWD}/public.pem # PostHog # POSTHOG_PAPIK="" -# NEXT_PUBLIC_POSTHOG_PAPIK="" # Sentry # SENTRY_BACKEND_DSN="" diff --git a/.github/workflows/_gcp-deploy.yml b/.github/workflows/_gcp-deploy.yml index 15fde89b..0454e5b6 100644 --- a/.github/workflows/_gcp-deploy.yml +++ b/.github/workflows/_gcp-deploy.yml @@ -55,7 +55,6 @@ jobs: ${{ env.IMAGE_PATH }}:latest build-args: | NEXT_PUBLIC_SOURCEBOT_VERSION=${{ github.ref_name }} - NEXT_PUBLIC_POSTHOG_PAPIK=${{ vars.NEXT_PUBLIC_POSTHOG_PAPIK }} 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 }} diff --git a/.github/workflows/ghcr-publish.yml b/.github/workflows/ghcr-publish.yml index cf96bea7..67bb9071 100644 --- a/.github/workflows/ghcr-publish.yml +++ b/.github/workflows/ghcr-publish.yml @@ -77,7 +77,6 @@ jobs: 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 }} - NEXT_PUBLIC_POSTHOG_PAPIK=${{ vars.NEXT_PUBLIC_POSTHOG_PAPIK }} - name: Export digest run: | diff --git a/Dockerfile b/Dockerfile index f49da949..d5e644e8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,11 +9,6 @@ # @see: https://docs.docker.com/build/building/variables/#scoping ARG NEXT_PUBLIC_SOURCEBOT_VERSION -# PAPIK = Project API Key -# Note that this key does not need to be kept secret, so it's not -# necessary to use Docker build secrets here. -# @see: https://posthog.com/tutorials/api-capture-events#authenticating-with-the-project-api-key -ARG NEXT_PUBLIC_POSTHOG_PAPIK ARG NEXT_PUBLIC_SENTRY_ENVIRONMENT ARG NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT ARG NEXT_PUBLIC_SENTRY_WEBAPP_DSN @@ -58,8 +53,6 @@ ENV SKIP_ENV_VALIDATION=1 # ----------- ARG NEXT_PUBLIC_SOURCEBOT_VERSION ENV NEXT_PUBLIC_SOURCEBOT_VERSION=$NEXT_PUBLIC_SOURCEBOT_VERSION -ARG NEXT_PUBLIC_POSTHOG_PAPIK -ENV NEXT_PUBLIC_POSTHOG_PAPIK=$NEXT_PUBLIC_POSTHOG_PAPIK ARG NEXT_PUBLIC_SENTRY_ENVIRONMENT ENV NEXT_PUBLIC_SENTRY_ENVIRONMENT=$NEXT_PUBLIC_SENTRY_ENVIRONMENT ARG NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT @@ -155,8 +148,6 @@ FROM node-alpine AS runner # ----------- ARG NEXT_PUBLIC_SOURCEBOT_VERSION ENV NEXT_PUBLIC_SOURCEBOT_VERSION=$NEXT_PUBLIC_SOURCEBOT_VERSION -ARG NEXT_PUBLIC_POSTHOG_PAPIK -ENV NEXT_PUBLIC_POSTHOG_PAPIK=$NEXT_PUBLIC_POSTHOG_PAPIK ARG NEXT_PUBLIC_SENTRY_ENVIRONMENT ENV NEXT_PUBLIC_SENTRY_ENVIRONMENT=$NEXT_PUBLIC_SENTRY_ENVIRONMENT ARG NEXT_PUBLIC_SENTRY_WEBAPP_DSN @@ -179,6 +170,11 @@ ENV DATA_CACHE_DIR=$DATA_DIR/.sourcebot ENV DATABASE_DATA_DIR=$DATA_CACHE_DIR/db ENV REDIS_DATA_DIR=$DATA_CACHE_DIR/redis ENV SOURCEBOT_PUBLIC_KEY_PATH=/app/public.pem +# PAPIK = Project API Key +# Note that this key does not need to be kept secret, so it's not +# necessary to use Docker build secrets here. +# @see: https://posthog.com/tutorials/api-capture-events#authenticating-with-the-project-api-key +ENV POSTHOG_PAPIK=phc_lLPuFFi5LH6c94eFJcqvYVFwiJffVcV6HD8U4a1OnRW # Valid values are: debug, info, warn, error ENV SOURCEBOT_LOG_LEVEL=info diff --git a/entrypoint.sh b/entrypoint.sh index 22a733e3..4a5f05a3 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -66,12 +66,6 @@ fi echo -e "\e[34m[Info] Sourcebot version: $NEXT_PUBLIC_SOURCEBOT_VERSION\e[0m" -# If we don't have a PostHog key, then we need to disable telemetry. -if [ -z "$NEXT_PUBLIC_POSTHOG_PAPIK" ]; then - echo -e "\e[33m[Warning] NEXT_PUBLIC_POSTHOG_PAPIK was not set. Setting SOURCEBOT_TELEMETRY_DISABLED.\e[0m" - export SOURCEBOT_TELEMETRY_DISABLED=true -fi - if [ -n "$SOURCEBOT_TELEMETRY_DISABLED" ]; then # Validate that SOURCEBOT_TELEMETRY_DISABLED is either "true" or "false" if [ "$SOURCEBOT_TELEMETRY_DISABLED" != "true" ] && [ "$SOURCEBOT_TELEMETRY_DISABLED" != "false" ]; then @@ -159,7 +153,7 @@ if [ ! -f "$FIRST_RUN_FILE" ]; then # (if telemetry is enabled) if [ "$SOURCEBOT_TELEMETRY_DISABLED" = "false" ]; then if ! ( curl -L --output /dev/null --silent --fail --header "Content-Type: application/json" -d '{ - "api_key": "'"$NEXT_PUBLIC_POSTHOG_PAPIK"'", + "api_key": "'"$POSTHOG_PAPIK"'", "event": "install", "distinct_id": "'"$SOURCEBOT_INSTALL_ID"'", "properties": { @@ -179,7 +173,7 @@ else if [ "$SOURCEBOT_TELEMETRY_DISABLED" = "false" ]; then if ! ( curl -L --output /dev/null --silent --fail --header "Content-Type: application/json" -d '{ - "api_key": "'"$NEXT_PUBLIC_POSTHOG_PAPIK"'", + "api_key": "'"$POSTHOG_PAPIK"'", "event": "upgrade", "distinct_id": "'"$SOURCEBOT_INSTALL_ID"'", "properties": { diff --git a/packages/backend/src/posthog.ts b/packages/backend/src/posthog.ts index 54b99e43..7034283f 100644 --- a/packages/backend/src/posthog.ts +++ b/packages/backend/src/posthog.ts @@ -5,9 +5,9 @@ import { PosthogEvent, PosthogEventMap } from './posthogEvents.js'; let posthog: PostHog | undefined = undefined; -if (clientEnv.NEXT_PUBLIC_POSTHOG_PAPIK) { +if (env.POSTHOG_PAPIK) { posthog = new PostHog( - clientEnv.NEXT_PUBLIC_POSTHOG_PAPIK, + env.POSTHOG_PAPIK, { host: "https://us.i.posthog.com", } diff --git a/packages/shared/src/env.client.ts b/packages/shared/src/env.client.ts index 727feb59..f9bb0f1f 100644 --- a/packages/shared/src/env.client.ts +++ b/packages/shared/src/env.client.ts @@ -7,7 +7,6 @@ export const env = createEnv({ client: { NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT: z.enum(SOURCEBOT_CLOUD_ENVIRONMENT).optional(), NEXT_PUBLIC_SOURCEBOT_VERSION: z.string().default("unknown"), - NEXT_PUBLIC_POSTHOG_PAPIK: z.string().optional(), NEXT_PUBLIC_SENTRY_BACKEND_DSN: z.string().optional(), NEXT_PUBLIC_SENTRY_ENVIRONMENT: z.string().optional(), NEXT_PUBLIC_LANGFUSE_PUBLIC_KEY: z.string().optional(), @@ -16,7 +15,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_POSTHOG_PAPIK: process.env.NEXT_PUBLIC_POSTHOG_PAPIK, 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/env.server.ts b/packages/shared/src/env.server.ts index f9c63f9c..21c08563 100644 --- a/packages/shared/src/env.server.ts +++ b/packages/shared/src/env.server.ts @@ -120,6 +120,7 @@ export const env = createEnv({ CONFIG_MAX_REPOS_NO_TOKEN: numberSchema.default(Number.MAX_SAFE_INTEGER), NODE_ENV: z.enum(["development", "test", "production"]), SOURCEBOT_TELEMETRY_DISABLED: booleanSchema.default('false'), + POSTHOG_PAPIK: z.string(), // Database variables // Either DATABASE_URL or DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD, and DATABASE_NAME must be set. diff --git a/packages/web/src/app/layout.tsx b/packages/web/src/app/layout.tsx index 4249c00f..13adfe05 100644 --- a/packages/web/src/app/layout.tsx +++ b/packages/web/src/app/layout.tsx @@ -37,7 +37,12 @@ export default function RootLayout({ - + { - if (!disabled && env.NEXT_PUBLIC_POSTHOG_PAPIK) { - console.debug(`PostHog telemetry enabled. Cloud environment: ${env.NEXT_PUBLIC_SOURCEBOT_CLOUD_ENVIRONMENT}`); - posthog.init(env.NEXT_PUBLIC_POSTHOG_PAPIK, { + if (!isDisabled) { + posthog.init(posthogApiKey, { // @see next.config.mjs for path rewrites to the "/ingest" route. api_host: "/ingest", person_profiles: 'identified_only', @@ -66,7 +66,7 @@ export function PostHogProvider({ children, disabled }: PostHogProviderProps) { } else { console.debug("PostHog telemetry disabled"); } - }, [disabled]); + }, [isDisabled, posthogApiKey]); useEffect(() => { if (!session) {