feat(ci): reusable-image-cve-os — CVE de SO da imagem sem origem externa [TMF9-69013] #77

Merged
tarcisio merged 1 commit from feat/TMF9-69013-reusable-image-cve-os into develop 2026-10-09 09:46:52 -03:00
Owner

O que

Novo reusable-image-cve-os.yml: o gate de CVE de SO da imagem pela política global da frota, sem baixar nada de fora. Ele resolve, do lado do ci-shared, a TMF9-69013, a TMF9-69027 e a TH-68952. A adoção em cada produto fica com a sessão dele.

O gate da política (cve_os_gate.py) passa a ser canônico aqui. Ele veio do tmf9 scripts/ci/cve_os_gate.py @77079a0ef sem mudança de regra, e os testes foram portados para unittest (tests/cve-os). A cópia do tmf9 sai quando ele adotar o reusable.

Como funciona

  • runs-on: build-images usa a tmf-ci-docker, com docker 29.7.1 e buildx com SHA-256 pinado. O build já é BuildKit, então o RUN --mount=type=secret funciona. Com pip-extra-index: true, o reusable monta o pip_extra_index com FORGEJO_TOKEN, num arquivo 600.
  • Trivy: a mesma tmf-ci-trivy imutável do reusable-trivy-scan.yml, num container irmão pelo socket, com --network none, --skip-db-update, --skip-version-check e sem ignorefile. O passo de frescor reprova DB com mais de 10 dias.
  • Gate: o cve_os_gate.py do ci-shared, na mesma ref do uses:, roda na tmf-ci-python imutável. A lista global vem de CVE_OS_EXCECOES_URL; falha ao baixar fecha o gate, e sem URL vale a lista vazia (estrito).
  • Sem bind mount de diretório: pelo socket, -v $PWD:… resolve no host, onde o workspace do job não existe. O job do tmf9 tinha esse buraco, nunca alcançado porque morria antes. Os arquivos passam por stdin (tar).

Prova

  • Ponta a ponta local na tmf-ci-docker:29.7.1-20261009-2e51884, com os passos REAIS extraídos do YAML:
    • o build com --mount=type=secret passou;
    • o scan rodou offline;
    • o gate deu rc=0, com "HIGH/CRITICAL de SO sem correção (não reprovam): 44";
    • o passo "ci-shared na mesma ref" falhou fechado contra a develop atual, que ainda não tem o script.
  • tests/cve-os: 21 testes passam:
    • os 10 do gate;
    • pin do Trivy igual ao do reusable-trivy-scan (o pedido de não esquecer o arquivo);
    • pin imutável, label sem container: e sem origem externa (o scanner do install-docker);
    • Trivy offline e sem bind mount (com controle positivo);
    • inputs só por env;
    • o passo do gate executado com docker falso: corrigível → 1, sem correção → 0, produto inválido → 2.
  • Todas as suítes de tests/* passam. conferir_reusable_publico está ok.

Pin

O propor-pin-trivy.sh do tmf_imagens ganha este arquivo num PR próprio, que vem a seguir. Até lá, este teste reprova o PR de pin que trocar só os outros arquivos.

Issues: TMF9-69013, TMF9-69027, TH-68952.

🤖 Generated with Claude Code

https://claude.ai/code/session_014axu8pSLigGKWaQj1sASKC

## O que Novo `reusable-image-cve-os.yml`: o gate de **CVE de SO da imagem** pela política global da frota, sem baixar nada de fora. Ele resolve, do lado do ci-shared, a TMF9-69013, a TMF9-69027 e a TH-68952. A adoção em cada produto fica com a sessão dele. O gate da política (`cve_os_gate.py`) **passa a ser canônico aqui**. Ele veio do tmf9 `scripts/ci/cve_os_gate.py` @77079a0ef sem mudança de regra, e os testes foram portados para unittest (`tests/cve-os`). A cópia do tmf9 sai quando ele adotar o reusable. ## Como funciona - `runs-on: build-images` usa a tmf-ci-docker, com docker 29.7.1 e buildx com SHA-256 pinado. O build já é BuildKit, então o `RUN --mount=type=secret` funciona. Com `pip-extra-index: true`, o reusable monta o `pip_extra_index` com `FORGEJO_TOKEN`, num arquivo 600. - **Trivy:** a mesma tmf-ci-trivy imutável do `reusable-trivy-scan.yml`, num container irmão pelo socket, com `--network none`, `--skip-db-update`, `--skip-version-check` e sem ignorefile. O passo de frescor reprova DB com mais de 10 dias. - **Gate:** o `cve_os_gate.py` do ci-shared, na mesma ref do `uses:`, roda na tmf-ci-python imutável. A lista global vem de `CVE_OS_EXCECOES_URL`; falha ao baixar fecha o gate, e sem URL vale a lista vazia (estrito). - **Sem bind mount de diretório:** pelo socket, `-v $PWD:…` resolve no host, onde o workspace do job não existe. O job do tmf9 tinha esse buraco, nunca alcançado porque morria antes. Os arquivos passam por stdin (tar). ## Prova - Ponta a ponta local na `tmf-ci-docker:29.7.1-20261009-2e51884`, com os passos REAIS extraídos do YAML: - o build com `--mount=type=secret` passou; - o scan rodou offline; - o gate deu rc=0, com "HIGH/CRITICAL de SO sem correção (não reprovam): 44"; - o passo "ci-shared na mesma ref" falhou fechado contra a develop atual, que ainda não tem o script. - `tests/cve-os`: 21 testes passam: - os 10 do gate; - **pin do Trivy igual ao do reusable-trivy-scan** (o pedido de não esquecer o arquivo); - pin imutável, label sem `container:` e sem origem externa (o scanner do install-docker); - Trivy offline e sem bind mount (com controle positivo); - inputs só por env; - o passo do gate executado com docker falso: corrigível → 1, sem correção → 0, produto inválido → 2. - Todas as suítes de `tests/*` passam. `conferir_reusable_publico` está ok. ## Pin O `propor-pin-trivy.sh` do tmf_imagens ganha este arquivo num PR próprio, que vem a seguir. Até lá, este teste reprova o PR de pin que trocar só os outros arquivos. Issues: TMF9-69013, TMF9-69027, TH-68952. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_014axu8pSLigGKWaQj1sASKC
feat(ci): reusable-image-cve-os — CVE de SO da imagem sem origem externa [TMF9-69013]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 4m48s
8c822cbd63
Build BuildKit no label build-images, Trivy pinado (mesmo pin do
reusable-trivy-scan) pelo socket e offline, gate da política global
(cve_os_gate.py, agora canônico aqui). Fecha o lado ci-shared de
TMF9-69013, TMF9-69027 e TH-68952.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014axu8pSLigGKWaQj1sASKC
tarcisio merged commit 68e47aa828 into develop 2026-10-09 09:46:52 -03:00
tarcisio deleted branch feat/TMF9-69013-reusable-image-cve-os 2026-10-09 09:46:52 -03:00
Sign in to join this conversation.
No reviewers
No labels
seguranca
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
TMF/ci-shared!77
No description provided.