From bc5435bcf0a567c411646dfb7680faf6db8864c4 Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Thu, 21 May 2026 17:29:57 -0700 Subject: [PATCH 01/11] notebooks: print() bare make_heatmap_ggplot so ligand-target heatmaps display MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nichenetr::make_heatmap_ggplot() ends in an assignment, so it returns the plot invisibly; a bare call as a cell's last expression never auto-displays (any environment / ggplot version). Wrap the two bare calls — the NB01 and NB02 ligand-target heatmaps — in print() so the figures render. NB02's activity heatmap already displays because it ends in `+ ggtitle(...)` (a visible value). Source-only change; notebooks remain output-free. Co-Authored-By: Claude Opus 4.7 (1M context) --- notebooks/01-getting-started.ipynb | 4 ++-- notebooks/02-standard-workflow.ipynb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/notebooks/01-getting-started.ipynb b/notebooks/01-getting-started.ipynb index 2bb3e90..f4ad4b0 100644 --- a/notebooks/01-getting-started.ipynb +++ b/notebooks/01-getting-started.ipynb @@ -718,14 +718,14 @@ " stop(\"No ligand-target links remain for plotting. Try lowering the filtering threshold or increasing TOP_N_LIGANDS.\")\n", "}\n", "\n", - "nichenetr::make_heatmap_ggplot(\n", + "print(nichenetr::make_heatmap_ggplot(\n", " vis_matrix,\n", " y_name = \"Predicted target gene\",\n", " x_name = \"Prioritized ligand\",\n", " legend_title = \"Regulatory\\npotential\",\n", " color = \"purple\",\n", " x_axis_position = \"top\"\n", - ")" + "))\n" ], "id": "cell01-034" }, diff --git a/notebooks/02-standard-workflow.ipynb b/notebooks/02-standard-workflow.ipynb index 59759e6..5848ce8 100644 --- a/notebooks/02-standard-workflow.ipynb +++ b/notebooks/02-standard-workflow.ipynb @@ -555,13 +555,13 @@ "}\n", "vis_matrix <- vis_matrix[rowSums(vis_matrix) > 0, , drop = FALSE]\n", "\n", - "nichenetr::make_heatmap_ggplot(\n", + "print(nichenetr::make_heatmap_ggplot(\n", " vis_matrix,\n", " y_name = \"Target Gene\",\n", " x_name = \"Predicted Ligand\",\n", " legend_title = \"Regulatory\\nPotential\",\n", " color = \"purple\"\n", - ")" + "))\n" ], "id": "cell02-036" }, From fbe8455114b395599cb255c97c0ba295e47157d0 Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Thu, 21 May 2026 17:31:10 -0700 Subject: [PATCH 02/11] CI: install only hard deps so checks don't try to clone private ccflowR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit R-CMD-check and lint were dying at "Setup R dependencies" because pak tried to install the Suggests ccflowR — a private repo CI's default GITHUB_TOKEN cannot read — and the GitHub-only presto. Set setup-r-dependencies `dependencies: '"hard"'` on all three jobs (R-CMD-check, lint, test-coverage) so only Depends/Imports/LinkingTo install; the Suggests-dependent examples and tests are namespace-guarded and skip when those packages are absent. The Remotes entries are kept (harmless) so a PAT-equipped run or a developer can still install the optional deps. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/R-CMD-check.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 3769a52..358e8b9 100755 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -35,6 +35,10 @@ jobs: with: extra-packages: any::rcmdcheck needs: check + # Install only hard deps (Depends/Imports/LinkingTo), not Suggests: + # ccflowR is a private repo CI can't clone, and presto is GitHub-only. + # Suggests-dependent examples/tests are namespace-guarded and skip. + dependencies: '"hard"' - name: Check package uses: r-lib/actions/check-r-package@v2 @@ -56,6 +60,7 @@ jobs: with: extra-packages: any::covr needs: coverage + dependencies: '"hard"' - name: Test coverage run: | @@ -79,6 +84,7 @@ jobs: with: extra-packages: any::lintr needs: lint + dependencies: '"hard"' - name: Lint run: lintr::lint_package() From ae666d189813f38ea047c0005ba8e0a2ae9b72c4 Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Fri, 22 May 2026 11:35:08 -0700 Subject: [PATCH 03/11] notebooks: order ligand-activity-score heatmap so the highest score is on top MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "Ligand Activity Scores" heatmap (NB02) passed rows in top_ligands order (highest first) to make_heatmap_ggplot, which sets y = factor(levels = rownames(matrix)); ggplot places the first level at the bottom, so the highest-scoring ligand rendered at the BOTTOM. Reverse the row order (rev(best_ligands)) so the top row is the highest score — matching the ligand activity bar plot in the same notebook. Row-order fix only; the color scale was already correct (light = low, dark orange = high). Co-Authored-By: Claude Opus 4.7 (1M context) --- notebooks/02-standard-workflow.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebooks/02-standard-workflow.ipynb b/notebooks/02-standard-workflow.ipynb index 5848ce8..3ce8eac 100644 --- a/notebooks/02-standard-workflow.ipynb +++ b/notebooks/02-standard-workflow.ipynb @@ -515,7 +515,7 @@ "activity_matrix <- as.matrix(activity_scores[, \"aupr_corrected\", drop = FALSE])\n", "rownames(activity_matrix) <- activity_scores$test_ligand\n", "colnames(activity_matrix) <- \"AUPR_c\"\n", - "activity_matrix <- activity_matrix[best_ligands, , drop = FALSE]\n", + "activity_matrix <- activity_matrix[rev(best_ligands), , drop = FALSE] # rev() so the highest score is the TOP row\n", "\n", "nichenetr::make_heatmap_ggplot(\n", " activity_matrix,\n", From 6f8497c92a414440cefdcdadfb809498df5f7f94 Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Fri, 22 May 2026 13:02:30 -0700 Subject: [PATCH 04/11] DESCRIPTION: drop private ccflowR from Suggests/Remotes so CI can resolve deps MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The R-CMD-check job installs Suggests (needs: check), so pak tried to clone the PRIVATE settylab/ccflowR and 404'd under CI's default GITHUB_TOKEN — the sole remaining check failure (presto, public, already resolves). ccflowR is fully optional and guarded: no `ccflowR::` calls in R/ (only requireNamespace in check_ecosystem plus a data-prep helper), every ccflowR example is in \dontrun{}, and no test uses it — so R CMD check stays meaningful without it. Remove ccflowR from Suggests + Remotes (keep public presto). The other public Suggests (Seurat, nichenetr, multinichenetr, presto) still install, so check coverage is unchanged. ccflowR stays documented/installable via inst/bootstrap.R and the install docs (and is still detected at runtime by check_ecosystem). Co-Authored-By: Claude Opus 4.7 (1M context) --- DESCRIPTION | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 0befc23..0c379cb 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -26,7 +26,6 @@ Imports: Suggests: nichenetr (>= 2.2.1), multinichenetr (>= 2.1.0), - ccflowR, presto, Seurat (>= 5.0.0), SeuratObject (>= 5.0.0), @@ -41,8 +40,7 @@ Suggests: Remotes: saeyslab/nichenetr, saeyslab/multinichenetr, - immunogenomics/presto, - settylab/ccflowR@6056c0fe1d1cecfc68aa059bacfbe6bd16725231 + immunogenomics/presto Config/testthat/edition: 3 URL: https://github.com/settylab/ContextNet BugReports: https://github.com/settylab/ContextNet/issues From 3842beaa70a0c29ca162117f4c7581d26124c47c Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Fri, 22 May 2026 13:09:43 -0700 Subject: [PATCH 05/11] =?UTF-8?q?Revert=20CI=20dependencies:'"hard"'=20wor?= =?UTF-8?q?kflow=20change=20=E2=80=94=20ccflowR=20removal=20is=20the=20rea?= =?UTF-8?q?l=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The dependencies: '"hard"' workaround was both ineffective and harmful: pak still SOLVES the ccflowR Remote (which 404'd under CI's token), and excluding Suggests made R CMD check run the test suite without testthat ("no package called testthat"). Removing the private ccflowR from DESCRIPTION (prior commit) lets pak resolve an all-public dependency set, so the default workflow installs Suggests normally; the data-dependent tests skip in CI (no local data/ present) and the simulated-data tests run. Restore the workflow to its original form. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/R-CMD-check.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 358e8b9..3769a52 100755 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -35,10 +35,6 @@ jobs: with: extra-packages: any::rcmdcheck needs: check - # Install only hard deps (Depends/Imports/LinkingTo), not Suggests: - # ccflowR is a private repo CI can't clone, and presto is GitHub-only. - # Suggests-dependent examples/tests are namespace-guarded and skip. - dependencies: '"hard"' - name: Check package uses: r-lib/actions/check-r-package@v2 @@ -60,7 +56,6 @@ jobs: with: extra-packages: any::covr needs: coverage - dependencies: '"hard"' - name: Test coverage run: | @@ -84,7 +79,6 @@ jobs: with: extra-packages: any::lintr needs: lint - dependencies: '"hard"' - name: Lint run: lintr::lint_package() From 811926cff978e3dfeff2e08cd8361c6804dbd1e7 Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Fri, 22 May 2026 13:21:31 -0700 Subject: [PATCH 06/11] CI: keep ccflowR in Suggests, drop only its Remote; install public deps for check ccflowR is a real, fully-guarded OPTIONAL dependency (requireNamespace in check_ecosystem, \dontrun examples, skip-guarded tests), so it must stay declared in Suggests. The no-PAT fix is to stop CI from cloning the private repo: - DESCRIPTION: ccflowR stays in Suggests; removed from Remotes only (public presto/nichenetr/multinichenetr remain in Remotes). - Workflow: each setup-r-dependencies uses dependencies: '"hard"' plus the public packages the check actually exercises (rcmdcheck/covr/lintr, testthat, Seurat), so pak never tries to resolve the unresolvable private ccflowR Suggests. R-CMD-check sets _R_CHECK_FORCE_SUGGESTS_: false so absent optional Suggests are NOTEs, not errors. nichenetr/multinichenetr tests skip in CI anyway (they need local data), so omitting them costs no coverage. Supersedes the earlier dependencies-only and Suggests-removal attempts on this branch. ccflowR remains documented/installable (with a PAT) via inst/bootstrap.R. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/R-CMD-check.yaml | 23 +++++++++++++++++++++-- DESCRIPTION | 1 + 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 3769a52..73a56fe 100755 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -9,6 +9,11 @@ on: jobs: R-CMD-check: runs-on: ${{ matrix.os }} + env: + # ccflowR is a private, optional Suggests that CI cannot clone. All + # ccflowR usage is guarded (requireNamespace / \dontrun / skipped tests), + # so treat unavailable Suggests as NOTEs rather than failing the check. + _R_CHECK_FORCE_SUGGESTS_: false strategy: fail-fast: false matrix: @@ -31,9 +36,18 @@ jobs: use-public-rspm: true - name: Setup R dependencies + # Install hard deps + the public packages the check actually exercises. + # dependencies: '"hard"' (not "all") so pak does not try to clone the + # private settylab/ccflowR Suggests (no Remote -> unresolvable in CI). + # Suggests that skip in CI (nichenetr/multinichenetr need local data) + # are intentionally omitted; ccflowR is namespace-guarded everywhere. uses: r-lib/actions/setup-r-dependencies@v2 with: - extra-packages: any::rcmdcheck + dependencies: '"hard"' + extra-packages: | + any::rcmdcheck + any::testthat + any::Seurat needs: check - name: Check package @@ -54,7 +68,11 @@ jobs: - uses: r-lib/actions/setup-r-dependencies@v2 with: - extra-packages: any::covr + dependencies: '"hard"' + extra-packages: | + any::covr + any::testthat + any::Seurat needs: coverage - name: Test coverage @@ -77,6 +95,7 @@ jobs: - uses: r-lib/actions/setup-r-dependencies@v2 with: + dependencies: '"hard"' extra-packages: any::lintr needs: lint diff --git a/DESCRIPTION b/DESCRIPTION index 0c379cb..291d785 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -26,6 +26,7 @@ Imports: Suggests: nichenetr (>= 2.2.1), multinichenetr (>= 2.1.0), + ccflowR, presto, Seurat (>= 5.0.0), SeuratObject (>= 5.0.0), From b9e73fe69e5688adf521135794a7e8f4eab7efde Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Fri, 22 May 2026 13:32:14 -0700 Subject: [PATCH 07/11] CI: drop Seurat from check deps (unused in CI, broke macOS/Windows/R4.2 resolve) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The prior commit added any::Seurat to the check/coverage extra-packages, but Seurat's dependency tree (SeuratObject -> Matrix >= 1.6.4, matrixStats, ...) fails to resolve on R 4.2, macOS, and Windows (it solved only on ubuntu 4.3/4.4). Seurat is not needed for CI: tests/ is gitignored and only six test files are tracked (class-grn, class-network, config, import-grn, network-integrate, validate) — all use simulated data, none load Seurat or nichenetr. The Seurat/nichenetr/multinichenetr-dependent test files are not in the repo. Install just hard deps + testthat (+ rcmdcheck/covr/lintr); _R_CHECK_FORCE_SUGGESTS_=false keeps the absent optional Suggests (ccflowR, Seurat, nichenetr, ...) as NOTEs rather than errors. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/R-CMD-check.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 73a56fe..48937cf 100755 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -47,7 +47,6 @@ jobs: extra-packages: | any::rcmdcheck any::testthat - any::Seurat needs: check - name: Check package @@ -72,7 +71,6 @@ jobs: extra-packages: | any::covr any::testthat - any::Seurat needs: coverage - name: Test coverage From a9387bfd945518a85f69f36b9cba966994423acd Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Fri, 22 May 2026 13:43:36 -0700 Subject: [PATCH 08/11] CI: drop `needs: check`/`coverage` so the solve skips the private ccflowR Suggests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Evidence: the lint job (needs: lint + dependencies: '"hard"') already skips Suggests and passes, while the check job (needs: check) kept failing with "local::.: Can't install dependency ccflowR" — `needs: check` forces Suggests (for example/vignette checking) into the dependency solve, where the private, Remote-less ccflowR is unresolvable. Removing `needs: check`/`needs: coverage` lets dependencies: '"hard"' govern: install hard deps + the explicit rcmdcheck/covr/testthat only. ccflowR (and other optional Suggests) stay absent; _R_CHECK_FORCE_SUGGESTS_=false keeps them as NOTEs. ccflowR remains declared in Suggests. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/R-CMD-check.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 48937cf..3071ad6 100755 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -43,11 +43,13 @@ jobs: # are intentionally omitted; ccflowR is namespace-guarded everywhere. uses: r-lib/actions/setup-r-dependencies@v2 with: + # No `needs: check` — that pulls Suggests (incl. the private, + # unresolvable ccflowR) into the solve. dependencies: '"hard"' + + # explicit rcmdcheck/testthat installs exactly what the check needs. dependencies: '"hard"' extra-packages: | any::rcmdcheck any::testthat - needs: check - name: Check package uses: r-lib/actions/check-r-package@v2 @@ -71,7 +73,6 @@ jobs: extra-packages: | any::covr any::testthat - needs: coverage - name: Test coverage run: | From f79c89da0a06966d8954cef14837ddfe2722825d Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Fri, 22 May 2026 13:54:47 -0700 Subject: [PATCH 09/11] Revert DESCRIPTION + CI workflow to main; keep only the two notebook fixes The no-PAT CI path is exhausted (pak resolves the package's Suggests for the check job, where the private, Remote-less ccflowR is unresolvable). Restore DESCRIPTION (ccflowR stays in Suggests AND Remotes, so the PAT route can clone it) and .github/workflows/R-CMD-check.yaml to exactly match main. PR #4 now contains only the two tutorial fixes: - NB01/NB02: print() the bare make_heatmap_ggplot calls so the ligand-target heatmaps display (the function returns invisibly). - NB02: order the ligand-activity-score heatmap so the highest score is on top (rev(best_ligands)). Greening R-CMD-check is a separate PAT decision (add github-token to the setup-r-dependencies steps once the ccflowR-read secret exists). Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/R-CMD-check.yaml | 26 ++++---------------------- DESCRIPTION | 3 ++- 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 3071ad6..3769a52 100755 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -9,11 +9,6 @@ on: jobs: R-CMD-check: runs-on: ${{ matrix.os }} - env: - # ccflowR is a private, optional Suggests that CI cannot clone. All - # ccflowR usage is guarded (requireNamespace / \dontrun / skipped tests), - # so treat unavailable Suggests as NOTEs rather than failing the check. - _R_CHECK_FORCE_SUGGESTS_: false strategy: fail-fast: false matrix: @@ -36,20 +31,10 @@ jobs: use-public-rspm: true - name: Setup R dependencies - # Install hard deps + the public packages the check actually exercises. - # dependencies: '"hard"' (not "all") so pak does not try to clone the - # private settylab/ccflowR Suggests (no Remote -> unresolvable in CI). - # Suggests that skip in CI (nichenetr/multinichenetr need local data) - # are intentionally omitted; ccflowR is namespace-guarded everywhere. uses: r-lib/actions/setup-r-dependencies@v2 with: - # No `needs: check` — that pulls Suggests (incl. the private, - # unresolvable ccflowR) into the solve. dependencies: '"hard"' + - # explicit rcmdcheck/testthat installs exactly what the check needs. - dependencies: '"hard"' - extra-packages: | - any::rcmdcheck - any::testthat + extra-packages: any::rcmdcheck + needs: check - name: Check package uses: r-lib/actions/check-r-package@v2 @@ -69,10 +54,8 @@ jobs: - uses: r-lib/actions/setup-r-dependencies@v2 with: - dependencies: '"hard"' - extra-packages: | - any::covr - any::testthat + extra-packages: any::covr + needs: coverage - name: Test coverage run: | @@ -94,7 +77,6 @@ jobs: - uses: r-lib/actions/setup-r-dependencies@v2 with: - dependencies: '"hard"' extra-packages: any::lintr needs: lint diff --git a/DESCRIPTION b/DESCRIPTION index 291d785..0befc23 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -41,7 +41,8 @@ Suggests: Remotes: saeyslab/nichenetr, saeyslab/multinichenetr, - immunogenomics/presto + immunogenomics/presto, + settylab/ccflowR@6056c0fe1d1cecfc68aa059bacfbe6bd16725231 Config/testthat/edition: 3 URL: https://github.com/settylab/ContextNet BugReports: https://github.com/settylab/ContextNet/issues From b83249f6e145217a42e73014514a6b6a45121353 Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Sun, 24 May 2026 11:10:33 -0700 Subject: [PATCH 10/11] CI: use SETTYLAB_CI_PAT so pak can resolve the private ccflowR dependency The default GITHUB_TOKEN cannot clone the private settylab/ccflowR Remote, so pak dependency resolution failed in every R-CMD-check matrix job, plus test-coverage and lint. Point GITHUB_PAT (read by r-lib/actions/setup-r-dependencies) at the new SETTYLAB_CI_PAT repo secret, which has read access to ccflowR. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/R-CMD-check.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index 3769a52..cb40e99 100755 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -9,6 +9,9 @@ on: jobs: R-CMD-check: runs-on: ${{ matrix.os }} + env: + # Read the private settylab/ccflowR Remote during pak dependency resolution. + GITHUB_PAT: ${{ secrets.SETTYLAB_CI_PAT }} strategy: fail-fast: false matrix: @@ -45,6 +48,9 @@ jobs: test-coverage: runs-on: ubuntu-latest needs: R-CMD-check + env: + # Read the private settylab/ccflowR Remote during pak dependency resolution. + GITHUB_PAT: ${{ secrets.SETTYLAB_CI_PAT }} steps: - uses: actions/checkout@v4 @@ -68,6 +74,9 @@ jobs: lint: runs-on: ubuntu-latest + env: + # Read the private settylab/ccflowR Remote during pak dependency resolution. + GITHUB_PAT: ${{ secrets.SETTYLAB_CI_PAT }} steps: - uses: actions/checkout@v4 From 8e2ad168f6ad0c728f494b47b57260fd6ef96c40 Mon Sep 17 00:00:00 2001 From: Sarah Huang Date: Sun, 24 May 2026 11:25:22 -0700 Subject: [PATCH 11/11] =?UTF-8?q?CI:=20drop=20R=204.2=20from=20matrix=20?= =?UTF-8?q?=E2=80=94=20package=20requires=20R=20>=3D=204.4=20via=20SeuratO?= =?UTF-8?q?bject=205=20/=20Matrix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit R 4.2 ran only on ubuntu and could never solve the dependency graph: the package needs SeuratObject (>= 5.0.0), which requires Matrix (>= 1.6.4), and the available Matrix needs R >= 4.4. R 4.3 and 4.4 cells (all platforms) pass. Remove '4.2' from r-version and the now-dead macOS/Windows excludes. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/R-CMD-check.yaml | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/R-CMD-check.yaml b/.github/workflows/R-CMD-check.yaml index cb40e99..7527b21 100755 --- a/.github/workflows/R-CMD-check.yaml +++ b/.github/workflows/R-CMD-check.yaml @@ -15,14 +15,10 @@ jobs: strategy: fail-fast: false matrix: + # R >= 4.3 only: the package needs SeuratObject (>= 5.0.0), which pulls + # Matrix (>= 1.6.4) requiring R >= 4.4 — R 4.2 cannot solve the graph. os: [ubuntu-latest, macos-latest, windows-latest] - r-version: ['4.2', '4.3', '4.4'] - exclude: - # Reduce matrix size - - os: macos-latest - r-version: '4.2' - - os: windows-latest - r-version: '4.2' + r-version: ['4.3', '4.4'] steps: - uses: actions/checkout@v4