Procházet zdrojové kódy

electron sentry integration

Brendan Allan před 4 týdny
rodič
revize
7663963afd

+ 2 - 0
bun.lock

@@ -244,6 +244,8 @@
         "@lydell/node-pty": "catalog:",
         "@opencode-ai/app": "workspace:*",
         "@opencode-ai/ui": "workspace:*",
+        "@sentry/solid": "catalog:",
+        "@sentry/vite-plugin": "catalog:",
         "@solid-primitives/i18n": "2.2.1",
         "@solid-primitives/storage": "catalog:",
         "@solidjs/meta": "catalog:",

+ 20 - 1
packages/desktop-electron/electron.vite.config.ts

@@ -1,3 +1,4 @@
+import { sentryVitePlugin } from "@sentry/vite-plugin"
 import { defineConfig } from "electron-vite"
 import appPlugin from "@opencode-ai/app/vite"
 import * as fs from "node:fs/promises"
@@ -12,6 +13,23 @@ const OPENCODE_SERVER_DIST = "../opencode/dist/node"
 
 const nodePtyPkg = `@lydell/node-pty-${process.platform}-${process.arch}`
 
+const sentry =
+  process.env.SENTRY_AUTH_TOKEN && process.env.SENTRY_ORG && process.env.SENTRY_PROJECT
+    ? sentryVitePlugin({
+        authToken: process.env.SENTRY_AUTH_TOKEN,
+        org: process.env.SENTRY_ORG,
+        project: process.env.SENTRY_PROJECT,
+        telemetry: false,
+        release: {
+          name: process.env.SENTRY_RELEASE ?? process.env.VITE_SENTRY_RELEASE,
+        },
+        sourcemaps: {
+          assets: "./out/renderer/**",
+          filesToDeleteAfterUpload: "./out/renderer/**/*.map",
+        },
+      })
+    : false
+
 export default defineConfig({
   main: {
     define: {
@@ -57,13 +75,14 @@ export default defineConfig({
     },
   },
   renderer: {
-    plugins: [appPlugin],
+    plugins: [appPlugin, sentry],
     publicDir: "../../../app/public",
     root: "src/renderer",
     define: {
       "import.meta.env.VITE_OPENCODE_CHANNEL": JSON.stringify(channel),
     },
     build: {
+      sourcemap: true,
       rollupOptions: {
         input: {
           main: "src/renderer/index.html",

+ 2 - 0
packages/desktop-electron/package.json

@@ -37,6 +37,8 @@
     "@lydell/node-pty": "catalog:",
     "@opencode-ai/app": "workspace:*",
     "@opencode-ai/ui": "workspace:*",
+    "@sentry/solid": "catalog:",
+    "@sentry/vite-plugin": "catalog:",
     "@solid-primitives/i18n": "2.2.1",
     "@solid-primitives/storage": "catalog:",
     "@solidjs/meta": "catalog:",

+ 14 - 0
packages/desktop-electron/src/renderer/index.tsx

@@ -14,6 +14,7 @@ import {
   ServerConnection,
   useCommand,
 } from "@opencode-ai/app"
+import * as Sentry from "@sentry/solid"
 import type { AsyncStorage } from "@solid-primitives/storage"
 import { MemoryRouter } from "@solidjs/router"
 import { createEffect, createResource, onCleanup, onMount, Show } from "solid-js"
@@ -30,6 +31,19 @@ if (import.meta.env.DEV && !(root instanceof HTMLElement)) {
   throw new Error(t("error.dev.rootNotFound"))
 }
 
+if (!import.meta.env.DEV && import.meta.env.VITE_SENTRY_DSN) {
+  Sentry.init({
+    dsn: import.meta.env.VITE_SENTRY_DSN,
+    environment: import.meta.env.VITE_SENTRY_ENVIRONMENT ?? import.meta.env.MODE,
+    release: import.meta.env.VITE_SENTRY_RELEASE ?? `desktop-electron@${pkg.version}`,
+    initialScope: {
+      tags: {
+        platform: "desktop-electron",
+      },
+    },
+  })
+}
+
 void initI18n()
 
 const deepLinkEvent = "opencode:deep-link"