test(release): suíte verde no macOS sem esconder o CI — skipUnless(flock) + wc portável + guarda [INFRA-68242] #41

Merged
tarcisio merged 1 commit from fix/INFRA-68242-tests-release-macos-v2 into develop 2026-10-05 06:39:28 -03:00
Owner

O que muda

A suíte tests/release dá 35 falhas + 1 erro em 351 testes no macOS e passa inteira no Linux do CI. A causa é ambiente do teste, não código do gate. Este PR faz a suíte ficar verde onde o desenvolvedor roda sem esconder falha no CI. Só testes mudam: nenhum script, workflow ou Dockerfile.

Causa (verificada): 29 das 36 por flock ausente no macOS (é do util-linux; o deploy-remoto.sh:196 sai com flock ausente neste host e todo teste que roda o script falha cedo); 6 por consequência (o script saindo cedo, com asserções seguintes enganosas); 1 por wc do BSD, que preenche com espaços (stdin_lido= 0).

Correção

  • @unittest.skipUnless(shutil.which("flock"), ...) nas 6 classes que rodam o deploy-remoto.sh. É a convenção que o repo já usava em TestLockDoHost, TestModoRollback, TestLockComDono e TestSinal; essas classes só não a seguiam.
  • wc portável no script falso do gate de deploy (tr -d "[:space:]").
  • tests/release/test_ambiente_ci.py (novo): no CI, a falta de flock FALHA em vez de pular. Sem isso o skip viraria um gate cego.

Prova (vermelho → verde)

onde antes depois
macOS 35 falhas + 1 erro (351 testes) 0 falhas, 353 testes, 67 pulados com motivo
macOS com CI=true (não existia) a guarda falha, como deve (controle negativo)
Linux (tmf-ci-python:3.12) com CI=true 351 OK 353 OK, 1 pulado, guarda passa

A contagem de macOS foi refeita sobre a main de 04/10 (7553103) e deu 0 falhas.

⚠️ Limites

  • 67 testes passam a ser pulados no macOS. É o desenho (não dá para provar o lock sem flock), mas quem desenvolve no Mac não os executa; quem os executa de verdade é o CI Linux, e a guarda garante que o CI não os pule em silêncio.
  • A guarda assume que o CI seta CI ou GITHUB_ACTIONS (o Forgejo Actions seta). Se um dia não setar, ela deixa de proteger sem avisar.
  • Um deslize meu na primeira versão: o wc portável usava aspas simples dentro de um literal Python e quebrava o script falso, e o py_compile não pega isso. Foi corrigido e está coberto pela suíte.
  • Anotação para a faxina (fora deste PR): o README.md do ci-shared tem o bloco "CI único" duplicado (~402 e ~658).

Fluxo

Base develop. A IA abre e mergeia só com aprovação humana no head. O merge develop→main (release) é só do operador, pela UI. Este é o primeiro PR que roda o pr-checks com base develop: o tempo do check (~2m30s para a suíte inteira) deve ser coerente com isso.

Refs: INFRA-68242, INFRA-68363 (a develop e o pr-checks para ela).

🤖 Generated with Claude Code

https://claude.ai/code/session_01UdMSC8CGmShbesE5rfVNfe

## O que muda A suíte `tests/release` dá **35 falhas + 1 erro em 351 testes no macOS** e passa inteira no Linux do CI. A causa é **ambiente do teste, não código do gate**. Este PR faz a suíte ficar verde onde o desenvolvedor roda **sem esconder falha no CI**. **Só testes mudam**: nenhum script, workflow ou `Dockerfile`. **Causa (verificada):** 29 das 36 por `flock` ausente no macOS (é do util-linux; o `deploy-remoto.sh:196` sai com `flock ausente neste host` e todo teste que roda o script falha cedo); 6 por consequência (o script saindo cedo, com asserções seguintes enganosas); 1 por `wc` do BSD, que preenche com espaços (`stdin_lido= 0`). **Correção** - `@unittest.skipUnless(shutil.which("flock"), ...)` nas 6 classes que rodam o `deploy-remoto.sh`. É a **convenção que o repo já usava** em `TestLockDoHost`, `TestModoRollback`, `TestLockComDono` e `TestSinal`; essas classes só não a seguiam. - `wc` portável no script falso do gate de deploy (`tr -d "[:space:]"`). - **`tests/release/test_ambiente_ci.py` (novo): no CI, a falta de `flock` FALHA em vez de pular.** Sem isso o skip viraria um gate cego. ## Prova (vermelho → verde) | onde | antes | depois | |---|---|---| | macOS | 35 falhas + 1 erro (351 testes) | **0 falhas**, 353 testes, **67 pulados com motivo** | | macOS com `CI=true` | (não existia) | a guarda **falha**, como deve (controle negativo) | | Linux (`tmf-ci-python:3.12`) com `CI=true` | 351 OK | **353 OK**, 1 pulado, guarda passa | A contagem de macOS foi refeita sobre a `main` de 04/10 (`7553103`) e deu 0 falhas. ## ⚠️ Limites - **67 testes passam a ser pulados no macOS.** É o desenho (não dá para provar o lock sem `flock`), mas quem desenvolve no Mac **não os executa**; quem os executa de verdade é o CI Linux, e a guarda garante que o CI não os pule em silêncio. - A guarda assume que o CI seta `CI` ou `GITHUB_ACTIONS` (o Forgejo Actions seta). Se um dia não setar, ela deixa de proteger sem avisar. - Um deslize meu na primeira versão: o `wc` portável usava aspas simples dentro de um literal Python e quebrava o script falso, e o `py_compile` não pega isso. Foi corrigido e está coberto pela suíte. - Anotação para a faxina (fora deste PR): o `README.md` do ci-shared tem o bloco "CI único" duplicado (~402 e ~658). ## Fluxo Base **`develop`**. A IA abre e mergeia **só com aprovação humana** no head. O merge `develop`→`main` (release) é **só do operador, pela UI**. Este é o **primeiro PR** que roda o `pr-checks` com base `develop`: o tempo do check (~2m30s para a suíte inteira) deve ser coerente com isso. Refs: INFRA-68242, INFRA-68363 (a `develop` e o `pr-checks` para ela). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01UdMSC8CGmShbesE5rfVNfe
test(release): suite verde no macOS sem esconder o CI — skipUnless(flock) + wc portavel + guarda [INFRA-68242]
All checks were successful
PR checks (ci-shared) / testes (pull_request) Successful in 2m22s
68f55f6321
tests/release dava 35 falhas + 1 erro em 351 testes no macOS; no Linux do CI a mesma
suite dava 351 OK. Causa: ambiente do teste, nao codigo do gate.
- 29: flock nao existe no macOS (deploy-remoto.sh:196 sai com 'flock ausente');
- 6: o mesmo script saindo cedo, com asserts seguintes enganosos;
- 1: wc do BSD preenche com espacos (stdin_lido=       0).

Aplica a convencao que o repo ja usa (skipUnless(shutil.which('flock'))) nas 6 classes
que rodam o deploy-remoto.sh (TestDeployRemoto, TestIdempotenciaEDisco, TestGarantias,
TestNiceIonice, TestCoalescenciaQA, TestPrune), torna o wc do script falso portavel e
acrescenta test_ambiente_ci.py: no CI (CI/GITHUB_ACTIONS) a ausencia de flock FALHA em
vez de pular, para o skip nao virar gate cego.

Prova: macOS 36 falhas -> 0 (353 testes, 67 skips com motivo); macOS com CI=true a
guarda falha (controle); Linux com CI=true 353 OK, 1 skip.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UdMSC8CGmShbesE5rfVNfe
tarcisio merged commit cac2b73494 into develop 2026-10-05 06:39:28 -03:00
tarcisio deleted branch fix/INFRA-68242-tests-release-macos-v2 2026-10-05 06:39:28 -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!41
No description provided.