diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-01 14:48:45 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-01 14:48:45 +0300 |
| commit | 8a6d697308162874a236c84aac0b0f8c7ac01f83 (patch) | |
| tree | ed7dc7e8c6f50d66bde721fae78576aede929f66 /website/scripts/docs-versions.integration.test.ts | |
| parent | b54a78aa510b87d1e3b56c619b72eaeb59e4a2a1 (diff) | |
refactor: separate website presentation from runtime
Diffstat (limited to 'website/scripts/docs-versions.integration.test.ts')
| -rw-r--r-- | website/scripts/docs-versions.integration.test.ts | 191 |
1 files changed, 0 insertions, 191 deletions
diff --git a/website/scripts/docs-versions.integration.test.ts b/website/scripts/docs-versions.integration.test.ts deleted file mode 100644 index 2eba45cb..00000000 --- a/website/scripts/docs-versions.integration.test.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { afterEach, describe, expect, test } from 'bun:test'; -import { execFileSync } from 'node:child_process'; -import { mkdtemp, mkdir, readFile, rm, symlink, writeFile } from 'node:fs/promises'; -import { join, resolve } from 'node:path'; -import { tmpdir } from 'node:os'; - -const script = resolve(import.meta.dir, 'docs-versions.mjs'); -const prepareScript = resolve(import.meta.dir, 'prepare-docs.mjs'); -const temporaryDirectories: string[] = []; - -afterEach(async () => { - await Promise.all(temporaryDirectories.splice(0).map((path) => rm(path, { recursive: true, force: true }))); -}); - -describe('documentation release publishing', () => { - test('snapshots tagged next docs and switches stable to generated snapshots', async () => { - const root = await mkdtemp(join(tmpdir(), 'herdr-docs-')); - temporaryDirectories.push(root); - await write(root, 'website/src/content/docs/index.mdx', 'stable docs\n'); - await write(root, 'website/src/data/config-reference.json', '{"stable":true}\n'); - await write(root, 'website/latest.json', '{"version":"0.9.0"}\n'); - await write(root, 'README.md', 'stable readme\n'); - await write(root, 'README.zh-CN.md', 'stable readme zh-cn\n'); - const nextDocs = '---\ntitle: Documentation\n---\n\nnext docs\n'; - await write(root, 'docs/next/website/src/content/docs/index.mdx', nextDocs); - await write(root, 'docs/next/website/src/data/config-reference.json', '{"next":true}\n'); - await write(root, 'docs/next/README.md', 'next readme\n'); - await write(root, 'docs/next/README.zh-CN.md', 'next readme zh-cn\n'); - - git(root, ['init', '-q']); - git(root, ['config', 'user.email', 'test@example.com']); - git(root, ['config', 'user.name', 'Test']); - git(root, ['add', '.']); - git(root, ['commit', '-qm', 'release fixture']); - git(root, ['tag', 'v0.9.0']); - git(root, ['tag', 'v1.0.0']); - - runScript(root, ['publish', 'v1.0.0']); - - await expect(read(root, 'website/src/content/docs/index.mdx')).rejects.toThrow(); - await expect(read(root, 'website/src/data/config-reference.json')).rejects.toThrow(); - expect(await read(root, 'README.md')).toBe('next readme\n'); - expect(await read(root, 'README.zh-CN.md')).toBe('next readme zh-cn\n'); - expect(await read(root, 'docs/versions/1.0.0/website/src/content/docs/index.mdx')).toBe(nextDocs); - - const manifest = JSON.parse(await read(root, 'docs/versions/manifest.json')); - expect(manifest.current).toBe('1.0.0'); - expect(manifest.stable_source).toBe('snapshot'); - expect(manifest.versions[0]).toMatchObject({ - version: '1.0.0', - tag: 'v1.0.0', - commit: expect.stringMatching(/^[0-9a-f]{40}$/), - source: 'docs/next/website/src/content/docs', - }); - - const previewCommit = git(root, ['rev-parse', 'HEAD']).trim(); - await write(root, 'docs/preview/website/src/content/docs/index.mdx', 'preview docs\n'); - await write( - root, - 'docs/preview/website/src/data/config-reference.json', - '{"preview":true}\n', - ); - await write( - root, - 'website/preview.json', - `${JSON.stringify({ build_id: 'preview-test', commit: previewCommit })}\n`, - ); - runPrepare(root); - const stableDocs = await read(root, 'website/src/content/docs/index.mdx'); - expect(stableDocs).toContain('next docs'); - expect(stableDocs).toContain( - 'editUrl: https://github.com/herdrdev/herdr/blob/master/docs/versions/1.0.0/website/src/content/docs/index.mdx', - ); - const versionedDocs = await read( - root, - 'website/src/content/docs/_versions/1.0.0/index.mdx', - ); - expect(versionedDocs).toContain('next docs'); - expect(versionedDocs).toContain( - 'editUrl: https://github.com/herdrdev/herdr/blob/master/docs/versions/1.0.0/website/src/content/docs/index.mdx', - ); - expect(await read(root, 'website/src/content/docs/preview/index.mdx')).toContain( - 'Preview build `preview-test`', - ); - expect(await read(root, 'website/src/data/config-reference.json')).toBe('{"next":true}\n'); - - await write(root, 'website/latest.json', '{"version":"1.0.0"}\n'); - runScript(root, ['check']); - - const correctedDocs = '---\ntitle: Documentation\n---\n\ncorrected docs\n'; - await write( - root, - 'docs/versions/1.0.0/website/src/content/docs/index.mdx', - correctedDocs, - ); - await write( - root, - 'docs/versions/1.0.0/website/src/data/config-reference.json', - '{"corrected":true}\n', - ); - runScript(root, ['check']); - - await write(root, 'README.md', 'post-release correction\n'); - runScript(root, ['publish', 'v1.0.0']); - expect(await read(root, 'README.md')).toBe('post-release correction\n'); - - runPrepare(root); - expect(await read(root, 'website/src/content/docs/index.mdx')).toContain('corrected docs'); - expect(await read(root, 'website/src/content/docs/_versions/1.0.0/index.mdx')).toContain( - 'corrected docs', - ); - expect(await read(root, 'website/src/data/config-reference.json')).toBe( - '{"corrected":true}\n', - ); - const versionReferences = JSON.parse( - await read(root, 'website/src/data/config-reference-versions.json'), - ); - expect(versionReferences['1.0.0']).toEqual({ corrected: true }); - - runScript(root, ['publish', 'v0.9.0']); - const archivedManifest = JSON.parse(await read(root, 'docs/versions/manifest.json')); - expect(archivedManifest.current).toBe('1.0.0'); - expect(archivedManifest.versions.map(({ version }) => version)).toEqual(['1.0.0', '0.9.0']); - expect(await read(root, 'README.md')).toBe('post-release correction\n'); - runScript(root, ['check']); - - const correctedArchivedDocs = '---\ntitle: Documentation\n---\n\ncorrected archived docs\n'; - await write( - root, - 'docs/versions/0.9.0/website/src/content/docs/index.mdx', - correctedArchivedDocs, - ); - runScript(root, ['publish', 'v0.9.0']); - expect(await read(root, 'docs/versions/0.9.0/website/src/content/docs/index.mdx')).toBe( - correctedArchivedDocs, - ); - - const archivedDocsRoot = resolve( - root, - 'docs/versions/0.9.0/website/src/content/docs', - ); - await rm(archivedDocsRoot, { recursive: true, force: true }); - expect(() => runScript(root, ['check'])).toThrow(); - await write( - root, - 'docs/versions/0.9.0/website/src/content/docs/index.mdx', - correctedArchivedDocs, - ); - const linkedPage = resolve(archivedDocsRoot, 'linked.mdx'); - await symlink('index.mdx', linkedPage); - expect(() => runScript(root, ['check'])).toThrow(); - await rm(linkedPage); - runScript(root, ['check']); - - delete archivedManifest.versions[0].commit; - await write(root, 'docs/versions/manifest.json', `${JSON.stringify(archivedManifest)}\n`); - expect(() => runScript(root, ['check'])).toThrow(); - // This test runs a dozen git and node subprocesses; slow CI builders can - // exceed the 5s default timeout. - }, 30_000); -}); - -async function write(root: string, path: string, content: string) { - const destination = resolve(root, path); - await mkdir(resolve(destination, '..'), { recursive: true }); - await writeFile(destination, content, 'utf8'); -} - -async function read(root: string, path: string) { - return readFile(resolve(root, path), 'utf8'); -} - -function git(root: string, args: string[]) { - return execFileSync('git', args, { cwd: root, encoding: 'utf8', stdio: 'pipe' }); -} - -function runScript(root: string, args: string[]) { - execFileSync('node', [script, ...args], { - cwd: root, - env: { ...process.env, HERDR_DOCS_REPO_ROOT: root }, - stdio: 'pipe', - }); -} - -function runPrepare(root: string) { - execFileSync('node', [prepareScript, '--docs-only'], { - cwd: root, - env: { ...process.env, HERDR_DOCS_REPO_ROOT: root }, - stdio: 'pipe', - }); -} |
