GitHub Pages e Nomes de Diretório Iniciados com Underline

Postado em 07.06.2023 19:25

Levei mais tempo para descobrir isso do que me orgulharia em compartilhar, então escrevo aqui para não esquecer.

O [GitHub Pages](https://pages.github.com/) trata diretórios com nomes iniciados por `_` (*underline*) de forma especial **mesmo se você estiver usando GitHub Actions para gerar os arquivos estáticos com outras ferramentas**.

Isso ocorre porque o [GitHub Pages pode gerar e servir um site feito com Jekyll](https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/about-github-pages-and-jekyll) se você quiser e para o [Jekyll](https://jekyllrb.com/), diretórios com nomes iniciados por `_` são especiais.

Aparentemente o Jekyll está envolvido mesmo quando configuramos o Pages para servir os arquivos de um *branch* separado e escrevemos nosso próprio *workflow* no [Actions](https://github.com/features/actions) para escrever nesse *branch*. Achei pouco intuitivo e outras pessoas que conversaram comigo sobre o assunto concordaram, mas é assim que o Pages funciona.

Um site que eu estava tentando servir tinha uma estrutura de arquivos parecida com a seguinte:

about
css
doc
├── index.html
├── _static
│   ├── basic.css
│   ├── doctools.js
│   ├── documentation_options.js
│   ├── file.png
│   ├── graphviz.css
│   ├── language_data.js
│   ├── minus.png
│   ├── plus.png
│   ├── pygments.css
│   ├── scripts
│   │   ├── bootstrap.js
│   │   ├── bootstrap.js.LICENSE.txt
│   │   ├── bootstrap.js.map
│   │   ├── pydata-sphinx-theme.js
│   │   └── pydata-sphinx-theme.js.map
│   ├── searchtools.js
│   ├── sphinx_highlight.js
│   ├── styles
│   │   ├── bootstrap.css
│   │   ├── pydata-sphinx-theme.css
│   │   └── theme.css
│   ├── switcher.json
│   └── webpack-macros.html
└── tutorial
    ├── graphs.html
    ├── index.html
    ├── plotting_customization.html
    └── quantum_walk_models.html
example.html
features
gethelp
getstarted
images
index.html
index.xml
js

O arquivo `doc/index.html` carregava vários recursos de `doc/_static/`. Só a requisição para o arquivo `doc/index.html` era concluída com sucesso. Para as requisições de todos os arquivos em `doc/_static` eu recebia um erro 404 como resposta, **mesmo que os arquivos estivessem lá**.

Para que esses arquivos passassem a ser servidos normalmente, precisei criar um arquivo oculto de nome `.nojekyll` na **raiz do site**. A estrutura ficou mais ou menos a seguinte:

about
css
doc
├── index.html
├── _static
│   ├── basic.css
│   ├── doctools.js
│   ├── documentation_options.js
│   ├── file.png
│   ├── graphviz.css
│   ├── language_data.js
│   ├── minus.png
│   ├── plus.png
│   ├── pygments.css
│   ├── scripts
│   │   ├── bootstrap.js
│   │   ├── bootstrap.js.LICENSE.txt
│   │   ├── bootstrap.js.map
│   │   ├── pydata-sphinx-theme.js
│   │   └── pydata-sphinx-theme.js.map
│   ├── searchtools.js
│   ├── sphinx_highlight.js
│   ├── styles
│   │   ├── bootstrap.css
│   │   ├── pydata-sphinx-theme.css
│   │   └── theme.css
│   ├── switcher.json
│   └── webpack-macros.html
└── tutorial
    ├── graphs.html
    ├── index.html
    ├── plotting_customization.html
    └── quantum_walk_models.html
example.html
features
gethelp
getstarted
images
index.html
index.xml
js
.nojekyll

Depois da criação desse arquivo, todas as requisições eram concluídas normalmente.