Skip to content

R-CMD-check

R-CMD-check #615

Workflow file for this run

# For help debugging build failures open an issue on the RStudio community with the 'github-actions' tag.
# https://community.rstudio.com/new-topic?category=Package%20development&tags=github-actions
on:
push:
branches:
- master
- main
pull_request:
schedule:
- cron: '0 3 * * 4'
name: R-CMD-check
jobs:
R-CMD-check:
runs-on: ${{ matrix.config.os }}
name: ${{ matrix.config.os }} (${{ matrix.config.r }}${{ matrix.config.dep }}, ${{ matrix.config.qgis }})
strategy:
fail-fast: false
matrix:
config:
- {os: macOS-latest, qgis: 'none', r: 'oldrel', dep: '', r-pkg-cache: 'v0'}
- {os: macOS-latest, qgis: 'none', r: 'release', dep: '', r-pkg-cache: 'v0'}
- {os: windows-latest, qgis: 'none', r: 'oldrel', dep: '', r-pkg-cache: 'v0'}
- {os: windows-latest, qgis: 'none', r: 'release', dep: '', r-pkg-cache: 'v0'}
- {os: windows-latest, qgis: 'none', r: 'devel', dep: '', r-pkg-cache: 'v0'}
- {os: ubuntu-22.04, qgis: 'none', r: 'release', dep: '', r-pkg-cache: 'v0'}
- {os: macOS-latest, qgis: 'macos-brew', r: 'release', dep: '', r-pkg-cache: 'v0'}
- {os: windows-latest, qgis: 'chocolatey', r: 'release', dep: '', r-pkg-cache: 'v0'}
- {os: windows-latest, qgis: 'chocolatey-ltr', r: 'release', dep: '', r-pkg-cache: 'v0'}
- {os: windows-latest, qgis: 'chocolatey', r: 'devel', dep: '', r-pkg-cache: 'v0'}
- {os: ubuntu-22.04, qgis: 'ubuntu-nightly', r: 'release', dep: '', r-pkg-cache: 'v0'}
- {os: ubuntu-22.04, qgis: 'ubuntu-nightly', r: 'devel', dep: '', r-pkg-cache: 'v0'}
- {os: ubuntu-22.04, qgis: 'ubuntugis', r: 'release', dep: '', r-pkg-cache: 'v1'}
- {os: ubuntu-22.04, qgis: 'ubuntu', r: 'release', dep: '', r-pkg-cache: 'v0'}
- {os: ubuntu-22.04, qgis: 'ubuntu', r: 'release', dep: ' [hard-deps]', r-pkg-cache: 'v3'}
- {os: ubuntu-22.04, qgis: 'ubuntu-ltr', r: 'release', dep: '', r-pkg-cache: 'v0'}
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
R_KEEP_PKG_SOURCE: yes
SAGANGV: 0.0.7
steps:
- uses: actions/checkout@v4
- uses: r-lib/actions/setup-pandoc@v2
- uses: r-lib/actions/setup-r@v2
with:
r-version: ${{ matrix.config.r }}
use-public-rspm: true
extra-repositories: https://geocompr.r-universe.dev
- name: Prepare Ubuntu for installing QGIS (common code)
if: runner.os == 'Linux' && matrix.config.qgis != 'none'
run: |
# Prepare Ubuntu for installing QGIS (common code)
echo "::group::Dynamically set QGIS_PLUGINPATH environment var (available to next steps)"
mkdir ../extra_plugins
echo "QGIS_PLUGINPATH=$(pwd)/../extra_plugins" >> $GITHUB_ENV
echo "::endgroup::"
echo "::group::Install the QGIS Signing Key"
sudo wget -qO /etc/apt/keyrings/qgis-archive-keyring.gpg https://download.qgis.org/downloads/qgis-archive-keyring.gpg
echo "::endgroup::"
- name: Add repo to install QGIS development version for Ubuntu
if: matrix.config.qgis == 'ubuntu-nightly'
run: |
# Add repo to install QGIS development version for Ubuntu (using an often outdated GRASS release from Ubuntu repo)
sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/qgis-archive-keyring.gpg] https://qgis.org/ubuntu-nightly `lsb_release -c -s` main" > /etc/apt/sources.list.d/qgis.list'
- name: Add repos to install upcoming QGIS point release for Ubuntugis (becoming latest release in < 1 month)
if: matrix.config.qgis == 'ubuntugis'
run: |
# Add repos to install upcoming QGIS point release (becoming latest release in < 1 month) for Ubuntugis (ubuntugis-unstable PPA, with current GRASS release)
sudo mkdir -p /root/.gnupg
sudo chmod 700 /root/.gnupg
sudo gpg --no-default-keyring --keyring /etc/apt/keyrings/ubuntugis-unstable-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 6B827C12C2D425E227EDCA75089EBE08314DF160
sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/ubuntugis-unstable-archive-keyring.gpg] http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu `lsb_release -c -s` main" > /etc/apt/sources.list.d/ubuntugis-unstable.list'
sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/qgis-archive-keyring.gpg] https://qgis.org/ubuntugis-nightly-release `lsb_release -c -s` main" > /etc/apt/sources.list.d/qgis.list'
- name: Add repo to install latest QGIS release for Ubuntu
if: matrix.config.qgis == 'ubuntu'
run: |
# Add repo to install latest QGIS release for Ubuntu (using an often outdated GRASS release from Ubuntu repo)
sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/qgis-archive-keyring.gpg] https://qgis.org/ubuntu `lsb_release -c -s` main" > /etc/apt/sources.list.d/qgis.list'
- name: Add repo to install QGIS LTR (long-term release) for Ubuntu
if: matrix.config.qgis == 'ubuntu-ltr'
run: |
# Add repo to install QGIS LTR (long-term release) for Ubuntu (using an often outdated GRASS release from Ubuntu repo)
sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/qgis-archive-keyring.gpg] https://qgis.org/ubuntu-ltr `lsb_release -c -s` main" > /etc/apt/sources.list.d/qgis.list'
- name: Install QGIS, GRASS, SAGA and the SAGA NextGen plugin (Ubuntu) from preset repos
if: runner.os == 'Linux' && matrix.config.qgis != 'none'
run: |
# Install QGIS, GRASS, SAGA and the SAGA NextGen plugin (Ubuntu) from preset repos
sudo apt-get update
sudo apt-get install -y qgis qgis-plugin-grass saga
wget -qO ../sagang_plugin.zip https://plugins.qgis.org/plugins/processing_saga_nextgen/version/$SAGANGV/download/
unzip -q ../sagang_plugin.zip -d ../extra_plugins
- name: Install QGIS (MacOS homebrew)
if: matrix.config.qgis == 'macos-brew'
run: |
brew install --cask qgis
# installs last nightly build of QGIS
# works locally, hangs on GHA after download
# leaving this out until can figure out how to run reliably
- name: Install QGIS (MacOS nightly)
if: matrix.config.qgis == 'macos-nightly'
run: |
# Setup QGIS from MacOS nightly
curl https://qgis.org/downloads/macos/qgis-macos-nightly.dmg --output qgis-macos-nightly.dmg
yes | hdiutil attach -nobrowse -noverify -mountpoint qgis qgis-macos-nightly.dmg > /dev/null
sudo cp -R qgis/QGIS.app /Applications
- name: Install QGIS (Windows chocolatey)
if: matrix.config.qgis == 'chocolatey'
uses: crazy-max/ghaction-chocolatey@v3
with:
args: install qgis
- name: Install QGIS LTR (Windows chocolatey)
if: matrix.config.qgis == 'chocolatey-ltr'
uses: crazy-max/ghaction-chocolatey@v3
with:
args: install qgis-ltr
- name: Query R dependencies and report available versions
id: query
if: matrix.config.dep == ''
run: |
# Query R dependencies and report available versions
cat("::group::Install pak\n")
install.packages("pak", repos = "https://r-lib.github.io/p/pak/stable/")
cat("::endgroup::\n")
cat("::group::Create minimal data frame with pkg deps and store them\n")
depends <- rbind(
pak::pkg_deps("deps::.", dependencies = c("Config/Needs/check", "all")),
pak::pkg_deps("any::sessioninfo", dependencies = c("Config/Needs/check", "all")),
pak::pkg_deps("any::rcmdcheck", dependencies = c("Config/Needs/check", "all")),
pak::pkg_deps("any::covr", dependencies = c("Config/Needs/check", "all")),
pak::pkg_deps("any::commonmark", dependencies = c("Config/Needs/check", "all")),
pak::pkg_deps("any::xml2", dependencies = c("Config/Needs/check", "all"))
)[, c("ref", "version")]
depends <- depends[!duplicated(depends), ]
depends <- depends[depends$ref != "deps::.", ]
saveRDS(depends, ".github/depends.Rds")
cat("::endgroup::\n")
cat("::group::Store R-version\n")
cat("r-version=", sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), "\n", file = Sys.getenv("GITHUB_OUTPUT"), sep = "", append = TRUE)
cat("::endgroup::\n")
cat("::group::Print results\n")
cat("R version:", sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), "\n")
print(as.data.frame(depends), row.names = FALSE)
cat("::endgroup::\n")
shell: Rscript {0}
- name: Restore (or define new) R package cache
if: matrix.config.dep == ''
uses: actions/cache@v4
with:
path: |
${{ env.R_LIBS_USER }}/*
!${{ env.R_LIBS_USER }}/pak
key: ${{ matrix.config.os }}-${{ steps.query.outputs.r-version }}-${{ matrix.config.r-pkg-cache }}-${{ hashFiles('.github/depends.Rds') }}
- name: Install missing package dependencies
if: matrix.config.dep == ''
run: |
# Install missing package dependencies
cat("::group::Install\n")
pak::pkg_install(c("deps::.", "any::sessioninfo", "any::rcmdcheck", "any::covr", "any::commonmark", "any::xml2"), upgrade = FALSE, dependencies = c("Config/Needs/check", "all"))
# This is based on the minimum needed version, not the hash of what is available at RSPM
cat("::endgroup::\n")
cat("::group::Session info\n")
sessioninfo::session_info(pkgs = "installed", include_base = TRUE)
cat("::endgroup::\n")
shell: Rscript {0}
# raster, sf, terra and lwgeom from RSPM use older sysdeps than ubuntugis
- name: In the ubuntugis job, reinstall some pkgs from source if needed
if: matrix.config.qgis == 'ubuntugis'
run: |
# Rebuild and install sf, terra etc. if the RSPM binaries (or cached pkgs) don't load
cat("::group::sf\n")
if (!requireNamespace("sf", quietly = TRUE)) {
install.packages("sf", repos = "https://cloud.r-project.org")
}
cat("::endgroup::\n")
cat("::group::terra\n")
if (!requireNamespace("terra", quietly = TRUE)) {
install.packages("terra", repos = "https://cloud.r-project.org")
}
cat("::endgroup::\n")
cat("::group::raster\n")
if (!requireNamespace("raster", quietly = TRUE)) {
install.packages("raster", repos = "https://cloud.r-project.org")
}
cat("::endgroup::\n")
cat("::group::lwgeom (needed by stars)\n")
if (!requireNamespace("lwgeom", quietly = TRUE)) { # needed for stars
install.packages("lwgeom", repos = "https://cloud.r-project.org")
}
cat("::endgroup::\n")
cat("::group::Session info\n")
sessioninfo::session_info(pkgs = "installed", include_base = TRUE)
cat("::endgroup::\n")
shell: Rscript {0}
- name: Install hard R pkg dependencies only
if: matrix.config.dep == ' [hard-deps]'
uses: r-lib/actions/setup-r-dependencies@v2
with:
dependencies: '"hard"'
cache: false
extra-packages: |
any::rcmdcheck
any::testthat
any::knitr
any::rmarkdown
needs: check
- uses: r-lib/actions/check-r-package@v2
# run with CMD check because installing QGIS is expensive
- name: Test Coverage
if: matrix.config.qgis == 'ubuntu' && matrix.config.dep == ''
run: |
# Setup code coverage with Codecov
covr::codecov(quiet = FALSE)
shell: Rscript {0}
- name: Show testthat output
if: always()
run: find check -name 'testthat.Rout*' -exec cat '{}' \; || true
shell: bash
- name: Show platform-info output
if: always()
run: find check -name 'platform-info.Rout*' -exec cat '{}' \; || true
shell: bash
- name: Upload check results
if: failure()
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.config.os }}_r-${{ matrix.config.r }}_qgis-${{ matrix.config.qgis }}_results
path: check