618 templates action (#145) #72
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: | |
workflow_dispatch: | |
workflow_call: | |
inputs: | |
r-version: | |
description: 'The version of R to use' | |
default: '4.1' | |
required: false | |
type: string | |
skip-multiversion-docs: | |
description: 'Skip creation of multi-version docs' | |
default: false | |
required: false | |
type: boolean | |
multiversion-docs-landing-page: | |
description: 'Ref to use for the multiversion docs landing page' | |
default: main | |
required: false | |
type: string | |
latest-tag-alt-name: | |
description: "An alternate name to use for 'latest-tag' for multiversion pkgdown docs" | |
default: "" | |
required: false | |
type: string | |
branches-or-tags-to-list: | |
description: | | |
Which branches or tags should be listed under the | |
'Versions' dropdown menu on the landing page? | |
This input should be a regular expression in R. | |
required: false | |
default: >- | |
^main$|^devel$|^pre-release$|^latest-tag$|^cran-release$|^develop$|^v([0-9]+\\.)?([0-9]+\\.)?([0-9]+)$ | |
type: string | |
push: | |
branches: | |
- main | |
- devel | |
- pre-release | |
name: Documentation | |
concurrency: | |
group: pkgdown-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
get_r_version: | |
name: Get R version | |
runs-on: ubuntu-latest | |
if: > | |
!contains(github.event.commits[0].message, '[skip docs]') | |
outputs: | |
r-version: ${{ steps.normalizer.outputs.R_VERSION }} | |
steps: | |
- name: Normalize inputs | |
id: normalizer | |
run: | | |
R_VERSION="${{ inputs.r-version }}" | |
if [ "$R_VERSION" == "" ] | |
then { | |
R_VERSION="4.1" | |
} | |
fi | |
echo "R_VERSION=$R_VERSION" >> $GITHUB_OUTPUT | |
shell: bash | |
pkgdown: | |
name: pkgdown | |
runs-on: ubuntu-latest | |
container: | |
image: "ghcr.io/pharmaverse/admiralci-${{ needs.get_r_version.outputs.r-version }}:latest" | |
env: | |
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} | |
if: > | |
!contains(github.event.commits[0].message, '[skip docs]') | |
needs: get_r_version | |
steps: | |
##################### BEGIN boilerplate steps ##################### | |
- name: Get branch names | |
id: branch-name | |
uses: tj-actions/[email protected] | |
- name: Checkout repo (PR) 🛎 | |
uses: actions/checkout@v3 | |
if: github.event_name == 'pull_request' | |
with: | |
ref: ${{ steps.branch-name.outputs.head_ref_branch }} | |
repository: ${{ github.event.pull_request.head.repo.full_name }} | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
if: github.event_name != 'pull_request' | |
with: | |
ref: ${{ steps.branch-name.outputs.head_ref_branch }} | |
# https://github.com/actions/runner/issues/2033 | |
- name: Set-up safe dir | |
run: | | |
echo "${PWD}" | |
git config --global --add safe.directory "${GITHUB_WORKSPACE}" | |
shell: bash | |
- name: Normalize inputs | |
id: normalizer | |
run: | | |
function normalize() { | |
local var=$1 | |
if [ "$var" == "" ] | |
then { | |
var=$2 | |
} | |
fi | |
echo ${var} | |
} | |
R_VERSION=$(normalize ${{ inputs.r-version }} 4.1) | |
DOCS_LANDING_PAGE=$(normalize ${{ inputs.multiversion-docs-landing-page }} main) | |
echo "R_VERSION=$R_VERSION" >> $GITHUB_OUTPUT | |
echo "DOCS_LANDING_PAGE=$DOCS_LANDING_PAGE" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Restore cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.staged.dependencies | |
key: staged-deps | |
- name: Setup pandoc | |
uses: r-lib/actions/setup-pandoc@v2 | |
- name: Run Staged dependencies | |
uses: insightsengineering/staged-dependencies-action@v1 | |
with: | |
run-system-dependencies: false | |
renv-restore: false | |
enable-check: false | |
env: | |
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} | |
##################### END boilerplate steps ##################### | |
- name: Install package | |
run: renv::install(".", dependencies = "no-deps") | |
shell: Rscript {0} | |
- name: Publish documentation | |
run: | | |
git config --local user.email "[email protected]" | |
git config --local user.name "GitHub Actions" | |
SUBDIR_OPTION="" | |
if [ "${{ inputs.skip-multiversion-docs }}" != "true" ] | |
then { | |
SUBDIR_OPTION="subdir = \"${GITHUB_REF##*/}\"," | |
} | |
fi | |
Rscript - <<EOF | |
pkgdown_env <- asNamespace("pkgdown") | |
rlang::env_unlock(env = pkgdown_env) | |
rlang::env_binding_unlock(env = pkgdown_env) | |
pkgdown_env\$call_hook <- function(hook_name, ...) { | |
hooks <- getHook(paste0("UserHook::admiralci::", hook_name)) | |
if (!is.list(hooks)) { | |
hooks <- list(hooks) | |
} | |
purrr::map(hooks, function(fun) { | |
fun(...) | |
}) %>% | |
invisible() | |
} | |
environment(pkgdown_env\$call_hook) <- pkgdown_env | |
tweak_page <- body(pkgdown_env\$tweak_page) | |
body(pkgdown_env\$tweak_page) <- | |
as.call( | |
append( | |
as.list(tweak_page), | |
expression(call_hook("tweak_page", html, name, pkg)), | |
after=length(tweak_page) | |
) | |
) | |
rlang::env_binding_lock(env = pkgdown_env) | |
rlang::env_lock(pkgdown_env) | |
require(desc::desc_get("Package"), character.only = TRUE) | |
pkgdown::deploy_to_branch( | |
new_process = FALSE, | |
${SUBDIR_OPTION} | |
clean = TRUE | |
) | |
EOF | |
multi-version-docs: | |
name: Multi-version docs | |
needs: pkgdown | |
runs-on: ubuntu-latest | |
if: > | |
!inputs.skip-multiversion-docs && | |
!contains(github.event.commits[0].message, '[skip docs]') | |
steps: | |
- name: Checkout repo | |
uses: actions/checkout@v3 | |
with: | |
path: ${{ github.event.repository.name }} | |
ref: "gh-pages" | |
- name: Normalize inputs | |
id: normalizer | |
run: | | |
function normalize() { | |
local var=$1 | |
if [ "$var" == "" ] | |
then { | |
var=$2 | |
} | |
fi | |
echo ${var} | |
} | |
DOCS_LANDING_PAGE=$(normalize ${{ inputs.multiversion-docs-landing-page }} main) | |
echo "DOCS_LANDING_PAGE=$DOCS_LANDING_PAGE" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Create and publish docs | |
uses: insightsengineering/r-pkgdown-multiversion@v2 | |
with: | |
path: ${{ github.event.repository.name }} | |
default-landing-page: "${{ steps.normalizer.outputs.DOCS_LANDING_PAGE }}" | |
latest-tag-alt-name: "${{ inputs.latest-tag-alt-name }}" | |
branches-or-tags-to-list: ${{ inputs.branches-or-tags-to-list }} |