ci: clean up workflow #115
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
push: | |
pull_request: | |
name: R-CMD-check-bioc | |
## These environment variables control whether to run GHA code later on that is | |
## specific to testthat, covr, and pkgdown. | |
env: | |
has_testthat: 'true' | |
run_covr: 'true' | |
run_pkgdown: 'true' | |
has_RUnit: 'false' | |
cache-version: 'cache-v1' | |
jobs: | |
build-check: | |
runs-on: ${{ matrix.config.os }} | |
name: ${{ matrix.config.os }} (${{ matrix.config.r }}) | |
container: ${{ matrix.config.cont }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { os: ubuntu-latest, r: '4.4', bioc: '3.19', cont: "bioconductor/bioconductor_docker:RELEASE_3_19", rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest" } | |
- { os: macOS-latest, r: '4.4', bioc: '3.19'} | |
- { os: windows-latest, r: '4.4', bioc: '3.19'} | |
env: | |
R_REMOTES_NO_ERRORS_FROM_WARNINGS: true | |
RSPM: ${{ matrix.config.rspm }} | |
NOT_CRAN: true | |
TZ: UTC | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- name: Set R Library home on Linux | |
if: runner.os == 'Linux' | |
run: | | |
mkdir /__w/_temp/Library | |
echo ".libPaths('/__w/_temp/Library')" > ~/.Rprofile | |
- name: Checkout Repository | |
uses: actions/checkout@v2 | |
- name: Setup R from r-lib | |
if: runner.os != 'Linux' | |
uses: r-lib/actions/setup-r@v3 | |
with: | |
r-version: ${{ matrix.config.r }} | |
http-user-agent: ${{ matrix.config.http-user-agent }} | |
- name: Setup pandoc from r-lib | |
if: runner.os != 'Linux' | |
uses: r-lib/actions/setup-pandoc@v3 | |
- name: Query dependencies | |
run: | | |
install.packages('remotes') | |
saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) | |
shell: Rscript {0} | |
- name: Restore R package cache | |
if: "!contains(github.event.head_commit.message, '/nocache') && runner.os != 'Linux'" | |
uses: actions/cache@v2 | |
with: | |
path: ${{ env.R_LIBS_USER }} | |
key: ${{ env.cache-version }}-${{ runner.os }}-biocversion-RELEASE_3_14-r-4.1-${{ hashFiles('.github/depends.Rds') }} | |
restore-keys: ${{ env.cache-version }}-${{ runner.os }}-biocversion-RELEASE_3_14-r-4.1- | |
- name: Cache R packages on Linux | |
if: "!contains(github.event.head_commit.message, '/nocache') && runner.os == 'Linux' " | |
uses: actions/cache@v2 | |
with: | |
path: /home/runner/work/_temp/Library | |
key: ${{ env.cache-version }}-${{ runner.os }}-biocversion-RELEASE_3_14-r-4.1-${{ hashFiles('.github/depends.Rds') }} | |
restore-keys: ${{ env.cache-version }}-${{ runner.os }}-biocversion-RELEASE_3_14-r-4.1- | |
- name: Install Linux system dependencies | |
if: runner.os == 'Linux' | |
run: | | |
sysreqs=$(Rscript -e 'cat("apt-get update -y && apt-get install -y", paste(gsub("apt-get install -y ", "", remotes::system_requirements("ubuntu", "20.04")), collapse = " "))') | |
echo $sysreqs | |
sudo -s eval "$sysreqs" | |
- name: Install macOS system dependencies | |
if: matrix.config.os == 'macOS-latest' | |
run: | | |
## Enable installing XML from source if needed | |
brew install libxml2 | |
echo "XML_CONFIG=/usr/local/opt/libxml2/bin/xml2-config" >> $GITHUB_ENV | |
## Required to install magick as noted at | |
## https://github.com/r-lib/usethis/commit/f1f1e0d10c1ebc75fd4c18fa7e2de4551fd9978f#diff-9bfee71065492f63457918efcd912cf2 | |
brew install imagemagick@6 | |
## For textshaping, required by ragg, and required by pkgdown | |
brew install harfbuzz fribidi | |
## For installing usethis's dependency gert | |
brew install libgit2 | |
## Required for tcltk | |
brew install xquartz --cask | |
- name: Install Windows system dependencies | |
if: runner.os == 'Windows' | |
run: | | |
## Edit below if you have any Windows system dependencies | |
shell: Rscript {0} | |
- name: Install BiocManager | |
run: | | |
message(paste('****', Sys.time(), 'installing BiocManager ****')) | |
remotes::install_cran("BiocManager") | |
shell: Rscript {0} | |
- name: Set BiocVersion | |
run: | | |
BiocManager::install(version = "${{ matrix.config.bioc }}", ask = FALSE, force = TRUE) | |
shell: Rscript {0} | |
- name: Install dependencies pass 1 | |
run: | | |
## Try installing the package dependencies in steps. First the local | |
## dependencies, then any remaining dependencies to avoid the | |
## issues described at | |
## https://stat.ethz.ch/pipermail/bioc-devel/2020-April/016675.html | |
## https://github.com/r-lib/remotes/issues/296 | |
## Ideally, all dependencies should get installed in the first pass. | |
## Set the repos source depending on the OS | |
## Alternatively use https://storage.googleapis.com/bioconductor_docker/packages/ | |
## though based on https://bit.ly/bioc2021-package-binaries | |
## the Azure link will be the main one going forward. | |
gha_repos <- if( | |
.Platform$OS.type == "unix" && Sys.info()["sysname"] != "Darwin" | |
) c( | |
"AnVIL" = "https://bioconductordocker.blob.core.windows.net/packages/3.14/bioc", | |
BiocManager::repositories() | |
) else BiocManager::repositories() | |
## For running the checks | |
message(paste('****', Sys.time(), 'installing rcmdcheck and BiocCheck ****')) | |
install.packages(c("rcmdcheck", "BiocCheck"), repos = gha_repos) | |
## Pass #1 at installing dependencies | |
## This pass uses AnVIL-powered fast binaries | |
## details at https://github.com/nturaga/bioc2021-bioconductor-binaries | |
## The speed gains only apply to the docker builds. | |
message(paste('****', Sys.time(), 'pass number 1 at installing dependencies: local dependencies ****')) | |
remotes::install_local(dependencies = TRUE, repos = gha_repos, build_vignettes = FALSE, upgrade = TRUE) | |
continue-on-error: true | |
shell: Rscript {0} | |
- name: Install dependencies pass 2 | |
run: | | |
## Pass #2 at installing dependencies | |
## This pass does not use AnVIL and will thus update any packages | |
## that have seen been updated in Bioconductor | |
message(paste('****', Sys.time(), 'pass number 2 at installing dependencies: any remaining dependencies ****')) | |
remotes::install_local(dependencies = TRUE, repos = BiocManager::repositories(), build_vignettes = TRUE, upgrade = TRUE, force = TRUE) | |
shell: Rscript {0} | |
- name: Install BiocGenerics | |
if: env.has_RUnit == 'true' | |
run: | | |
## Install BiocGenerics | |
BiocManager::install("BiocGenerics") | |
shell: Rscript {0} | |
- name: Install covr | |
if: github.ref == 'refs/heads/master' && env.run_covr == 'true' && runner.os == 'Linux' | |
run: | | |
remotes::install_cran("covr") | |
shell: Rscript {0} | |
- name: Install pkgdown | |
if: github.ref == 'refs/heads/master' && env.run_pkgdown == 'true' && runner.os == 'Linux' | |
run: | | |
remotes::install_cran("pkgdown") | |
shell: Rscript {0} | |
- name: Session info | |
run: | | |
options(width = 100) | |
pkgs <- installed.packages()[, "Package"] | |
sessioninfo::session_info(pkgs, include_base = TRUE) | |
shell: Rscript {0} | |
- name: Run CMD check | |
env: | |
_R_CHECK_CRAN_INCOMING_: false | |
DISPLAY: 99.0 | |
run: | | |
options(crayon.enabled = TRUE) | |
rcmdcheck::rcmdcheck( | |
args = c("--no-manual", "--no-vignettes", "--timings"), | |
build_args = c("--no-manual", "--keep-empty-dirs", "--no-resave-data"), | |
error_on = "warning", | |
check_dir = "check" | |
) | |
shell: Rscript {0} | |
## Might need an to add this to the if: && runner.os == 'Linux' | |
- name: Reveal testthat details | |
if: env.has_testthat == 'true' | |
run: find . -name testthat.Rout -exec cat '{}' ';' | |
- name: Run RUnit tests | |
if: env.has_RUnit == 'true' | |
run: | | |
BiocGenerics:::testPackage() | |
shell: Rscript {0} | |
- name: Run BiocCheck | |
env: | |
DISPLAY: 99.0 | |
run: | | |
BiocCheck::BiocCheck( | |
dir('check', 'tar.gz$', full.names = TRUE), | |
`quit-with-status` = FALSE, | |
`no-check-R-ver` = TRUE, | |
`no-check-bioc-help` = TRUE | |
) | |
shell: Rscript {0} | |
- name: Test coverage | |
if: github.ref == 'refs/heads/master' && env.run_covr == 'true' && runner.os == 'Linux' | |
run: | | |
covr::codecov() | |
shell: Rscript {0} | |
- name: Install package | |
if: github.ref == 'refs/heads/master' && env.run_pkgdown == 'true' && runner.os == 'Linux' | |
run: R CMD INSTALL . | |
- name: Get R package info | |
if: runner.os == 'Linux' | |
run: | | |
#### DockerHub repos must be lowercase (,,) #### | |
name=$(grep '^Package:' DESCRIPTION | cut -d\ -f2) | |
echo "packageNameOrig=${name}" >> $GITHUB_ENV | |
echo $name | |
version=$(grep Version DESCRIPTION | grep -o "[0-9.]\+") | |
echo "packageVersion=${version}" >> $GITHUB_ENV | |
echo $version | |
shell: bash {0} | |
- name: Build and deploy pkgdown site | |
if: github.ref == 'refs/heads/master' && env.run_pkgdown == 'true' && runner.os == 'Linux' | |
run: | | |
git config --global --add safe.directory /__w/${{env.packageNameOrig}}/${{env.packageNameOrig}} | |
git config --local user.name "$GITHUB_ACTOR" | |
git config --local user.email "$GITHUB_ACTOR@users.noreply.github.com" | |
Rscript -e "pkgdown::deploy_to_branch(new_process = FALSE)" | |
shell: bash {0} | |
## Note that you need to run pkgdown::deploy_to_branch(new_process = FALSE) | |
## at least one locally before this will work. This creates the gh-pages | |
## branch (erasing anything you haven't version controlled!) and | |
## makes the git history recognizable by pkgdown. | |
- name: Upload check results | |
if: failure() | |
uses: actions/upload-artifact@master | |
with: | |
name: ${{ runner.os }}-biocversion-RELEASE_3_14-r-4.1-results | |
path: check |