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
- Dispara o workflow
create-fake-releasesno forge de origem e espera terminar. - Cooldown (padrão 15s) para evitar heurísticas de abuso dos forges.
- Executa
gfrm migrateda origem para o destino. - Valida o contrato de artefatos (
summary.json,failed-tags.txt,migration-log.jsonl). - Cooldown.
- Dispara o workflow
cleanup-tags-and-releasesna 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(vejagfrm setup) ou pelos aliases padrão de env var de cada provider.
Opções
Obrigatórias
| Flag | Descrição |
|---|---|
--source-provider | github, gitlab ou bitbucket |
--source-url | URL completa do repo de teste de origem |
--target-provider | github, gitlab ou bitbucket |
--target-url | URL completa do repo de teste de destino |
Orquestração
| Flag | Padrão | Descrição |
|---|---|---|
--mode | happy-path | Modo de execução: happy-path, contract-check, partial-failure-resume |
--skip-setup | off | Pula o passo de criar fixture. Use quando a origem já está populada |
--skip-teardown | off | Pula o passo de cleanup. Deixa a origem populada para inspeção |
--cooldown-seconds | 15 | Segundos entre fases |
--poll-interval | 10 | Segundos entre polls de status do CI |
--poll-timeout | 300 | Segundos máximos de espera de um workflow antes de falhar |
Opções de migração
| Flag | Descrição |
|---|---|
--settings-profile | Nome do profile em settings.yaml |
--workdir | Diretório raiz para os artefatos do smoke |
--quiet | Reduz a saída interativa |
--json | Emite 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
| Modo | Comportamento |
|---|---|
happy-path | Fluxo completo. Espera que nenhuma falha parcial ocorra |
contract-check | happy-path + valida que summary.retry_command está vazio |
partial-failure-resume | happy-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álidos1— alguma fase falhou (disparo de fixture, migração, validação ou teardown). Vejamigration-log.jsonlesummary.jsonno workdir2— 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-teardowne depois dispare manualmente o workflow de cleanup pela UI do forge.