diff --git a/src/lib/server/fleet/drift.ts b/src/lib/server/fleet/drift.ts index 6f90830..193761a 100644 --- a/src/lib/server/fleet/drift.ts +++ b/src/lib/server/fleet/drift.ts @@ -26,6 +26,11 @@ import { allServers, getServer, listServers } from './servers.js'; // Baseline shares the config destination — one physical dir, two logical kinds. const DRIFT_DESTS: ReadonlyArray = ['script', 'config', 'plugin']; +// Filenames we never treat as drift. dedicated.cfg is placed by Plutonium for +// multiplayer and regenerates if deleted; we manage dedicated_sp.cfg (zombies) +// via config-compose instead. +const DRIFT_IGNORE_FILENAMES = new Set(['dedicated.cfg']); + // Two flavors of drift: // 'untracked' — file on disk that inventory doesn't know about (delete it) // 'missing' — artifact promoted for this server's scope, but file is gone @@ -61,6 +66,7 @@ async function walkFiles(root: string): Promise { return; } for (const e of entries) { + if (DRIFT_IGNORE_FILENAMES.has(e.name)) continue; const abs = join(dir, e.name); if (e.isDirectory()) await recur(abs); else if (e.isFile()) out.push(toPosix(relative(root, abs))); diff --git a/src/lib/ui/components/ArtifactDetail.svelte b/src/lib/ui/components/ArtifactDetail.svelte new file mode 100644 index 0000000..5f16a9e --- /dev/null +++ b/src/lib/ui/components/ArtifactDetail.svelte @@ -0,0 +1,550 @@ + + +{#if loading} +

loading…

+{:else if !artifact} +

{family} not found

+{:else} + {backLabel} +

{artifact.name}

+
{artifact.target_rel_path}
+ + {#if runningBetaId} + + {/if} + +
+

Details

+
+
+
target file
+
{artifact.target_rel_path}
+
+
+
scope
+
{scopeLabel(artifact)}
+
+
+
applies to
+
+ {#if !artifact.scope_type} + unscoped — deploy from a beta + {:else if matchedServers.length === 0} + no matching servers + {:else} + {matchedServers.join(', ')} + {/if} +
+
+
+
current version
+
+ {#if currentVersion} + v{currentVersion.version} · {currentVersion.sha256.slice(0, 8)} promoted + {:else} + — never promoted (open a beta from /betas) + {/if} +
+
+ {#if showLatestSeparately && latestVersion} +
+
latest version
+
+ v{latestVersion.version} · {latestVersion.sha256.slice(0, 8)} + {latestVersion.state} +
+
+ {/if} +
+
+ + +
+
+ +
+

Version history

+ {#if versions.length === 0} +

none

+ {:else} +
+ {#each versions as v (v.id)} +
+ v{v.version} + {v.sha256.slice(0, 12)} + {v.size}B + {v.notes ?? ''} + {v.uploaded_at} + {#if artifact.current_version_id === v.id} + promoted + {:else if v.state === 'tested'} + tested + {:else if v.state === 'test-failed'} + test-failed + {:else} + untested + {/if} +
+ {/each} +
+ {/if} +
+ +
+

Danger

+ +
+ + {#if flash}

{flash}

{/if} + + onDialogClick(scopeDialog, e)}> +
+

Edit scope

+
+ + {#if scopeType === 'game'} + + {:else if scopeType === 'map'} + + + {/if} +
+
+ + +
+ {#if flash}

{flash}

{/if} +
+
+ + onDialogClick(uploadDialog, e)}> +
+

Upload new version

+
+ + +
+
+ + +
+ {#if flash}

{flash}

{/if} +
+
+{/if} + + diff --git a/src/lib/ui/components/LogPanel.svelte b/src/lib/ui/components/LogPanel.svelte index c6a92c8..ff69f33 100644 --- a/src/lib/ui/components/LogPanel.svelte +++ b/src/lib/ui/components/LogPanel.svelte @@ -12,7 +12,7 @@ lines?: number; pollMs?: number; } - let { server, tabs, lines = 200, pollMs = 5000 }: Props = $props(); + let { server, tabs, lines = 1000, pollMs = 5000 }: Props = $props(); interface LogResponse { ok: boolean; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5efb159..dcff9ce 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,7 +1,6 @@ -
-
-
-
-

Fleet

- {servers.length} server{servers.length === 1 ? '' : 's'} -
- manage scripts → -
- {#if servers.length === 0} -

no servers registered yet — check SERVERS_ROOT

- {:else} -
- {#each servers as s (s.name)} - {@const live = liveFor(s.name, s)} - - {/each} -
- {/if} -
- - -
+
+
+
+

Fleet

+ {servers.length} server{servers.length === 1 ? '' : 's'} +
+
+ {#if servers.length === 0} +

no servers registered yet — check SERVERS_ROOT

+ {:else} +
+ {#each servers as s (s.name)} + {@const live = liveFor(s.name, s)} + + {/each} +
+ {/if} +
+{#key id} + +{/key} diff --git a/src/routes/servers/[name]/+page.svelte b/src/routes/servers/[name]/+page.svelte index 8f4ee4e..a1da0f7 100644 --- a/src/routes/servers/[name]/+page.svelte +++ b/src/routes/servers/[name]/+page.svelte @@ -1,5 +1,5 @@