feat(publish): allPostDirs traversiert sprach-ebene

This commit is contained in:
Jörg Lohrer 2026-04-21 09:10:27 +02:00
parent d3215fa760
commit 0c2e99dfeb
2 changed files with 32 additions and 4 deletions

View File

@ -54,12 +54,17 @@ export async function changedPostDirs(args: DiffArgs): Promise<string[]> {
export async function allPostDirs(contentRoot: string): Promise<string[]> {
const result: string[] = []
for await (const entry of Deno.readDir(contentRoot)) {
if (entry.isDirectory && !entry.name.startsWith('_')) {
const indexPath = `${contentRoot}/${entry.name}/index.md`
for await (const langEntry of Deno.readDir(contentRoot)) {
if (!langEntry.isDirectory) continue
if (!/^[a-z]{2}$/.test(langEntry.name)) continue
const langDir = `${contentRoot}/${langEntry.name}`
for await (const postEntry of Deno.readDir(langDir)) {
if (!postEntry.isDirectory) continue
if (postEntry.name.startsWith('_')) continue
const indexPath = `${langDir}/${postEntry.name}/index.md`
try {
const stat = await Deno.stat(indexPath)
if (stat.isFile) result.push(`${contentRoot}/${entry.name}`)
if (stat.isFile) result.push(`${langDir}/${postEntry.name}`)
} catch {
// skip folders without index.md
}

View File

@ -1,5 +1,6 @@
import { assertEquals } from '@std/assert'
import {
allPostDirs,
changedPostDirs,
filterPostDirs,
type GitRunner,
@ -83,3 +84,25 @@ Deno.test('filterPostDirs: _drafts unter sprach-ebene wird ignoriert', () => {
]
assertEquals(filterPostDirs(lines, 'content/posts'), ['content/posts/de/real'])
})
Deno.test('allPostDirs: findet posts in sprach-unterordnern', async () => {
const tmp = await Deno.makeTempDir()
try {
await Deno.mkdir(`${tmp}/de/alpha`, { recursive: true })
await Deno.writeTextFile(`${tmp}/de/alpha/index.md`, '---\n---')
await Deno.mkdir(`${tmp}/de/beta`, { recursive: true })
await Deno.writeTextFile(`${tmp}/de/beta/index.md`, '---\n---')
await Deno.mkdir(`${tmp}/en/alpha`, { recursive: true })
await Deno.writeTextFile(`${tmp}/en/alpha/index.md`, '---\n---')
await Deno.mkdir(`${tmp}/de/_draft/index`, { recursive: true })
await Deno.writeTextFile(`${tmp}/de/_draft/index.md`, '---\n---')
const result = await allPostDirs(tmp)
assertEquals(
result.sort(),
[`${tmp}/de/alpha`, `${tmp}/de/beta`, `${tmp}/en/alpha`].sort(),
)
} finally {
await Deno.remove(tmp, { recursive: true })
}
})