Do Obsidian ao site: publicar com GitHub Actions
- 4 min de leitura
Nesta página
O GitHub Actions roda tarefas no próprio GitHub quando algo acontece num repositório. Aqui, a tarefa é a mesma que você fez à mão na página da Cloudflare: gerar o site e publicá-lo. Ela roda sozinha cada vez que um envio do vault mexe no blog ou no site. Em repositórios privados, a conta gratuita do GitHub tem 2.000 minutos de GitHub Actions por mês.
O workflow completo
name: Publicar o site
on:
push:
branches: [main]
paths:
- "blog/**"
- ".site/**"
- ".github/workflows/publicar.yml"
workflow_dispatch:
permissions:
contents: read
jobs:
publicar:
runs-on: ubuntu-latest
steps:
- name: Baixar só blog/ e .site/
uses: actions/checkout@v7
with:
persist-credentials: false
sparse-checkout: |
/blog/
/.site/
sparse-checkout-cone-mode: false
- name: Preparar o Node
uses: actions/setup-node@v7
with:
node-version: 22
cache: npm
cache-dependency-path: .site/package-lock.json
- name: Gerar o site
working-directory: .site
run: |
npm ci
npm run build
- name: Publicar na Cloudflare
working-directory: .site
run: npx wrangler@4 deploy --assets ./dist --name meu-blog --compatibility-date 2026-10-15
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
Antes de usar, troque meu-blog e a data pelos que você usou na primeira publicação.
O que cada parte faz
Quando roda (on). Num envio para a main que mexe em blog/, em .site/ ou no próprio workflow. Uma nota editada em outra pasta do vault não publica nada. O workflow_dispatch coloca um botão Run workflow na aba Actions, para publicar à mão.
permissions. A execução recebe um token automático do GitHub. Este bloco o limita a ler o repositório, que é tudo de que o workflow precisa.
Baixar só blog/ e .site/. O actions/checkout baixa o repositório, e o sparse-checkout deixa no disco só as duas pastas. O conteúdo das suas outras notas não chega à máquina do GitHub; só a lista de nomes dos arquivos, que faz parte do commit. O sparse-checkout-cone-mode: false é o que faz os padrões valerem exatamente como escritos. O persist-credentials: false impede que o token fique gravado na pasta baixada, onde outros programas do mesmo job, como os scripts das dependências instaladas pelo npm ci, poderiam lê-lo.
Preparar o Node. Instala a versão mais recente do Node 22, a linha que o template pede, e guarda as dependências em cache para as próximas execuções.
Gerar o site. Os mesmos comandos que você roda no computador. O link simbólico .site/src/content/blog foi para o repositório como link e aponta para blog/, baixado no primeiro passo. Se o template recusar alguma nota, este passo falha e o próximo não roda.
Publicar na Cloudflare. O mesmo wrangler deploy da primeira publicação. Em vez do login no navegador, o Wrangler usa as duas chaves guardadas como segredos.
Os segredos
Crie os segredos antes do workflow: o commit do arquivo já dispara a primeira execução, e sem eles a publicação falha. No repositório do vault, em Settings → Secrets and variables → Actions → New repository secret, crie os dois segredos da página da Cloudflare:
| Nome | Valor |
|---|---|
CLOUDFLARE_API_TOKEN |
O token com o modelo Edit Cloudflare Workers |
CLOUDFLARE_ACCOUNT_ID |
O id da conta |
Um segredo não aparece de novo depois de salvo, nem nos logs. Para trocar um token vencido, edite o segredo com o mesmo nome.
Onde colocar
O workflow é um arquivo no repositório do vault, em .github/workflows/publicar.yml. Como a pasta começa com ponto, o Obsidian não a mostra. O jeito mais simples de criá-lo é pelo site do GitHub:
- Abra o repositório do vault no GitHub.
- Add file → Create new file.
- No nome, digite
.github/workflows/publicar.yml. As barras criam as pastas. - Cole o workflow e clique em Commit changes.
O arquivo foi criado no GitHub, e não no seu computador. Antes do próximo envio, traga a mudança com Fetch origin e Pull origin no GitHub Desktop.
Conferir a primeira execução
Mova uma nota para blog/ e envie o vault. Na aba Actions do repositório aparece uma execução de “Publicar o site”, com o log de cada passo. Quando ela terminar, a nota estará no endereço do site.
| Se falhar em | Causa provável |
|---|---|
| Gerar o site | Uma nota fora do que o template pede. O log mostra a nota e a propriedade, como na página do template do Astro |
| Publicar na Cloudflare | Segredo faltando, token vencido ou sem a permissão Edit Cloudflare Workers |
| Nada rodou | O envio não mexeu em blog/, .site/ nem no workflow, ou o arquivo não está em .github/workflows/ |
Em qualquer falha, o site no ar continua como estava: a publicação só acontece depois de o site ser gerado sem erro.