Skip to content

Merge branch 'contents' of https://github.com/Genentech/phase1b into … #7

Merge branch 'contents' of https://github.com/Genentech/phase1b into …

Merge branch 'contents' of https://github.com/Genentech/phase1b into … #7

---
name: R CMD Check 🧬
on:
push:
tags:
- "v*"
branches:
- main
- pre-release
pull_request:
types:
- opened
- synchronize
- reopened
- ready_for_review
branches:
- main
- pre-release
workflow_dispatch:
workflow_call:
secrets:
GITHUB_TOKEN:

Check failure on line 23 in .github/workflows/build-check-install.yaml

View workflow run for this annotation

GitHub Actions / .github/workflows/build-check-install.yaml

Invalid workflow file

secret name `GITHUB_TOKEN` within `workflow_call` can not be used since it would collide with system reserved name
description: |
Github token with read access to repositories, required for staged.dependencies installation
required: false
inputs:
install-system-dependencies:
description: Check for and install system dependencies
required: false
default: false
type: boolean
enable-staged-dependencies-check:
description: Enable staged dependencies YAML check
required: false
default: true
type: boolean
R_CHECK_FORCE_SUGGESTS:
description: If true, give an error if suggested packages are not available
required: false
default: true
type: boolean
skip-r-cmd-check:
description: Skip the R CMD check step in this workflow
required: false
default: false
type: boolean
skip-r-cmd-install:
description: Skip the R CMD INSTALL step in this workflow
required: false
default: false
type: boolean
check-note-blocklist:
description: Whether to check for NOTEs that should cause the pipeline to fail
required: false
default: false
type: boolean
note-blocklist:
description: List of regular expressions appearing in NOTEs that should cause the pipeline to fail
# Example usage:
# note-blocklist: |
# checking package dependencies ... NOTE( )+Depends: includes the non-default packages
# checking R code for possible problems ... NOTE( )+.*: no visible global function definition for
# checking for unstated dependencies in vignettes ... NOTE( )+\'.*\' import not declared from
# checking dependencies in R code ... NOTE( )+Namespace in Imports field not imported from
# checking installed package size ... NOTE( )+installed size is
required: false
default: ""
type: string
concurrency:
group: r-cmd-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build-install-check:
strategy:
fail-fast: false
matrix:
config:
- image: ghcr.io/insightsengineering/rstudio_4.2.1_bioc_3.15
tag: latest
name: ${{ matrix.config.image }}, version ${{ matrix.config.tag }}
runs-on: ubuntu-latest
if: >
!contains(github.event.commits[0].message, '[skip r-cmd]')
&& github.event.pull_request.draft == false
container:
image: ${{ matrix.config.image }}:${{ matrix.config.tag }}
steps:
- name: Get branch names 🌿
id: branch-name
uses: tj-actions/branch-names@v5
- name: Checkout repo πŸ›Ž
uses: actions/checkout@v3
with:
ref: ${{ steps.branch-name.outputs.head_ref_branch }}
path: ${{ github.event.repository.name }}
- name: Run Staged dependencies 🎦
uses: insightsengineering/staged-dependencies-action@v1
with:
run-system-dependencies: ${{ inputs.install-system-dependencies }}
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
SD_REPO_PATH: ${{ github.event.repository.name }}
SD_ENABLE_CHECK: ${{ inputs.enable-staged-dependencies-check }}
- name: Show session info and installed packages β„Ή
run: |
sessionInfo()
as.data.frame(installed.packages()[, c("LibPath", "Version")])
shell: Rscript {0}
- name: Build R package πŸ—
run: |
R CMD build ${{ github.event.repository.name }}
echo "PKGBUILD=$(echo *.tar.gz)" >> $GITHUB_ENV
shell: bash
- name: Set TESTING_DEPTH βš™
env:
COMMIT_NEWEST_MESSAGE: ${{ github.event.head_commit.message }}
COMMIT_OLDEST_MESSAGE: ${{ github.event.commits[0].message }}
run: |
cd ${{ github.event.repository.name }}
# set TESTING_DEPTH for PR
if [[ ! -z "${GITHUB_HEAD_REF}" ]]; then
TESTING_DEPTH=3
echo "TESTING_DEPTH=3" >> $GITHUB_ENV
COMMIT_NEWEST_MESSAGE=$(git log --format=%B -n 1 ${{ github.event.after }})
fi
if [[ $COMMIT_NEWEST_MESSAGE == *"[skip tests]"* ]]; then
echo "NO_TESTS=1" >> $GITHUB_ENV
fi
# default TESTING_DEPTH
if [[ -z "${TESTING_DEPTH}" ]]; then
echo "TESTING_DEPTH=1" >> $GITHUB_ENV
fi
shell: bash
- name: Run R CMD check 🏁
run: |
if [ "${{ inputs.skip-r-cmd-check }}" == "true" ]
then {
echo "Skipping R CMD check as 'skip-r-cmd-check' was set to 'true'"
exit 0
}
fi
if [ "${{ inputs.R_CHECK_FORCE_SUGGESTS }}" == "" ]
then {
_R_CHECK_FORCE_SUGGESTS_="FALSE"
}
fi
if [[ -z "${{ env.NO_TESTS }}" ]]; then
R CMD check ${{ env.PKGBUILD }}
else
R CMD check --no-tests ${{ env.PKGBUILD }}
fi
shell: bash
continue-on-error: true
env:
_R_CHECK_TESTS_NLINES_: 0
_R_CHECK_VIGNETTES_NLINES_: 0
_R_CHECK_FORCE_SUGGESTS_: ${{ inputs.R_CHECK_FORCE_SUGGESTS }}
- name: Check whether JUnit XML report exists 🚦
id: check-junit-xml
uses: andstor/file-existence-action@v1
with:
files: "${{ github.event.repository.name }}.Rcheck/tests/testthat/junit-result.xml"
- name: Publish Unit Test Summary πŸ“‘
uses: EnricoMi/publish-unit-test-result-action@v1
if: steps.check-junit-xml.outputs.files_exists == 'true' && github.event_name == 'pull_request'
with:
check_name: Unit Tests Summary
files: "${{ github.event.repository.name }}.Rcheck/tests/testthat/junit-result.xml"
- name: Catch warnings in R CMD check output πŸ—³
id: catch-errors
run: |
check_log <- "${{ github.event.repository.name }}.Rcheck/00check.log"
if (file.exists(check_log)) {
x <- tail(readLines(check_log), 1)
if (grepl("ERROR", x)) {
writeLines(readLines(check_log))
stop("❌ R CMD check has errors")
}
if (grepl("WARNING", x)) {
writeLines(readLines(check_log))
stop("⚠ R CMD check has warnings")
}
if ("${{ inputs.check-note-blocklist }}" == "true") {
print("Checking notes...")
regexes <- "${{ inputs.note-blocklist }}"
regexes <- unlist(strsplit(regexes, split = "\n"))
lines <- paste(readLines(check_log), collapse = " ")
notes_result <- vapply(
regexes,
function(r){
if (grepl(r, lines)) {
print(r)
return(TRUE)
}
return(FALSE)
},
logical(1)
)
if (any(notes_result)) {
stop("NOTEs on the blocklist were found (see above).")
}
}
}
shell: Rscript {0}
- name: Install R package 🚧
run: |
if [ "${{ inputs.skip-r-cmd-install }}" == "true" ]
then {
echo "Skipping R CMD INSTALL as 'skip-r-cmd-install' was set to 'true'"
exit 0
}
fi
R CMD INSTALL ${{ env.PKGBUILD }}
shell: bash
- name: Upload package build ‴
if: startsWith(github.ref, 'refs/tags/v')
uses: actions/upload-artifact@v3
with:
path: ${{ env.PKGBUILD }}
name: ${{ env.PKGBUILD }}
upload-release-assets:
name: Upload build tar.gz
needs: build-install-check
runs-on: ubuntu-latest
if: >
startsWith(github.ref, 'refs/tags/v')
&& (!contains(github.event.commits[0].message, '[skip r-cmd]'))
&& github.event.pull_request.draft == false
steps:
- name: Checkout repo πŸ›Ž
uses: actions/checkout@v3
- name: Set release version and package build filename πŸ“
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/v}" >> $GITHUB_ENV
- name: Get package build filename πŸ“¦
run: echo "PKGBUILD=${{ github.event.repository.name }}_${{ env.RELEASE_VERSION }}.tar.gz" >> $GITHUB_ENV
- name: Download artifact ⏬
uses: actions/download-artifact@v3
with:
name: ${{ env.PKGBUILD }}
- name: Upload binaries to release πŸ”Ό
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ env.PKGBUILD }}
asset_name: ${{ env.PKGBUILD }}
tag: ${{ github.ref }}
overwrite: true