From f2929f6bc6ac52cee14487d09d2770a3fb0393bc Mon Sep 17 00:00:00 2001 From: Steven Enamakel <31011319+senamakel@users.noreply.github.com> Date: Mon, 18 May 2026 06:33:22 -0700 Subject: [PATCH] chore(sentry): wire source-map + DIF uploads to self-hosted Sentry (#2106) --- .env.example | 4 ++++ .github/workflows/build-desktop.yml | 4 ++++ .github/workflows/release-production.yml | 2 ++ .github/workflows/release-staging.yml | 2 ++ app/.env.example | 1 + app/vite.config.ts | 4 ++++ 6 files changed, 17 insertions(+) diff --git a/.env.example b/.env.example index 674606c3a..5fd41ea03 100644 --- a/.env.example +++ b/.env.example @@ -217,6 +217,10 @@ OPENHUMAN_SKILLS_WORKING_MEMORY_ENABLED=true # `VITE_SENTRY_DSN`. The legacy unprefixed name `OPENHUMAN_SENTRY_DSN` is # still accepted as a fallback during the transition. OPENHUMAN_CORE_SENTRY_DSN= +# [optional] Override the Sentry server URL. Defaults to sentry.io if unset. +# Set to https://sentry.tinyhumans.ai for the self-hosted instance — used by +# sentry-cli (symbol/release uploads) and the @sentry/vite-plugin. +SENTRY_URL= # [optional] Short git SHA baked into the Sentry release tag # (`openhuman@+`) via `option_env!("OPENHUMAN_BUILD_SHA")`. # CI sets this automatically; leave blank locally (release tag falls back diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index 7c31087a4..ce4c0d6ae 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -398,6 +398,7 @@ jobs: # here would tag uploads against a different release than events. SENTRY_RELEASE: openhuman@${{ inputs.version }}+${{ inputs.short_sha }} SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_URL: ${{ vars.SENTRY_URL }} SENTRY_ORG: ${{ vars.SENTRY_ORG }} # SENTRY_PROJECT here is consumed by sentry-vite-plugin during the # Vite build that runs inside `cargo tauri build` — it uploads @@ -489,6 +490,7 @@ jobs: shell: bash env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_URL: ${{ vars.SENTRY_URL }} run: node scripts/release/verify-sentry-sourcemaps.mjs # ---- Sentry DIF uploads ------------------------------------------------ @@ -504,6 +506,7 @@ jobs: shell: bash env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_URL: ${{ vars.SENTRY_URL }} SENTRY_ORG: ${{ vars.SENTRY_ORG }} SENTRY_PROJECT: ${{ vars.SENTRY_PROJECT_TAURI }} SENTRY_RELEASE: openhuman@${{ inputs.version }}+${{ inputs.short_sha }} @@ -533,6 +536,7 @@ jobs: shell: bash env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_URL: ${{ vars.SENTRY_URL }} SENTRY_ORG: ${{ vars.SENTRY_ORG }} SENTRY_PROJECT: ${{ vars.SENTRY_PROJECT_CORE }} SENTRY_RELEASE: openhuman@${{ inputs.version }}+${{ inputs.short_sha }} diff --git a/.github/workflows/release-production.yml b/.github/workflows/release-production.yml index 60079cf73..0d88ade9f 100644 --- a/.github/workflows/release-production.yml +++ b/.github/workflows/release-production.yml @@ -727,6 +727,7 @@ jobs: needs: [prepare-build, publish-release] env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_URL: ${{ vars.SENTRY_URL }} steps: - name: Install sentry-cli if: env.SENTRY_AUTH_TOKEN != '' @@ -736,6 +737,7 @@ jobs: if: env.SENTRY_AUTH_TOKEN != '' shell: bash env: + SENTRY_URL: ${{ vars.SENTRY_URL }} SENTRY_ORG: ${{ vars.SENTRY_ORG }} # Marker lives on the React project's release; events from all # surfaces share the same `openhuman@+` release diff --git a/.github/workflows/release-staging.yml b/.github/workflows/release-staging.yml index dfb112032..cb8b794b1 100644 --- a/.github/workflows/release-staging.yml +++ b/.github/workflows/release-staging.yml @@ -317,6 +317,7 @@ jobs: needs: [prepare-build, build-desktop, build-docker] env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_URL: ${{ vars.SENTRY_URL }} steps: - name: Install sentry-cli if: env.SENTRY_AUTH_TOKEN != '' @@ -326,6 +327,7 @@ jobs: if: env.SENTRY_AUTH_TOKEN != '' shell: bash env: + SENTRY_URL: ${{ vars.SENTRY_URL }} SENTRY_ORG: ${{ vars.SENTRY_ORG }} # Marker lives on the React project's release; events from all # surfaces share the same `openhuman@+` release diff --git a/app/.env.example b/app/.env.example index 068f8dc8e..3bd910adc 100644 --- a/app/.env.example +++ b/app/.env.example @@ -55,6 +55,7 @@ VITE_BUILD_SHA= # `@sentry/vite-plugin`. Leave blank locally; the plugin skips when # `SENTRY_AUTH_TOKEN` is empty. # SENTRY_AUTH_TOKEN= +# SENTRY_URL= # https://sentry.tinyhumans.ai for self-hosted; defaults to sentry.io # SENTRY_ORG= # SENTRY_PROJECT= # SENTRY_RELEASE= diff --git a/app/vite.config.ts b/app/vite.config.ts index 4f514b0dd..d6999252a 100644 --- a/app/vite.config.ts +++ b/app/vite.config.ts @@ -41,6 +41,10 @@ function maybeSentryPlugin(): PluginOption | null { if (!authToken) return null; return sentryVitePlugin({ authToken, + // Self-hosted Sentry — without `url`, the plugin defaults to sentry.io + // and silently no-ops the upload. Falls back to sentry.io if unset for + // local builds against the SaaS instance. + url: process.env.SENTRY_URL, org: process.env.SENTRY_ORG, project: process.env.SENTRY_PROJECT, release: {