Atualizar uma app Next.js iGRP às novas versões do template com igrp migrate (ou @igrp/template-migrator) — estado, plano, aplicação, rollback e CI.
Quando sai uma nova versão do iGRP Framework, o @igrp/template-migrator aplica à tua app as alterações do template — novos ficheiros, middleware atualizado, bumps de dependências e novas chaves .env.example — como migrações numeradas e registadas em .igrp-migrations-lock.json.
O teu .env real nunca é tocado — ver Variáveis de ambiente para o único passo manual.
Correr o migrator
Corre o comando igrp migrate (CLI 1.7.7 ou superior; recomendada a mais recente) na pasta da app:
cd minha-app
igrp migrate status # o que falta
igrp migrate plan # o que vai mudar (não escreve nada)
igrp migrate apply # aplica, com confirmação por migração
pnpm install # se alguma migração mudou dependências
git add -A && git commit -m "chore: aplica migrações do template"A usar @igrp/template-migrator 0.2.0-beta.16
Template: demo-v1 CLI: 0.2.0-beta.16
✓ applied 01-preview-mode-not-found
…
✓ applied 72-home-overview-title-size (→ 0.2.0-beta.13)
• pending 73-session-first-switcher-rollback-docs (→ 0.2.0-beta.13)
• pending 74-framework-next-beta14-i18n-deps (→ 0.2.0-beta.14)
• pending 75-multi-app-auth-sessions
• pending 76-resync-framework-next-beta15 (→ 0.2.0-beta.15)
73 applied, 4 pendingAntes de correr, o CLI pergunta ao registry qual é a versão exata do migrator e mostra-a (A usar @igrp/template-migrator …), por isso latest é sempre a última publicada, mesmo com uma cópia antiga em cache. Para fixar uma versão:
igrp migrate@0.2.0-beta.16 status
igrp migrate --use 0.2.0-beta.16 status # forma equivalenteTudo o que vem depois do comando é passado ao migrator. O registry por defeito é https://sonatype.nosi.cv/repository/igrp/ (variável IGRP_REGISTRY). Uma nova versão do migrator não exige nova versão do CLI.
Sem o CLI
O mesmo migrator corre diretamente com pnpm dlx (ou npx): pnpm dlx @igrp/template-migrator@latest status. No Studio, o bundle Template Migrator (separador Bundles do projeto) aplica tudo de uma vez — equivale a apply --yes --force, por isso sobrepõe alterações locais aos ficheiros geridos.
Projetos novos
Uma app criada pelo Studio já traz o .igrp-migrations-lock.json. O Studio descarrega sempre o template Next.js mais recente publicado, mas cada migração nova só chega aos projetos novos quando o template é republicado. Corre igrp migrate status depois de criar o projeto: se aparecerem pendentes, aplica-as como em qualquer outra app.
Comandos
status — ver o estado atual
igrp migrate statusLista as migrações aplicadas (✓ applied, ignoradas no próximo apply) e as pendentes (• pending), com o total no fim — ver o exemplo em Correr o migrator.
plan — pré-visualizar sem escrever
igrp migrate planImprime cada operação de ficheiro que cada migração pendente irá executar. Nenhum ficheiro é escrito — seguro de correr a qualquer momento.
Pending migrations (1):
── 07-data-access-layer ─────────────────────────────────────
file.create src/lib/dal.ts
file.write src/lib/auth.ts (replace)
deps.bump package.json
No files were written.apply — correr as migrações
igrp migrate applyO CLI percorre cada migração pendente por ordem. Para cada passo mostra o que vai fazer e pede confirmação antes de escrever. Após cada migração concluída regista uma entrada em .igrp-migrations-lock.json.
Se alguma package.json foi atualizada, o CLI imprime:
Next steps:
pnpm installCorre sempre pnpm install quando essa mensagem aparecer.
Opções úteis
# Sem prompts — CI / scripts
igrp migrate apply --yes
# Aplicar só até uma migração específica
igrp migrate apply --to 04-multi-auth-providerSe um ficheiro gerido pelo template foi alterado por ti, o apply pára nessa migração. Revê a alteração; para a sobrepor, repete com --force.
rollback — desfazer uma migração
igrp migrate rollback 04-multi-auth-providerRestaura os ficheiros que a migração escreveu e remove a entrada do lock file. Os passos de desfazer correm em ordem inversa.
Rollback pode recusar-se
Se uma migração sobrescreveu ou apagou um ficheiro e o lock entry não tem cópia do conteúdo anterior (entradas escritas por versões mais antigas do CLI), o rollback lista esses paths e para. Usa --force para ignorar esses ficheiros e reverter o resto:
igrp migrate rollback 04-multi-auth-provider --forceMigrações que vieram com a app não podem ser revertidas
Se a tua app foi criada a partir do template zip, as migrações já estão registadas mas o CLI nunca as correu aqui — não há nada para reverter. Usa git para desfazer manualmente esses ficheiros.
list — listar todas as migrações disponíveis
igrp migrate listMostra todas as migrações incluídas nesta versão do CLI.
check — gate de CI
igrp migrate checkSai com código 1 se houver migrações pendentes, 0 se tudo estiver atualizado. Adiciona ao teu pipeline:
- name: Check for pending IGRP migrations
run: pnpm dlx @igrp/template-migrator@latest checkconvert — migrar lock file legado
Versões antigas guardavam o estado em .igrpmigrations/lock.json. Se tens um, os outros comandos param e apontam para aqui:
igrp migrate convertMove o estado para .igrp-migrations-lock.json na raiz do projeto e remove o diretório antigo. Commit o resultado e re-executa o que estavas a fazer.
Variáveis de ambiente
As migrações só escrevem no .env.example. O teu .env real nunca é lido nem modificado.
Isso significa que uma migração que introduz uma nova configuração deixa a tua app sem ela. Após um apply que reporte novas chaves, compara os dois ficheiros e copia o que precisas:
git diff .env.example| Tipo de chave | Urgência |
|---|---|
Com default sensato (IGRP_SYNC_ACCESS=false) | Podes deixar até precisares |
Sem default (AUTENTIKA_CLIENT_ID, etc.) | Preenche antes de arrancar |
O lock file
Após cada migração bem-sucedida o CLI escreve .igrp-migrations-lock.json na raiz do projeto.
Faz commit deste ficheiro
É a fonte de verdade de quais migrações a tua app já aplicou. Re-correr apply salta sempre as entradas completas.
Resolução de problemas
Migração parcialmente aplicada — Re-corre apply. Se a execução foi interrompida (Ctrl-C, timeout de CI, crash), o CLI deixa um .igrp-migration-journal.json na raiz a registar o que já correu. O próximo apply reverte esses passos e re-aplica a migração desde a base limpa:
Recovering from an interrupted run of 29-permissions-catalog-sync...
reverted 3 step(s) from the interrupted migration
✓ recoveredBuild falha após aplicar — Reverte, verifica o guia em prosa daquela migração para passos manuais, e re-aplica:
igrp migrate rollback <id>
# ajustes manuais
igrp migrate apply --to <id>Lock file em falta mas migrações já aplicadas — Re-corre apply. As sobrescritas são idempotentes e as entradas ficam registadas corretamente.
Que migrações existem
igrp migrate listLista todas as migrações da versão do migrator em uso, com a data e a versão do framework a que levam (→ 0.2.0-beta.15). Na 0.2.0-beta.16 são 76, de 01-preview-mode-not-found a 76-resync-framework-next-beta15; funciona também fora de uma app. Para o que cada uma muda, usa igrp migrate plan na tua app.
Códigos de saída de igrp migrate
| Código | Significado |
|---|---|
0 | Sucesso. |
1 | Validação — versão inválida, pasta que não é uma app iGRP, nem pnpm nem npx no PATH. |
2 | Registry — versão não encontrada, registry inalcançável. |
| outro | Código de saída do próprio migrator, passado tal e qual (check sai com 1 se houver migrações pendentes ou alteradas). |
Última atualização:
