Мой способ использования удобного mdbook - с doctoc -

6 min

language: ja bn en es hi pt ru zh-cn zh-tw

Здравствуйте, я бездарь.
Поскольку mdbook, который используется для создания документации в формате Markdown, официально используемом Rust, очень удобен в работе, я расскажу о том, как я его использую.

Установка

Установка с помощью cargo install

cargo install mdbook

Установите doctoc для генерации оглавления, которое будет использоваться позже.

sudo npm -g install doctoc

Честно говоря, вероятно, есть и другие команды для автоматической генерации оглавления в Markdown, но мне не хватило исследований.

Начальная настройка

Просто выполните mdbook init

~/git/lets-mdbook$ mdbook init

Do you want a .gitignore to be created? (y/n)
y
What title would you like to give the book? 
test
2024-11-23 22:19:57 [INFO] (mdbook::book::init): Creating a new book with stub content

All done, no errors...](alleycat:[haturatu]:~/git/lets-mdbook$ mdbook init

Do you want a .gitignore to be created? (y/n)
y
What title would you like to give the book? 
test
2024-11-23 22:19:57 [INFO] (mdbook::book::init): Creating a new book with stub content

All done, no errors...
alleycat:[haturatu]:~/git/lets-mdbook$ ls
book  book.toml  src

Здесь вы помещаете файлы .md, которые станут статьями, в каталог src, и при сборке они по умолчанию выводятся в каталог book.

alleycat:[haturatu]:~/git/lets-mdbook/src$ ls
SUMMARY.md  chapter_1.md](alleycat:[haturatu]:~/git/lets-mdbook$ cat src/
SUMMARY.md    chapter_1.md  
alleycat:[haturatu]:~/git/lets-mdbook$ cat src/SUMMARY.md 
# Summary

- [Chapter 1](./chapter_1.md)

В этом src/SUMMARY.md вы можете создать оглавление, которое будет отображаться в боковой панели.
Image

Автоматизация процесса сборки с помощью скрипта оболочки и создание истории обновлений

Каждый раз, когда я обновляю каталог src, я запускаю команду doctoc, затем mdbook build... Это казалось мне глупым, и я больше не мог этого терпеть, поэтому я создал скрипт оболочки, чтобы выполнять всю последовательность операций, даже когда я открываю vim.

#!/bin/bash

pwd | grep "src$" || cd src
doctoc .
sed -i "3d" ./*.md
sed -i "/](\#/d" ./SUMMARY.md
sed -i "8a`date`" ./update.md
cd ..

mdbook build
git add .
git commit -m "wip"
git push

Это означает, что если результат pwd содержит src (pwd | grep "src$"), то ничего не происходит. Если нет, то переходим в cd src.
Причина, по которой я это делаю, заключается в том, что если я запускаю этот скрипт с помощью :!../build.sh во время редактирования src/*.md, он выполняет cd внутри каталога src, что немного неприятно. Хотя это не влияет на работу...
Предполагается, что git remote-url настроен и git push был выполнен хотя бы один раз, а update.md выглядит следующим образом.

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->

- [Update Log](#update-log)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

# Update Log
2024年 11月 23日 土曜日 22:39:24 JST

sed -i "8adate" ./update.md оставляет запись о запуске этого скрипта в строке 8.
Честно говоря, было бы гораздо лучше, если бы я проверял возвращаемое значение git commit и добавлял запись в историю обновлений только при наличии коммита, но это был импровизированный скрипт, поэтому, пожалуйста, примите это во внимание...

Почему бы не использовать Github Actions?

Эту задачу сборки можно фактически использовать с Actions.
Однако, что если среда не позволяет использовать другие ресурсы yml с uses?

Если использовать только Github Actions, это может быть хорошо, но если GitLab используется в качестве Git-сервера, попытка использовать ресурсы github.com может стать немного сложной (что, конечно, логично...). Поэтому я сделал это так, как описано.
На самом деле, корпоративная версия Github довольно проблематична в этом отношении...
Об использовании Actions в вашем Enterprise

Поэтому я подумал, что не стоит слишком на это полагаться... и написал это в скрипте оболочки, который еще менее надежен...

Related Posts