Meu uso conveniente do mdbook - com doctoc -

6 min

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

Olá, sou um incompetente.
O mdbook, que pode ser escrito no formato Markdown e é usado oficialmente pelo Rust para a criação de documentos no trabalho, é muito agradável de usar, então vou apresentar como eu o uso.

Instalação

Instale com cargo install

cargo install mdbook

Para a geração de sumário que usarei mais tarde, instalarei o doctoc.

sudo npm -g install doctoc

Para ser honesto, parece que existem outros comandos que podem gerar sumários automaticamente em Markdown, mas minha pesquisa é insuficiente.

Configuração Inicial

Basta executar 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

Aqui, ao colocar arquivos .md que serão os artigos em src e construir, o resultado será gerado por padrão no diretório 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)

Neste src/SUMMARY.md, você pode criar um sumário que será exibido na barra lateral.
Image

Automatizando o processo de construção com um script shell e criando um histórico de atualizações

Toda vez que eu atualizava o diretório src, eu estava fazendo coisas estúpidas como executar o comando doctoc e depois mdbook build... achei que era uma tolice. Eu mesmo pensei isso e não aguentei mais, então criei um script shell para executar a série de operações mesmo enquanto o vim está aberto.

#!/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

Isso significa que com pwd | grep "src$" || cd src, se src estiver incluído no resultado de pwd, nada é feito. Caso contrário, ele se move para cd src.
A razão para fazer isso é que se eu executar este script com :!../build.sh enquanto edito src/*.md, ele faria cd dentro do diretório src, o que me incomoda um pouco, então fiz assim. Bem, não há problema funcional se eu não fizer isso, mas...
Além disso, assume-se que git remote-url foi configurado e um git push foi feito uma vez, e update.md está assim.

<!-- 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

Com sed -i "8adate" ./update.md, o log de quando este script foi executado é adicionado na linha 8.
Para ser honesto, se fosse feito corretamente, seria obviamente mais amigável se fosse determinado a registrar no histórico de atualizações apenas quando houvesse um commit a partir do valor de retorno de git commit, mas como foi um script improvisado, peço sua compreensão...

Não seria melhor usar o Github Actions?

Este processo de construção pode realmente ser usado com Actions.
No entanto, e se o ambiente não permitir o uso de outros ativos yml com uses?

Pode ser bom se for usado apenas com Github Actions, mas se você estiver usando GitLab como servidor Git, tentar usar os ativos de github.com parece ficar um pouco complicado (o que é compreensível...). Por isso, fiz como descrito aqui.
Na verdade, a versão Enterprise do GitHub é bastante problemática nessa área...
Sobre o uso de Actions no Enterprise

Então, pensei que não poderia depender muito disso... e por isso, eu, que sou ainda menos confiável, escrevi no script shell...

Related Posts