O GitHub Pages é um serviço do GitHub que fornece hospedagem gratuita de páginas web a partir de repositórios Git, perfeito para blogs pessoais e documentação de projetos.
O processo para criar uma página para documentar um projeto até que é simples:
basta criar um novo branch no repositório e incluir os arquivos .html nele.
Nesse post, irei mostrar como fazer para gerar documentação de um projeto Python utilizando o Sphinx e disponibilizar o resultado automaticamente no GitHub pages.
Para criar a página do GitHub Pages para um repositório já existente, basta
criar o branch gh-pages no repositório:
$ git checkout --orphan gh-pages
$ git rm -rf .
$ echo "Hello World!" > index.html
$ git add .
$ git commit -m "Creating GitHub pages branch."
$ git push origin gh-pagesO branch é criado como --orphan, indicando que ele não conterá o histórico de
commits do master. Todo o conteúdo é removido do branch e é criado um único
arquivo index.html que será a página inicial. Por enquanto o único conteúdo é
Hello World! só para testar. Fazendo o commit e push, a página já deverá
estar disponível no endereço:
https://<nome_de_usuario>.github.io/<nome_do_projeto>
Com isso funcionando, o processo pra incluir a documentação do Sphinx é
basicamente copiar o que for gerado no diretório build ou _build
(dependendo da configuração) para o root do branch gh-pages.
Pra fazer isso de maneira automática, podemos criar um novo Makefile no root
do projeto contendo:
# Directories containing src files to generate documentation for GitHub page
GH_PAGES_SOURCES = docs
# Automatically builds and publishes the documentation
gh-pages:
git checkout gh-pages
rm -rf build _sources _static
git checkout master $(GH_PAGES_SOURCES)
git reset HEAD
cd docs; make html
mv -fv docs/build/html/* ./
rm -rf $(GH_PAGES_SOURCES)
git add -A
git commit -m "Generated gh-pages for `git log master -1 --pretty=short --abbrev-commit`"
git push origin gh-pages
git checkout master
Linha a linha:
- Checkout no branch
gh-pages; - Remover diretórios já existentes (se não o
mvdepois pode falhar); - Copia os arquivos fonte de documentação do
master(Dependendo do projeto, pode ser necessário incluir outros arquivos/diretórios na variávelGH_PAGES_SOURCES); - Faz um reset para tirar os arquivos da staging area;
- Faz um
cdprodocse faz o build do HTML; - Move os arquivos do diretório
docs/build/htmlpro root do branch (pode ser necessário ajustar essa linha, dependendo das configurações do Sphinx); - Remove os arquivos/diretórios com arquivos fonte;
- Adiciona os novos arquivos na staging area;
- Commita as alterações com uma mensagem automática apontando o SHA1
abreviado (do commit no
master); - Faz o push para o branch remoto;
- Checkout de volta no
master;
Aconselho a testar o novo Makefile sem as duas últimas linhas, para não fazer push de besteira la pro repositório remoto.
Com isso, sempre que houver uma alteração na documentação no master, basta
commitar as alterações e depois rodar:
$ make gh-pagesAtribuições
A receitinha do Makefile para gerar e publicar a documentação automaticamente foi adaptada a partir deste post no Nikhil’s Blog