Skip to content

Merge branch 'V2310' #71

Merge branch 'V2310'

Merge branch 'V2310' #71

Workflow file for this run

name: build
on:
push:
branches-ignore:
- gh-pages
jobs:
rmd-render-job:
strategy:
fail-fast: false
matrix:
config:
- {os: ubuntu-20.04, r: '4.2'}
runs-on: ${{ matrix.config.os }}
steps:
- name: Set time zone
uses: szenius/[email protected]
with:
timezoneLinux: "Europe/Stockholm"
timezoneMacos: "Europe/Stockholm"
timezoneWindows: "W. Europe Standard Time"
- uses: actions/checkout@v3
- uses: r-lib/actions/setup-r@v2
with:
r-version: ${{ matrix.config.r }}
- uses: r-lib/actions/setup-pandoc@v2
- name: Install linux dependencies
run: |
sudo apt-get update
sudo apt-get install libxml2-dev libssl-dev libcurl4-openssl-dev libudunits2-dev libopenblas-base libgdal-dev libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev libfontconfig1-dev libharfbuzz-dev libfribidi-dev
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install ./google-chrome-stable_current_amd64.deb
rm -rf google-chrome-stable_current_amd64.deb
- name: Define variables
run: |
echo "path_repo=$(pwd)" >> $GITHUB_ENV
echo "path_export=$(grep -E '^output_dir' _site.yml | sed 's/^output_dir://' | xargs)" >> $GITHUB_ENV
echo "path_export_canvas=$(grep -E '^output_dir' _site.yml | sed 's/^output_dir://' | xargs)-canvas" >> $GITHUB_ENV
echo "repo=$(echo $GITHUB_REPOSITORY | sed 's/.*\///')" >> $GITHUB_ENV
- name: Check R installation and variables
run: |
Rscript -e "print('R installation works!')"
echo "Github actor: ${GITHUB_ACTOR}"
echo "Github repository: ${GITHUB_REPOSITORY}"
echo "Github repo: ${repo}"
echo "Path repo: ${path_repo}"
echo "Path export: ${path_export}"
echo "Path export canvas: ${path_export_canvas}"
echo "---------------------------------------------------------------------------------------------"
echo "Folder contents at $(pwd):"
ls -lh
echo "---------------------------------------------------------------------------------------------"
printenv
sed --version
- name: Print R packages
run: |
# parse r packages from Rmd and md files
# grep -Eroh "(^library\([A-Za-z0-9]+\))|(^require\([A-Za-z0-9]+\))" *md | sed 's/library\|(\|)//g' | sort | uniq > r-packages.txt
# parse r packages from _site.yml
awk '/^[^ ]/{ f=/^packages:/; next } f{ if (sub(/:$/,"")) pkg=$2; else print pkg, $2 }' _site.yml | uniq | sort > r-packages.txt
cat r-packages.txt
- name: Cache R packages
id: cache-rp
uses: actions/cache@v3
with:
path: ${{ env.R_LIBS_USER }}
key: ${{ runner.os }}-${{ matrix.config.r }}-${{ hashFiles('r-packages.txt') }}
- name: Install R dependencies
if: steps.cache-rp.outputs.cache-hit != 'true'
env:
GITHUB_PAT: ${{ secrets.PAT }}
run: |
Rscript -e 'install.packages(c("yaml","pagedown"))'
Rscript -e 'if(!is.null(yaml::read_yaml("_site.yml")$packages$packages_cran_repo)) install.packages(yaml::read_yaml("_site.yml")$packages$packages_cran_repo)'
Rscript -e 'if(!is.null(yaml::read_yaml("_site.yml")$packages$packages_cran_student)) install.packages(yaml::read_yaml("_site.yml")$packages$packages_cran_student)'
Rscript -e 'if(!is.null(yaml::read_yaml("_site.yml")$packages$packages_bioc_repo)) BiocManager::install(as.character(yaml::read_yaml("_site.yml")$packages$packages_bioc_repo))'
Rscript -e 'if(!is.null(yaml::read_yaml("_site.yml")$packages$packages_bioc_student)) BiocManager::install(as.character(yaml::read_yaml("_site.yml")$packages$packages_bioc_student))'
Rscript -e 'if(!is.null(yaml::read_yaml("_site.yml")$packages$packages_github_repo)) remotes::install_github(yaml::read_yaml("_site.yml")$packages$packages_github_repo)'
Rscript -e 'if(!is.null(yaml::read_yaml("_site.yml")$packages$packages_github_student)) remotes::install_github(yaml::read_yaml("_site.yml")$packages$packages_github_student)'
Rscript -e 'rownames(installed.packages())'
echo "R directory size:"
du -sh ${{ env.R_LIBS_USER }}
- name: Render site, pull repo, copy folder, create index, push repo
run: |
# Add git info
git config --global user.email "[email protected]"
git config --global user.name "gh_action"
# Render website
echo "Rendering Rmd files ..."
Rscript -e "rmarkdown::render_site()"
# Render canvas version of website by changing _site.yml
# suffixes output directory with -canvas
# adds current output directory to be ignored
# renames navbar block to remove menu
# removes footer
#sed 's/\(output_dir:\)\s*\([0-9]*\)/\1 \2-canvas/' _site.yml | \
#sed "/^exclude/s/\]$/,\"${path_export}\"]/" | \
#sed 's/navbar:/unused:/' | \
#sed 's/include://' | \
#sed 's/after_body: assets\/footer-lab.html//' > _site.yml
echo "Removing lab and slide links from schedule for canvas ..."
Rscript -e 'x <- read.csv("schedule.csv",sep=";",header=T,stringsAsFactors=F);x$link_youtube <- x$link_lab <- x$link_slide <- NA;write.table(x,"schedule.csv",sep=";",col.names=T,row.names=F,quote=FALSE,na="")'
echo "Fixing _site.yml for canvas ..."
Rscript -e 'y <- yaml::read_yaml("_site.yml"); y$exclude <- append(y$exclude,y$output_dir); y$output_dir <- paste0(y$output_dir,"-canvas"); y$navbar <- NULL; yaml::write_yaml(y,"_site.yml");'
ls -lh
cat _site.yml
echo "Rendering Rmd files for canvas ..."
Rscript -e "rmarkdown::render_site()"
# Modify links and generate PDFs
cd ${path_export}
Rscript -e "l <- list.files('.',pattern='slide.+html');if(length(l)!=0) {for(i in 1:length(l)) pagedown::chrome_print(l[i])};"
cd ..
cd ${path_export_canvas}
# all links (except those starting with #) in all html files are set to open in new tab
# all links (those pointing within website and ends with html) in all html files are removed
# display links to be fixed
echo "Number of links to be corrected:"
grep -E '(<a href="[^#][^(https?)&^(www)?].+html.*">)([^(a>).]+)(<\/a>)' *.html | \
grep -E '(<a href="[^#][-a-zA-Z0-9@:%._\+~#=/?&]+")(>)' | wc -l
echo "List of links to be corrected:"
grep -E '(<a href="[^#][^(https?)&^(www)?].+html.*">)([^(a>).]+)(<\/a>)' *.html | \
grep -E '(<a href="[^#][-a-zA-Z0-9@:%._\+~#=/?&]+")(>)'
echo "Fixing bad links ..."
for i in *.html; do
sed -E 's/<h1 class="title toc-ignore">[^>.]*<\/h1>//g' $i | \
sed -E 's/<h3 class="subtitle">[^>.]*<\/h3>//g' | \
sed -E 's/<h4 class="author">[^>.]*<\/h4>//g' | \
sed -E 's/(<a href="[^#][^(https?)&^(www)?].+(html|pdf).*">)([^(a>).]+)(<\/a>)/[link removed]/g' | \
sed -E 's/(<a href="[^#][-a-zA-Z0-9@:%._\+~#=/?&]+")(>)/\1 target="_blank">/g' > temp
cat temp > $i
rm -rf temp
done
echo "Generating PDFs for HTML slides ..."
Rscript -e "l <- list.files('.',pattern='slide.+html');if(length(l)!=0) {for(i in 1:length(l)) pagedown::chrome_print(l[i])};"
cd ..
# List folder contents
echo "Folder contents at $(pwd):"
ls -lh
echo "Folder contents at ${path_repo}/${path_export}:"
ls -lh ${path_repo}/${path_export}
echo "Folder contents at ${path_repo}/${path_export_canvas}:"
ls -lh ${path_repo}/${path_export_canvas}
# Clone gh-pages branch and remove old directories with same name
git clone --single-branch --branch gh-pages "https://${{ secrets.TOKEN }}@github.com/${GITHUB_REPOSITORY}.git" tmprepo
cd tmprepo
if [ -d $path_export ]; then
echo "Directory ${path_export} already exists. Removing the directory."
git rm -r $path_export
git commit -m "Old directory ${path_export} deleted."
fi
if [ -d $path_export_canvas ]; then
echo "Directory ${path_export_canvas} already exists. Removing the directory."
git rm -r $path_export_canvas
git commit -m "Old directory ${path_export_canvas} deleted."
fi
cd ${path_repo}
cp -r $path_export tmprepo/
cp -r $path_export_canvas tmprepo/
cd tmprepo
echo "Folder contents at $(pwd):"
ls -lh
# Create index file
echo "Full repo: ${GITHUB_REPOSITORY}"
str_user=$(dirname ${GITHUB_REPOSITORY})
echo "User: $str_user"
repo=$(basename ${GITHUB_REPOSITORY})
echo "Repo: $repo"
# create index file
printf "<div class='wrapper-logo'><img class='logo' src='assets/logo.svg'></div>" > index.md
printf "The current and all previous instances of this workshop are listed below.\n" >> index.md
printf "<hr>\n" >> index.md
printf "<div class='workshop-list'>\n" >> index.md
dirs=$(ls -d [0-9]*[0-9]/ | sed 's/\///' | tac)
for i in ${dirs[@]}
do
if [ ${i:2:2} -lt 1 ] || [ ${i:2:2} -gt 12 ]
then echo "Month: ${i:2:2}. Last 2 values in output_dir must be a month between 01 and 12."
fi
# This code works for year 2000 and later
printf -v thedate '2000-01-01 +%s years +%s months -1 day' "${i:0:2}" "${i:2}"
dt=$(date -d "$thedate" +'%Y %b')
echo $dt
printf "<h3><a href='https://${GITHUB_REPOSITORY_OWNER}.github.io/${repo}/${i}/'>$dt</a></h3>" >> index.md
done
printf "</div>\n" >> index.md
# printf "<hr>\n" >> index.md
# printf "$(date +'%Y') • NBIS\n" >> index.md
echo "Folder contents at $(pwd):"
ls -lh
# Push changes back
git add .
git commit -m "Updated contents at $(date +%Y%m%d-%H%M%S)"
git push origin