From 96ea9be677adf81bffedc640e9891f7c497784e5 Mon Sep 17 00:00:00 2001 From: jun0 Date: Mon, 17 Aug 2026 14:16:25 +0900 Subject: [PATCH 1/2] [rustjava-coverage-workflow-codecov-token-red] ci: stop failing coverage on codecov upload errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `coverage` check has been red on every run since it started reporting (24/24, 2026-07-22 through 2026-08-17). Measured cause, single and constant: gh secret list -R Jun025/RustJava -> empty (no secrets at all) This repo is a fork, and forks do not inherit the upstream repo's secrets, so `token: ${{ secrets.CODECOV_TOKEN }}` expands to the empty string. The uploader reports `Token length: 0` and codecov rejects it with `{"message":"Token required - not valid tokenless upload"}`, exit 1. With `fail_ci_if_error: true` that sank the whole job. Across all 24 runs the only failing step is ever `Upload to codecov.io`; `Generate code coverage` has never failed. So the red carried no signal — it was a constant, and a constant red hides real regressions rather than reporting them. It also forced every upstream-sync round to hand-carry a "coverage red is pre-existing, not a merge blocker" exemption. Upload errors are now non-fatal. This does not weaken the build check: `Generate code coverage` is a separate `run:` step with no `continue-on-error`, so a broken build or failing test still fails the job. What is no longer fatal is strictly the publish to codecov.io, whose error text still appears in the step log. Set CODECOV_TOKEN on this fork to make uploads work again. --- .github/workflows/coverage.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 29133ad6..8e39b482 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -33,5 +33,14 @@ jobs: uses: codecov/codecov-action@v7 with: files: lcov.info - fail_ci_if_error: true + # This fork has no CODECOV_TOKEN (secrets are not inherited from the + # upstream repo), so every upload is rejected with "Token required - + # not valid tokenless upload". Failing CI on that made `coverage` red + # on all 24 runs since the workflow started reporting, which buries + # real regressions instead of surfacing them. Upload errors are now + # non-fatal; the error text is still printed in this step's log. + # The coverage run itself is the separate "Generate code coverage" + # step above, which still fails the job if the build or tests break. + # Set CODECOV_TOKEN on this fork to make uploads work again. + fail_ci_if_error: false token: ${{ secrets.CODECOV_TOKEN }} From 73ab7cc2dabe01caac703f3728b2cd0bf3f5d03e Mon Sep 17 00:00:00 2001 From: jun0 Date: Mon, 17 Aug 2026 14:19:07 +0900 Subject: [PATCH 2/2] [rustjava-coverage-workflow-codecov-token-red] docs: record coverage red root cause and fix --- REPORT.md | 15 +++++++++++++++ STATE.md | 8 ++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/REPORT.md b/REPORT.md index 9654adf2..4b23d58d 100644 --- a/REPORT.md +++ b/REPORT.md @@ -1,5 +1,20 @@ # REPORT +## [2026-08-17] `coverage` 상시 red 해소 (rustjava-coverage-workflow-codecov-token-red) +- 무엇을: `.github/workflows/coverage.yml` 의 `fail_ci_if_error` 를 `true` → **`false`** 로 내리고 + 이유·복구법을 주석으로 박았다. **변경 파일 1개**(워크플로) + 문서 2개. +- 왜: `coverage` 는 **보고를 시작한 이래 24/24 전건 red** 였다(2026-07-22~08-17). 근인은 단 하나 — + ★**이 저장소는 fork 라 upstream 의 시크릿을 상속하지 않는다.** `gh secret list` 는 **빈 목록**이고 + `secrets.CODECOV_TOKEN` 이 빈 문자열로 전개돼 업로더가 `Token length: 0` → + `{"message":"Token required - not valid tokenless upload"}` 로 죽었다. `fail_ci_if_error: true` 가 + 그 업로드 실패를 job 실패로 승격시켜 왔다. ★**상수 red 는 신호가 아니다** — 진짜 회귀가 섞여도 안 보이고, + 실제로 upstream 동기 매 회차가 「선재 인프라라 머지 차단 아님」이라는 **특례 문구를 손으로** 달아야 했다. +- 사용자 영향: 없음(코드 무변경). CI 신호만 회복된다. ★**빌드 검사는 약해지지 않는다** — + `Generate code coverage` 는 별도 `run:` 스텝이고 `continue-on-error` 가 없어 빌드/테스트가 깨지면 + 여전히 job 이 red 다. 비치명이 된 것은 **codecov.io 로의 «발행»뿐**이고 그 오류 문구는 스텝 로그에 그대로 남는다. +- 후속 추천: `CODECOV_TOKEN` 을 이 fork 에 등재하면 업로드까지 복구된다 — ★**human-step**(시크릿 발급·등재는 + 사람 몫). 등재 전까지는 codecov.io 에 데이터가 쌓이지 않는다(단, 토큰이 없던 지금까지도 쌓인 적이 없다). + ## [2026-08-17] upstream 동기 S1 — 컷 `1f356ae` 머지 (rustjava-upstream-sync-s1-tracing-cut-1f356ae) - 무엇을: upstream `1f356ae`(#173~#179 · 5커밋)를 머지했다. 충돌 **2** 해소 — `lang.rs` 는 **양쪽 병합**(우리 `class_format_error` + upstream 의 Java 1.2 wrapper 9종), diff --git a/STATE.md b/STATE.md index ebf539ad..59cb1497 100644 --- a/STATE.md +++ b/STATE.md @@ -1,10 +1,14 @@ # STATE ## 진행중 -- [rustjava-upstream-sync-s1-tracing-cut-1f356ae] upstream 컷 `1f356ae` 머지 완료(충돌 2 해소 · - tracing 축). green 전건 rc=0 · 169 passed. **PR 대기 — 게이트③ 미착지.** +- [rustjava-coverage-workflow-codecov-token-red] `coverage` 상시 red 해소 — + `fail_ci_if_error: false`. ★**실증: 착지 전 브랜치에서 «이 저장소 최초의 green coverage»** + (25번째 run, 앞선 24건 전부 red). **PR 대기 — 게이트③ 미착지.** ## 완료 +- [rustjava-upstream-sync-s1-tracing-cut-1f356ae] upstream 컷 `1f356ae` 머지(충돌 2 해소 · tracing 축 · + `System.setProperty` 서술자 파손 1건 추가 처리). ★게이트③ 완료: PR #11 스쿼시 머지 → + main `6bfe97c`(2026-08-17). ※원격 브랜치는 repo 설정 `deleteBranchOnMerge=true` 로 자동 삭제됨. - [rustjava-runtime-time-todo-impl] RuntimeImpl 시간 API `todo!()` 3건 제거(now/sleep/yield) + test_utils `r#yield` 구현 + tokio `time` 피처 추가 + 회귀 잠금 픽스처(`test_data/TimeApi`). ★게이트③ 완료: PR #2 스쿼시 머지 → main `13ab950`(2026-07-23), 브랜치 정리 완료.