Develop #680
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: | |
branches: | |
- master | |
- testing | |
- develop | |
pull_request: | |
branches: | |
- master | |
- testing | |
- develop | |
name: R-CMD-check | |
jobs: | |
R-CMD-check: | |
# 0. Define the systems to run on: | |
runs-on: ${{ matrix.config.os }} | |
name: ${{ matrix.config.os }} (${{ matrix.config.r }}) | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
# Latest macOS will use the big-sur-arm64 folder when deploying to the drat repo: | |
- {os: macOS-latest, r: 'release', pkgext: '.tgz'} | |
- {os: macOS-latest, r: '4.3', pkgext: '.tgz'} | |
# macOS-13 will use the big-sur-x86_64 folder when deploying to the drat repo: | |
- {os: macOS-13, r: 'release', pkgext: '.tgz'} | |
- {os: macOS-13, r: '4.3', pkgext: '.tgz'} | |
- {os: windows-latest, r: 'release', pkgext: '.zip'} | |
- {os: windows-latest, r: '4.3', pkgext: '.zip'} | |
- {os: ubuntu-latest, r: 'release', pkgext: '.tar.gz', rspm: "https://cloud.r-project.org"} | |
- {os: ubuntu-22.04, r: '4.3', pkgext: '.tar.gz', rspm: "https://cloud.r-project.org"} | |
- {os: ubuntu-22.04, r: '4.2', pkgext: '.tar.gz', rspm: "https://cloud.r-project.org"} | |
env: | |
R_REMOTES_NO_ERRORS_FROM_WARNINGS: true | |
RSPM: ${{ matrix.config.rspm }} | |
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
################### | |
#### 1. Setup: #### | |
################### | |
- uses: actions/checkout@v3 | |
- name: Prepare for deployment at push | |
if: github.event_name == 'push' | |
run: | | |
curl "https://raw.githubusercontent.com/StoXProject/unstableRepo/main/scripts/checktag-actions.sh" --output unstableRepo_checktag.sh | |
curl "https://raw.githubusercontent.com/StoXProject/unstableRepo/main/scripts/deploy-actions.sh" --output unstableRepo_deploy.sh | |
chmod +x ./unstableRepo_checktag.sh ./unstableRepo_deploy.sh | |
. unstableRepo_checktag.sh | |
curl "https://raw.githubusercontent.com/StoXProject/testingRepo/main/scripts/checktag-actions.sh" --output testingRepo_checktag.sh | |
curl "https://raw.githubusercontent.com/StoXProject/testingRepo/main/scripts/deploy-actions.sh" --output testingRepo_deploy.sh | |
chmod +x ./testingRepo_checktag.sh ./testingRepo_deploy.sh | |
. testingRepo_checktag.sh | |
curl "https://raw.githubusercontent.com/StoXProject/repo/master/scripts/checktag-actions.sh" --output repo_checktag.sh | |
curl "https://raw.githubusercontent.com/StoXProject/repo/master/scripts/deploy-actions.sh" --output repo_deploy.sh | |
chmod +x ./repo_checktag.sh ./repo_deploy.sh | |
. repo_checktag.sh | |
echo "PRERELEASE=${PRERELEASE}" >> $GITHUB_ENV | |
echo "FINAL_TAG=${FINAL_TAG}" >> $GITHUB_ENV | |
echo "PKG_FILE_PREFIX=${PKG_FILE_PREFIX}" >> $GITHUB_ENV | |
echo "PKG_FILE=${PKG_FILE_PREFIX}${{ matrix.config.pkgext }}" >> $GITHUB_ENV | |
echo "PKG_FREL=${PKG_FILE_PREFIX}-R.${{ matrix.config.r }}-${{ runner.os }}${{ matrix.config.pkgext }}" >> $GITHUB_ENV | |
echo "PKG_REPO=${GITHUB_WORKSPACE}" >> $GITHUB_ENV | |
shell: bash | |
- uses: r-lib/actions/setup-r@v2 | |
with: | |
r-version: ${{ matrix.config.r }} | |
- uses: r-lib/actions/setup-pandoc@v2 | |
############################################################################# | |
#### 2. R package installation (with system and R package dependencies): #### | |
############################################################################# | |
## 2a. Cache R packages: | |
#- name: Query R package dependencies | |
# run: | | |
# install.packages('remotes') | |
# saveRDS(remotes::dev_package_deps(dependencies = TRUE), "depends.Rds", version = 2) | |
# writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") | |
# shell: Rscript {0} | |
#- name: Cache R packages | |
# if: runner.os != 'Windows' | |
# uses: actions/cache@v3 | |
# with: | |
# path: ${{ env.R_LIBS_USER }} | |
# key: ${{ env.cache-version }}-${{ runner.os }}-r-${{ matrix.config.r }}-${{ hashFiles('depends.Rds') }} | |
# restore-keys: ${{ env.cache-version }}-${{ runner.os }}-r-${{ matrix.config.r }}- | |
## 2b. System dependencies: | |
- name: Install system dependencies on macOS | |
if: runner.os == 'macOS' | |
run: | | |
# gfortran may not exist in a period after a new R minor release: | |
gfortranFile='/usr/local/bin/gfortran' | |
if [ -f "$gfortranFile" ] ; then | |
rm "$gfortranFile" | |
fi | |
rm '/usr/local/bin/2to3' | |
rm '/usr/local/bin/2to3-3.11' | |
rm '/usr/local/bin/idle3.11' | |
rm '/usr/local/bin/idle3' | |
rm '/usr/local/bin/pydoc3' | |
rm '/usr/local/bin/python3' | |
rm '/usr/local/bin/python3-config' | |
rm '/usr/local/bin/pydoc3.11' | |
rm '/usr/local/bin/python3.11' | |
rm '/usr/local/bin/python3.11-config' | |
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=false # This prevents Homebrew from re-installing R, which will lead to .Platform$pkgType = "source". | |
brew install gdal udunits | |
shell: bash | |
- name: Install system dependencies on Linux | |
if: runner.os == 'Linux' | |
run: | | |
while read -r cmd | |
do | |
eval sudo $cmd | |
done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "20.04"))') | |
- name: Prepare for CRANdependencies on Linux | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get install -y libcurl4-openssl-dev | |
sudo apt-get install -y libudunits2-dev | |
shell: bash | |
## 2c. R packages needed for this yaml script (not related to the Rstox package itself): | |
- name: Install CRANdependencies | |
run: | | |
install.packages(c("rcmdcheck", "git2r", "sessioninfo", "knitr", "remotes")) | |
# Using the latest drat that supports big sur (after inputs from us). | |
# When the next drat appears on CRAN this can be changed to install from CRAN: | |
remotes::install_github(repo = 'eddelbuettel/drat', dependencies = FALSE) | |
shell: Rscript {0} | |
## 2d. Install dependencies: | |
- name: Install R package dependencies | |
run: | | |
remotes::install_deps(dependencies = TRUE, repos = "https://cloud.r-project.org/") | |
shell: Rscript {0} | |
## 2e. Session info: | |
- name: Session info | |
run: | | |
options(width = 100) | |
pkgs <- installed.packages()[, "Package"] | |
sessioninfo::session_info(pkgs, include_base = TRUE) | |
shell: Rscript {0} | |
## 2f. Additional installs to secure specific versions to patch incompatibilities with older R versions: | |
- name: Additional installs to secure specific versions | |
run: | | |
pkgs <- installed.packages()[, "Package"] | |
s <- sessioninfo::session_info(pkgs, include_base = TRUE) | |
onlyStringi <- subset(s$packages, package == "stringi") | |
if("stringi" %in% as.data.frame(s$packages)$package && is.na(subset(s$packages, package == "stringi")$ondiskversion)) { | |
remotes::install_github("gagolews/stringi") | |
} | |
shell: Rscript {0} | |
##################################### | |
#### 3. Check the Rstox package: #### | |
##################################### | |
- name: Check | |
env: | |
_R_CHECK_CRAN_INCOMING_: false | |
run: rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "warning", check_dir = "check") | |
shell: Rscript {0} | |
- name: Upload check results | |
if: failure() | |
uses: actions/upload-artifact@main | |
with: | |
name: ${{ runner.os }}-r${{ matrix.config.r }}-results | |
path: check | |
####################################################### | |
#### 4. Build the package source and binary files: #### | |
####################################################### | |
- name: Build package source archive from branches develop, testing and master (on Linux for some reason) | |
if: runner.os == 'Linux' && matrix.config.r == 'release' && github.event_name == 'push' && (github.ref_name == 'master' || github.ref_name == 'testing' || github.ref_name == 'develop') | |
run: | | |
pkgbuild::build(".", dest_path = ".", binary = FALSE) | |
system(paste0("PKG_FREL=", Sys.getenv("PKG_FILE"), " >> ", Sys.getenv("GITHUB_ENV"))) | |
shell: Rscript {0} | |
- name: Build package binary archive from branches develop, testing and master for Windows and macOS (this builds also on matrix.config.r = release, which can or can not be a duplicate) | |
if: (runner.os == 'Windows' || runner.os == 'macOS') && github.event_name == 'push' && (github.ref_name == 'master' || github.ref_name == 'testing' || github.ref_name == 'develop') | |
run: | | |
pkgbuild::build(".", dest_path = ".", binary = TRUE) | |
print("PKG_FILE") | |
print(Sys.getenv("PKG_FILE")) | |
print("PKG_FREL") | |
print(Sys.getenv("PKG_FREL")) | |
file.copy(Sys.getenv("PKG_FILE"), Sys.getenv("PKG_FREL")) | |
shell: Rscript {0} | |
###################################### | |
#### 5. Deploy to the drat repos: #### | |
###################################### | |
## 5a. Upload to the official (DRAT) repo, but only from the master branch. Here we skip the matrix.config.r = release, as a new StoX release should be ready shortly after each R minor release and listed specifically in the matrix.config: | |
- name: Upload to the official (DRAT) repo | |
if: ( (runner.os == 'Windows' && matrix.config.r != 'release') || (runner.os == 'macOS' && matrix.config.r != 'release') || (runner.os == 'Linux' && matrix.config.r == 'release') ) && github.event_name == 'push' && github.ref_name == 'master' | |
env: | |
BUILD_NUMBER: ${{ github.sha }} | |
DRAT_DEPLOY_TOKEN: ${{ secrets.DRAT_DEPLOY_TOKEN }} | |
run: . repo_deploy.sh | |
shell: bash | |
## 5b. Upload to the (DRAT) testingRepo, but only from the testing branch. Here we skip the matrix.config.r = release, as a new StoX release should be ready shortly after each R minor release and listed specifically in the matrix.config: | |
- name: Upload to the testing (DRAT) repo | |
if: ( (runner.os == 'Windows' && matrix.config.r != 'release') || (runner.os == 'macOS' && matrix.config.r != 'release') || (runner.os == 'Linux' && matrix.config.r == 'release') ) && github.event_name == 'push' && github.ref_name == 'testing' | |
env: | |
BUILD_NUMBER: ${{ github.sha }} | |
DRAT_DEPLOY_TOKEN: ${{ secrets.DRAT_DEPLOY_TOKEN }} | |
run: . testingRepo_deploy.sh | |
shell: bash | |
## 5c. Upload to the (DRAT) unstableRepo, but only from the develop branch. Here we skip the matrix.config.r = release, as a new StoX release should be ready shortly after each R minor release and listed specifically in the matrix.config: | |
- name: Upload to the unstable (DRAT) repo | |
if: ( (runner.os == 'Windows' && matrix.config.r != 'release') || (runner.os == 'macOS' && matrix.config.r != 'release') || (runner.os == 'Linux' && matrix.config.r == 'release') ) && github.event_name == 'push' && github.ref_name == 'develop' | |
env: | |
BUILD_NUMBER: ${{ github.sha }} | |
DRAT_DEPLOY_TOKEN: ${{ secrets.DRAT_DEPLOY_TOKEN }} | |
run: . unstableRepo_deploy.sh | |
shell: bash | |
############################### | |
#### 6. Release on GitHub: #### | |
############################### | |
- name: Create release on GitHub and upload files for testing branch | |
if: ( (runner.os == 'Windows' && matrix.config.r != 'release') || (runner.os == 'macOS' && matrix.config.r != 'release') || (runner.os == 'Linux' && matrix.config.r == 'release') ) && github.event_name == 'push' && github.ref_name == 'testing' | |
uses: ncipollo/release-action@v1 | |
with: | |
allowUpdates: true | |
commit: testing | |
tag: ${{ env.FINAL_TAG }} | |
name: ${{ env.FINAL_TAG }} | |
artifacts: ${{ env.PKG_REPO }}/${{ env.PKG_FREL }} | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Create release on GitHub and upload files for master branch | |
if: ( (runner.os == 'Windows' && matrix.config.r != 'release') || (runner.os == 'macOS' && matrix.config.r != 'release') || (runner.os == 'Linux' && matrix.config.r == 'release') ) && github.event_name == 'push' && github.ref_name == 'master' | |
uses: ncipollo/release-action@v1 | |
with: | |
allowUpdates: true | |
commit: master | |
tag: ${{ env.FINAL_TAG }} | |
name: ${{ env.FINAL_TAG }} | |
artifacts: ${{ env.PKG_REPO }}/${{ env.PKG_FREL }} | |
token: ${{ secrets.GITHUB_TOKEN }} |