Docs-pipeline

Docs Pipeline

.github/workflows/docs.yml · scripts/inject-doc-meta.mjs · quartz-overrides/

Як docs/ рендериться на https://stack-electron-docs.pages.dev. Триває ~1-2 хв на пуш.

Як це працює

  1. Тригер — push у refactor зі змінами в docs/**, scripts/inject-doc-meta.mjs, quartz-overrides/** або самого docs.yml.
  2. Checkoutfetch-depth: 0, потрібна повна git-історія для дат і авторів.
  3. Clone Quartz — свіжий Quartz у _quartz/. Власного форка нема, базуємось на upstream.
  4. Apply overridesrsync quartz-overrides/ _quartz/. Зараз перекриває quartz/components/ContentMeta.tsx щоб показувати автора.
  5. Copy contentrsync docs/ _quartz/content/ (без .obsidian).
  6. Inject metadatascripts/inject-doc-meta.mjs _quartz/content. Для кожного .md витягує git log -1 оригінального файла і пише в YAML-frontmatter копії: modified, author, tags (теги переносяться з першого рядка body, щоб не дублювались на сайті). Окремо генерує _quartz/content/changelog.md з повної історії.
  7. Buildnpx quartz build.
  8. Deploywrangler 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: 0 git 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