Skip to content

fix(ci): Carry revdep2 run ids as strings, and make its summary self-contained - #2816

Merged
krlmlr merged 1 commit into
mainfrom
claude/revdep2-workflow-fix-g8h8qc
Aug 6, 2026
Merged

fix(ci): Carry revdep2 run ids as strings, and make its summary self-contained#2816
krlmlr merged 1 commit into
mainfrom
claude/revdep2-workflow-fix-g8h8qc

Conversation

@krlmlr

@krlmlr krlmlr commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

The workflow was failing

Run 31084790490
died in plan.R with missing value where TRUE/FALSE needed,
one line after finding its baseline donor:

Baseline donor: run 31048405399 (745 entries)
Warning message:
NAs introduced by coercion to integer range
Error in if (baseline_run > 0) { : missing value where TRUE/FALSE needed

baseline_run <- as.integer(donor).
GitHub's run ids passed .Machine$integer.max in 2026,
so as.integer("31048405399") is a silent NA
that only surfaces at the next if.
This would have hit every run from now on
that finds a baseline to reuse.

Run ids are strings everywhere in these scripts now —
plan.json, the plan job's outputs, the summaries —
with "0" as the "no such run" sentinel
and run_id_chr() / has_run() in util.R to handle them.

Every link in the summary was broken

Checked against the report artifact of
run 31048405399.
Its summary contained exactly 23 links,
all of the form [archeofrag](problems.md#archeofrag)
right inside the report artifact,
wrong in a job summary served from /actions/runs/<id>,
where they resolve to github.com/igraph/rigraph/actions/runs/problems.md.
Nothing else was linked at all:
the baseline run, the prebuilt donor runs, the retried run and the artifact
were bare numbers or prose.

Now package names link to their CRAN page,
run ids link to their run pages,
and the summary says once
that problems.md and friends live in the revdep2-report artifact.
A regenerated summary has no relative links left.

Packages that could not be checked said nothing useful

All 30 of them appeared as a bare name with version ? and no reason:
revdepcheck's "Failed to check" table is fed a shim
that carries neither.
That section is dropped from the embedded report
and replaced by a table built from the manifest,
which had the detail all along:

Package Version Result Shard Old New Reason
basket 0.10.11 failed 26 old check timed out after 601s
dogesr 0.5.2 depfail 56 Dependencies not installed: rmarkdown, tibble, …
hespdiv 1.2.10 error 101 Source tarball could not be downloaded
optbdmaeAT 1.0.2 failed 38 1E 0W 0N 1E 0W 0N fails to install against either version

That last row needed a change in shard.R:
an i+ / i- / t+ / t- comparison recorded no message at all,
so three packages had no reason to report.
The shard records it now,
which also makes an i- (installs under CRAN igraph, fails under dev)
readable as distinct from an i+ (broken either way).
The shard summary puts the same reason in the <details> title,
where the log tail cannot cut it off.

I left the failed classification of i- alone.
Arguably that one is newly_broken
installation regressing under the dev version is a real regression —
but that changes what the reports and the retry selection mean,
so it is worth deciding separately.

How it was verified

No revdep2 run is needed to see the fix work:

  • plan.R run against a stubbed gh
    serving run 31048405399's real revdep2-baseline and revdep2-report artifacts.
    Both the baseline-donor path and the retry-run path plan through;
    before this branch, both died on the as.integer().

  • collect.R run against that run's real 770-entry manifest,
    with and without unchecked packages.
    The generated summary contains no relative links.

  • https://cran.r-project.org/package=<pkg> confirmed as the right link shape
    (200 for a real package, 404 for a bogus one).

  • By submitting this pull request, I assign the copyright of my contribution to The igraph development team.

🤖 Generated with Claude Code

https://claude.ai/code/session_01RLy6bf4Zo8YWgv5Qb53nmY

…f-contained

GitHub run ids passed `.Machine$integer.max` in 2026,
so `as.integer("31048405399")` is a silent `NA`.
The plan job died on the next `if`
with `missing value where TRUE/FALSE needed`,
right after finding its baseline donor.
Run ids are strings everywhere now,
with `"0"` as the "no such run" sentinel,
and `run_id_chr()` / `has_run()` in `util.R` to handle them.

The job summary's only links pointed at `problems.md#pkg`,
which is right inside the report artifact
and 404s in a summary served from `/actions/runs/<id>`.
Package names now link to CRAN,
run ids to their run pages,
and the summary says once
that the report files live in the `revdep2-report` artifact.

Packages that could not be checked got a bare name and no reason:
revdepcheck's "Failed to check" table is fed a shim
that carries neither version nor detail.
That section is replaced by a table built from the manifest --
version, shard, the check counts of whichever phase ran,
and why it stopped:
the timeout and its duration,
the dependencies that would not install,
or whether installation failed under the dev version only or under both.
The shard records that last distinction now,
so an `i-` (broken by us) reads differently from an `i+` (broken anyway),
and the shard summary puts the reason in the `<details>` title
where the log tail cannot cut it off.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RLy6bf4Zo8YWgv5Qb53nmY
@krlmlr krlmlr changed the title Improve revdep2 workflow summaries with better links and details fix(ci): Carry revdep2 run ids as strings, and make its summary self-contained Aug 6, 2026
@krlmlr
krlmlr merged commit 933fef6 into main Aug 6, 2026
2 of 3 checks passed
@krlmlr
krlmlr deleted the claude/revdep2-workflow-fix-g8h8qc branch August 6, 2026 10:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants