Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 23 additions & 21 deletions apps/loopover-ui/content/docs/self-hosting-operations.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -495,29 +495,31 @@ repeat the extension block in your override file:
TEMP: /tmp/runner/tmp

services:
runner-2-tmp-init:
image: alpine:3.20
profiles: ["runners"]
volumes: - runner-work-2:/tmp/runner
command: ["sh", "-c", "mkdir -p /tmp/runner/tmp && chmod 1777 /tmp/runner/tmp"]

runner-2:
image: myoung34/github-runner:ubuntu-jammy
profiles: ["runners"]
depends_on:
runner-2-tmp-init:
condition: service_completed_successfully
environment:
<<: \*runner-tmp-env
RUNNER_NAME: loopover-runner-2
RUNNER_SCOPE: \${RUNNER_SCOPE:-repo}
REPO_URL: \${RUNNER_REPO_URL:-}
RUNNER_TOKEN: \${RUNNER_TOKEN:-}
RUNNER_WORKDIR: /tmp/runner
volumes: - runner-work-2:/tmp/runner
runner-2-tmp-init:
image: alpine:3.20
profiles: ["runners"]
volumes:
- runner-work-2:/tmp/runner
command: ["sh", "-c", "mkdir -p /tmp/runner/tmp && chmod 1777 /tmp/runner/tmp"]

runner-2:
image: myoung34/github-runner:ubuntu-jammy
profiles: ["runners"]
depends_on:
runner-2-tmp-init:
condition: service_completed_successfully
environment:
<<: *runner-tmp-env
RUNNER_NAME: loopover-runner-2
RUNNER_SCOPE: \${RUNNER_SCOPE:-repo}
REPO_URL: \${RUNNER_REPO_URL:-}
RUNNER_TOKEN: \${RUNNER_TOKEN:-}
RUNNER_WORKDIR: /tmp/runner
volumes:
- runner-work-2:/tmp/runner

volumes:
runner-work-2:`}
runner-work-2:`}
/>

## Enabling Sentry (your own DSN)
Expand Down
32 changes: 17 additions & 15 deletions apps/loopover-ui/src/lib/selfhost-docs-audit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,75 +3,77 @@
export type SelfHostDocsPageLink = {
title: string;
path: string;
routeFile: string;
/** The page's real source since the #8182 dynamic-route migration: content/docs/<slug>.mdx (the
* one docs.$slug.tsx route serves every page — there is no per-page .tsx to point at anymore). */
contentFile: string;
};

export const SELFHOST_DOCS_PAGES = [
{
title: "Quickstart",
path: "/docs/self-hosting-quickstart",
routeFile: "docs.self-hosting-quickstart.tsx",
contentFile: "self-hosting-quickstart.mdx",
},
{
title: "Configuration",
path: "/docs/self-hosting-configuration",
routeFile: "docs.self-hosting-configuration.tsx",
contentFile: "self-hosting-configuration.mdx",
},
{
title: "GitHub App and Orb",
path: "/docs/self-hosting-github-app",
routeFile: "docs.self-hosting-github-app.tsx",
contentFile: "self-hosting-github-app.mdx",
},
{
title: "AI providers",
path: "/docs/self-hosting-ai-providers",
routeFile: "docs.self-hosting-ai-providers.tsx",
contentFile: "self-hosting-ai-providers.mdx",
},
{
title: "REES enrichment",
path: "/docs/self-hosting-rees",
routeFile: "docs.self-hosting-rees.tsx",
contentFile: "self-hosting-rees.mdx",
},
{
title: "REES analyzer reference",
path: "/docs/self-hosting-rees-analyzers",
routeFile: "docs.self-hosting-rees-analyzers.tsx",
contentFile: "self-hosting-rees-analyzers.mdx",
},
{ title: "RAG indexing", path: "/docs/self-hosting-rag", routeFile: "docs.self-hosting-rag.tsx" },
{ title: "RAG indexing", path: "/docs/self-hosting-rag", contentFile: "self-hosting-rag.mdx" },
{
title: "Operations",
path: "/docs/self-hosting-operations",
routeFile: "docs.self-hosting-operations.tsx",
contentFile: "self-hosting-operations.mdx",
},
{
title: "Backup and scaling",
path: "/docs/self-hosting-backup-scaling",
routeFile: "docs.self-hosting-backup-scaling.tsx",
contentFile: "self-hosting-backup-scaling.mdx",
},
{
title: "Releases and images",
path: "/docs/self-hosting-releases",
routeFile: "docs.self-hosting-releases.tsx",
contentFile: "self-hosting-releases.mdx",
},
{
title: "Release checklist",
path: "/docs/self-hosting-release-checklist",
routeFile: "docs.self-hosting-release-checklist.tsx",
contentFile: "self-hosting-release-checklist.mdx",
},
{
title: "Security",
path: "/docs/self-hosting-security",
routeFile: "docs.self-hosting-security.tsx",
contentFile: "self-hosting-security.mdx",
},
{
title: "Troubleshooting",
path: "/docs/self-hosting-troubleshooting",
routeFile: "docs.self-hosting-troubleshooting.tsx",
contentFile: "self-hosting-troubleshooting.mdx",
},
{
title: "Docs accuracy audit",
path: "/docs/self-hosting-docs-audit",
routeFile: "docs.self-hosting-docs-audit.tsx",
contentFile: "self-hosting-docs-audit.mdx",
},
] as const;

Expand Down
5 changes: 3 additions & 2 deletions test/unit/docs-selfhost-audit-checklist.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {

const REPO_ROOT = resolve(import.meta.dirname, "../..");
const ROUTES_DIR = resolve(REPO_ROOT, "apps/loopover-ui/src/routes");
const CONTENT_DIR = resolve(REPO_ROOT, "apps/loopover-ui/content/docs");
// SPIKE (#6037): these two pages' prose now lives in the migrated content/docs/*.mdx files, not
// the route .tsx, which only orchestrates the fumadocs loader + client-loader -- point the drift
// guard at the actual content source. docs.index.tsx (below, for the docs-hub link check) is the
Expand All @@ -28,9 +29,9 @@ describe("self-host docs accuracy audit (#1829)", () => {
const maintainerSource = readFileSync(MAINTAINER_INDEX, "utf8");
const packageJson = JSON.parse(readFileSync(PACKAGE_JSON, "utf8")) as { scripts: Record<string, string> };

it("manifest lists every self-host docs route file on disk", () => {
it("manifest lists every self-host docs content file on disk (pages are content/docs/*.mdx since the #8182 dynamic route)", () => {
for (const page of SELFHOST_DOCS_PAGES) {
expect(existsSync(resolve(ROUTES_DIR, page.routeFile)), page.routeFile).toBe(true);
expect(existsSync(resolve(CONTENT_DIR, page.contentFile)), page.contentFile).toBe(true);
}
});

Expand Down
5 changes: 3 additions & 2 deletions test/unit/kill-switch-incident-runbook.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import {

const repoRoot = process.cwd();
const runbookPath = join(repoRoot, "apps/loopover-ui/content/docs/ams-kill-switch-incident.mdx");
const routePath = join(repoRoot, "apps/loopover-ui/src/routes/docs.ams-kill-switch-incident.tsx");
// #8182 replaced the per-page thin route with the one dynamic docs route — that file now serves this page.
const routePath = join(repoRoot, "apps/loopover-ui/src/routes/docs.$slug.tsx");
const docsNavPath = join(repoRoot, "apps/loopover-ui/src/components/site/docs-nav.tsx");

describe("kill-switch incident runbook (#4809)", () => {
Expand All @@ -20,7 +21,7 @@ describe("kill-switch incident runbook (#4809)", () => {
const nav = readFileSync(docsNavPath, "utf8");

expect(runbook).toContain("title: Kill-switch incident runbook");
expect(route).toContain('createFileRoute("/docs/ams-kill-switch-incident")');
expect(route).toContain('createFileRoute("/docs/$slug")');
expect(nav).toContain('to: "/docs/ams-kill-switch-incident"');
});

Expand Down
Loading