Simulações do GitHub
Uma simulação do GitHub transforma um repositório na fonte da verdade: os specs, os endpoints estáticos e a configuração vivem como arquivos, e todo push faz o deploy deles. Nada do mock muda sem um commit atrás, que é justamente a ideia: mocks revisados como código, com uma URL por branch e por pull request.
Do push para a URL
Adicione um passo a um workflow:
name: mockzilla
on:
push:
branches: [main]
pull_request:
types: [opened, synchronize, reopened, closed]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: mockzilla/actions@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}Em cada push a action confere que o workflow roda mesmo no seu repositório, usando o GITHUB_TOKEN padrão que o GitHub emite para aquela execução. Não tem nenhuma chave do Mockzilla para criar, e o token é usado uma vez contra a API do GitHub e nunca é guardado. Depois ela sobe o conteúdo empacotado, espera o deploy e imprime a URL:
https://{label}.api.mockz.io- a branch padrãohttps://{label}-pr{numero}.api.mockz.io- um pull requesthttps://{label}-{branch}.api.mockz.io- qualquer outra branch que o workflow publica
O label é o nome do repositório, ou o que o input host pede. Se outra simulação já tem esse nome, a sua ganha um número no final: petstore-2.
O host de uma branch leva o nome dela em minúsculas, sem nada além de letras e dígitos: feature/checkout em petstore responde em https://petstore-featurecheckout.api.mockz.io. A execução falha e diz por quê quando o nome da branch:
- não fica com letras nem dígitos
- parece um pull request,
pre dígitos - deixa o host com mais de 63 caracteres
- dá um host que já está em uso, por outra branch ativa ou por outra simulação
Um pull request ganha a URL dele publicada como comentário no PR, então quem revisa entra direto no mock que mudou. Fechar o PR derruba aquele deploy, desde que o workflow escute pull requests fechados.
Não precisa de conta
O primeiro push de um repositório já registra ele: a simulação existe e responde antes de qualquer pessoa ter criado conta. Quando você quiser ver ela no app, com histórico, replays e uso, entre com o GitHub e as simulações da sua organização já estão lá. O app mostra em modo leitura uma simulação que vem de um repositório: o conteúdo dela muda por commit, não por clique, mas as configurações de acesso e as variáveis de ambiente continuam editáveis no app, para os valores que não deveriam viver num arquivo de workflow.
A estrutura do repositório
A action portable publica uma pasta por serviço; a estrutura é a mesma que todos os tipos de simulação dividem:
services/
petstore/
openapi.yml # o spec; serve qualquer *.yml/yaml/json
config.yml # opcional: upstream, latência, erros, montagem
context.yml # opcional: valores que dão forma aos dados gerados
static/
users/
get/
index.json # GET /petstore/users, fixado na mão
app.yml # opcional: configurações de todo o appA action de codegen faz o deploy de um projeto Go gerado a partir do repositório, com os handlers junto.
Veja Simulações portable para o formato de pasta e Simulações codegen para o tipo gerado.
O que a action aceita
| Entrada | O que faz |
|---|---|
token | O GITHUB_TOKEN do workflow; prova a identidade do repositório. Obrigatório. |
region | Uma preferência de região, não uma obrigação: o primeiro deploy tenta ela, e se aquela região não tiver capacidade, a mais próxima disponível entra no lugar. Não tem efeito depois do primeiro deploy. |
environment | Um objeto JSON de variáveis de ambiente para o runtime. |
host | O domínio em que a simulação responde: mockz.io, mockz.net, mockz.org, mockzilla.org, mockzilla.de ou mockzilla.net. Com um label na frente você pede ele: petstore.mockz.io responde em https://petstore.api.mockz.io. Fica fixo a partir do primeiro deploy. Por padrão pega a configuração da organização, ou mockz.io. |
basic-auth-user, basic-auth-password | Credenciais para a interface do explorador de API. Passe a senha como secret do GitHub; ela é guardada com hash e nunca vai para o log. |
allowed-ips | Um array JSON de CIDRs com permissão de alcançar a simulação. É ignorado com um aviso quando o plano não permite lista de IP. |
services-dir | Onde ficam as pastas de serviço. Por padrão services. |
timeout-minutes | Quanto esperar pelo deploy antes de falhar o passo. Por padrão 5. |
delete | true remove as simulações do repositório e libera a vaga dele. |
Aberta por escolha
A action é um repositório público, então o que roda dentro do seu CI não é caixa preta: leia em mockzilla/actions. O motor que ela publica é o mesmo servidor mock de código aberto que roda todo o resto aqui, e a estrutura que ela publica bate com a do template público.
Comece pelo template: mockzilla/mockzilla-portable-template
A referência completa das entradas fica junto da action, e na página de docs dela.
Veja GitHub Action.