O seed é um comando do seu repositório que prepara os dados de cada novo ambiente: criar um usuário de teste, copiar parte dos dados de production, rodar as migrações.
Configurar
Configure em Configurações do projeto → Seed dos novos ambientes, escolhendo o serviço e o comando, ou no campo seed do veloz.json:
"seed": {
"service": "api",
"command": "pnpm db:seed"
}O campo seed do veloz.json substitui o que foi configurado no painel no próximo push que faz deploy em production.
Quando o seed roda
Quando um ambiente é criado a partir de outro (um ambiente de PR ou um ambiente duplicado), a Veloz roda o comando uma vez:
- Espera os bancos do novo ambiente ficarem prontos (e a cópia dos dados, se ela estiver ligada).
- Roda o comando com a versão do serviço que está no ar no ambiente base, então o script precisa estar no código já em deploy. O comando roda com
sh -c. - Os serviços de app do novo ambiente esperam o seed terminar antes do deploy.
O seed tem até 20 minutos. Ele roda uma vez por ambiente e não roda de novo em pushes seguintes.
Acesso aos bancos
O comando recebe as variáveis do serviço no novo ambiente, então DATABASE_URL e as referências como ${{postgres.url}} apontam para os bancos novos, com acesso total. Para cada variável que aponta para um banco PostgreSQL do tier compartilhado, o seed também recebe a mesma variável com o prefixo SOURCE_, apontando para o banco de mesmo nome no ambiente base com acesso somente leitura. Por exemplo:
# DATABASE_URL: banco do novo ambiente (leitura e escrita)
# SOURCE_DATABASE_URL: banco do ambiente base (só leitura)
pg_dump "$SOURCE_DATABASE_URL" --table=plans --data-only | psql "$DATABASE_URL"O acesso de leitura vale só enquanto o seed roda.
Status e erros
O status do seed aparece no comentário do PR e, com a saída do comando, em Configurações do projeto → Seed dos novos ambientes. Se o seed falha, os serviços fazem deploy mesmo assim, com os bancos como o seed os deixou.
Próximos passos
- Ambientes de PR: um ambiente para cada pull request
- veloz.json: o campo
seed - Bancos de dados: tiers e conexão