From 77158b9c784e7f43e5468b42556061e275a5a532 Mon Sep 17 00:00:00 2001 From: Claude Opus 5 Date: Tue, 4 Aug 2026 14:41:29 +0100 Subject: [PATCH 1/2] ci: give the Windows and macOS legs a MaxMin url:: reference The Windows job of agent-check.yml, and R-CMD-check.yml's windows-latest (release) leg, failed on every branch in "Set up R dependencies", before compiling anything: ! Could not solve package dependencies: * deps::.: Can't install dependency MaxMin * MaxMin: Can't find package called MaxMin. Not a publishing problem. MaxMin is published, and DESCRIPTION:78 already carries Additional_repositories -- but pak does not read that field, as ms609/packages' tools/publish-maxmin.R records from a direct 2026-08-03 test. That is exactly why the publish script also emits flat, unversioned MaxMin_latest. aliases for url:: consumers. The Linux legs already name theirs; the Windows and macOS legs named nothing. Fixed, per platform, using the alias so it never needs updating when MaxMin moves. All three URLs verified live, and all three artifacts are Built: R 4.6.1 -- the current R release, which is what these legs request. Verified failing, now fixed: - agent-check.yml, windows leg (had no extra-packages block at all) - R-CMD-check.yml, "Set up R dependencies (covr)", runner.os == 'Windows' Fixed pre-emptively, NOT observed failing -- both were skipped in the diagnosing run, and fixing the core Windows leg unskips the macOS matrix, which would then fail identically: - R-CMD-check.yml, EasyTrees shinytest2 (gated on detect app changes) - R-CMD-check.yml, full matrix (macOS-latest arm64, macos-15-intel x86_64); _R_CHECK_FORCE_SUGGESTS_: false does not help, it governs R CMD check rather than pak's solve Fixes #43 Co-Authored-By: Claude Opus 5 --- .github/workflows/R-CMD-check.yml | 24 ++++++++++++++++++++++++ .github/workflows/agent-check.yml | 11 +++++++++++ 2 files changed, 35 insertions(+) diff --git a/.github/workflows/R-CMD-check.yml b/.github/workflows/R-CMD-check.yml index dba560fe4..9f9d490f3 100644 --- a/.github/workflows/R-CMD-check.yml +++ b/.github/workflows/R-CMD-check.yml @@ -237,6 +237,15 @@ jobs: needs: | check coverage + # MaxMin url:: -- this is the Windows leg, so it cannot use the Linux + # tarball the `runner.os != 'Windows'` step below selects. Without a + # url:: reference the solve fails outright ("Can't find package called + # MaxMin"): pak does not read `Additional_repositories`, so the drat's + # indexed contrib/ layout is invisible to it. See ms609/packages' + # tools/publish-maxmin.R, which publishes this flat alias for exactly + # this purpose. + extra-packages: | + url::https://ms609.github.io/packages/bin/windows/MaxMin_latest.zip # cache-version bumped to 2: the v1 caches were built while a # project-level .Rprofile shadowed ~/.Rprofile, so every package # in them was compiled from source. Retire them once. @@ -327,8 +336,14 @@ jobs: with: needs: | check + # MaxMin url:: -- same reason as the core Windows leg. Added + # pre-emptively: this job was skipped in the run that diagnosed the + # failure (it is gated on `detect app changes`), so unlike the core leg + # it is not yet observed failing -- but it resolves the same + # `needs: check` Suggests on the same platform, so it would. extra-packages: | local::. + url::https://ms609.github.io/packages/bin/windows/MaxMin_latest.zip # cache-version bumped to 2: the v1 caches were built while a # project-level .Rprofile shadowed ~/.Rprofile, so every package # in them was compiled from source. Retire them once. @@ -410,6 +425,15 @@ jobs: with: needs: | check + # MaxMin url:: -- same mechanism as the Windows and Linux legs, picked + # per architecture (macOS-latest is arm64; macos-15-intel is x86_64). + # Added pre-emptively and NOT yet observed failing: this job is + # `needs: core`, so it was skipped while the Windows leg was red. + # Fixing that leg unskips this one, which would then hit the identical + # unresolvable-Suggests error -- note `_R_CHECK_FORCE_SUGGESTS_: false` + # does not help, since it governs R CMD check, not pak's solve. + extra-packages: | + ${{ matrix.config.os == 'macos-15-intel' && 'url::https://ms609.github.io/packages/bin/macosx/big-sur-x86_64/MaxMin_latest.tgz' || 'url::https://ms609.github.io/packages/bin/macosx/big-sur-arm64/MaxMin_latest.tgz' }} # cache-version bumped to 2: the v1 caches were built while a # project-level .Rprofile shadowed ~/.Rprofile, so every package # in them was compiled from source. Retire them once. diff --git a/.github/workflows/agent-check.yml b/.github/workflows/agent-check.yml index 14d13374b..173440eb7 100644 --- a/.github/workflows/agent-check.yml +++ b/.github/workflows/agent-check.yml @@ -115,6 +115,17 @@ jobs: uses: r-lib/actions/setup-r-dependencies@v2 with: needs: check + # MaxMin url:: -- the Windows counterpart of the arm64 leg's line, and + # the reason this leg used to fail before compiling anything. MaxMin is + # not on CRAN, and pak does NOT read `Additional_repositories` from + # DESCRIPTION (confirmed empirically 2026-08-03, recorded in + # ms609/packages' tools/publish-maxmin.R), so the indexed drat layout + # alone leaves it unresolvable and the solve dies with "Can't find + # package called MaxMin". Naming the flat, unversioned alias directly + # is the mechanism that publish script exists to provide; it always + # points at the current build, so it needs no edit when MaxMin moves. + extra-packages: | + url::https://ms609.github.io/packages/bin/windows/MaxMin_latest.zip # cache-version bumped to 2: the v1 caches were built while a # project-level .Rprofile shadowed ~/.Rprofile, so every package # in them was compiled from source. Retire them once. From ca007d6d176209355433b02fee83643276c1aad4 Mon Sep 17 00:00:00 2001 From: Claude Opus 5 Date: Tue, 4 Aug 2026 15:00:34 +0100 Subject: [PATCH 2/2] ci: pin install-pandoc so pandoc auto-detect stops re-solving MaxMin by name The url:: reference alone was not enough. It worked -- the run logged "Installed MaxMin 0.0.0.9004" -- and the step then failed anyway, a few seconds later, with a DIFFERENT ref: * local::.: Can't install dependency MaxMin setup-r-dependencies' "Check whether pandoc needs to be installed" step runs pak::pkg_deps(".", dependencies = list(direct = "all", indirect = character())) which is a second, fresh solve. It sees neither the lockfile just built nor extra-packages, so it looks MaxMin up by name in the configured repos -- where it is not, since pak ignores Additional_repositories -- and dies, despite MaxMin being installed moments earlier. That branch only runs when `Sys.which("pandoc") == ""`. Linux runners ship pandoc, so the Linux legs return early and never reach the solve; Windows and macOS runners do not, which is the whole reason this was a non-Linux-only failure. Setting install-pandoc explicitly skips the auto-detect entirely. Values chosen per leg rather than uniformly: true where the job checks with vignettes (agent-check windows, R-CMD-check core covr, macOS matrix), false for the shinytest2 job, which runs an app and no vignettes. The quarto auto-detect is safe by comparison -- it globs for *.qmd and never calls pkg_deps -- so it needs no equivalent pin. Co-Authored-By: Claude Opus 5 --- .github/workflows/R-CMD-check.yml | 14 ++++++++++++++ .github/workflows/agent-check.yml | 11 +++++++++++ 2 files changed, 25 insertions(+) diff --git a/.github/workflows/R-CMD-check.yml b/.github/workflows/R-CMD-check.yml index 9f9d490f3..c4792eef6 100644 --- a/.github/workflows/R-CMD-check.yml +++ b/.github/workflows/R-CMD-check.yml @@ -246,6 +246,12 @@ jobs: # this purpose. extra-packages: | url::https://ms609.github.io/packages/bin/windows/MaxMin_latest.zip + # install-pandoc must stay explicit -- see the long note in + # agent-check.yml's windows leg. Auto-detect runs a second, fresh + # `pak::pkg_deps(".")` solve that cannot see extra-packages, so it + # fails on MaxMin by name; the branch only fires when pandoc is off + # PATH, which is why only the non-Linux legs hit it. + install-pandoc: true # cache-version bumped to 2: the v1 caches were built while a # project-level .Rprofile shadowed ~/.Rprofile, so every package # in them was compiled from source. Retire them once. @@ -344,6 +350,10 @@ jobs: extra-packages: | local::. url::https://ms609.github.io/packages/bin/windows/MaxMin_latest.zip + # install-pandoc explicit for the same reason as the core Windows leg + # (auto-detect's `pak::pkg_deps(".")` solve cannot see extra-packages). + # `false` here: this job runs shinytest2, not vignettes. + install-pandoc: false # cache-version bumped to 2: the v1 caches were built while a # project-level .Rprofile shadowed ~/.Rprofile, so every package # in them was compiled from source. Retire them once. @@ -434,6 +444,10 @@ jobs: # does not help, since it governs R CMD check, not pak's solve. extra-packages: | ${{ matrix.config.os == 'macos-15-intel' && 'url::https://ms609.github.io/packages/bin/macosx/big-sur-x86_64/MaxMin_latest.tgz' || 'url::https://ms609.github.io/packages/bin/macosx/big-sur-arm64/MaxMin_latest.tgz' }} + # install-pandoc explicit for the same reason as the Windows legs; also + # pre-emptive, since whether a macOS runner ships pandoc on PATH is + # exactly the condition that decides whether the bad branch fires. + install-pandoc: true # cache-version bumped to 2: the v1 caches were built while a # project-level .Rprofile shadowed ~/.Rprofile, so every package # in them was compiled from source. Retire them once. diff --git a/.github/workflows/agent-check.yml b/.github/workflows/agent-check.yml index 173440eb7..1f8319baa 100644 --- a/.github/workflows/agent-check.yml +++ b/.github/workflows/agent-check.yml @@ -126,6 +126,17 @@ jobs: # points at the current build, so it needs no edit when MaxMin moves. extra-packages: | url::https://ms609.github.io/packages/bin/windows/MaxMin_latest.zip + # install-pandoc MUST stay explicit here, and the url:: above is not + # sufficient without it. Left unset, setup-r-dependencies auto-detects + # by running `pak::pkg_deps(".", dependencies = list(direct = "all"))` + # -- a SECOND, fresh solve that sees neither the lockfile nor + # extra-packages, so it looks MaxMin up by name and dies with + # "* local::.: Can't install dependency MaxMin" even though MaxMin has + # just been installed successfully. That branch only runs when pandoc + # is absent from PATH, which is exactly why the Linux legs never hit it + # (their runners ship pandoc) and this one did. `true` rather than + # `false` because this leg checks with vignettes. + install-pandoc: true # cache-version bumped to 2: the v1 caches were built while a # project-level .Rprofile shadowed ~/.Rprofile, so every package # in them was compiled from source. Retire them once.