chore(sentry): migrate Vite source map upload from Bugsink to Sentry (#630)
## What Migrate the Vite source map upload from the decommissioned Bugsink instance to Sentry. Bugsink is no longer used error tracking is fully on Sentry. - Point `sentryVitePlugin` at the Sentry EU region (`https://de.sentry.io/`), org `whisper-money`, project `php-laravel`. - Read the auth token from `process.env.SENTRY_AUTH_TOKEN` instead of hardcoding it. - Remove the hardcoded Bugsink URL, org, project, and auth token. Source maps go to `php-laravel` (not `frontend`) because frontend JS errors are captured there app.tsx initializes Sentry with `SENTRY_LARAVEL_DSN`, and the live JS issues (e.g. `PHP-LARAVEL-2Y`, platform `javascript`, `assets/app-*.js` frames) confirm it. ## Source map leak fix A single flag (`SENTRY_AUTH_TOKEN` present) now gates **both** map generation and upload, so the "maps generated but never deleted" leak into `public/build/assets/` can no longer happen: - **With token** (production CI): `sourcemap: 'hidden'` → maps are emitted, uploaded, then deleted. `'hidden'` omits the `sourceMappingURL` comment, so browsers never fetch them even in the window before deletion. - **Without token** (local/dev/CI): `sourcemap: false` → no maps emitted. Nothing to leak, nothing to upload. ## Follow-ups (outside this file) - [ ] **Rotate the old Bugsink token** (`b0f46d1b…a2e8a`) it is removed here but remains in git history. - [ ] **Provide `SENTRY_AUTH_TOKEN` to the production build** so uploads actually run. `Dockerfile.production` runs `bun run build:ssr` without it today; inject it via a BuildKit `--mount=type=secret` (not an `ARG`, which persists in image history). Until then uploads are skipped safely, but frontend stacks stay minified.
This commit is contained in:
parent
4615d7a880
commit
c370abcd6d
|
|
@ -5,10 +5,17 @@ import react from '@vitejs/plugin-react';
|
||||||
import laravel from 'laravel-vite-plugin';
|
import laravel from 'laravel-vite-plugin';
|
||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
|
|
||||||
|
// Only upload source maps when the build has a Sentry auth token (production
|
||||||
|
// CI). The same flag gates map generation, so a build without the token never
|
||||||
|
// emits .js.map files there is nothing to leak into public/build/assets/.
|
||||||
|
const sentryAuthToken = process.env.SENTRY_AUTH_TOKEN;
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
envPrefix: ['VITE_', 'SENTRY_LARAVEL_DSN'],
|
envPrefix: ['VITE_', 'SENTRY_LARAVEL_DSN'],
|
||||||
build: {
|
build: {
|
||||||
sourcemap: true,
|
// 'hidden' emits maps for upload but omits the sourceMappingURL comment,
|
||||||
|
// so browsers never fetch them even in the window before they're deleted.
|
||||||
|
sourcemap: sentryAuthToken ? 'hidden' : false,
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
laravel({
|
laravel({
|
||||||
|
|
@ -25,19 +32,26 @@ export default defineConfig({
|
||||||
wayfinder({
|
wayfinder({
|
||||||
formVariants: true,
|
formVariants: true,
|
||||||
}),
|
}),
|
||||||
sentryVitePlugin({
|
...(sentryAuthToken
|
||||||
url: 'https://bugsink.whisper.money/',
|
? [
|
||||||
authToken: 'b0f46d1bdc25b9a998f540542e027e9faf0a2e8a',
|
sentryVitePlugin({
|
||||||
org: 'bugsinkhasnoorgs',
|
url: 'https://de.sentry.io/',
|
||||||
project: 'ignoredfornow',
|
authToken: sentryAuthToken,
|
||||||
release: {
|
org: 'whisper-money',
|
||||||
create: false,
|
// Frontend JS errors are captured into the php-laravel
|
||||||
finalize: false,
|
// project (see app.tsx Sentry.init using SENTRY_LARAVEL_DSN),
|
||||||
},
|
// so maps must be uploaded there to symbolicate them.
|
||||||
sourcemaps: {
|
project: 'php-laravel',
|
||||||
filesToDeleteAfterUpload: ['**/*.js.map'],
|
release: {
|
||||||
},
|
create: false,
|
||||||
}),
|
finalize: false,
|
||||||
|
},
|
||||||
|
sourcemaps: {
|
||||||
|
filesToDeleteAfterUpload: ['**/*.js.map'],
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
: []),
|
||||||
],
|
],
|
||||||
esbuild: {
|
esbuild: {
|
||||||
jsx: 'automatic',
|
jsx: 'automatic',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue