build-flow
Как работает duck-garden-engine
duck-garden-engine — это npm package, который собирает garden repo в static site.
Главная команда:
duck-garden build
В garden repo она обычно вызывается так:
npm run build
Что должно быть в garden repo
garden.config.json
package.json
src/site/notes/
Обычно также есть:
<slug>-vault/
src/site/img/user/
assets/
Attachments/
Порядок сборки
1. Чтение config
Engine читает:
garden.config.json
Если файла нет, сборка падает.
2. Подготовка workdir
Engine очищает и создаёт:
.duck-garden/work/
Туда копируется внутренний шаблон сайта.
3. Копирование опубликованных заметок
Сначала engine смотрит:
src/site/notes/
Если там есть опубликованные notes, берёт их.
Опубликованная note:
dg-publish: true
Если в src/site/notes/ опубликованных notes нет, engine ищет их по корню garden repo, пропуская служебные папки.
4. URL страниц
Если permalink задан — используется он.
Если permalink не задан, URL строится из пути:
src/site/notes/Guide/My Note.md
становится:
/guide/my-note/
5. Главная страница
Главная получает URL:
/
Признаки главной:
dg-home: true
или:
tags:
- gardenEntry
Старые варианты permalink: / и dg-permalink: / тоже поддерживаются, но сотрудникам не нужно ставить их вручную.
6. Картинки
Engine копирует картинки из:
src/site/img/user/
Attachments/
assets/
<slug>-vault/
Публичные ссылки должны быть:

На выходе:
dist/img/user/foto/example.jpg
7. Runtime config
Engine пишет:
.duck-garden/work/src/site/_data/gardenConfig.json
8. Theme и SCSS
Engine получает тему, компилирует SCSS и учитывает:
garden.custom.scss
если такой файл есть в garden repo.
9. Eleventy build
Eleventy собирает:
HTML pages
graph.json
searchIndex.json
styles
optimized assets
10. Проверка index.html
Engine ожидает:
.duck-garden/work/dist/index.html
Если его нет, почти всегда проблема в Home note.
11. Копирование результата
Engine копирует:
.duck-garden/work/dist -> dist
Итог:
dist/index.html
Проверка dist
npm run assert:dist
или:
node node_modules/@duck/garden-engine/scripts/assert-dist.js
Строгие проверки:
DUCK_ASSERT_MIN_LINKS=1 npm run assert:dist
DUCK_ASSERT_BACKLINK_URL=/ npm run assert:dist
Debug images
DUCK_DEBUG_IMAGES=1 npm run build
Debug без оптимизации картинок
USE_FULL_RESOLUTION_IMAGES=true npm run build
Миграции
Команда:
npx duck-garden migrate --from 1.0.17 --to 1.0.18
Миграции лежат в:
migrations/
Формат:
1.0.17-to-1.0.18.js
Даже пустая миграция должна существовать, если upgrade workflow ожидает миграционный путь.
Дальше: проверка engine до release.