diff --git a/.dockerignore b/.dockerignore index 48e2821..12e029c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,8 +1,4 @@ -# Keep just enough of .git for the build to read the current commit. -.git/* -!.git/HEAD -!.git/refs -!.git/packed-refs +.git .claude node_modules .svelte-kit diff --git a/src/app.d.ts b/src/app.d.ts index 4b5ae00..be79b78 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -1,9 +1,6 @@ // See https://svelte.dev/docs/kit/types#app.d.ts declare global { namespace App {} - - /** Stamped in by vite.config.ts at build time. */ - const __BUILD__: { version: string; commit: string; dirty: boolean; time: string }; } export {}; diff --git a/src/lib/components/SettingsModal.svelte b/src/lib/components/SettingsModal.svelte index 6b92676..c296b04 100644 --- a/src/lib/components/SettingsModal.svelte +++ b/src/lib/components/SettingsModal.svelte @@ -8,7 +8,6 @@ type Tab = 'appearance' | 'input' | 'sync'; let tab = $state('appearance'); const s = settings.data; - const build = __BUILD__; let testing = $state(false); let testResult = $state<{ ok: boolean; text: string } | null>(null); @@ -56,9 +55,6 @@ -
- v{build.version} ยท {build.commit.slice(0, 7)}{build.dirty ? '-dirty' : ''} -
@@ -191,14 +187,6 @@ color: var(--faint); padding: 0 10px 8px; } - .build { - margin-top: auto; - padding: 0 10px; - font-family: var(--mono-font); - font-size: 11px; - color: var(--faint); - user-select: text; - } nav button { text-align: left; border: 0; diff --git a/vite.config.ts b/vite.config.ts index c94dbc9..3f382a5 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,40 +1,8 @@ -import { execSync } from 'node:child_process'; -import { existsSync, readFileSync } from 'node:fs'; import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vitest/config'; -/** Current commit. Uses git when available, else reads .git directly (the Docker build has no git binary). */ -function gitCommit(): { commit: string; dirty: boolean } { - if (process.env.GIT_COMMIT) return { commit: process.env.GIT_COMMIT, dirty: false }; - try { - const commit = execSync('git rev-parse HEAD', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim(); - const dirty = execSync('git status --porcelain --untracked-files=no', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim() !== ''; - return { commit, dirty }; - } catch { - /* fall through */ - } - try { - const head = readFileSync('.git/HEAD', 'utf8').trim(); - if (!head.startsWith('ref: ')) return { commit: head, dirty: false }; - const ref = head.slice(5); - if (existsSync(`.git/${ref}`)) return { commit: readFileSync(`.git/${ref}`, 'utf8').trim(), dirty: false }; - const packed = readFileSync('.git/packed-refs', 'utf8').split('\n').find((l) => l.endsWith(` ${ref}`)); - if (packed) return { commit: packed.split(' ')[0], dirty: false }; - } catch { - /* no repository */ - } - return { commit: 'unknown', dirty: false }; -} - -const build = { - version: JSON.parse(readFileSync('package.json', 'utf8')).version as string, - ...gitCommit(), - time: new Date().toISOString() -}; - export default defineConfig({ plugins: [sveltekit()], - define: { __BUILD__: JSON.stringify(build) }, test: { include: ['src/**/*.test.ts'], environment: 'node'