Основные концепции
CI/CD (Continuous Integration / Continuous Deployment) для документации — это процесс автоматизации сборки, тестирования и публикации документации при изменениях в исходном коде или контенте. В современном JavaScript-стеке для работы с Markdown и HTML широко используются библиотеки Remark и Rehype, которые позволяют обрабатывать текст, выполнять линтинг, трансформации и генерацию HTML с высокой гибкостью.
Структура pipeline
Источники документации Markdown-файлы
(.md) служат основой документации. Они хранятся в отдельной
директории репозитория, обычно docs/ или
documentation/. Каждый файл должен быть структурирован с
использованием заголовков (#, ##,
###) для правильного построения дерева документа.
Pre-processing с Remark Remark позволяет анализировать и преобразовывать Markdown. В pipeline обычно выполняются следующие шаги:
remark-lint для
проверки стиля и структуры текста.remark-parse и remark-rehype.remark-toc или кастомных плагинов.Пример конфигурации линтера в .remarkrc.js:
module.exports = {
plugins: [
'remark-preset-lint-recommended',
['remark-lint-heading-increment', true],
['remark-toc', { heading: 'Содержание' }]
]
};Преобразование в HTML с Rehype Rehype берет Markdown-дерево, преобразованное Remark, и конвертирует его в HTML. Это позволяет интегрировать документацию с веб-сайтами, статическими генераторами или системами публикации. Основные шаги:
remark-rehype выполняет трансформацию AST Markdown в
AST HTML.rehype-highlight,
rehype-slug, rehype-autolink-headings)
добавляют подсветку синтаксиса, идентификаторы заголовков и ссылки на
них.Пример pipeline в Node.js:
const fs = require('fs');
const { unified } = require('unified');
const remarkParse = require('remark-parse');
const remarkRehype = require('remark-rehype');
const rehypeStringify = require('rehype-stringify');
const rehypeHighlight = require('rehype-highlight');
unified()
.use(remarkParse)
.use(remarkRehype)
.use(rehypeHighlight)
.use(rehypeStringify)
.process(fs.readFileSync('docs/guide.md'))
.then(file => fs.writeFileSync('dist/guide.html', String(file)));Интеграция с системой CI/CD Для автоматизации процесса обычно используют GitHub Actions, GitLab CI/CD или Jenkins. Pipeline строится по принципу:
npm ci или yarn install).npx remark docs/).node build.js).gh-pages, Netlify, Vercel).Пример workflow для GitHub Actions:
name: Docs CI/CD
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '20'
- run: npm ci
- run: npx remark docs/
- run: node build.js
- run: npx gh-pages -d distРасширенные возможности
Автогенерация ссылок и оглавлений Использование
rehype-slug и rehype-autolink-headings
позволяет автоматически создавать якоря для заголовков, что улучшает
навигацию по документации и упрощает интеграцию с внешними
ссылками.
Подсветка кода и улучшенная визуализация Плагин
rehype-highlight или интеграция с prismjs
позволяет автоматически подсвечивать синтаксис всех блоков кода
Markdown, сохраняя единый стиль документации.
Проверка ссылок и валидность контента
Remark-плагины типа remark-validate-links обеспечивают
автоматическую проверку всех внутренних и внешних ссылок, предотвращая
появление “битых” ссылок после деплоя.
Интеграция с генераторами статических сайтов Использование Remark/Rehype в связке с Next.js, Astro или Eleventy позволяет строить современную документацию с реактивными компонентами и клиентской логикой.
Организация проекта
Рекомендуется держать структуру проекта следующей:
project-root/
├─ docs/
│ ├─ guide.md
│ ├─ api.md
│ └─ tutorials/
├─ dist/
├─ build.js
├─ package.json
├─ .remarkrc.js
└─ .github/workflows/docs.yml
docs/ — исходные Markdown-файлы.dist/ — готовый HTML после сборки.build.js — Node.js скрипт для генерации
документации..remarkrc.js — конфигурация Remark..github/workflows/docs.yml — CI/CD pipeline.Лучшие практики
remark-lint.Этот подход обеспечивает полностью автоматизированный процесс: от написания Markdown до публикации готовой HTML-документации с подсветкой кода, валидными ссылками и интерактивными элементами.