Skip to content

Docs Deploy

Workflow reutilizável para build e deploy de sites VitePress no Cloudflare Pages. Inclui gating por content hash para evitar deploys desnecessários quando não há alterações nos fontes de documentação.

Política de publicação

Use este workflow apenas para conteúdo aprovado para publicação. Quando o site contiver guias operacionais sensíveis, a publicação no Cloudflare Pages deve ter uma camada de autenticação antes de ser exposta.

Trigger

yaml
on:
  workflow_call:

Chamado via uses: a partir do workflow de deploy de documentação do repositório.

Inputs

InputTipoPadrãoObrigatórioDescrição
docs-pathstring--SimCaminho do diretório VitePress (ex: docs-site/, docs/)
project-namestring--SimNome do projeto no Cloudflare Pages (ex: my-project-docs)
deploy-urlstring--SimURL para verificar o hash do deploy atual (ex: https://my-project-docs.pages.dev)
node-versionstring'22'NãoVersão do Node.js
build-commandstring'npm run docs:build'NãoComando de build a executar dentro do docs-path
forcebooleanfalseNãoForça deploy ignorando content hash

Secrets

SecretDescrição
CLOUDFLARE_API_TOKENToken da API Cloudflare com scope de deploy no Pages
CLOUDFLARE_ACCOUNT_IDID da conta Cloudflare

Permissions

yaml
permissions:
  contents: read
  deployments: write

Job: deploy

Executa em ubuntu-latest:

  1. Checkout do código.
  2. Computa content hash — calcula SHA-256 de todos os arquivos .md, .ts e .json no diretório de docs (excluindo node_modules, dist e cache).
  3. Compara com hash deployado — faz request para <deploy-url>/.content-hash e compara:
    • Se force: true: faz deploy independentemente.
    • Se hashes diferem: faz deploy.
    • Se hashes são iguais: skip do deploy.
  4. Setup Node.js com cache de npm.
  5. Install e buildnpm ci + comando de build configurado.
  6. Escreve content hash — salva o hash em .vitepress/dist/.content-hash para comparações futuras.
  7. Deploy para Cloudflare Pages — via cloudflare/wrangler-action@v3.

Content Hash Gating

O mecanismo de content hash evita deploys redundantes:

Calcula SHA-256 dos fontes (.md, .ts, .json)


Busca hash deployado em <url>/.content-hash

         ┌──────┴──────┐
         │             │
    Diferentes     Iguais
         │             │
         ▼             ▼
    Faz deploy    Skip deploy

O arquivo .content-hash é salvo na raiz do deploy e serve como referência para a próxima execução.

Exemplo de uso

yaml
# .github/workflows/docs.yml
name: Deploy Docs

on:
  push:
    branches: [main]
    paths:
      - 'docs-site/**'

jobs:
  deploy:
    uses: middag-io/.github-private/.github/workflows/docs-deploy.yml@workflows-v1
    with:
      docs-path: docs-site/
      project-name: my-project-docs
      deploy-url: https://my-project-docs.pages.dev
    secrets: inherit

Forçar deploy

yaml
jobs:
  deploy:
    uses: middag-io/.github-private/.github/workflows/docs-deploy.yml@workflows-v1
    with:
      docs-path: docs-site/
      project-name: my-project-docs
      deploy-url: https://my-project-docs.pages.dev
      force: true
    secrets: inherit

MIDDAG Tecnologia