Pular para o conteúdo principal

smoke

Executa um teste smoke real de ponta a ponta contra repositórios de teste descartáveis em dois forges. Dispara os workflows de CI que criam releases falsos na origem, migra para o destino, valida os artefatos e limpa a origem.

Veja também: Guia de smoke testing.

Sintaxe

gfrm smoke \
--source-provider <github|gitlab|bitbucket> \
--source-url <url-do-repo> \
--target-provider <github|gitlab|bitbucket> \
--target-url <url-do-repo> \
[opções]

Uso típico

gfrm smoke \
--source-provider github --source-url https://github.com/voce/gfrm-test-source \
--target-provider gitlab --target-url https://gitlab.com/voce/gfrm-test-target

O que faz

  1. Dispara o workflow create-fake-releases no forge de origem e espera terminar.
  2. Cooldown (padrão 15s) para evitar heurísticas de abuso dos forges.
  3. Executa gfrm migrate da origem para o destino.
  4. Valida o contrato de artefatos (summary.json, failed-tags.txt, migration-log.jsonl).
  5. Cooldown.
  6. Dispara o workflow cleanup-tags-and-releases na origem.

Pré-requisitos

Antes de rodar gfrm smoke:

  • Dois repositórios de teste descartáveis, um por forge, seguindo o guia de smoke testing.
  • Workflows de fixture instalados em cada repositório de teste (copiados de docs/smoke-tests/workflows/<forge>/).
  • Tokens pessoais disponíveis via settings.yaml (veja gfrm setup) ou pelos aliases padrão de env var de cada provider.

Opções

Obrigatórias

FlagDescrição
--source-providergithub, gitlab ou bitbucket
--source-urlURL completa do repo de teste de origem
--target-providergithub, gitlab ou bitbucket
--target-urlURL completa do repo de teste de destino

Orquestração

FlagPadrãoDescrição
--modehappy-pathModo de execução: happy-path, contract-check, partial-failure-resume
--skip-setupoffPula o passo de criar fixture. Use quando a origem já está populada
--skip-teardownoffPula o passo de cleanup. Deixa a origem populada para inspeção
--cooldown-seconds15Segundos entre fases
--poll-interval10Segundos entre polls de status do CI
--poll-timeout300Segundos máximos de espera de um workflow antes de falhar

Opções de migração

FlagDescrição
--settings-profileNome do profile em settings.yaml
--workdirDiretório raiz para os artefatos do smoke
--quietReduz a saída interativa
--jsonEmite logs em JSON

gfrm smoke aceita as opções listadas nesta página. Ele não encaminha flags arbitrárias do gfrm migrate para a fase de migração.

A precedência de tokens segue o gfrm migrate: settings (token_env, depois token_plain) primeiro, depois aliases de env var do provider como GITHUB_TOKEN, GH_TOKEN, GITLAB_TOKEN e BITBUCKET_TOKEN. --settings-profile seleciona o profile de settings usado na resolução dos tokens de origem e destino.

Modos

ModoComportamento
happy-pathFluxo completo. Espera que nenhuma falha parcial ocorra
contract-checkhappy-path + valida que summary.retry_command está vazio
partial-failure-resumehappy-path + segue summary.retry_command ou executa um gfrm resume sintético contra a primeira tag da origem

Exemplos

GitHub → GitLab (modo padrão)

gfrm smoke \
--source-provider github --source-url https://github.com/voce/gfrm-test-source \
--target-provider gitlab --target-url https://gitlab.com/voce/gfrm-test-target

Manter origem populada para debug

gfrm smoke \
--source-provider github --source-url https://github.com/voce/gfrm-test-source \
--target-provider gitlab --target-url https://gitlab.com/voce/gfrm-test-target \
--skip-teardown

Contra origem já preparada

gfrm smoke \
--skip-setup \
--source-provider gitlab --source-url https://gitlab.com/voce/gfrm-test-source \
--target-provider github --target-url https://github.com/voce/gfrm-test-target

Contract check em CI

gfrm smoke \
--mode contract-check \
--cooldown-seconds 0 \
--source-provider bitbucket --source-url https://bitbucket.org/voce/gfrm-test-source \
--target-provider github --target-url https://github.com/voce/gfrm-test-target

Códigos de saída

  • 0 — round-trip completo funcionou, artefatos válidos
  • 1 — alguma fase falhou (disparo de fixture, migração, validação ou teardown). Veja migration-log.jsonl e summary.json no workdir
  • 2 — argumentos inválidos

Troubleshooting

  • 403 vindo de um forge — seu projeto de teste pode estar com rate limit. Espere 24h ou rode em um repo de teste novo. Veja o guia de smoke testing.
  • Workflow de CI não disparou — confirme que o arquivo do workflow está no branch padrão e que o trigger (workflow_dispatch/custom) está habilitado.
  • Cleanup falhou — rode gfrm smoke --skip-setup --skip-teardown e depois dispare manualmente o workflow de cleanup pela UI do forge.