Skip to content

Add new input to allow users to force install dependencies, bypassing cache #170

Add new input to allow users to force install dependencies, bypassing cache

Add new input to allow users to force install dependencies, bypassing cache #170

name: rworkflows_static
'on':
push:
branches:
- master
- main
- devel
- RELEASE_**
pull_request:
branches:
- master
- main
- devel
- RELEASE_**
env:
run_bioccheck: ${{ false }}
run_rcmdcheck: ${{ true }}
as_cran: ${{ true }}
run_vignettes: ${{ true }}
has_testthat: ${{ true }}
run_covr: ${{ true }}
run_pkgdown: ${{ true }}
has_runit: ${{ false }}
has_latex: ${{ false }}
tinytex_installer: TinyTeX-1
pandoc_version: '2.19'
run_docker: ${{ false }}
docker_registry: ghcr.io
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
cache_version: cache-v1
miniforge_variant: ${{ false }}
activate_environment: test
jobs:
rworkflows_static:
permissions: write-all
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: auto
bioc: release
cont: ghcr.io/bioconductor/bioconductor_docker:RELEASE_3_18
rspm: ~
- os: macOS-latest
bioc: release
r: auto
cont: ~
rspm: ~
- os: windows-latest
bioc: release
r: auto
cont: ~
rspm: ~
env:
R_REMOTES_NO_ERRORS_FROM_WARNINGS: ${{ true }}
RSPM: ${{ matrix.config.rspm }}
TZ: UTC
GITHUB_REPO: ${{ github.repository }}
RGL_USE_NULL: ${{ true }}
steps:
- name: "\U0001F52D Collect Workflow Telemetry"
uses: runforesight/workflow-telemetry-action@v1
continue-on-error: ${{ true }}
with:
github_token: ${{ env.GITHUB_TOKEN }}
- name: "\U0001F4BE Free Disk Space"
if: env.free_diskspace == 'true' && runner.os == 'Linux'
uses: jlumbroso/free-disk-space@main
- name: "\U0001F30E Set environment variables"
run: |
echo "RGL_USE_NULL=TRUE" >> $GITHUB_ENV
echo "R_REMOTES_NO_ERRORS_FROM_WARNINGS=${{ true }}" >> $GITHUB_ENV
echo "RSPM=${{ matrix.config.rspm }}" >> $GITHUB_ENV
echo "TZ=UTC" >> $GITHUB_ENV
echo "NOT_CRAN=${{ !env.as_cran }}" >> $GITHUB_ENV
shell: bash {0}
- name: "\U0001F40D Setup Miniconda"
if: env.miniforge_variant != 'false'
uses: conda-incubator/setup-miniconda@v2
with:
auto-update-conda: ${{ false }}
python-version: ${{ matrix.python-version }}
miniforge-variant: ${{ env.miniforge_variant }}
miniforge-version: ${{ env.miniforge_version }}
activate-environment: ${{ env.activate_environment }}
environment-file: ${{ env.environment_file }}
channels: ${{ env.channels }}
- name: "\U0001F4DA Set R library home on Linux"
if: runner.os == 'Linux'
run: |
mkdir -p /__w/_temp/Library
echo ".libPaths('/__w/_temp/Library')" >> ~/.Rprofile
git config --global --add safe.directory '*'
shell: bash {0}
- name: ⏬ Checkout repository
uses: actions/checkout@v4
- name: "\U0001F6E0 Setup R and Bioconductor"
if: runner.os != 'Linux'
uses: grimbough/bioc-actions/setup-bioc@v1
with:
bioc-version: ${{ matrix.config.bioc }}
- name: "\U0001F6E0 Install Pandoc"
if: env.pandoc_version != 'false' && runner.os != 'Linux'
uses: r-lib/actions/setup-pandoc@v2
with:
pandoc-version: ${{ env.pandoc_version }}
- name: ❔ Query dependencies
env:
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
run: |
options(crayon.enabled = TRUE)
install.packages('remotes')
remotes::install_github("r-lib/remotes")
saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2)
shell: Rscript {0}
- name: "\U0001F3E6 Restore R package cache"
if: |
!contains(github.event.head_commit.message, '[nocache]') && runner.os != 'Linux'
uses: actions/cache@v3
with:
path: ${{ env.R_LIBS_USER }}
key: ${{ env.cache_version }}-${{ runner.os }}-biocversion-${{ matrix.config.bioc
}}-r-${{ matrix.config.r }}-${{ hashFiles('.github/depends.Rds') }}
restore-keys: ${{ env.cache_version }}-${{ runner.os }}-biocversion-${{ matrix.config.bioc
}}-r-${{ matrix.config.r }}-
- name: "\U0001F3E6 Cache R packages on Linux"
if: |
!contains(github.event.head_commit.message, '[nocache]') && runner.os == 'Linux'
uses: actions/cache@v3
with:
path: /home/runner/work/_temp/Library
key: ${{ env.cache_version }}-${{ runner.os }}-biocversion-${{ matrix.config.bioc
}}-r-${{ matrix.config.r }}-${{ hashFiles('.github/depends.Rds') }}
restore-keys: ${{ env.cache_version }}-${{ runner.os }}-biocversion-${{ matrix.config.bioc
}}-r-${{ matrix.config.r }}-
- name: "\U0001F6E0 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"
sudo apt-get install -y qpdf rsync
shell: bash {0}
- name: "\U0001F6E0 Install macOS system dependencies"
if: runner.os == 'macOS'
run: |
#### --- Justifications for each package --- ####
### libxml2 ###
# Enable installing XML from source if needed
### imagemagick@6 ###
# Required to install magick as noted at
# https://github.com/r-lib/usethis/commit/f1f1e0d10c1ebc75fd4c18fa7e2de4551fd9978f#diff-9bfee71065492f63457918efcd912cf2
### harfbuzz fribidi ###
# For textshaping, required by ragg, and required by pkgdown
### libgit2 ###
# For installing usethis's dependency gert
### xquartz --cask ###
# Required for tcltk
### libxfont ###
# Required for some ggplot2 functions
### texlive ###
# Required for rendering Sweave files (even with r-lib/actions/setup-tinytex)
#### --- Install packages --- ####
### Install normally ###
brew install libxml2 imagemagick@6 harfbuzz fribidi libgit2 texlive
### Install via cask ###
brew install xquartz --cask
### Set up xml2 ###
echo "XML_CONFIG=/usr/local/opt/libxml2/bin/xml2-config" >> $GITHUB_ENV
shell: bash {0}
- name: "\U0001F6E0 Install Windows system dependencies"
if: env.has_latex == 'true' && runner.os == 'Windows'
run: |
#### npm ####
npm install curl
shell: pwsh {0}
- name: "\U0001F6E0 Install latex"
if: env.has_latex == 'true'
uses: r-lib/actions/setup-tinytex@v2
env:
TINYTEX_INSTALLER: ${{ env.tinytex_installer }}
TINYTEX_VERSION: ${{ env.tinytex_version }}
- name: "\U0001F6E0 Install latex packages"
if: env.has_latex == 'true'
env:
tinytex_installer: ${{ env.tinytex_installer }}
tinytex_version: ${{ env.tinytex_version }}
run: |
install.packages("tinytex")
extra_packages <- c("bera","nowidow","parnotes","marginfix","etoolbox",
"titlesec","sectsty","framed","enumitem","parskip","soul","placeins",
"footmisc","changepage","xstring","caption","mathtools","fancyhdr",
"preprint","ragged2e","pdfcrop","titling","silence","everysel")
tinytex::tlmgr_install(pkgs = extra_packages)
shell: Rscript {0}
- name: "\U0001F6E0 Install dependencies pass 1"
env:
timeout: ${{ env.timeout }}
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
run: |
options(crayon.enabled = TRUE, timeout=Sys.getenv("timeout"))
## For running the checks
message(paste('****', Sys.time(), 'installing rcmdcheck ****'))
install.packages(c("rmarkdown","BiocManager"), dependencies = TRUE)
message(paste('****', Sys.time(), 'pass number 1 at installing dependencies****'))
repos <- BiocManager::repositories()
remotes::install_local(repos=repos, dependencies=TRUE, build_vignettes=FALSE, upgrade=TRUE, force=TRUE)
continue-on-error: ${{ true }}
shell: Rscript {0}
- name: "\U0001F6E0 Install dependencies pass 2"
env:
timeout: ${{ env.timeout }}
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
run: |
options(crayon.enabled = TRUE, timeout=Sys.getenv("timeout"))
message(paste('****', Sys.time(), 'pass number 2 at installing dependencies****'))
repos <- BiocManager::repositories()
remotes::install_local(repos=repos, dependencies=TRUE, build_vignettes=FALSE, upgrade=TRUE, force=TRUE)
shell: Rscript {0}
- name: "\U0001F6E0 Install RUnit (via BiocGenerics)"
if: env.has_runit == 'true'
run: |
options(crayon.enabled = TRUE)
BiocManager::install("BiocGenerics")
shell: Rscript {0}
- name: "\U0001F6E0 Install covr"
if: env.run_covr == 'true' && runner.os == 'Linux'
run: |
options(crayon.enabled = TRUE)
install.packages("covr")
shell: Rscript {0}
- name: "\U0001F6E0 Install pkgdown"
if: env.run_pkgdown == 'true' && runner.os == 'Linux'
run: |
options(crayon.enabled = TRUE)
install.packages("pkgdown")
shell: Rscript {0}
- name: ℹ️ Session info ️
run: |
options(width = 100, crayon.enabled = TRUE)
pkgs <- installed.packages()[,"Package"]
if(!require("sessioninfo", quietly=TRUE)) install.packages("sessioninfo")
tryCatch({
sessioninfo::session_info(pkgs, include_base = TRUE)
}, error = function(x){utils::sessionInfo()})
shell: Rscript {0}
- name: βœ… Run CMD check
if: env.run_rcmdcheck == 'true'
env:
_R_CHECK_CRAN_INCOMING_: ${{ false }}
RGL_USE_NULL: ${{ env.RGL_USE_NULL }}
DISPLAY: 99.0
AS_CRAN: ${{ env.as_cran }}
run_vignettes: ${{ env.run_vignettes }}
timeout: ${{ env.timeout }}
run: |
options(crayon.enabled = TRUE, timeout=Sys.getenv("timeout"))
if(!require("rcmdcheck", quietly=TRUE)) install.packages("rcmdcheck")
as_cran <- if(Sys.getenv("AS_CRAN")=='true') "--as-cran" else NULL
run_build_vignettes <- if(Sys.getenv("run_vignettes")=='true') NULL else "--no-build-vignettes"
run_vignettes <- if(Sys.getenv("run_vignettes")=='true') NULL else "--ignore-vignettes"
rcmdcheck::rcmdcheck(
args = c("--no-manual", "--timings", as_cran, run_vignettes),
build_args = c("--no-manual", "--keep-empty-dirs", "--no-resave-data", run_build_vignettes),
error_on = "warning",
check_dir = "check")
shell: Rscript {0}
- name: "\U0001F4CB Reveal testthat details"
if: env.has_testthat == 'true'
run: |
find . -name testthat.Rout -exec cat '{}' ';'
shell: bash {0}
- name: "\U0001F4CB Run RUnit tests (via BiocGenerics)"
if: env.has_runit == 'true'
env:
timeout: ${{ env.timeout }}
run: |
options(crayon.enabled = TRUE, timeout=Sys.getenv("timeout"))
BiocGenerics:::testPackage()
shell: Rscript {0}
- name: βœ… Run BiocCheck
if: env.run_bioccheck == 'true'
env:
DISPLAY: 99.0
RGL_USE_NULL: ${{ env.RGL_USE_NULL }}
run_vignettes: ${{ env.run_vignettes }}
as_cran: ${{ env.as_cran }}
timeout: ${{ env.timeout }}
run: |
options(crayon.enabled = TRUE, timeout=Sys.getenv("timeout"))
#### Install deps ####
if(!require("BiocManager", quietly=TRUE)) install.packages("BiocManager")
if(!require("BiocCheck", quietly=TRUE)) BiocManager::install("BiocCheck")
#### Allow for packages on CRAN ####
no_check_vignettes <- Sys.getenv("run_vignettes")=='true'
as_cran <- Sys.getenv("as_cran")=='true'
#### Run checks ####
BiocCheck::BiocCheck(
dir('check', 'tar.gz$', full.names = TRUE),
`quit-with-status` = TRUE,
`no-check-R-ver` = TRUE,
`no-check-vignettes` = no_check_vignettes,
`no-check-CRAN` = as_cran,
`no-check-bioc-help` = as_cran)
shell: Rscript {0}
- name: "\U0001F4CB Test coverage"
if: env.run_covr == 'true' && runner.os == 'Linux'
run: |
covr::codecov()
shell: Rscript {0}
- name: "\U0001F6E0 Install package ️"
if: env.run_pkgdown == 'true' && runner.os == 'Linux'
run: R CMD INSTALL .
shell: bash {0}
- name: ℹ️ Get R package info
if: runner.os == 'Linux'
run: |
#### DockerHub repos must be lowercase (,,) ####
name=$(grep '^Package:' DESCRIPTION | cut -d\ -f2)
echo "packageName=${name,,}" >> $GITHUB_ENV
echo "packageNameOrig=${name}" >> $GITHUB_ENV
echo $name
version=$(grep Version DESCRIPTION | grep -o "[0-9.]\+")
echo "packageVersion=${version}" >> $GITHUB_ENV
echo $version
echo "BASE_IMAGE=${{ matrix.config.cont }}" >> $GITHUB_ENV
shell: bash {0}
- name: "\U0001F4E6 Render README"
if: env.run_pkgdown == 'true' && runner.os == 'Linux'
env:
DISPLAY: 99.0
run: |
if(file.exists("README.Rmd")){
options(crayon.enabled = TRUE)
if(!require("rmarkdown", quietly=TRUE)) install.packages("rmarkdown");
rmarkdown::render("README.Rmd", output_format = rmarkdown::github_document(html_preview = FALSE));
}
shell: Rscript {0}
- name: "\U0001F4E6 Build pkgdown site"
if: env.run_pkgdown == 'true' && runner.os == 'Linux'
run: |
options(crayon.enabled = TRUE)
pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)
shell: Rscript {0}
- name: "\U0001F4E6\U0001F680 Deploy pkgdown site to GitHub pages"
if: env.run_pkgdown == 'true' && runner.os == 'Linux'
uses: JamesIves/github-pages-deploy-action@releases/v4
with:
clean: ${{ false }}
branch: gh-pages
folder: docs
token: ${{ env.GITHUB_TOKEN }}
- name: ⏫ Upload check results
if: failure()
uses: actions/upload-artifact@v3
with:
name: ${{ runner.os }}-biocversion-${{ matrix.config.bioc }}-r-${{ matrix.config.r
}}-results
path: check
- name: "\U0001F433✏️ Create Docker file"
if: |
(!contains(github.event.head_commit.message, '/nodocker')) && env.run_docker == 'true' && runner.os == 'Linux'
env:
BASE_IMAGE: ${{ matrix.config.cont }}
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
run: |
options(crayon.enabled = TRUE)
if(!require("rworkflows", quietly=TRUE)) remotes::install_github("neurogenomics/rworkflows")
path <- rworkflows::use_dockerfile(base_image=Sys.getenv("BASE_IMAGE"))
shell: Rscript {0}
- name: "\U0001F433\U0001F680 Build and push to GHCR"
if: |
(!contains(github.event.head_commit.message, '/nodocker')) && env.run_docker == 'true' && runner.os == 'Linux' && env.docker_registry == 'ghcr.io'
uses: docker/build-push-action@v1
env:
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
with:
username: ${{ github.repository_owner }}
password: ${{ env.GITHUB_TOKEN }}
registry: ${{ env.docker_registry }}
repository: ${{ github.repository }}
tag_with_ref: ${{ true }}
tag_with_sha: ${{ false }}
tags: |
${{ env.packageVersion }},
latest
build_args: |
PKG=${{ env.packageNameOrig }},
BASE_IMAGE=${{ matrix.config.cont }}
- name: "\U0001F433\U0001F680 Build and push to DockerHub"
if: |
(!contains(github.event.head_commit.message, '/nodocker')) && env.run_docker == 'true' && runner.os == 'Linux' && env.docker_registry == 'docker.io'
uses: docker/build-push-action@v1
env:
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
with:
username: ${{ env.docker_user }}
password: ${{ env.DOCKER_TOKEN }}
repository: ${{ env.docker_org }}/${{ env.packageName }}
tag_with_ref: ${{ true }}
tag_with_sha: ${{ false }}
tags: |
${{ env.packageVersion }},
latest
build_args: |-
PKG=${{ env.packageNameOrig }},
BASE_IMAGE=${{ env.BASE_IMAGE }}