← Wiki

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:

  1. Abra o repositório do vault no GitHub.
  2. Add file → Create new file.
  3. No nome, digite .github/workflows/publicar.yml. As barras criam as pastas.
  4. 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.