Files
libnovel/ui/vite.config.ts
Admin 023b1f7fec
Some checks failed
CI / Check ui (pull_request) Failing after 11s
CI / Docker / caddy (pull_request) Failing after 11s
CI / Docker / ui (pull_request) Has been skipped
CI / Test backend (pull_request) Successful in 30s
Release / Check ui (push) Failing after 38s
Release / Upload source maps (push) Has been skipped
Release / Docker / ui (push) Has been skipped
Release / Test backend (push) Successful in 48s
Release / Docker / caddy (push) Successful in 45s
CI / Docker / backend (pull_request) Has been cancelled
CI / Docker / runner (pull_request) Has been cancelled
Release / Docker / runner (push) Has been cancelled
Release / Gitea Release (push) Has been cancelled
Release / Docker / backend (push) Has been cancelled
feat(observability): add GlitchTip source map uploads for un-minified stack traces
- Enable sourcemap:true in vite.config.ts
- Add sentryVitePlugin: uploads maps to errors.libnovel.cc, deletes them post-upload so they never ship in the Docker image
- Wire release: PUBLIC_BUILD_VERSION in both hooks.client.ts and hooks.server.ts so events correlate to the correct artifact
- Add upload-sourcemaps CI job in release.yaml (parallel to docker-ui, uses GLITCHTIP_AUTH_TOKEN secret)
2026-03-25 20:26:19 +05:00

46 lines
1.6 KiB
TypeScript

import { sveltekit } from '@sveltejs/kit/vite';
import tailwindcss from '@tailwindcss/vite';
import { defineConfig } from 'vite';
import { sentryVitePlugin } from '@sentry/vite-plugin';
// Source maps are always generated so that the CI pipeline can upload them to
// GlitchTip after a release build. The sentryVitePlugin upload step is only
// active when SENTRY_AUTH_TOKEN is present (i.e. in the release CI job).
export default defineConfig({
build: {
sourcemap: true
},
plugins: [
tailwindcss(),
sveltekit(),
sentryVitePlugin({
org: 'libnovel',
project: 'libnovel-ui',
url: 'https://errors.libnovel.cc/',
// Auth token injected by CI via SENTRY_AUTH_TOKEN env var.
// When the env var is absent the plugin is a no-op.
authToken: process.env.SENTRY_AUTH_TOKEN,
// Release name matches the Docker image tag (e.g. "1.2.3").
release: { name: process.env.BUILD_VERSION },
// Don't upload source maps in local dev or CI type-check jobs.
disable: !process.env.SENTRY_AUTH_TOKEN,
// Source maps are uploaded to GlitchTip; do not ship them in the
// production bundle served to browsers.
sourceMapsUploadOptions: {
filesToDeleteAfterUpload: ['./build/**/*.map']
}
})
],
ssr: {
// Force these packages to be bundled into the server output rather than
// treated as external requires. The production Docker image has no
// node_modules, so anything used in server-side code must be inlined.
noExternal: ['marked'],
// cropperjs is DOM-only (used inside $effect); exclude from SSR bundle.
external: ['cropperjs']
},
optimizeDeps: {
include: ['cropperjs']
}
});