fix(ci): verificar-docs-produto lê o token do TMF/ORG do Infisical, secret como fallback [INFRA-68379] #44
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/verificar-docs-token-infisical"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
O que muda
verificar-docs-produto.ymlpassa a ler o token de leitura do TMF/ORG do Infisical (INFRA/prod/ci, segredoCVE_OS_EXCECOES_TOKEN: o mesmo token só-leitura da lista única de CVE, INFRA-68311), com o secretFORGEJO_TOKENmantido como fallback até o HelpCor migrar. Antes o DANI (que não tem esse secret; DAIS-68002) ficava travado nesse job (#827).infisical-secrets(já usada norelease.yml),continue-on-error.security-trivy), o token não sai do passo. Ordem: Infisical → secret (com::warning::) → sem nenhum, falha sem chamar o git.Prova (vermelho → verde)
tests/ci-unico/test_verificar_docs_token.py(novo, 7 testes) executa o script do passo com umgitfalso: o Infisical vence o secret; só-secret cai no fallback com aviso; sem nenhum falha e não chama o git; o valor do token nunca aparece no log. Contra o workflow anterior: 7 falham. Depois:ci-unico50 OK;ci-config,infisical-secrets,soberania,nginx-log,hub-issue-syncOK. (releaseroda no CI.)Um achado do próprio teste, já corrigido: o
echo "::add-mask::$TOKEN"imprimia o valor; removido (o secret já é mascarado pelo runner e o do Infisical pela action).⚠️ Limites
CVE_OS_EXCECOES_TOKENainda não existe no Infisical (o operador vai criar o token). Até lá o job usa o fallback, e o DANI continua travado: este PR não destrava ninguém sozinho.INFRAno ambienteprod, nem queINFRAé o slug aceito peloworkspaceSlug; só testei contra o Infisical falso. Se falhar, cai no fallback (e o log mostra o erro do passo).release.ymle outros chamam a action por@main; o reusable aponta@maintambém, então depende de adevelopir àmainpara valer nos produtos.develop.Refs: INFRA-68379, INFRA-68311, DAIS-68002.
🤖 Generated with Claude Code
https://claude.ai/code/session_01UdMSC8CGmShbesE5rfVNfe
DESCRIÇÃO ATUALIZADA — substitui a do corpo do PR (a CLI não edita o corpo).
Causa real (achada pela sessão ORG)
O verificar-docs nunca passou em produto algum: o Forgejo recusa secret com prefixo
FORGEJO_(reservado). Entãosecrets.FORGEJO_TOKENno reusable era o token automático do job, que só enxerga o próprio repo, e o clone do TMF/ORG dava "target couldn't be found". Nenhum produto poderia ter esse secret.O que muda
verificar-docs-produto.ymlrecebe o token de leitura do TMF/ORG, nesta ordem:org_leitura_token: o caller passawith: org_leitura_token: ${{ secrets.ORG_LEITURA_TOKEN }};secrets.ORG_LEITURA_TOKENde caller que usasecrets:;INFRA/prod/ci,CVE_OS_EXCECOES_TOKEN(o mesmo token só-leitura da lista única de CVE; passocontinue-on-error, só roda se o input não veio);FORGEJO_TOKENsaiu da cadeia (o log do erro explica por quê). Clone por git puro dentro de um passo só; o token não vira output nem é impresso.⚠️ Desvio da proposta, com motivo
A proposta era declarar
ORG_LEITURA_TOKENemon.workflow_call.secrets. Não declarei: o repo inteiro documenta e testa que o blocosecrets:emworkflow_callfaz o Forgejo rejeitar o arquivo ("Failing after 0s", INFRA-64944;tests/ci-unico/test_ci.pytrava isso noci.yml). Segui o padrão dohub-issue-sync(input +secrets.Xde caller legado, sem declaração). O caller que preferesecrets: ORG_LEITURA_TOKEN: ...também funciona (caminho 2); o do input é o mais seguro.Prova
tests/ci-unico/test_verificar_docs_token.py(8 testes + trava):gitfalso, ordem input > secret > cofre, falha sem token sem chamar o git, valor nunca no log, sem blocosecrets:, semFORGEJO_TOKEN. Contra a versão anterior do PR: 6 falham. Depois:ci-unico52 OK;ci-config,infisical-secrets,soberaniaOK.Erro meu pego na revisão: a mensagem de erro tinha
${{ secrets.ORG_LEITURA_TOKEN }}dentro dorun:, que o runner avaliaria antes do shell (injetaria o valor). Removido e travado por teste (a trava foi escrita depois da correção; não a vi vermelha).⚠️ Limites
gitfalso. Não rodei o reusable num runner real: o input recebendo${{ secrets.X }}e osecrets.ORG_LEITURA_TOKENnão declarado seguem o precedente dohub-issue-sync, mas não os vi funcionar neste reusable.ORG_LEITURA_TOKENem DANI e helpcor-admin, e os callers (verificar-docs.ymldo DANI #827 e do HelpCor) precisam passar o input. O reusable é chamado por@main: vale só depois do releasedevelop→maindo ci-shared (só do operador).develop.Refs: INFRA-68379, INFRA-68311, DAIS-68002.
🤖 Generated with Claude Code
https://claude.ai/code/session_01UdMSC8CGmShbesE5rfVNfe