ci: consertar o pipeline de deploy e subir as functions para Node 22 - #178
Merged
Conversation
O workflow usava a API programatica do firebase-tools, que encerrava o processo com exit 0 sem publicar nada. Passa a usar o CLI, que falha alto, e adiciona um step que compara o updateTime da function antes e depois, falhando o job se nada foi republicado. Refs #177
Remove client.functions.config.set() (API descontinuada pelo Google, e o runtime config do projeto esta vazio: as functions ja leem do .env) e client.deploy(), que era o ponto onde o processo morria em silencio. Refs #177
O hook era 'npm --prefix "$RESOURCE_DIR" run', sem nome de script: apenas listava os scripts disponiveis e saia. Refs #177
O Cloud Functions nao aceita mais nodejs18: os runtimes disponiveis no projeto hoje sao nodejs20 (DEPRECATED, descomissiona em 30/10/2026), nodejs22 (GA) e nodejs24 (GA, so gen2). Com engines 18 nenhum deploy pode dar certo. firebase-admin@10, firebase-functions@4 e @ecomplus/application-sdk foram verificados carregando sem erro no Node 22, entao o bump nao arrasta upgrade de SDK. Refs #177
O Cloud Functions nao aceita mais nodejs18: os runtimes disponiveis no projeto hoje sao nodejs20 (DEPRECATED, descomissiona em 30/10/2026), nodejs22 (GA) e nodejs24 (GA, so gen2). Com engines 18 nenhum deploy pode dar certo. firebase-admin@10, firebase-functions@4 e @ecomplus/application-sdk foram verificados carregando sem erro no Node 22, entao o bump nao arrasta upgrade de SDK. Refs #177
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolve a #177: o pipeline reportava sucesso sem publicar, e o runtime declarado não é mais aceito pelo Cloud Functions. Este PR corrige os dois.
1. O deploy não falhava quando falhava
O workflow chamava a API programática do
firebase-tools(client.functions.config.set()+client.deploy()) viascripts/firebase-deploy.js. Esse caminho encerrava o processo Node com exit 0 sem deployar: o step durava 3 segundos, não emitia nenhuma linha dofirebase deploye não chegava nem no.thennem no.catchdo script — e o Actions marcava verde. Todo merge emmasterdesde 25/07/2025 ficou fora do ar com o CI verde.Mudanças:
npx firebase-tools@13 deploy --only functions --non-interactive), que retorna exit code ≠ 0 quando falha.updateTimeda function antes e depois e falha o job se não avançou. É a rede que impede a reincidência mesmo que algum caminho novo volte a falhar em silêncio.FIREBASE_SERVICE_ACCOUNT), com fallback para oFIREBASE_TOKENatual emitindo::warning::. Ofirebase login:cifoi descontinuado pelo Google; o fallback mantém o comportamento de hoje, agora falhando alto se o token estiver morto.workflow_dispatchcom inputdry_run, para validar sem publicar. Hoje só dá para deployar via push nomaster, o que torna qualquer teste de pipeline um evento de produção.scripts/firebase-deploy.jsreduzido a gerar ofunctions/.env. Ofunctions.config.set()foi removido: a API foi descontinuada pelo Google e o runtime config do projeto está com todos os valores vazios — as functions já leem tudo de variável de ambiente (functions/__env.jscai no fallbackprocess.env). Era código morto. O script agora também falha seSERVER_OPERATOR_TOKENestiver vazio, em vez de escrever um.envincompleto: sem esse valor,functions/index.jsrejeita todo webhook recebido.npm --prefix "$RESOURCE_DIR" rundofirebase.json— sem nome de script, só listava os scripts e saía.v3→v4, Node do runner → 22,::set-output(já descontinuado) →$GITHUB_OUTPUT.2. O runtime declarado não existe mais
functions/package.jsonpedia Node 18, que o Cloud Functions não aceita mais. Consultando a API do projeto, os runtimes disponíveis hoje são:nodejs18Sem esse bump, nenhum deploy pode dar certo — nem com o pipeline consertado. Subimos direto para 22, porque o 20 já está deprecated com descomissionamento em três meses.
Verificação feita antes do bump: instalei as dependências de
functions/domastercom Node 22 e carreguei os módulos críticos. Todos carregam sem erro:Ou seja, o bump não arrasta upgrade de SDK. Também confirmei que o
firebase-tools@13.35.1sabe declararnodejs22.Reverter este PR inteiro não é rollback. Se algo der errado depois do deploy, reverter o
engines.nodepara 18 deixa o repo indeployável de novo: você fica com a versão nova no ar e sem conseguir publicar nada por cima.O rollback real, se precisar, é reverter só o código do app, mantendo o Node 22:
Isso publica o código que está em produção hoje sobre um runtime que o Google aceita — que é a única rede de segurança possível, e que este PR cria.
O que esperar no primeiro deploy
O primeiro deploy bem-sucedido publica duas mudanças de uma vez: o runtime novo e o guard de variação do
413b1aa, que nunca rodou em produção. Vale acompanhar em janela de baixo movimento, olhando:GET https://us-central1-<projeto>.cloudfunctions.net/app/devolvendo oapplication.json> Tiny webhook: #lojax-operator-tokensendo aceito — é o que barra 100% dos webhooks se o.envsair erradoPOST /products/<pai>/variations.jsonaparecendo no log, hoje com zero ocorrênciasAntes de mergear, dá para validar com
Actions → Deploy → Run workflowedry_runmarcado — valida credencial, empacotamento e runtime sem publicar nada.Pendência (fora deste PR)
FIREBASE_SERVICE_ACCOUNT. Sem ele, o step de verificação é pulado e a autenticação segue no token descontinuado. Papéis mínimos:Cloud Functions Admin,Service Account User,Cloud Build Editor,Storage Admin.Closes #177