Docs Pipeline
.github/workflows/docs.yml · scripts/inject-doc-meta.mjs · quartz-overrides/
Як docs/ рендериться на https://stack-electron-docs.pages.dev. Триває ~1-2 хв на пуш.
Як це працює
- Тригер — push у
refactorзі змінами вdocs/**,scripts/inject-doc-meta.mjs,quartz-overrides/**або самогоdocs.yml. - Checkout —
fetch-depth: 0, потрібна повна git-історія для дат і авторів. - Clone Quartz — свіжий Quartz у
_quartz/. Власного форка нема, базуємось на upstream. - Apply overrides —
rsync quartz-overrides/ _quartz/. Зараз перекриваєquartz/components/ContentMeta.tsxщоб показувати автора. - Copy content —
rsync docs/ _quartz/content/(без.obsidian). - Inject metadata —
scripts/inject-doc-meta.mjs _quartz/content. Для кожного.mdвитягуєgit log -1оригінального файла і пише в YAML-frontmatter копії:modified,author,tags(теги переносяться з першого рядка body, щоб не дублювались на сайті). Окремо генерує_quartz/content/changelog.mdз повної історії. - Build —
npx quartz build. - Deploy —
wrangler pages deployна Cloudflare Pages.
Числа / Поля
modified— ISO 8601 дата останнього коміту що торкався файлаauthor—%anостаннього комітуtags— JSON-array, парситься з першого рядка body (Obsidian inline tags#x #y)- Changelog показує 80 останніх комітів з
docs/
Нюанси
- Файли в
docs/не модифікуються. Інжект працює тільки на копії в_quartz/content/всередині CI. Локально в Obsidian усе як було. - Без
fetch-depth: 0git log поверне 1 коміт і дати/changelog зламаються. Це найчастіша точка регресії. - Override ContentMeta лежить у
quartz-overrides/quartz/components/ContentMeta.tsx. Структура папок дзеркалить Quartz. Якщо upstream Quartz сильно змінить інтерфейс компонента — треба буде підтягнути зміни вручну. - Дедуплікація тегів. Перший непорожній рядок body парситься як
#tag1 #tag2. Якщо це не теги — рядок не чіпається. Кириличні теги підтримуються. changelog.mdвdocs/не існує — генерується тільки в білдівській копії, в репо не комітимо.
Чекліст для AI / нового онбордингу
Коли треба перевірити що пайплайн ще на місці — пройди по списку:
-
.github/workflows/docs.ymlмає крокInject git metadataпісляCopy contentі передBuild -
actions/checkout@v4викликаний зfetch-depth: 0 - У
paths:тригера є іdocs/**, іscripts/inject-doc-meta.mjs, іquartz-overrides/** - Файл
scripts/inject-doc-meta.mjsіснує і інжектитьmodified,author,tags - Папка
quartz-overrides/quartz/components/міститьContentMeta.tsxзіshowAuthor: true - Workflow має крок
Apply Quartz overrides(rsync) міжSetup QuartzіCopy content - На задеплоєному сайті: під заголовком кожної сторінки видно дату + автора, на
/changelog— таблиця файлів і список комітів
Як міняти
- Додати ще одне поле frontmatter (наприклад
committer,editorCount) — уinject-doc-meta.mjsвитягуємо зgit logдодатковим--formatпараметром, додаємо вfields. Якщо хочеш показати на сторінці — патчитиquartz-overrides/quartz/components/ContentMeta.tsx. - Змінити вигляд автора/дати — правки в
quartz-overrides/quartz/components/ContentMeta.tsx. Локального превʼю нема — зміни видно тільки після push. - Додати ще один override Quartz-компонента — кладемо в
quartz-overrides/quartz/components/<Name>.tsx. Rsync скопіює автоматично, окремо нічого реєструвати не треба. - Розширити changelog (за період, по теці, тощо) — функція
buildChangelog()у тому ж скрипті. Генерує markdown з git output, формат вільний.
Зв’язки
- Тригерить білд: будь-який пуш у
refactorщо зачіпаєdocs/** - Читає:
git logвсього репо - Пише:
_quartz/content/**(тимчасово, в CI) - Деплоїть:
stack-electron-docs.pages.dev