From a25b02bc9dff7a7cb1a52693c8f0a807a3c4bc79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daphn=C3=A9=20Grasselly?= <56442075+dgrassellyb@users.noreply.github.com> Date: Tue, 16 Jan 2024 14:11:22 +0100 Subject: [PATCH] Remove renv and use cran latest (#176) * add vignettes * add doc * use cran latest * temp comments * use tmp branch * fix * fix * fix * add supp packages * fix typo * update docker images * add needs * fix im name * update workflow to use latest im * fix * delete rprofile * fix deps name * add old release * add old release check * fix typo * fix release artifacts * update install deps script & lintr * fix link * fix link * rename latest image into release * Update push-docker-image.yml * install suggest deps * add step to install deps - r cmd check * add other r cmd check job * fix indent * fix * try p3m cran repo for devel * try another cran repo devel * update boilerplate steps with new deps, upload deps artifacts * add r_version to artifact * fix artifact name * trigger checks only on dispatch, generate renv.lock on artifacts * fix * fix * fix * fix * fix artifacts multiple paths * fix path * fix * retry * fix renv artifact names --------- Co-authored-by: pharmaverse-bot <113703390+pharmaverse-bot@users.noreply.github.com> Co-authored-by: cicdguy <26552821+cicdguy@users.noreply.github.com> --- .Rprofile | 47 - .github/workflows/check-r-tags.yml | 31 + .github/workflows/check-templates.yml | 15 +- .github/workflows/code-coverage.yml | 14 +- .github/workflows/lintr.yml | 9 +- .github/workflows/man-pages.yml | 15 +- .github/workflows/pkgdown.yml | 15 +- .github/workflows/propagate.yml | 187 --- .github/workflows/push-docker-image.yml | 116 +- .github/workflows/r-cmd-check.yml | 118 +- .github/workflows/r-pkg-validation.yml | 15 +- .github/workflows/r-renv-lock.yml | 193 --- .github/workflows/readme-render.yml | 15 +- .github/workflows/spellcheck.yml | 9 +- .github/workflows/style.yml | 9 +- .gitignore | 2 + .lintr | 2 +- README.Rmd | 5 - README.md | 6 - install_devel_deps.R | 16 +- renv.lock | 1701 --------------------- renv/.gitignore | 8 - renv/activate.R | 1181 --------------- renv/profiles/4.1/renv.lock | 1701 --------------------- renv/profiles/4.1/renv/.gitignore | 7 - renv/profiles/4.1/renv/settings.json | 24 - renv/profiles/4.2/renv.lock | 1785 ----------------------- renv/profiles/4.2/renv/.gitignore | 7 - renv/profiles/4.2/renv/settings.json | 24 - renv/profiles/4.3/renv.lock | 1785 ----------------------- renv/profiles/4.3/renv/.gitignore | 7 - renv/profiles/4.3/renv/settings.json | 24 - renv/settings.json | 24 - vignettes/check-templates.Rmd | 63 + vignettes/code-coverage.Rmd | 92 ++ vignettes/common_structure.Rmd | 82 ++ vignettes/cran-status.Rmd | 59 + vignettes/docker_and_codespaces.Rmd | 4 +- vignettes/get_started.Rmd | 101 ++ vignettes/links.Rmd | 50 + vignettes/lintr.Rmd | 73 + vignettes/lock_and_prop.Rmd | 2 +- vignettes/man-pages.Rmd | 59 + vignettes/pkgdown.Rmd | 39 + vignettes/propagate.Rmd | 67 + vignettes/push-docker.Rmd | 74 + vignettes/r-cmd-checks.Rmd | 70 + vignettes/readme-render.Rmd | 47 + vignettes/renv-lock.Rmd | 51 + vignettes/spellchecks.Rmd | 48 + vignettes/style.Rmd | 49 + vignettes/validation.Rmd | 52 + 52 files changed, 1345 insertions(+), 8854 deletions(-) delete mode 100644 .Rprofile create mode 100644 .github/workflows/check-r-tags.yml delete mode 100644 .github/workflows/propagate.yml delete mode 100644 .github/workflows/r-renv-lock.yml delete mode 100644 renv.lock delete mode 100644 renv/.gitignore delete mode 100644 renv/activate.R delete mode 100644 renv/profiles/4.1/renv.lock delete mode 100644 renv/profiles/4.1/renv/.gitignore delete mode 100644 renv/profiles/4.1/renv/settings.json delete mode 100644 renv/profiles/4.2/renv.lock delete mode 100644 renv/profiles/4.2/renv/.gitignore delete mode 100644 renv/profiles/4.2/renv/settings.json delete mode 100644 renv/profiles/4.3/renv.lock delete mode 100644 renv/profiles/4.3/renv/.gitignore delete mode 100644 renv/profiles/4.3/renv/settings.json delete mode 100644 renv/settings.json create mode 100644 vignettes/check-templates.Rmd create mode 100644 vignettes/code-coverage.Rmd create mode 100644 vignettes/common_structure.Rmd create mode 100644 vignettes/cran-status.Rmd create mode 100644 vignettes/get_started.Rmd create mode 100644 vignettes/links.Rmd create mode 100644 vignettes/lintr.Rmd create mode 100644 vignettes/man-pages.Rmd create mode 100644 vignettes/pkgdown.Rmd create mode 100644 vignettes/propagate.Rmd create mode 100644 vignettes/push-docker.Rmd create mode 100644 vignettes/r-cmd-checks.Rmd create mode 100644 vignettes/readme-render.Rmd create mode 100644 vignettes/renv-lock.Rmd create mode 100644 vignettes/spellchecks.Rmd create mode 100644 vignettes/style.Rmd create mode 100644 vignettes/validation.Rmd diff --git a/.Rprofile b/.Rprofile deleted file mode 100644 index 6d46e675..00000000 --- a/.Rprofile +++ /dev/null @@ -1,47 +0,0 @@ -# Set renv profile base on R version. -.get_dependencies <- function(project_dir) { - admdev_loc <- find.package("admiraldev", lib.loc = .libPaths(), quiet = TRUE) - adm_dev_suggests <- if (length(admdev_loc) != 0) { - renv:::renv_dependencies_discover_description(admdev_loc, fields = c("Depends", "Imports", "LinkingTo", "Suggests")) - } else { - data.frame(Packages = character(0)) - } - suggests_packages <- renv:::renv_dependencies_discover_description(project_dir, fields = "Suggests") - - packages <- names( - renv:::renv_package_dependencies( - unique(c( - project_dir, - adm_dev_suggests[["Package"]], - suggests_packages[["Package"]], - c("staged.dependencies", "renv", "styler") - )) - ) - ) - packages[!(packages %in% c("admiral", "admiraldev", "admiralci", "pharmaversesdtm", getwd()))] -} - -options(renv.snapshot.filter = .get_dependencies) - -.renv_profile <- paste(R.version$major, substr(R.version$minor, 1, 1), sep = ".") -if (!file.exists("./renv/profile")) { - if (.renv_profile %in% c("4.1", "4.2", "4.3")) { - message("Set renv profile to `", .renv_profile, "`") - Sys.setenv("RENV_PROFILE" = .renv_profile) - } else { - message("This repository do not contains the renv profile for your R version.") - } -} else { - message( - "Using renv profile from `renv/profile` file.\n", - "The `", readLines("./renv/profile"), "` profile will be used." - ) -} - -if (Sys.getenv("GITHUB_ACTIONS") != "") { - options(repos = c(CRAN = "https://packagemanager.posit.co/cran/latest")) - Sys.setenv("RENV_AUTOLOADER_ENABLED" = FALSE) -} -Sys.setenv("RENV_CONFIG_SANDBOX_ENABLED" = FALSE) -Sys.setenv("RENV_CONFIG_AUTO_SNAPSHOT" = FALSE) -source("renv/activate.R") diff --git a/.github/workflows/check-r-tags.yml b/.github/workflows/check-r-tags.yml new file mode 100644 index 00000000..4090c78b --- /dev/null +++ b/.github/workflows/check-r-tags.yml @@ -0,0 +1,31 @@ +--- +name: Check R tags + +on: + workflow_dispatch: # give possibility to run it manually + schedule: + - cron: '0 0 * * Sun' # Run every sunday at midnight UTC + +permissions: write-all +env: + REGISTRY: ghcr.io + R_REPOS: "https://cran.r-project.org" + OLD_RELEASE: "4.3" + +concurrency: + group: check-r-tags-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + check-r-release: + runs-on: ubuntu-latest + steps: + - name: List rocker/rstudio tags + run: | + versions=$(curl -s "https://registry.hub.docker.com/v2/repositories/rocker/rstudio/tags/" | grep -o '"name": *"[^"]*' | grep -o '[^"]*$') + r_version=$(echo "$versions" | grep -oE '^[0-9]+\.[0-9]+$' | sort -r | head -n 1) + if [ $r_version != "${{ env.OLD_RELEASE }}" ] + then + echo "NEW RELEASE DETECTED - please update OLD_RELEASE env variable to $r_version in the workflows (this one and push-docker-image)" + exit 1 + fi \ No newline at end of file diff --git a/.github/workflows/check-templates.yml b/.github/workflows/check-templates.yml index 5fc7a24b..30fd5e29 100644 --- a/.github/workflows/check-templates.yml +++ b/.github/workflows/check-templates.yml @@ -3,18 +3,17 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: choice options: - - '4.1' - - '4.2' - - '4.3' + - devel + - latest workflow_call: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: string @@ -111,6 +110,12 @@ jobs: renv-restore: false env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + - name: Install dependencies from DESCRIPTION + run: | + devtools::install(force = TRUE, dependencies = TRUE) + shell: Rscript {0} + ##################### END boilerplate steps ##################### - name: Install package diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml index d8d59bc1..06486639 100644 --- a/.github/workflows/code-coverage.yml +++ b/.github/workflows/code-coverage.yml @@ -3,13 +3,12 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: choice options: - - '4.1' - - '4.2' - - '4.3' + - devel + - latest skip-coverage-badges: description: 'Skip code coverage badge creation' default: false @@ -19,7 +18,7 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: string skip-coverage-badges: @@ -95,6 +94,11 @@ jobs: enable-check: false env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + - name: Install dependencies from DESCRIPTION + run: | + devtools::install(force = TRUE, dependencies = TRUE) + shell: Rscript {0} ##################### END boilerplate steps ##################### - name: Run coverage 👟 diff --git a/.github/workflows/lintr.yml b/.github/workflows/lintr.yml index 9ef028ad..6f355cb2 100644 --- a/.github/workflows/lintr.yml +++ b/.github/workflows/lintr.yml @@ -3,13 +3,12 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: choice options: - - '4.1' - - '4.2' - - '4.3' + - devel + - latest lint-all-files: description: 'Lint all files every time' default: 'false' @@ -29,7 +28,7 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: string lint-all-files: diff --git a/.github/workflows/man-pages.yml b/.github/workflows/man-pages.yml index d2356aff..7f0800e6 100644 --- a/.github/workflows/man-pages.yml +++ b/.github/workflows/man-pages.yml @@ -3,18 +3,17 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: choice options: - - '4.1' - - '4.2' - - '4.3' + - devel + - latest workflow_call: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: string @@ -80,6 +79,12 @@ jobs: enable-check: false env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + - name: Install dependencies from DESCRIPTION + run: | + devtools::install(force = TRUE, dependencies = TRUE) + shell: Rscript {0} + ##################### END boilerplate steps ##################### - name: Generate man pages diff --git a/.github/workflows/pkgdown.yml b/.github/workflows/pkgdown.yml index 69b99396..ff99e1da 100644 --- a/.github/workflows/pkgdown.yml +++ b/.github/workflows/pkgdown.yml @@ -3,13 +3,12 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: choice options: - - '4.1' - - '4.2' - - '4.3' + - devel + - latest skip-multiversion-docs: description: 'Skip creation of multi-version docs' default: false @@ -38,7 +37,7 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: string skip-multiversion-docs: @@ -148,6 +147,12 @@ jobs: enable-check: false env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + - name: Install dependencies from DESCRIPTION + run: | + devtools::install(force = TRUE, dependencies = TRUE) + shell: Rscript {0} + ##################### END boilerplate steps ##################### - name: Install package diff --git a/.github/workflows/propagate.yml b/.github/workflows/propagate.yml deleted file mode 100644 index ef04b288..00000000 --- a/.github/workflows/propagate.yml +++ /dev/null @@ -1,187 +0,0 @@ ---- -# This is a workflow that is specific to admiralci -# It's not inteded to be used by other projects - -name: Propagate renv.lock, Rprofile and .devcontainer files - -on: - pull_request: - branches: - - main - paths: - - renv.lock - - renv/** - - .Rprofile - - .devcontainer/* - workflow_dispatch: # give possibility to run it manually - -jobs: - integrity: - if: github.event.pull_request.draft == false - name: renv.lock integrity check - runs-on: ubuntu-latest - steps: - - name: Checkout repo - uses: actions/checkout@v3 - - - name: Get R version from renv.lock file - id: r-version - run: | - R_VERSION=$(cat renv.lock | jq -r '.R.Version' | grep -oE '^[0-9]+\.[0-9]+') - echo "R_VERSION=$R_VERSION" >> $GITHUB_OUTPUT - - - name: Setup R - uses: r-lib/actions/setup-r@v2 - with: - r-version: ${{ steps.r-version.outputs.R_VERSION }} - - - name: Run renv.lock diagnostics - run: | - install.packages("renv") - renv::diagnostics(project = NULL) - shell: Rscript {0} - - propagation: - if: github.event.pull_request.draft == false - name: Propagate renv.lock, Rprofile and .devcontainer files - runs-on: ubuntu-latest - needs: integrity - env: - PR_BRANCH_NAME: automated-renv-lock-propagation - strategy: - matrix: - # Run all steps in this job for the following repositories. - repos: - - name: admiralonco - target-branch: main - reviewers: |- - bundfussr - cicdguy - - name: admiraldev - target-branch: main - reviewers: |- - bms63 - cicdguy - - name: admiraltemplate - target-branch: main - reviewers: |- - bms63 - cicdguy - bundfussr - - name: admiralophtha - target-branch: main - reviewers: |- - cicdguy - - name: admiral - target-branch: main - reviewers: |- - cicdguy - bms63 - bundfussr - - name: pharmaversesdtm - target-branch: main - reviewers: |- - bms63 - bundfussr - - name: admiralvaccine - target-branch: main - reviewers: |- - bms63 - steps: - - name: Checkout this repo - uses: actions/checkout@v3 - - - name: Checkout ${{ matrix.repos.name }} - uses: actions/checkout@v3 - with: - repository: ${{ github.repository_owner }}/${{ matrix.repos.name }} - path: ./extension-repo - token: ${{ secrets.PHARMAVERSE_BOT }} - - - name: Update renv.lock/.Rprofile/.devcontainer files in ${{ matrix.repos.name }} - run: | - cd extension-repo && git status - # If it'll be required to create PR_BRANCH_NAME, it has to be branched off - # from the target branch so we switch to target branch first - git fetch origin ${{ matrix.repos.target-branch }} - git checkout ${{ matrix.repos.target-branch }} - # Update local branch if remote branch already exists - git fetch origin $PR_BRANCH_NAME@${{ matrix.repos.target-branch }} || true - # Switch to the branch or create if doesn't exist - git checkout $PR_BRANCH_NAME@${{ matrix.repos.target-branch }} || git checkout -b $PR_BRANCH_NAME@${{ matrix.repos.target-branch }} - # Required to pull the branch because stefanzweifel/git-auto-commit-action - # doesn't have support for automatic pulling - git pull origin $PR_BRANCH_NAME@${{ matrix.repos.target-branch }} || true - # Update renv.lock file with the latest version from central repo - cp ../renv.lock . - # Also update the renv directory - rm -rf renv && cp -r ../renv . - # ALso update the `.Rprofile` file in the repository - cp ../.Rprofile . - # Update .devcontainer config files - rm -rf .devcontainer - cp -r ../.devcontainer . - # Also update the R_VERSION setting in workflows to match - # what's available in the renv.lock file, but skip R patch version - R_VERSION=$(cat ../renv.lock | jq -r '.R.Version' | grep -oE '^[0-9]+\.[0-9]+') - perl -p -i -e "s/r-version: .*/r-version: \"${R_VERSION}\"/" .github/workflows/* - - - name: Commit and push changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: renv / codespaces update from ${{ github.repository }} - file_pattern: 'renv.lock renv/* .github/workflows/* .Rprofile .devcontainer/*' - repository: extension-repo - commit_user_name: pharmaverse-bot - commit_user_email: 113703390+pharmaverse-bot@users.noreply.github.com - branch: ${{ env.PR_BRANCH_NAME }}@${{ matrix.repos.target-branch }} - create_branch: true - - - name: Create Pull Request in ${{ matrix.repos.name }} - uses: actions/github-script@v6 - with: - github-token: ${{ secrets.PHARMAVERSE_BOT }} - script: | - // Look for any open PRs - const repo_owner = "${{ github.repository_owner }}"; - const repo_name = "${{ matrix.repos.name }}"; - const result = await github.rest.pulls.list({ - owner: repo_owner, - repo: repo_name, - state: "open" - }) - let create_new_pr = true; - for (const pr of result.data) { - // Look for distinct PR branch name - if (pr.head.ref === "${{ env.PR_BRANCH_NAME }}@${{ matrix.repos.target-branch }}") { - console.log("PR with head ref " + pr.head.ref + " already exists"); - create_new_pr = false; - break; - } - } - // If no PR with distinguished branch name has been found - // create a new PR to track changes to renv.lock. - if (create_new_pr) { - console.log("Creating a new PR"); - const result2 = await github.rest.pulls.create({ - title: 'Propagate renv.lock from ${{ github.repository }}', - owner: repo_owner, - repo: repo_name, - head: '${{ env.PR_BRANCH_NAME }}@${{ matrix.repos.target-branch }}', - base: '${{ matrix.repos.target-branch }}', - body: [ - 'This PR has been automatically generated by ', - 'renv.lock propagation workflow from ${{ github.repository }}.', - '\n\nPlease review the changes.' - ].join('') - }); - // Assign reviewers to the PR - const reviewer_list = `${{ matrix.repos.reviewers }}`.split("\n"); - console.log(reviewer_list); - const result3 = await github.rest.pulls.requestReviewers({ - owner: repo_owner, - repo: repo_name, - pull_number: result2.data.number, - reviewers: reviewer_list - }); - } diff --git a/.github/workflows/push-docker-image.yml b/.github/workflows/push-docker-image.yml index df9c9c12..a703c1c0 100644 --- a/.github/workflows/push-docker-image.yml +++ b/.github/workflows/push-docker-image.yml @@ -2,11 +2,6 @@ name: Deploy Docker Image on: - push: - branches: - - main - paths: - - 'renv/profiles/**/renv.lock' workflow_dispatch: # give possibility to run it manually schedule: - cron: '0 0 * * Wed,Sun' # Run every day at midnight UTC @@ -14,51 +9,32 @@ on: permissions: write-all env: REGISTRY: ghcr.io + R_REPOS: "https://cran.r-project.org" + OLD_RELEASE: "4.3" concurrency: group: deploy-docker-image-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: - get_renv_list: + get_old_release: runs-on: ubuntu-latest outputs: - matrix: ${{ steps.matrix.outputs.renv }} + oldrel: ${{ steps.oldrelease.outputs.oldrelease }} steps: - - - name: Checkout repo - uses: actions/checkout@v3 - with: - fetch-depth: 2 # "2" -> To retrieve the preceding commit. - - - name: Get changed files in renv/profiles - id: changed-files - uses: tj-actions/changed-files@v35 - with: - files: renv/profiles/**/renv.lock - - # TODO: what to do with renv_legacy ? - - name: Get Updated renv # note: for case schedules job, we update every docker images, and for renv.lock files updates we only update modified renv.lock versions - id: matrix - run: | - if [[ "${{github.event_name}}" == "schedule" || "${{github.event_name}}" == "workflow_dispatch" ]] - then - renv_list=$(find renv/profiles | grep renv.lock ) - else - renv_list="${{ steps.changed-files.outputs.all_changed_files }}" - fi - renv_list=$(echo $renv_list | sed 's/ /", "/g') - echo "renv=[\"$renv_list\"]" >> $GITHUB_OUTPUT + - name: get old release + id: oldrelease + run: + echo "oldrelease=${{ env.OLD_RELEASE }}" >> $GITHUB_OUTPUT deploy-image: - if: github.event_name != 'schedule' - needs: [ get_renv_list ] runs-on: ubuntu-latest + needs: [ "get_old_release" ] strategy: fail-fast: false # if one of the job "deploy-image" fails, the other parallel jobs will just continue matrix: - value: ${{ fromJson(needs.get_renv_list.outputs.matrix) }} + tags: ["devel", "latest", "${{ needs.get_old_release.outputs.oldrel }}"] # Token permissions permissions: @@ -73,75 +49,69 @@ jobs: - name: Print message run: | - echo "updating docker image for renv ${{ matrix.value }}" + echo "updating docker image for R version ${{ matrix.tags }}" - name: Set image specs id: image_specs run: | package_name=$(grep "Package:" DESCRIPTION | awk '{print $NF}') - r_version=$(basename $(dirname ${{ matrix.value }})) # TODO: check here if legacy renv (if yes, delete _legacy suffix and add _legacy suffix to docker im?) - renv=$(echo "${{ matrix.value }}" | tr -d '"') - echo "renv_lock_path=$renv" >> $GITHUB_OUTPUT - echo "r_version=$r_version" >> $GITHUB_OUTPUT - echo "image_name=$package_name-$r_version" >> $GITHUB_OUTPUT - - - name: Call deploy docker image action for every renv - uses: insightsengineering/r-image-creator@v1 + if [ "${{ matrix.tags }}" == "latest" ]; then image_name="$package_name-release"; else image_name="$package_name-${{ matrix.tags }}"; fi + if [ "${{ matrix.tags }}" == "devel" ]; then R_REPOS="https://packagemanager.posit.co/cran/__linux__/focal/latest"; fi + echo "r_repos=$R_REPOS" >> $GITHUB_OUTPUT + r_version="${{ matrix.tags }}" + if [ "$r_version" == "${{ env.OLD_RELEASE }}" ]; then image_name="$package_name-oldrel"; fi # TODO: del temporary -test suffix for testing + echo "image_name=$image_name" >> $GITHUB_OUTPUT + + - name: Call deploy docker image action ${{ matrix.tags }} + uses: insightsengineering/r-image-creator@install_suggests_deps with: image-name: "${{ steps.image_specs.outputs.image_name }}" tag-latest: true - base-image: "rocker/rstudio:${{ steps.image_specs.outputs.r_version }}" - sysdeps: qpdf,libxt-dev,curl,npm,libicu-dev,libcurl4-openssl-dev,libssl-dev,make,zlib1g-dev,libfontconfig1-dev,libfreetype6-dev,libfribidi-dev,libharfbuzz-dev,libjpeg-dev,libpng-dev,libtiff-dev,pandoc,libxml2-dev,libgit2-dev,libgit2-dev,jq - renv-lock-file: "${{ steps.image_specs.outputs.renv_lock_path }}" - repository-owner: ${{ github.repository_owner }} - repo-user: ${{ github.actor }} # pharmaverse-bot - repo-token: "${{ secrets.GITHUB_TOKEN }}" # ${{ secrets.PHARMAVERSE_BOT }} - - deploy-image-devel: - runs-on: ubuntu-latest - # Token permissions - permissions: - contents: read - packages: write - - steps: - - - name: Call deploy docker image action devel - uses: insightsengineering/r-image-creator@v1 - with: - image-name: "admiralci-devel" - tag-latest: true - base-image: "rocker/rstudio:devel" + base-image: "rocker/rstudio:${{ matrix.tags }}" sysdeps: qpdf,libxt-dev,curl,npm,libicu-dev,libcurl4-openssl-dev,libssl-dev,make,zlib1g-dev,libfontconfig1-dev,libfreetype6-dev,libfribidi-dev,libharfbuzz-dev,libjpeg-dev,libpng-dev,libtiff-dev,pandoc,libxml2-dev,libgit2-dev,libgit2-dev,jq description-file: "https://raw.githubusercontent.com/pharmaverse/admiral/main/DESCRIPTION" repository-owner: ${{ github.repository_owner }} repo-user: ${{ github.actor }} repo-token: "${{ secrets.GITHUB_TOKEN }}" + repos: ${{ steps.image_specs.outputs.r_repos }} + packages: "DT,R.cache,R.methodsS3,R.oo,R.utils,backports,cellranger,collections,covr,crosstalk,cyclocomp,diffdf,git2r,hunspell,languageserver,lazyeval,lintr,progress,readxl,rematch,renv,rex,spelling,staged.dependencies,styler,xmlparsedata" store_deps: name: Store Deps runs-on: ubuntu-latest - needs: [ deploy-image-devel ] + needs: [ "get_old_release", "deploy-image" ] container: - image: "ghcr.io/pharmaverse/admiralci-devel:latest" + image: "ghcr.io/pharmaverse/admiralci-${{ matrix.tags }}:latest" + strategy: + fail-fast: false # if one of the job "deploy-image" fails, the other parallel jobs will just continue + matrix: + tags: ["devel", "latest", "${{ needs.get_old_release.outputs.oldrel }}"] env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - ##################### BEGIN boilerplate steps ##################### - - name: Store deps into csv file - id: branch-name + - name: Store deps into csv file - image ${{ matrix.tags }} run: | installed_packages <- as.data.frame(installed.packages()) - write.csv(installed_packages, "/workspace/deps.csv", row.names = FALSE) + write.csv(installed_packages, "/workspace/deps-${{ matrix.tags }}.csv", row.names = FALSE) shell: Rscript {0} + - name: Upload deps.csv artifact uses: actions/upload-artifact@v2 with: name: deps - path: "/workspace/deps.csv" + path: "/workspace/deps-${{ matrix.tags }}.csv" + + - name: Upload SBOM to release 🔼 + uses: svenstaro/upload-release-action@v2 + with: + repo_token: "${{ secrets.GITHUB_TOKEN }}" + file: "/workspace/deps-${{ matrix.tags }}.csv" + asset_name: "Dependencies list of docker image admiralci-${{ matrix.tags }}.csv" + tag: "latest" + overwrite: true # refacto todo: image-name, sysdeps on get-renv-list job # note: in case of 403 error when pushing to ghcr : link current repo to the given package registry - https://github.com/docker/build-push-action/issues/687 -# (got to https://github.com/?tab=packages to go to packages settings) and there https://github.com/users//packages/container/admiralci-4.0/settings \ No newline at end of file +# (got to https://github.com/?tab=packages to go to packages settings) and there https://github.com/users//packages/container/admiralci-4.0/settings diff --git a/.github/workflows/r-cmd-check.yml b/.github/workflows/r-cmd-check.yml index 8af921dd..60a47671 100644 --- a/.github/workflows/r-cmd-check.yml +++ b/.github/workflows/r-cmd-check.yml @@ -26,24 +26,20 @@ jobs: R-CMD-check: runs-on: ubuntu-latest container: - image: "ghcr.io/pharmaverse/admiralci-${{ matrix.config.r }}:latest" - name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + image: "ghcr.io/pharmaverse/admiralci-${{ matrix.r_version }}:latest" + name: (${{ matrix.r_version }}) if: > !contains(github.event.commits[0].message, '[skip r-cmd-check]') strategy: fail-fast: false matrix: - config: - - {r: '4.1', repos: 'https://packagemanager.posit.co/cran/2021-05-03/'} - - {r: '4.2', repos: 'https://packagemanager.posit.co/cran/2022-01-03/'} - - {r: '4.3', repos: 'https://packagemanager.posit.co/cran/__linux__/focal/latest'} - - {r: 'devel', repos: 'https://packagemanager.posit.co/cran/__linux__/focal/latest'} # not needed for devel ? + r_version: ['release', 'devel', 'oldrel'] env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} R_KEEP_PKG_SOURCE: true R_REMOTES_NO_ERRORS_FROM_WARNINGS: true - R_REPOS: ${{ matrix.config.repos }} + R_REPOS: "https://cran.r-project.org" steps: ##################### BEGIN boilerplate steps ##################### @@ -53,14 +49,16 @@ jobs: - name: Checkout repo (PR) 🛎 uses: actions/checkout@v3 - if: github.event_name == 'pull_request' + 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' + if: | + github.event_name != 'pull_request' with: ref: ${{ steps.branch-name.outputs.head_ref_branch }} @@ -73,17 +71,105 @@ jobs: - name: Run Staged dependencies uses: insightsengineering/staged-dependencies-action@v1 + if: | + (github.event_name == 'workflow_dispatch' && matrix.r_version == 'devel') || + matrix.r_version != 'devel' with: run-system-dependencies: false renv-restore: false enable-check: false - cran-repos: "CRAN=${{ matrix.config.repos }}" + cran-repos: "$R_REPOS" env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - #####################c##################### + + - name: Install dependencies from DESCRIPTION + if: | + (github.event_name == 'workflow_dispatch' && matrix.r_version == 'devel') || + matrix.r_version != 'devel' + run: | + devtools::install(force = TRUE, dependencies = TRUE) + shell: Rscript {0} + + ##################### END boilerplate steps ##################### + + - name: Upload dependencies artifact + if: | + (github.event_name == 'workflow_dispatch' && matrix.r_version == 'devel') || + matrix.r_version != 'devel' + run: | + dir.create("/workspace/tmp") + library(dplyr) + installed_packages <- as.data.frame(installed.packages()) + # save deps as csv file + write.csv(installed_packages, "/workspace/tmp/deps-${{ matrix.r_version }}.csv", row.names = FALSE) + # create also renv.lock file + setwd("/workspace/tmp") + + installed_packages <- as.data.frame(installed.packages()) + installed_packages <- installed_packages %>% filter(LibPath != "/usr/local/lib/R/library") + + renv_lock <- list( + "R" = list( + "Version" = paste(R.version$major, R.version$minor, sep=".") + ), + "Repositories" = list( + list(Name = "CRAN", URL = Sys.getenv("R_REPOS")) + ), + "Packages" = list() + ) + + # Populate with information about each package + for (package in installed_packages$Package) { + dep_name <- package + dep_version <- installed_packages[installed_packages$Package == package, "Version"] + + version_parts <- strsplit(dep_version, "\\.")[[1]] + if (length(version_parts) == 4) { + print(sprintf("skipping installation of dep %s", dep_name)) + } else { + print(sprintf("append dependency %s - version %s", dep_name, dep_version)) + requirements <- tools::package_dependencies(dep_name, recursive = TRUE) + have_requirements <- length(requirements[[1]]) > 0 + if (have_requirements) { + renv_lock[["Packages"]][[dep_name]] <- list( + "Package" = dep_name, + "Version" = dep_version, + "Source" = "Repository", + "Repository" = "CRAN", + "Requirements" = requirements[[dep_name]] + ) + } else { + renv_lock[["Packages"]][[dep_name]] <- list( + "Package" = dep_name, + "Version" = dep_version, + "Source" = "Repository", + "Repository" = "CRAN" + ) + } + } + } + + # Write the list to a JSON file (renv.lock) + writeLines(jsonlite::toJSON(renv_lock, pretty = TRUE, auto_unbox = TRUE), "renv-${{ matrix.r_version }}.lock") + print("generated renv.lock content") + system("cat renv.lock") + shell: Rscript {0} + + - name: Upload deps.csv and renv.lock artifacts + uses: actions/upload-artifact@v2 + if: | + (github.event_name == 'workflow_dispatch' && matrix.r_version == 'devel') || + matrix.r_version != 'devel' + with: + name: deps + path: | + /workspace/tmp/ - name: Check Version id: check_version + if: | + (github.event_name == 'workflow_dispatch' && matrix.r_version == 'devel') || + matrix.r_version != 'devel' run: | maintenance_version="F" description_dat <- readLines("DESCRIPTION") @@ -91,7 +177,7 @@ jobs: if (grepl("^Version:", description_dat[i])) { current_version <- sub("^Version: ", "", description_dat[i]) version_parts <- strsplit(current_version, "\\.")[[1]] - # check if maintenance version - if yes, temp update the DESCRIPTION for rcmdchecks + # check if maintenance version if (length(version_parts) == 4) { print("Maintenance version detected (format X.Y.Z.M with M >= 9000)") maintenance_version="T" @@ -102,10 +188,14 @@ jobs: shell: Rscript {0} - name: Check + if: | + (github.event_name == 'workflow_dispatch' && matrix.r_version == 'devel') || + matrix.r_version != 'devel' env: _R_CHECK_CRAN_INCOMING_REMOTE_: false _R_CHECK_FORCE_SUGGESTS_: false run: | + unlink("tmp",recursive=TRUE) if ("${{steps.check_version.outputs.maintenance_version}}" == "T"){ Sys.setenv("_R_CHECK_CRAN_INCOMING_SKIP_LARGE_VERSION_" = TRUE) } @@ -126,5 +216,5 @@ jobs: if: failure() uses: actions/upload-artifact@main with: - name: r${{ matrix.config.r }}-results + name: r${{ matrix.r_version }}-results path: check \ No newline at end of file diff --git a/.github/workflows/r-pkg-validation.yml b/.github/workflows/r-pkg-validation.yml index e3ab9c56..051ef017 100644 --- a/.github/workflows/r-pkg-validation.yml +++ b/.github/workflows/r-pkg-validation.yml @@ -5,18 +5,17 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: choice options: - - '4.1' - - '4.2' - - '4.3' + - devel + - latest workflow_call: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: string release: @@ -83,6 +82,12 @@ jobs: cran-repos: "RSPM=${{ env.R_REPOS }}" env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + - name: Install dependencies from DESCRIPTION + run: | + devtools::install(force = TRUE, dependencies = TRUE) + shell: Rscript {0} + ##################### END boilerplate steps ##################### - name: Build report diff --git a/.github/workflows/r-renv-lock.yml b/.github/workflows/r-renv-lock.yml deleted file mode 100644 index d0f7392c..00000000 --- a/.github/workflows/r-renv-lock.yml +++ /dev/null @@ -1,193 +0,0 @@ -on: - pull_request: - branches: - - main - paths: - - .github/workflows/r-renv-lock.yml - -name: Generate renv.lock - -concurrency: - group: r-renv-lock-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -jobs: - r-renv-lock-gen: - if: github.event.pull_request.draft == false - runs-on: ${{ matrix.config.os }} - name: ${{ matrix.config.os }} (${{ matrix.config.r }}) - strategy: - max-parallel: 1 - fail-fast: false - matrix: - config: - - {os: ubuntu-20.04, r: '4.1', repos: 'https://packagemanager.posit.co/cran/2022-03-10/'} - - {os: ubuntu-20.04, r: '4.2', repos: 'https://packagemanager.posit.co/cran/2023-03-15/'} - - {os: ubuntu-20.04, r: '4.3', repos: 'https://packagemanager.posit.co/cran/2023-04-20/'} - - env: - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - R_KEEP_PKG_SOURCE: true - R_REMOTES_NO_ERRORS_FROM_WARNINGS: true - R_CRAN_REPO: ${{ matrix.config.repos }} - RENV_PROFILE_NAME: ${{ matrix.config.r }} - R_RELEASE_LAGACY: ${{ matrix.config.legacy || false }} - - steps: - - name: Get branch names - id: branch-name - uses: tj-actions/branch-names@v5.4 - - - 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: Setup R - uses: r-lib/actions/setup-r@v2 - with: - r-version: ${{ matrix.config.r }} - http-user-agent: ${{ matrix.config.http-user-agent }} - use-public-rspm: true - - - name: Install system dependencies - run: sudo apt update && sudo apt install libcurl4-openssl-dev libharfbuzz-dev libfribidi-dev libgit2-dev -y - - - name: Collect dependencies - run: | - Sys.setenv("RENV_CONFIG_SANDBOX_ENABLED" = FALSE) - Sys.setenv("RENV_CONFIG_AUTO_SNAPSHOT" = FALSE) - source("renv/activate.R") - lock_gen_version <- "0.1.10" - legacy <- identical(Sys.getenv("R_RELEASE_LAGACY"), "true") - renv_profile <- Sys.getenv("RENV_PROFILE_NAME", "dev") - if (legacy) renv_profile <- paste0(renv_profile, "_legacy") - cran_r_release <- Sys.getenv("R_CRAN_REPO", "https://packagemanager.posit.co/cran/2022-03-10/") - cran_latest <- Sys.getenv("CRAN_R_LATEST", "https://packagemanager.posit.co/cran/latest") - unlink(file.path("renv", "profiles", renv_profile), recursive = TRUE) - - cat("\n==================================\n") - cat("Create renv.lock files\n") - cat(paste("renv_profile: \"", renv_profile, "\"\n", sep = "")) - cat(paste("cran_r_release: \"", cran_r_release, "\"\n", sep = "")) - cat(paste("cran_latest: \"", cran_latest, "\"\n", sep = "")) - cat("==================================\n") - - - renv::activate(profile = renv_profile) - - renv::settings$snapshot.type("custom") - .get_dependencies <- function(project_dir) { - - admdev_loc <- find.package("admiraldev", lib.loc = .libPaths(), quiet = TRUE) - adm_dev_suggests <- if(length(admdev_loc) != 0) { - renv:::renv_dependencies_discover_description(admdev_loc, fields = c("Depends", "Imports", "LinkingTo", "Suggests")) - } else { - data.frame(Packages = character(0)) - } - suggests_packages <- renv:::renv_dependencies_discover_description(project_dir, fields = "Suggests") - - packages <- names( - renv:::renv_package_dependencies( - unique(c( - project_dir, - adm_dev_suggests[["Package"]], - suggests_packages[["Package"]], - c("staged.dependencies", "renv", "styler") - )) - ) - ) - packages[!(packages %in% c("admiral", "admiraldev", "admiralci", "admiral.test", "pharmaversesdtm", getwd()))] - } - - options(renv.snapshot.filter = .get_dependencies) - - renv_install_suggests <- function(package) { - loc_path <- find.package("admiraldev", lib.loc = .libPaths(), quiet = TRUE) - suggests <- - renv:::renv_dependencies_discover_description(loc_path, fields = "Suggests")[["Package"]] - suggests <- suggests[!(suggests %in% c("admiral", "admiraldev", "admiralci", "admiral.test", "pharmaversesdtm"))] - renv::install(suggests, repos = options("repos")) - } - - install_min_version <- function(pkg, version) { - upgrade <- try(packageVersion(pkg) >= version, silent = TRUE) - if (!isTRUE(upgrade)) { - message("Upgrade `", pkg, "` to `", version, "`") - remotes::install_version(pkg, version = version, upgrade = "never") - } - } - - # CRAN repo from R release - options("repos" = c("RSPM" = cran_r_release)) - - renv::install("openpharma/staged.dependencies", repos = options("repos")) - - # Packages from stage dependencies to ignore - renv::settings$ignored.packages(c("admiral", "admiraldev", "admiral.test", "admiralci", "pharmaversesdtm")) - - renv::install("pharmaverse/pharmaversesdtm@devel", repos = options("repos")) - renv::install("pharmaverse/admiraldev@devel", repos = options("repos")) - renv_install_suggests("admiraldev") - renv_install_suggests("pharmaversesdtm") - - # Install dependencies - renv::settings$snapshot.type("explicit") - renv::install(repos = options("repos")) - - if (legacy) { - renv::snapshot(force = TRUE, prompt = FALSE) - renv::settings$snapshot.type("implicit") - quit(save = "no", status = 0) - } - - # Set newest CRAN for few packages upgrade - options("repos" = c( - "CRAN" = cran_latest, - "RSPM" = cran_r_release - )) - - # Install latest remotes version - renv::install("remotes", repos = cran_latest) - - # Upgrade packages - install_min_version("cpp11", "0.4.3") - install_min_version("rlang", "1.1.0") - install_min_version("lifecycle", "1.0.3") - install_min_version("desc", "1.4.2") - install_min_version("processx", "3.6.1") - install_min_version("callr", "3.7.3") - install_min_version("xfun", "0.34") - install_min_version("waldo","0.4.0") - install_min_version("knitr", "1.40") - install_min_version("vctrs", "0.6.0") - install_min_version("styler", "1.8.0") - install_min_version("rmarkdown","2.17") - install_min_version("pkgdown","2.0.7") - install_min_version("lintr", "3.0.2") - install_min_version("cli", "3.4.1") - install_min_version("testthat","3.1.7") - install_min_version("styler","1.9.1") - install_min_version("pillar","1.9.0") - install_min_version("tibble","3.2.0") - install_min_version("tidyselect","1.2.0") - install_min_version("dplyr","1.1.1") - remotes::install_version("roxygen2", version = "7.2.3", upgrade = "never") - - renv::settings$snapshot.type("custom") - renv::snapshot(force = TRUE, prompt = FALSE) - if (identical(renv_profile, "4.1")) { - file.copy(renv::paths$lockfile(), "renv.lock", overwrite = TRUE) - } - shell: Rscript --vanilla {0} - - - name: Commit and push changes - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: Automatic renv profile update. - file_pattern: 'renv.lock renv/profiles/*' - commit_user_name: pharmaverse-bot - commit_user_email: 113703390+pharmaverse-bot@users.noreply.github.com - create_branch: true diff --git a/.github/workflows/readme-render.yml b/.github/workflows/readme-render.yml index 2d33411c..0de07547 100644 --- a/.github/workflows/readme-render.yml +++ b/.github/workflows/readme-render.yml @@ -5,13 +5,12 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: choice options: - - '4.1' - - '4.2' - - '4.3' + - devel + - latest skip-md-formatting: description: 'Skip markdown auto-formatting' default: false @@ -21,7 +20,7 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: string skip-md-formatting: @@ -85,6 +84,12 @@ jobs: enable-check: false env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + - name: Install dependencies from DESCRIPTION + run: | + devtools::install(force = TRUE, dependencies = TRUE) + shell: Rscript {0} + ##################### END boilerplate steps ##################### - name: Render README to markdown diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index 9035606d..d19e5284 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -6,13 +6,12 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: choice options: - - '4.1' - - '4.2' - - '4.3' + - devel + - latest exclude: description: 'List of paths to exclude (comma seperated list)' default: '' @@ -22,7 +21,7 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: string exclude: diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index c031e546..60773173 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -6,18 +6,17 @@ on: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: choice options: - - '4.1' - - '4.2' - - '4.3' + - devel + - latest workflow_call: inputs: r-version: description: 'The version of R to use' - default: '4.1' + default: 'release' required: false type: string diff --git a/.gitignore b/.gitignore index 3a5e6239..e0c6ebf8 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,5 @@ admiralci*.tgz # VS Code .vscode/ + +TODO \ No newline at end of file diff --git a/.lintr b/.lintr index b2a0a879..a2e0c325 100644 --- a/.lintr +++ b/.lintr @@ -2,7 +2,7 @@ linters: linters_with_defaults( line_length_linter(100), object_usage_linter=NULL, cyclocomp_linter(complexity_limit = 20), - undesirable_function_linter = undesirable_function_linter() + indentation_linter=NULL ) exclusions: list( "R/data.R" = Inf, diff --git a/README.Rmd b/README.Rmd index 31375799..0dc39e83 100644 --- a/README.Rmd +++ b/README.Rmd @@ -158,11 +158,6 @@ This workflow allows you to monitor the current status of checks on CRAN, if you Usually CRAN sends out email notifications if errors are encountered during their checks but only individual package owners are notified and a stringent deadline of 2 weeks is given to remediate the errors on CRAN. To mitigate the risk of the package being kicked off CRAN, this workflow provides transparency and visibility to all project collaborators by creating a GitHub issue so that the errors can be remediated before the deadline has passed. -### [`propagate.yml`](./.github/workflows/propagate.yml) - -This workflow controls the propagation process for delivering updated `renv.lock` files across the family of admiral repositories. A vignette has been developed for this process found at `r dyn_link("Lock File Updates and Propagation", admiralci_homepage, "index.html#lock-file-updates-and-propagation")` - - ## How to use these workflows? ### Reuse (recommended) diff --git a/README.md b/README.md index bcdee08a..c98c5aa7 100644 --- a/README.md +++ b/README.md @@ -198,12 +198,6 @@ workflow provides transparency and visibility to all project collaborators by creating a GitHub issue so that the errors can be remediated before the deadline has passed. -### [`renv propagation`](./.github/workflows/propagate.yml) - -This workflow controls the propagation process for delivering updated -`renv.lock` files across the family of admiral repositories. A vignette -has been developed for this process found at [Lock File Updates and -Propagation](https://pharmaverse.github.io/admiralci/index.html#lock-file-updates-and-propagation) ### [`docker image build`](./.github/workflows/push-docker-image.yml) diff --git a/install_devel_deps.R b/install_devel_deps.R index a2e473b9..30685669 100644 --- a/install_devel_deps.R +++ b/install_devel_deps.R @@ -1,9 +1,19 @@ # Read the dependencies from the CSV file -dependencies <- read.csv("deps.csv", stringsAsFactors = FALSE) +dependencies <- read.csv("Dependencies.list.of.docker.image.admiralci-latest.csv", + stringsAsFactors = FALSE) + +# remove built-in deps from the list +dependencies <- dependencies %>% filter(LibPath != "/usr/local/lib/R/library") # Loop through the dependencies and reinstall packages with specific versions for (i in seq_len(nrow(dependencies))) { dep_name <- dependencies[i, "Package"] dep_version <- dependencies[i, "Version"] - install.packages(dep_name, type = "source", repos = NULL, version = dep_version) -} + version_parts <- strsplit(dep_version, "\\.")[[1]] + if (length(version_parts) == 4) { + print(sprintf("skipping installation of dep %s", dep_name)) + } else { + print(sprintf("install dependency %s - version %s", dep_name, dep_version)) + devtools::install_version(dep_name, version = dep_version, repos = "https://cran.r-project.org", force=TRUE, upgrade="always") + } +} \ No newline at end of file diff --git a/renv.lock b/renv.lock deleted file mode 100644 index 5801ed10..00000000 --- a/renv.lock +++ /dev/null @@ -1,1701 +0,0 @@ -{ - "R": { - "Version": "4.1.3", - "Repositories": [ - { - "Name": "CRAN", - "URL": "https://packagemanager.posit.co/cran/latest" - }, - { - "Name": "RSPM", - "URL": "https://packagemanager.posit.co/cran/2022-03-10" - } - ] - }, - "Packages": { - "DT": { - "Package": "DT", - "Version": "0.21", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "crosstalk", - "htmltools", - "htmlwidgets", - "jquerylib", - "jsonlite", - "magrittr", - "promises" - ], - "Hash": "45fa28dbf288cd606e13ca35d3d72437" - }, - "R.cache": { - "Package": "R.cache", - "Version": "0.15.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "R.oo", - "R.utils", - "digest", - "utils" - ], - "Hash": "e92a8ea8388c47c82ed8aa435ed3be50" - }, - "R.methodsS3": { - "Package": "R.methodsS3", - "Version": "1.8.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "4bf6453323755202d5909697b6f7c109" - }, - "R.oo": { - "Package": "R.oo", - "Version": "1.24.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "methods", - "utils" - ], - "Hash": "5709328352717e2f0a9c012be8a97554" - }, - "R.utils": { - "Package": "R.utils", - "Version": "2.11.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "R.oo", - "methods", - "tools", - "utils" - ], - "Hash": "a7ecb8e60815c7a18648e84cd121b23a" - }, - "R6": { - "Package": "R6", - "Version": "2.5.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "470851b6d5d0ac559e9d01bb352b4021" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.0.8", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods", - "utils" - ], - "Hash": "22b546dd7e337f6c0c58a39983a496bc" - }, - "askpass": { - "Package": "askpass", - "Version": "1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "sys" - ], - "Hash": "e8a22846fff485f0be3770c2da758713" - }, - "backports": { - "Package": "backports", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "c39fbec8a30d23e721980b8afb31984c" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "543776ae6848fde2f48ff3816d0628bc" - }, - "brew": { - "Package": "brew", - "Version": "1.0-7", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "38875ea52350ff4b4c03849fc69736c8" - }, - "brio": { - "Package": "brio", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "976cf154dfb043c012d87cddd8bca363" - }, - "bslib": { - "Package": "bslib", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "htmltools", - "jquerylib", - "jsonlite", - "rlang", - "sass" - ], - "Hash": "56ae7e1987b340186a8a5a157c2ec358" - }, - "cachem": { - "Package": "cachem", - "Version": "1.0.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "fastmap", - "rlang" - ], - "Hash": "648c5b3d71e6a37e3043617489a0a0e9" - }, - "callr": { - "Package": "callr", - "Version": "3.7.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "processx", - "utils" - ], - "Hash": "9b2191ede20fa29828139b9900922e51" - }, - "cellranger": { - "Package": "cellranger", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "rematch", - "tibble" - ], - "Hash": "f61dbaec772ccd2e17705c1e872e9e7c" - }, - "cli": { - "Package": "cli", - "Version": "3.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "0d297d01734d2bcea40197bd4971a764" - }, - "clipr": { - "Package": "clipr", - "Version": "0.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" - }, - "codetools": { - "Package": "codetools", - "Version": "0.2-18", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "019388fc48e48b3da0d3a76ff94608a8" - }, - "collections": { - "Package": "collections", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "92537c684a3d2eaa6bd8f65c28ef97f0" - }, - "commonmark": { - "Package": "commonmark", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "2ba81b120c1655ab696c935ef33ea716" - }, - "covr": { - "Package": "covr", - "Version": "3.5.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "crayon", - "digest", - "httr", - "jsonlite", - "methods", - "rex", - "stats", - "utils", - "withr", - "yaml" - ], - "Hash": "6d80a9fc3c0c8473153b54fa54719dfd" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "ed588261931ee3be2c700d22e94a29ab" - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "methods", - "utils" - ], - "Hash": "741c2e098e98afe3dc26a7b0e5489f4e" - }, - "credentials": { - "Package": "credentials", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass", - "curl", - "jsonlite", - "openssl", - "sys" - ], - "Hash": "93762d0a34d78e6a025efdbfb5c6bb41" - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ], - "Hash": "6aa54f69598c32177e920eb3402e8293" - }, - "curl": { - "Package": "curl", - "Version": "4.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "022c42d49c28e95d69ca60446dbabf88" - }, - "cyclocomp": { - "Package": "cyclocomp", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "callr", - "crayon", - "desc", - "remotes", - "withr" - ], - "Hash": "53cbed70a2f7472d48fb6aef08442f25" - }, - "desc": { - "Package": "desc", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "rprojroot", - "utils" - ], - "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" - }, - "devtools": { - "Package": "devtools", - "Version": "2.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "callr", - "cli", - "desc", - "ellipsis", - "fs", - "httr", - "lifecycle", - "memoise", - "pkgbuild", - "pkgload", - "rcmdcheck", - "remotes", - "rlang", - "roxygen2", - "rstudioapi", - "rversions", - "sessioninfo", - "stats", - "testthat", - "tools", - "usethis", - "utils", - "withr" - ], - "Hash": "fc35e13bb582e5fe6f63f3d647a4cbe5" - }, - "diffdf": { - "Package": "diffdf", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "tibble" - ], - "Hash": "9ddedef46959baad2080047a1b0117fe" - }, - "diffobj": { - "Package": "diffobj", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "crayon", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" - }, - "digest": { - "Package": "digest", - "Version": "0.6.29", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "cf6b206a045a684728c3267ef7596190" - }, - "downlit": { - "Package": "downlit", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "brio", - "desc", - "digest", - "evaluate", - "fansi", - "memoise", - "rlang", - "vctrs", - "yaml" - ], - "Hash": "ba63dc9ab5a31f3209892437e40c5f60" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "generics", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "eb5742d256a0d9306d85ea68756d8187" - }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "rlang" - ], - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" - }, - "evaluate": { - "Package": "evaluate", - "Version": "0.15", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "699a7a93d08c962d9f8950b2d7a227f1" - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "utils" - ], - "Hash": "f28149c2d7a1342a834b314e95e67260" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "77bd60a6157420d4ffa93b27cf6a58b8" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "htmltools", - "rlang" - ], - "Hash": "55624ed409e46c5f358b2c060be87f67" - }, - "fs": { - "Package": "fs", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "7c89603d81793f0d5486d91ab1fc6f1d" - }, - "generics": { - "Package": "generics", - "Version": "0.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "177475892cf4a55865868527654a7741" - }, - "gert": { - "Package": "gert", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass", - "credentials", - "openssl", - "rstudioapi", - "sys", - "zip" - ], - "Hash": "8fddce7cbd59467106266a6e93e253b4" - }, - "gh": { - "Package": "gh", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "gitcreds", - "httr", - "ini", - "jsonlite" - ], - "Hash": "38c2580abbda249bd6afeec00d14f531" - }, - "git2r": { - "Package": "git2r", - "Version": "0.29.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "graphics", - "utils" - ], - "Hash": "b114135c4749076bd5ef74a5827b6f62" - }, - "gitcreds": { - "Package": "gitcreds", - "Version": "0.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "f3aefccc1cc50de6338146b62f115de8" - }, - "glue": { - "Package": "glue", - "Version": "1.6.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" - }, - "highr": { - "Package": "highr", - "Version": "0.9", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "xfun" - ], - "Hash": "8eb36c8125038e648e5d111c0d7b2ed4" - }, - "hms": { - "Package": "hms", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "ellipsis", - "lifecycle", - "methods", - "pkgconfig", - "rlang", - "vctrs" - ], - "Hash": "5b8a2dd0fdbe2ab4f6081e6c7be6dfca" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "digest", - "fastmap", - "grDevices", - "rlang", - "utils" - ], - "Hash": "526c484233f42522278ab06fb185cb26" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.5.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "htmltools", - "jsonlite", - "yaml" - ], - "Hash": "76147821cd3fcd8c4b04e1ef0498e7fb" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "Rcpp", - "later", - "promises", - "utils" - ], - "Hash": "97fe71f0a4a1c9890e6c2128afa04bc0" - }, - "httr": { - "Package": "httr", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "curl", - "jsonlite", - "mime", - "openssl" - ], - "Hash": "a525aba14184fec243f9eaec62fbed43" - }, - "hunspell": { - "Package": "hunspell", - "Version": "3.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "Rcpp", - "digest" - ], - "Hash": "3987784c19192ad0f2261c456d936df1" - }, - "ini": { - "Package": "ini", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "6154ec2223172bce8162d4153cda21f7" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools" - ], - "Hash": "5aab57a3bd297eee1c1d862735972182" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods" - ], - "Hash": "d07e729b27b372429d42d24d503613a0" - }, - "knitr": { - "Package": "knitr", - "Version": "1.40", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "evaluate", - "highr", - "methods", - "stringr", - "tools", - "xfun", - "yaml" - ], - "Hash": "caea8b0f899a0b1738444b9bc47067e7" - }, - "languageserver": { - "Package": "languageserver", - "Version": "0.3.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "callr", - "collections", - "fs", - "jsonlite", - "lintr", - "parallel", - "roxygen2", - "stringi", - "styler", - "tools", - "utils", - "xml2", - "xmlparsedata" - ], - "Hash": "f62ed8b09fd56cd70291bd077bc52c4b" - }, - "later": { - "Package": "later", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "Rcpp", - "rlang" - ], - "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "d908914ae53b04d4c0c0fd72ecc35370" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "rlang" - ], - "Hash": "001cecbeac1cff9301bdc3775ee46a86" - }, - "lintr": { - "Package": "lintr", - "Version": "3.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "backports", - "codetools", - "crayon", - "cyclocomp", - "digest", - "glue", - "jsonlite", - "knitr", - "rex", - "stats", - "utils", - "xml2", - "xmlparsedata" - ], - "Hash": "b21ebd652d940f099915221f3328ab7b" - }, - "lubridate": { - "Package": "lubridate", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11", - "generics", - "methods" - ], - "Hash": "2ff5eedb6ee38fb1b81205c73be1be5a" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "cdc87ecd81934679d1557633d8e1fe51" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cachem", - "rlang" - ], - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" - }, - "mime": { - "Package": "mime", - "Version": "0.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "tools" - ], - "Hash": "18e9c28c1d3ca1560ce30658b22ce104" - }, - "miniUI": { - "Package": "miniUI", - "Version": "0.1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools", - "shiny", - "utils" - ], - "Hash": "fec5f52652d60615fdb3957b3d74324a" - }, - "openssl": { - "Package": "openssl", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass" - ], - "Hash": "cf4329aac12c2c44089974559c18e446" - }, - "pillar": { - "Package": "pillar", - "Version": "1.9.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "fansi", - "glue", - "lifecycle", - "rlang", - "utf8", - "utils", - "vctrs" - ], - "Hash": "15da5a8412f317beeee6175fbc76f4bb" - }, - "pkgbuild": { - "Package": "pkgbuild", - "Version": "1.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "callr", - "cli", - "crayon", - "desc", - "prettyunits", - "rprojroot", - "withr" - ], - "Hash": "66d2adfed274daf81ccfe77d974c3b9b" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "01f28d4278f15c76cddbea05899c5d6f" - }, - "pkgdown": { - "Package": "pkgdown", - "Version": "2.0.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "callr", - "cli", - "desc", - "digest", - "downlit", - "fs", - "httr", - "jsonlite", - "magrittr", - "memoise", - "purrr", - "ragg", - "rlang", - "rmarkdown", - "tibble", - "whisker", - "withr", - "xml2", - "yaml" - ], - "Hash": "16fa15449c930bf3a7761d3c68f8abf9" - }, - "pkgload": { - "Package": "pkgload", - "Version": "1.2.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "crayon", - "desc", - "methods", - "rlang", - "rprojroot", - "rstudioapi", - "utils", - "withr" - ], - "Hash": "7533cd805940821bf23eaf3c8d4c1735" - }, - "praise": { - "Package": "praise", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "a555924add98c99d2f411e37e7d25e9f" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" - }, - "processx": { - "Package": "processx", - "Version": "3.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "ps", - "utils" - ], - "Hash": "a11891e28c1f1e5ddd773ba1b8c07cf6" - }, - "progress": { - "Package": "progress", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "crayon", - "hms", - "prettyunits" - ], - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" - }, - "promises": { - "Package": "promises", - "Version": "1.2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "Rcpp", - "later", - "magrittr", - "rlang", - "stats" - ], - "Hash": "4ab2c43adb4d4699cf3690acd378d75d" - }, - "ps": { - "Package": "ps", - "Version": "1.6.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "32620e2001c1dce1af49c49dccbb9420" - }, - "purrr": { - "Package": "purrr", - "Version": "0.3.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "magrittr", - "rlang" - ], - "Hash": "97def703420c8ab10d8f0e6c72101e02" - }, - "ragg": { - "Package": "ragg", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "systemfonts", - "textshaping" - ], - "Hash": "14932bb6f2739c771ca4ceaba6b4248e" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "5e3c5dc0b071b21fa128676560dbe94d" - }, - "rcmdcheck": { - "Package": "rcmdcheck", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "callr", - "cli", - "curl", - "desc", - "digest", - "pkgbuild", - "prettyunits", - "rprojroot", - "sessioninfo", - "utils", - "withr", - "xopen" - ], - "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" - }, - "readxl": { - "Package": "readxl", - "Version": "1.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "Rcpp", - "cellranger", - "progress", - "tibble", - "utils" - ], - "Hash": "63537c483c2dbec8d9e3183b3735254a" - }, - "rematch": { - "Package": "rematch", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c66b930d20bb6d858cd18e1cebcfae5c" - }, - "rematch2": { - "Package": "rematch2", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "tibble" - ], - "Hash": "76c9e04c712a05848ae7a23d2f170a40" - }, - "remotes": { - "Package": "remotes", - "Version": "2.4.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "63d15047eb239f95160112bcadc4fcb9" - }, - "renv": { - "Package": "renv", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "c321cd99d56443dbffd1c9e673c0c1a2" - }, - "rex": { - "Package": "rex", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "lazyeval" - ], - "Hash": "ae34cd56890607370665bee5bd17812f" - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "dc079ccd156cde8647360f473c1fa718" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.17", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "evaluate", - "htmltools", - "jquerylib", - "jsonlite", - "knitr", - "methods", - "stringr", - "tinytex", - "tools", - "utils", - "xfun", - "yaml" - ], - "Hash": "e97c8be593e010f93520e8215c0f9189" - }, - "roxygen2": { - "Package": "roxygen2", - "Version": "7.2.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "brew", - "cli", - "commonmark", - "cpp11", - "desc", - "knitr", - "methods", - "pkgload", - "purrr", - "rlang", - "stringi", - "stringr", - "utils", - "withr", - "xml2" - ], - "Hash": "7b153c746193b143c14baa072bae4e27" - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "249d8cd1e74a8f6a26194a91b47f21d1" - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.13", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "06c85365a03fdaf699966cc1d3cf53ea" - }, - "rversions": { - "Package": "rversions", - "Version": "2.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "curl", - "utils", - "xml2" - ], - "Hash": "f88fab00907b312f8b23ec13e2d437cb" - }, - "sass": { - "Package": "sass", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "fs", - "htmltools", - "rappdirs", - "rlang" - ], - "Hash": "50cf822feb64bb3977bda0b7091be623" - }, - "sessioninfo": { - "Package": "sessioninfo", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "tools", - "utils" - ], - "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" - }, - "shiny": { - "Package": "shiny", - "Version": "1.7.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "bslib", - "cachem", - "commonmark", - "crayon", - "ellipsis", - "fastmap", - "fontawesome", - "glue", - "grDevices", - "htmltools", - "httpuv", - "jsonlite", - "later", - "lifecycle", - "methods", - "mime", - "promises", - "rlang", - "sourcetools", - "tools", - "utils", - "withr", - "xtable" - ], - "Hash": "00344c227c7bd0ab5d78052c5d736c44" - }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "947e4e02a79effa5d512473e10f41797" - }, - "spelling": { - "Package": "spelling", - "Version": "2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "commonmark", - "hunspell", - "knitr", - "xml2" - ], - "Hash": "b8c899a5c83f0d897286550481c91798" - }, - "staged.dependencies": { - "Package": "staged.dependencies", - "Version": "0.3.1", - "Source": "GitHub", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteUsername": "openpharma", - "RemoteRepo": "staged.dependencies", - "RemoteRef": "main", - "RemoteSha": "1ab184a029bef8839a57bb6acd1c5c919cf1fd89", - "Requirements": [ - "desc", - "devtools", - "digest", - "dplyr", - "fs", - "git2r", - "glue", - "httr", - "jsonlite", - "methods", - "rcmdcheck", - "remotes", - "rlang", - "stats", - "tidyr", - "utils", - "withr", - "yaml" - ], - "Hash": "ea298f9fb221a8c7ca4c9e55e9c29b48" - }, - "stringi": { - "Package": "stringi", - "Version": "1.7.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stats", - "tools", - "utils" - ], - "Hash": "bba431031d30789535745a9627ac9271" - }, - "stringr": { - "Package": "stringr", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "glue", - "magrittr", - "stringi" - ], - "Hash": "0759e6b6c0957edb1311028a49a35e76" - }, - "styler": { - "Package": "styler", - "Version": "1.9.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.cache", - "cli", - "magrittr", - "purrr", - "rlang", - "rprojroot", - "tools", - "vctrs", - "withr" - ], - "Hash": "ed8c90822b7da46beee603f263a85fe0" - }, - "sys": { - "Package": "sys", - "Version": "3.4", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "b227d13e29222b4574486cfcbde077fa" - }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "90b28393209827327de889f49935140a" - }, - "testthat": { - "Package": "testthat", - "Version": "3.1.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "brio", - "callr", - "cli", - "desc", - "digest", - "ellipsis", - "evaluate", - "jsonlite", - "lifecycle", - "magrittr", - "methods", - "pkgload", - "praise", - "processx", - "ps", - "rlang", - "utils", - "waldo", - "withr" - ], - "Hash": "7eb5fd202a61d2fb78af5869b6c08998" - }, - "textshaping": { - "Package": "textshaping", - "Version": "0.3.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11", - "systemfonts" - ], - "Hash": "1ab6223d3670fac7143202cb6a2d43d5" - }, - "tibble": { - "Package": "tibble", - "Version": "3.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "fansi", - "lifecycle", - "magrittr", - "methods", - "pillar", - "pkgconfig", - "rlang", - "utils", - "vctrs" - ], - "Hash": "37695ff125982007d42a59ad10982ff2" - }, - "tidyr": { - "Package": "tidyr", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11", - "dplyr", - "ellipsis", - "glue", - "lifecycle", - "magrittr", - "purrr", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "d8b95b7fee945d7da6888cf7eb71a49c" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang", - "vctrs", - "withr" - ], - "Hash": "79540e5fcd9e0435af547d885f184fd5" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.37", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "xfun" - ], - "Hash": "a80abeb527a977e4bef21873d29222dd" - }, - "usethis": { - "Package": "usethis", - "Version": "2.1.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "clipr", - "crayon", - "curl", - "desc", - "fs", - "gert", - "gh", - "glue", - "jsonlite", - "lifecycle", - "purrr", - "rappdirs", - "rlang", - "rprojroot", - "rstudioapi", - "stats", - "utils", - "whisker", - "withr", - "yaml" - ], - "Hash": "c499f488e6dd7718accffaee5bc5a79b" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "c9c462b759a5cc844ae25b5942654d13" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.6.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang" - ], - "Hash": "7e877404388794361277be95d8445de8" - }, - "waldo": { - "Package": "waldo", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "diffobj", - "fansi", - "glue", - "methods", - "rematch2", - "rlang", - "tibble" - ], - "Hash": "035fba89d0c86e2113120f93301b98ad" - }, - "whisker": { - "Package": "whisker", - "Version": "0.4", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "ca970b96d894e90397ed20637a0c1bbe" - }, - "withr": { - "Package": "withr", - "Version": "2.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "graphics", - "stats" - ], - "Hash": "c0e49a9760983e81e55cdd9be92e7182" - }, - "xfun": { - "Package": "xfun", - "Version": "0.34", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "stats", - "tools" - ], - "Hash": "9eba2411b0b1f879797141bd24df7407" - }, - "xml2": { - "Package": "xml2", - "Version": "1.3.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "40682ed6a969ea5abfd351eb67833adc" - }, - "xmlparsedata": { - "Package": "xmlparsedata", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "45e4bf3c46476896e821fc0a408fb4fc" - }, - "xopen": { - "Package": "xopen", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "processx" - ], - "Hash": "6c85f015dee9cc7710ddd20f86881f58" - }, - "xtable": { - "Package": "xtable", - "Version": "1.8-4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stats", - "utils" - ], - "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.5", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "458bb38374d73bf83b1bb85e353da200" - }, - "zip": { - "Package": "zip", - "Version": "2.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c7eef2996ac270a18c2715c997a727c5" - } - } -} diff --git a/renv/.gitignore b/renv/.gitignore deleted file mode 100644 index 2649d0a0..00000000 --- a/renv/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -cellar/ -sandbox/ -library/ -local/ -lock/ -python/ -staging/ -profile diff --git a/renv/activate.R b/renv/activate.R deleted file mode 100644 index cc742fc9..00000000 --- a/renv/activate.R +++ /dev/null @@ -1,1181 +0,0 @@ - -local({ - - # the requested version of renv - version <- "1.0.0" - attr(version, "sha") <- NULL - - # the project directory - project <- getwd() - - # figure out whether the autoloader is enabled - enabled <- local({ - - # first, check config option - override <- getOption("renv.config.autoloader.enabled") - if (!is.null(override)) - return(override) - - # next, check environment variables - # TODO: prefer using the configuration one in the future - envvars <- c( - "RENV_CONFIG_AUTOLOADER_ENABLED", - "RENV_AUTOLOADER_ENABLED", - "RENV_ACTIVATE_PROJECT" - ) - - for (envvar in envvars) { - envval <- Sys.getenv(envvar, unset = NA) - if (!is.na(envval)) - return(tolower(envval) %in% c("true", "t", "1")) - } - - # enable by default - TRUE - - }) - - if (!enabled) - return(FALSE) - - # avoid recursion - if (identical(getOption("renv.autoloader.running"), TRUE)) { - warning("ignoring recursive attempt to run renv autoloader") - return(invisible(TRUE)) - } - - # signal that we're loading renv during R startup - options(renv.autoloader.running = TRUE) - on.exit(options(renv.autoloader.running = NULL), add = TRUE) - - # signal that we've consented to use renv - options(renv.consent = TRUE) - - # load the 'utils' package eagerly -- this ensures that renv shims, which - # mask 'utils' packages, will come first on the search path - library(utils, lib.loc = .Library) - - # unload renv if it's already been loaded - if ("renv" %in% loadedNamespaces()) - unloadNamespace("renv") - - # load bootstrap tools - `%||%` <- function(x, y) { - if (is.null(x)) y else x - } - - catf <- function(fmt, ..., appendLF = TRUE) { - - quiet <- getOption("renv.bootstrap.quiet", default = FALSE) - if (quiet) - return(invisible()) - - msg <- sprintf(fmt, ...) - cat(msg, file = stdout(), sep = if (appendLF) "\n" else "") - - invisible(msg) - - } - - header <- function(label, - ..., - prefix = "#", - suffix = "-", - n = min(getOption("width"), 78)) - { - label <- sprintf(label, ...) - n <- max(n - nchar(label) - nchar(prefix) - 2L, 8L) - if (n <= 0) - return(paste(prefix, label)) - - tail <- paste(rep.int(suffix, n), collapse = "") - paste0(prefix, " ", label, " ", tail) - - } - - startswith <- function(string, prefix) { - substring(string, 1, nchar(prefix)) == prefix - } - - bootstrap <- function(version, library) { - - friendly <- renv_bootstrap_version_friendly(version) - section <- header(sprintf("Bootstrapping renv %s", friendly)) - catf(section) - - # attempt to download renv - catf("- Downloading renv ... ", appendLF = FALSE) - withCallingHandlers( - tarball <- renv_bootstrap_download(version), - error = function(err) { - catf("FAILED") - stop("failed to download:\n", conditionMessage(err)) - } - ) - catf("OK") - on.exit(unlink(tarball), add = TRUE) - - # now attempt to install - catf("- Installing renv ... ", appendLF = FALSE) - withCallingHandlers( - status <- renv_bootstrap_install(version, tarball, library), - error = function(err) { - catf("FAILED") - stop("failed to install:\n", conditionMessage(err)) - } - ) - catf("OK") - - # add empty line to break up bootstrapping from normal output - catf("") - - return(invisible()) - } - - renv_bootstrap_tests_running <- function() { - getOption("renv.tests.running", default = FALSE) - } - - renv_bootstrap_repos <- function() { - - # get CRAN repository - cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") - - # check for repos override - repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) - if (!is.na(repos)) { - - # check for RSPM; if set, use a fallback repository for renv - rspm <- Sys.getenv("RSPM", unset = NA) - if (identical(rspm, repos)) - repos <- c(RSPM = rspm, CRAN = cran) - - return(repos) - - } - - # check for lockfile repositories - repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) - if (!inherits(repos, "error") && length(repos)) - return(repos) - - # retrieve current repos - repos <- getOption("repos") - - # ensure @CRAN@ entries are resolved - repos[repos == "@CRAN@"] <- cran - - # add in renv.bootstrap.repos if set - default <- c(FALLBACK = "https://cloud.r-project.org") - extra <- getOption("renv.bootstrap.repos", default = default) - repos <- c(repos, extra) - - # remove duplicates that might've snuck in - dupes <- duplicated(repos) | duplicated(names(repos)) - repos[!dupes] - - } - - renv_bootstrap_repos_lockfile <- function() { - - lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") - if (!file.exists(lockpath)) - return(NULL) - - lockfile <- tryCatch(renv_json_read(lockpath), error = identity) - if (inherits(lockfile, "error")) { - warning(lockfile) - return(NULL) - } - - repos <- lockfile$R$Repositories - if (length(repos) == 0) - return(NULL) - - keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) - vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) - names(vals) <- keys - - return(vals) - - } - - renv_bootstrap_download <- function(version) { - - sha <- attr(version, "sha", exact = TRUE) - - methods <- if (!is.null(sha)) { - - # attempting to bootstrap a development version of renv - c( - function() renv_bootstrap_download_tarball(sha), - function() renv_bootstrap_download_github(sha) - ) - - } else { - - # attempting to bootstrap a release version of renv - c( - function() renv_bootstrap_download_tarball(version), - function() renv_bootstrap_download_cran_latest(version), - function() renv_bootstrap_download_cran_archive(version) - ) - - } - - for (method in methods) { - path <- tryCatch(method(), error = identity) - if (is.character(path) && file.exists(path)) - return(path) - } - - stop("All download methods failed") - - } - - renv_bootstrap_download_impl <- function(url, destfile) { - - mode <- "wb" - - # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 - fixup <- - Sys.info()[["sysname"]] == "Windows" && - substring(url, 1L, 5L) == "file:" - - if (fixup) - mode <- "w+b" - - args <- list( - url = url, - destfile = destfile, - mode = mode, - quiet = TRUE - ) - - if ("headers" %in% names(formals(utils::download.file))) - args$headers <- renv_bootstrap_download_custom_headers(url) - - do.call(utils::download.file, args) - - } - - renv_bootstrap_download_custom_headers <- function(url) { - - headers <- getOption("renv.download.headers") - if (is.null(headers)) - return(character()) - - if (!is.function(headers)) - stopf("'renv.download.headers' is not a function") - - headers <- headers(url) - if (length(headers) == 0L) - return(character()) - - if (is.list(headers)) - headers <- unlist(headers, recursive = FALSE, use.names = TRUE) - - ok <- - is.character(headers) && - is.character(names(headers)) && - all(nzchar(names(headers))) - - if (!ok) - stop("invocation of 'renv.download.headers' did not return a named character vector") - - headers - - } - - renv_bootstrap_download_cran_latest <- function(version) { - - spec <- renv_bootstrap_download_cran_latest_find(version) - type <- spec$type - repos <- spec$repos - - baseurl <- utils::contrib.url(repos = repos, type = type) - ext <- if (identical(type, "source")) - ".tar.gz" - else if (Sys.info()[["sysname"]] == "Windows") - ".zip" - else - ".tgz" - name <- sprintf("renv_%s%s", version, ext) - url <- paste(baseurl, name, sep = "/") - - destfile <- file.path(tempdir(), name) - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (inherits(status, "condition")) - return(FALSE) - - # report success and return - destfile - - } - - renv_bootstrap_download_cran_latest_find <- function(version) { - - # check whether binaries are supported on this system - binary <- - getOption("renv.bootstrap.binary", default = TRUE) && - !identical(.Platform$pkgType, "source") && - !identical(getOption("pkgType"), "source") && - Sys.info()[["sysname"]] %in% c("Darwin", "Windows") - - types <- c(if (binary) "binary", "source") - - # iterate over types + repositories - for (type in types) { - for (repos in renv_bootstrap_repos()) { - - # retrieve package database - db <- tryCatch( - as.data.frame( - utils::available.packages(type = type, repos = repos), - stringsAsFactors = FALSE - ), - error = identity - ) - - if (inherits(db, "error")) - next - - # check for compatible entry - entry <- db[db$Package %in% "renv" & db$Version %in% version, ] - if (nrow(entry) == 0) - next - - # found it; return spec to caller - spec <- list(entry = entry, type = type, repos = repos) - return(spec) - - } - } - - # if we got here, we failed to find renv - fmt <- "renv %s is not available from your declared package repositories" - stop(sprintf(fmt, version)) - - } - - renv_bootstrap_download_cran_archive <- function(version) { - - name <- sprintf("renv_%s.tar.gz", version) - repos <- renv_bootstrap_repos() - urls <- file.path(repos, "src/contrib/Archive/renv", name) - destfile <- file.path(tempdir(), name) - - for (url in urls) { - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (identical(status, 0L)) - return(destfile) - - } - - return(FALSE) - - } - - renv_bootstrap_download_tarball <- function(version) { - - # if the user has provided the path to a tarball via - # an environment variable, then use it - tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) - if (is.na(tarball)) - return() - - # allow directories - if (dir.exists(tarball)) { - name <- sprintf("renv_%s.tar.gz", version) - tarball <- file.path(tarball, name) - } - - # bail if it doesn't exist - if (!file.exists(tarball)) { - - # let the user know we weren't able to honour their request - fmt <- "- RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." - msg <- sprintf(fmt, tarball) - warning(msg) - - # bail - return() - - } - - catf("- Using local tarball '%s'.", tarball) - tarball - - } - - renv_bootstrap_download_github <- function(version) { - - enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") - if (!identical(enabled, "TRUE")) - return(FALSE) - - # prepare download options - pat <- Sys.getenv("GITHUB_PAT") - if (nzchar(Sys.which("curl")) && nzchar(pat)) { - fmt <- "--location --fail --header \"Authorization: token %s\"" - extra <- sprintf(fmt, pat) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "curl", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } else if (nzchar(Sys.which("wget")) && nzchar(pat)) { - fmt <- "--header=\"Authorization: token %s\"" - extra <- sprintf(fmt, pat) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "wget", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } - - url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) - name <- sprintf("renv_%s.tar.gz", version) - destfile <- file.path(tempdir(), name) - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (!identical(status, 0L)) - return(FALSE) - - renv_bootstrap_download_augment(destfile) - - return(destfile) - - } - - # Add Sha to DESCRIPTION. This is stop gap until #890, after which we - # can use renv::install() to fully capture metadata. - renv_bootstrap_download_augment <- function(destfile) { - sha <- renv_bootstrap_git_extract_sha1_tar(destfile) - if (is.null(sha)) { - return() - } - - # Untar - tempdir <- tempfile("renv-github-") - on.exit(unlink(tempdir, recursive = TRUE), add = TRUE) - untar(destfile, exdir = tempdir) - pkgdir <- dir(tempdir, full.names = TRUE)[[1]] - - # Modify description - desc_path <- file.path(pkgdir, "DESCRIPTION") - desc_lines <- readLines(desc_path) - remotes_fields <- c( - "RemoteType: github", - "RemoteHost: api.github.com", - "RemoteRepo: renv", - "RemoteUsername: rstudio", - "RemotePkgRef: rstudio/renv", - paste("RemoteRef: ", sha), - paste("RemoteSha: ", sha) - ) - writeLines(c(desc_lines[desc_lines != ""], remotes_fields), con = desc_path) - - # Re-tar - local({ - old <- setwd(tempdir) - on.exit(setwd(old), add = TRUE) - - tar(destfile, compression = "gzip") - }) - invisible() - } - - # Extract the commit hash from a git archive. Git archives include the SHA1 - # hash as the comment field of the tarball pax extended header - # (see https://www.kernel.org/pub/software/scm/git/docs/git-archive.html) - # For GitHub archives this should be the first header after the default one - # (512 byte) header. - renv_bootstrap_git_extract_sha1_tar <- function(bundle) { - - # open the bundle for reading - # We use gzcon for everything because (from ?gzcon) - # > Reading from a connection which does not supply a ‘gzip’ magic - # > header is equivalent to reading from the original connection - conn <- gzcon(file(bundle, open = "rb", raw = TRUE)) - on.exit(close(conn)) - - # The default pax header is 512 bytes long and the first pax extended header - # with the comment should be 51 bytes long - # `52 comment=` (11 chars) + 40 byte SHA1 hash - len <- 0x200 + 0x33 - res <- rawToChar(readBin(conn, "raw", n = len)[0x201:len]) - - if (grepl("^52 comment=", res)) { - sub("52 comment=", "", res) - } else { - NULL - } - } - - renv_bootstrap_install <- function(version, tarball, library) { - - # attempt to install it into project library - dir.create(library, showWarnings = FALSE, recursive = TRUE) - output <- renv_bootstrap_install_impl(library, tarball) - - # check for successful install - status <- attr(output, "status") - if (is.null(status) || identical(status, 0L)) - return(status) - - # an error occurred; report it - header <- "installation of renv failed" - lines <- paste(rep.int("=", nchar(header)), collapse = "") - text <- paste(c(header, lines, output), collapse = "\n") - stop(text) - - } - - renv_bootstrap_install_impl <- function(library, tarball) { - - # invoke using system2 so we can capture and report output - bin <- R.home("bin") - exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" - R <- file.path(bin, exe) - - args <- c( - "--vanilla", "CMD", "INSTALL", "--no-multiarch", - "-l", shQuote(path.expand(library)), - shQuote(path.expand(tarball)) - ) - - system2(R, args, stdout = TRUE, stderr = TRUE) - - } - - renv_bootstrap_platform_prefix <- function() { - - # construct version prefix - version <- paste(R.version$major, R.version$minor, sep = ".") - prefix <- paste("R", numeric_version(version)[1, 1:2], sep = "-") - - # include SVN revision for development versions of R - # (to avoid sharing platform-specific artefacts with released versions of R) - devel <- - identical(R.version[["status"]], "Under development (unstable)") || - identical(R.version[["nickname"]], "Unsuffered Consequences") - - if (devel) - prefix <- paste(prefix, R.version[["svn rev"]], sep = "-r") - - # build list of path components - components <- c(prefix, R.version$platform) - - # include prefix if provided by user - prefix <- renv_bootstrap_platform_prefix_impl() - if (!is.na(prefix) && nzchar(prefix)) - components <- c(prefix, components) - - # build prefix - paste(components, collapse = "/") - - } - - renv_bootstrap_platform_prefix_impl <- function() { - - # if an explicit prefix has been supplied, use it - prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) - if (!is.na(prefix)) - return(prefix) - - # if the user has requested an automatic prefix, generate it - auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) - if (auto %in% c("TRUE", "True", "true", "1")) - return(renv_bootstrap_platform_prefix_auto()) - - # empty string on failure - "" - - } - - renv_bootstrap_platform_prefix_auto <- function() { - - prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) - if (inherits(prefix, "error") || prefix %in% "unknown") { - - msg <- paste( - "failed to infer current operating system", - "please file a bug report at https://github.com/rstudio/renv/issues", - sep = "; " - ) - - warning(msg) - - } - - prefix - - } - - renv_bootstrap_platform_os <- function() { - - sysinfo <- Sys.info() - sysname <- sysinfo[["sysname"]] - - # handle Windows + macOS up front - if (sysname == "Windows") - return("windows") - else if (sysname == "Darwin") - return("macos") - - # check for os-release files - for (file in c("/etc/os-release", "/usr/lib/os-release")) - if (file.exists(file)) - return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) - - # check for redhat-release files - if (file.exists("/etc/redhat-release")) - return(renv_bootstrap_platform_os_via_redhat_release()) - - "unknown" - - } - - renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { - - # read /etc/os-release - release <- utils::read.table( - file = file, - sep = "=", - quote = c("\"", "'"), - col.names = c("Key", "Value"), - comment.char = "#", - stringsAsFactors = FALSE - ) - - vars <- as.list(release$Value) - names(vars) <- release$Key - - # get os name - os <- tolower(sysinfo[["sysname"]]) - - # read id - id <- "unknown" - for (field in c("ID", "ID_LIKE")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - id <- vars[[field]] - break - } - } - - # read version - version <- "unknown" - for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - version <- vars[[field]] - break - } - } - - # join together - paste(c(os, id, version), collapse = "-") - - } - - renv_bootstrap_platform_os_via_redhat_release <- function() { - - # read /etc/redhat-release - contents <- readLines("/etc/redhat-release", warn = FALSE) - - # infer id - id <- if (grepl("centos", contents, ignore.case = TRUE)) - "centos" - else if (grepl("redhat", contents, ignore.case = TRUE)) - "redhat" - else - "unknown" - - # try to find a version component (very hacky) - version <- "unknown" - - parts <- strsplit(contents, "[[:space:]]")[[1L]] - for (part in parts) { - - nv <- tryCatch(numeric_version(part), error = identity) - if (inherits(nv, "error")) - next - - version <- nv[1, 1] - break - - } - - paste(c("linux", id, version), collapse = "-") - - } - - renv_bootstrap_library_root_name <- function(project) { - - # use project name as-is if requested - asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") - if (asis) - return(basename(project)) - - # otherwise, disambiguate based on project's path - id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) - paste(basename(project), id, sep = "-") - - } - - renv_bootstrap_library_root <- function(project) { - - prefix <- renv_bootstrap_profile_prefix() - - path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) - if (!is.na(path)) - return(paste(c(path, prefix), collapse = "/")) - - path <- renv_bootstrap_library_root_impl(project) - if (!is.null(path)) { - name <- renv_bootstrap_library_root_name(project) - return(paste(c(path, prefix, name), collapse = "/")) - } - - renv_bootstrap_paths_renv("library", project = project) - - } - - renv_bootstrap_library_root_impl <- function(project) { - - root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) - if (!is.na(root)) - return(root) - - type <- renv_bootstrap_project_type(project) - if (identical(type, "package")) { - userdir <- renv_bootstrap_user_dir() - return(file.path(userdir, "library")) - } - - } - - renv_bootstrap_validate_version <- function(version, description = NULL) { - - # resolve description file - description <- description %||% { - path <- getNamespaceInfo("renv", "path") - packageDescription("renv", lib.loc = dirname(path)) - } - - # check whether requested version 'version' matches loaded version of renv - sha <- attr(version, "sha", exact = TRUE) - valid <- if (!is.null(sha)) - renv_bootstrap_validate_version_dev(sha, description) - else - renv_bootstrap_validate_version_release(version, description) - - if (valid) - return(TRUE) - - # the loaded version of renv doesn't match the requested version; - # give the user instructions on how to proceed - remote <- if (!is.null(description[["RemoteSha"]])) { - paste("rstudio/renv", description[["RemoteSha"]], sep = "@") - } else { - paste("renv", description[["Version"]], sep = "@") - } - - # display both loaded version + sha if available - friendly <- renv_bootstrap_version_friendly( - version = description[["Version"]], - sha = description[["RemoteSha"]] - ) - - fmt <- paste( - "renv %1$s was loaded from project library, but this project is configured to use renv %2$s.", - "- Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.", - "- Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.", - sep = "\n" - ) - catf(fmt, friendly, renv_bootstrap_version_friendly(version), remote) - - FALSE - - } - - renv_bootstrap_validate_version_dev <- function(version, description) { - expected <- description[["RemoteSha"]] - is.character(expected) && startswith(expected, version) - } - - renv_bootstrap_validate_version_release <- function(version, description) { - expected <- description[["Version"]] - is.character(expected) && identical(expected, version) - } - - renv_bootstrap_hash_text <- function(text) { - - hashfile <- tempfile("renv-hash-") - on.exit(unlink(hashfile), add = TRUE) - - writeLines(text, con = hashfile) - tools::md5sum(hashfile) - - } - - renv_bootstrap_load <- function(project, libpath, version) { - - # try to load renv from the project library - if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) - return(FALSE) - - # warn if the version of renv loaded does not match - renv_bootstrap_validate_version(version) - - # execute renv load hooks, if any - hooks <- getHook("renv::autoload") - for (hook in hooks) - if (is.function(hook)) - tryCatch(hook(), error = warning) - - # load the project - renv::load(project) - - TRUE - - } - - renv_bootstrap_profile_load <- function(project) { - - # if RENV_PROFILE is already set, just use that - profile <- Sys.getenv("RENV_PROFILE", unset = NA) - if (!is.na(profile) && nzchar(profile)) - return(profile) - - # check for a profile file (nothing to do if it doesn't exist) - path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) - if (!file.exists(path)) - return(NULL) - - # read the profile, and set it if it exists - contents <- readLines(path, warn = FALSE) - if (length(contents) == 0L) - return(NULL) - - # set RENV_PROFILE - profile <- contents[[1L]] - if (!profile %in% c("", "default")) - Sys.setenv(RENV_PROFILE = profile) - - profile - - } - - renv_bootstrap_profile_prefix <- function() { - profile <- renv_bootstrap_profile_get() - if (!is.null(profile)) - return(file.path("profiles", profile, "renv")) - } - - renv_bootstrap_profile_get <- function() { - profile <- Sys.getenv("RENV_PROFILE", unset = "") - renv_bootstrap_profile_normalize(profile) - } - - renv_bootstrap_profile_set <- function(profile) { - profile <- renv_bootstrap_profile_normalize(profile) - if (is.null(profile)) - Sys.unsetenv("RENV_PROFILE") - else - Sys.setenv(RENV_PROFILE = profile) - } - - renv_bootstrap_profile_normalize <- function(profile) { - - if (is.null(profile) || profile %in% c("", "default")) - return(NULL) - - profile - - } - - renv_bootstrap_path_absolute <- function(path) { - - substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( - substr(path, 1L, 1L) %in% c(letters, LETTERS) && - substr(path, 2L, 3L) %in% c(":/", ":\\") - ) - - } - - renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { - renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") - root <- if (renv_bootstrap_path_absolute(renv)) NULL else project - prefix <- if (profile) renv_bootstrap_profile_prefix() - components <- c(root, renv, prefix, ...) - paste(components, collapse = "/") - } - - renv_bootstrap_project_type <- function(path) { - - descpath <- file.path(path, "DESCRIPTION") - if (!file.exists(descpath)) - return("unknown") - - desc <- tryCatch( - read.dcf(descpath, all = TRUE), - error = identity - ) - - if (inherits(desc, "error")) - return("unknown") - - type <- desc$Type - if (!is.null(type)) - return(tolower(type)) - - package <- desc$Package - if (!is.null(package)) - return("package") - - "unknown" - - } - - renv_bootstrap_user_dir <- function() { - dir <- renv_bootstrap_user_dir_impl() - path.expand(chartr("\\", "/", dir)) - } - - renv_bootstrap_user_dir_impl <- function() { - - # use local override if set - override <- getOption("renv.userdir.override") - if (!is.null(override)) - return(override) - - # use R_user_dir if available - tools <- asNamespace("tools") - if (is.function(tools$R_user_dir)) - return(tools$R_user_dir("renv", "cache")) - - # try using our own backfill for older versions of R - envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") - for (envvar in envvars) { - root <- Sys.getenv(envvar, unset = NA) - if (!is.na(root)) - return(file.path(root, "R/renv")) - } - - # use platform-specific default fallbacks - if (Sys.info()[["sysname"]] == "Windows") - file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") - else if (Sys.info()[["sysname"]] == "Darwin") - "~/Library/Caches/org.R-project.R/R/renv" - else - "~/.cache/R/renv" - - } - - renv_bootstrap_version_friendly <- function(version, sha = NULL) { - sha <- sha %||% attr(version, "sha", exact = TRUE) - parts <- c(version, sprintf("[sha: %s]", substring(sha, 1L, 7L))) - paste(parts, collapse = " ") - } - - renv_bootstrap_run <- function(version, libpath) { - - # perform bootstrap - bootstrap(version, libpath) - - # exit early if we're just testing bootstrap - if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) - return(TRUE) - - # try again to load - if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { - return(renv::load(project = getwd())) - } - - # failed to download or load renv; warn the user - msg <- c( - "Failed to find an renv installation: the project will not be loaded.", - "Use `renv::activate()` to re-initialize the project." - ) - - warning(paste(msg, collapse = "\n"), call. = FALSE) - - } - - - renv_bootstrap_in_rstudio <- function() { - commandArgs()[[1]] == "RStudio" - } - - renv_json_read <- function(file = NULL, text = NULL) { - - jlerr <- NULL - - # if jsonlite is loaded, use that instead - if ("jsonlite" %in% loadedNamespaces()) { - - json <- catch(renv_json_read_jsonlite(file, text)) - if (!inherits(json, "error")) - return(json) - - jlerr <- json - - } - - # otherwise, fall back to the default JSON reader - json <- catch(renv_json_read_default(file, text)) - if (!inherits(json, "error")) - return(json) - - # report an error - if (!is.null(jlerr)) - stop(jlerr) - else - stop(json) - - } - - renv_json_read_jsonlite <- function(file = NULL, text = NULL) { - text <- paste(text %||% read(file), collapse = "\n") - jsonlite::fromJSON(txt = text, simplifyVector = FALSE) - } - - renv_json_read_default <- function(file = NULL, text = NULL) { - - # find strings in the JSON - text <- paste(text %||% read(file), collapse = "\n") - pattern <- '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' - locs <- gregexpr(pattern, text, perl = TRUE)[[1]] - - # if any are found, replace them with placeholders - replaced <- text - strings <- character() - replacements <- character() - - if (!identical(c(locs), -1L)) { - - # get the string values - starts <- locs - ends <- locs + attr(locs, "match.length") - 1L - strings <- substring(text, starts, ends) - - # only keep those requiring escaping - strings <- grep("[[\\]{}:]", strings, perl = TRUE, value = TRUE) - - # compute replacements - replacements <- sprintf('"\032%i\032"', seq_along(strings)) - - # replace the strings - mapply(function(string, replacement) { - replaced <<- sub(string, replacement, replaced, fixed = TRUE) - }, strings, replacements) - - } - - # transform the JSON into something the R parser understands - transformed <- replaced - transformed <- gsub("{}", "`names<-`(list(), character())", transformed, fixed = TRUE) - transformed <- gsub("[[{]", "list(", transformed, perl = TRUE) - transformed <- gsub("[]}]", ")", transformed, perl = TRUE) - transformed <- gsub(":", "=", transformed, fixed = TRUE) - text <- paste(transformed, collapse = "\n") - - # parse it - json <- parse(text = text, keep.source = FALSE, srcfile = NULL)[[1L]] - - # construct map between source strings, replaced strings - map <- as.character(parse(text = strings)) - names(map) <- as.character(parse(text = replacements)) - - # convert to list - map <- as.list(map) - - # remap strings in object - remapped <- renv_json_remap(json, map) - - # evaluate - eval(remapped, envir = baseenv()) - - } - - renv_json_remap <- function(json, map) { - - # fix names - if (!is.null(names(json))) { - lhs <- match(names(json), names(map), nomatch = 0L) - rhs <- match(names(map), names(json), nomatch = 0L) - names(json)[rhs] <- map[lhs] - } - - # fix values - if (is.character(json)) - return(map[[json]] %||% json) - - # handle true, false, null - if (is.name(json)) { - text <- as.character(json) - if (text == "true") - return(TRUE) - else if (text == "false") - return(FALSE) - else if (text == "null") - return(NULL) - } - - # recurse - if (is.recursive(json)) { - for (i in seq_along(json)) { - json[i] <- list(renv_json_remap(json[[i]], map)) - } - } - - json - - } - - # load the renv profile, if any - renv_bootstrap_profile_load(project) - - # construct path to library root - root <- renv_bootstrap_library_root(project) - - # construct library prefix for platform - prefix <- renv_bootstrap_platform_prefix() - - # construct full libpath - libpath <- file.path(root, prefix) - - # attempt to load - if (renv_bootstrap_load(project, libpath, version)) - return(TRUE) - - if (renv_bootstrap_in_rstudio()) { - setHook("rstudio.sessionInit", function(...) { - renv_bootstrap_run(version, libpath) - - # Work around buglet in RStudio if hook uses readline - tryCatch( - { - tools <- as.environment("tools:rstudio") - tools$.rs.api.sendToConsole("", echo = FALSE, focus = FALSE) - }, - error = function(cnd) {} - ) - }) - } else { - renv_bootstrap_run(version, libpath) - } - - invisible() - -}) diff --git a/renv/profiles/4.1/renv.lock b/renv/profiles/4.1/renv.lock deleted file mode 100644 index 5801ed10..00000000 --- a/renv/profiles/4.1/renv.lock +++ /dev/null @@ -1,1701 +0,0 @@ -{ - "R": { - "Version": "4.1.3", - "Repositories": [ - { - "Name": "CRAN", - "URL": "https://packagemanager.posit.co/cran/latest" - }, - { - "Name": "RSPM", - "URL": "https://packagemanager.posit.co/cran/2022-03-10" - } - ] - }, - "Packages": { - "DT": { - "Package": "DT", - "Version": "0.21", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "crosstalk", - "htmltools", - "htmlwidgets", - "jquerylib", - "jsonlite", - "magrittr", - "promises" - ], - "Hash": "45fa28dbf288cd606e13ca35d3d72437" - }, - "R.cache": { - "Package": "R.cache", - "Version": "0.15.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "R.oo", - "R.utils", - "digest", - "utils" - ], - "Hash": "e92a8ea8388c47c82ed8aa435ed3be50" - }, - "R.methodsS3": { - "Package": "R.methodsS3", - "Version": "1.8.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "4bf6453323755202d5909697b6f7c109" - }, - "R.oo": { - "Package": "R.oo", - "Version": "1.24.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "methods", - "utils" - ], - "Hash": "5709328352717e2f0a9c012be8a97554" - }, - "R.utils": { - "Package": "R.utils", - "Version": "2.11.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "R.oo", - "methods", - "tools", - "utils" - ], - "Hash": "a7ecb8e60815c7a18648e84cd121b23a" - }, - "R6": { - "Package": "R6", - "Version": "2.5.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "470851b6d5d0ac559e9d01bb352b4021" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.0.8", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods", - "utils" - ], - "Hash": "22b546dd7e337f6c0c58a39983a496bc" - }, - "askpass": { - "Package": "askpass", - "Version": "1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "sys" - ], - "Hash": "e8a22846fff485f0be3770c2da758713" - }, - "backports": { - "Package": "backports", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "c39fbec8a30d23e721980b8afb31984c" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "543776ae6848fde2f48ff3816d0628bc" - }, - "brew": { - "Package": "brew", - "Version": "1.0-7", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "38875ea52350ff4b4c03849fc69736c8" - }, - "brio": { - "Package": "brio", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "976cf154dfb043c012d87cddd8bca363" - }, - "bslib": { - "Package": "bslib", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "htmltools", - "jquerylib", - "jsonlite", - "rlang", - "sass" - ], - "Hash": "56ae7e1987b340186a8a5a157c2ec358" - }, - "cachem": { - "Package": "cachem", - "Version": "1.0.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "fastmap", - "rlang" - ], - "Hash": "648c5b3d71e6a37e3043617489a0a0e9" - }, - "callr": { - "Package": "callr", - "Version": "3.7.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "processx", - "utils" - ], - "Hash": "9b2191ede20fa29828139b9900922e51" - }, - "cellranger": { - "Package": "cellranger", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "rematch", - "tibble" - ], - "Hash": "f61dbaec772ccd2e17705c1e872e9e7c" - }, - "cli": { - "Package": "cli", - "Version": "3.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "0d297d01734d2bcea40197bd4971a764" - }, - "clipr": { - "Package": "clipr", - "Version": "0.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" - }, - "codetools": { - "Package": "codetools", - "Version": "0.2-18", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "019388fc48e48b3da0d3a76ff94608a8" - }, - "collections": { - "Package": "collections", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "92537c684a3d2eaa6bd8f65c28ef97f0" - }, - "commonmark": { - "Package": "commonmark", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "2ba81b120c1655ab696c935ef33ea716" - }, - "covr": { - "Package": "covr", - "Version": "3.5.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "crayon", - "digest", - "httr", - "jsonlite", - "methods", - "rex", - "stats", - "utils", - "withr", - "yaml" - ], - "Hash": "6d80a9fc3c0c8473153b54fa54719dfd" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "ed588261931ee3be2c700d22e94a29ab" - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "methods", - "utils" - ], - "Hash": "741c2e098e98afe3dc26a7b0e5489f4e" - }, - "credentials": { - "Package": "credentials", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass", - "curl", - "jsonlite", - "openssl", - "sys" - ], - "Hash": "93762d0a34d78e6a025efdbfb5c6bb41" - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ], - "Hash": "6aa54f69598c32177e920eb3402e8293" - }, - "curl": { - "Package": "curl", - "Version": "4.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "022c42d49c28e95d69ca60446dbabf88" - }, - "cyclocomp": { - "Package": "cyclocomp", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "callr", - "crayon", - "desc", - "remotes", - "withr" - ], - "Hash": "53cbed70a2f7472d48fb6aef08442f25" - }, - "desc": { - "Package": "desc", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "rprojroot", - "utils" - ], - "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" - }, - "devtools": { - "Package": "devtools", - "Version": "2.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "callr", - "cli", - "desc", - "ellipsis", - "fs", - "httr", - "lifecycle", - "memoise", - "pkgbuild", - "pkgload", - "rcmdcheck", - "remotes", - "rlang", - "roxygen2", - "rstudioapi", - "rversions", - "sessioninfo", - "stats", - "testthat", - "tools", - "usethis", - "utils", - "withr" - ], - "Hash": "fc35e13bb582e5fe6f63f3d647a4cbe5" - }, - "diffdf": { - "Package": "diffdf", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "tibble" - ], - "Hash": "9ddedef46959baad2080047a1b0117fe" - }, - "diffobj": { - "Package": "diffobj", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "crayon", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" - }, - "digest": { - "Package": "digest", - "Version": "0.6.29", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "cf6b206a045a684728c3267ef7596190" - }, - "downlit": { - "Package": "downlit", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "brio", - "desc", - "digest", - "evaluate", - "fansi", - "memoise", - "rlang", - "vctrs", - "yaml" - ], - "Hash": "ba63dc9ab5a31f3209892437e40c5f60" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "generics", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "eb5742d256a0d9306d85ea68756d8187" - }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "rlang" - ], - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" - }, - "evaluate": { - "Package": "evaluate", - "Version": "0.15", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "699a7a93d08c962d9f8950b2d7a227f1" - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "utils" - ], - "Hash": "f28149c2d7a1342a834b314e95e67260" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "77bd60a6157420d4ffa93b27cf6a58b8" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "htmltools", - "rlang" - ], - "Hash": "55624ed409e46c5f358b2c060be87f67" - }, - "fs": { - "Package": "fs", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "7c89603d81793f0d5486d91ab1fc6f1d" - }, - "generics": { - "Package": "generics", - "Version": "0.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "177475892cf4a55865868527654a7741" - }, - "gert": { - "Package": "gert", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass", - "credentials", - "openssl", - "rstudioapi", - "sys", - "zip" - ], - "Hash": "8fddce7cbd59467106266a6e93e253b4" - }, - "gh": { - "Package": "gh", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "gitcreds", - "httr", - "ini", - "jsonlite" - ], - "Hash": "38c2580abbda249bd6afeec00d14f531" - }, - "git2r": { - "Package": "git2r", - "Version": "0.29.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "graphics", - "utils" - ], - "Hash": "b114135c4749076bd5ef74a5827b6f62" - }, - "gitcreds": { - "Package": "gitcreds", - "Version": "0.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "f3aefccc1cc50de6338146b62f115de8" - }, - "glue": { - "Package": "glue", - "Version": "1.6.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" - }, - "highr": { - "Package": "highr", - "Version": "0.9", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "xfun" - ], - "Hash": "8eb36c8125038e648e5d111c0d7b2ed4" - }, - "hms": { - "Package": "hms", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "ellipsis", - "lifecycle", - "methods", - "pkgconfig", - "rlang", - "vctrs" - ], - "Hash": "5b8a2dd0fdbe2ab4f6081e6c7be6dfca" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "digest", - "fastmap", - "grDevices", - "rlang", - "utils" - ], - "Hash": "526c484233f42522278ab06fb185cb26" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.5.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "htmltools", - "jsonlite", - "yaml" - ], - "Hash": "76147821cd3fcd8c4b04e1ef0498e7fb" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "Rcpp", - "later", - "promises", - "utils" - ], - "Hash": "97fe71f0a4a1c9890e6c2128afa04bc0" - }, - "httr": { - "Package": "httr", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "curl", - "jsonlite", - "mime", - "openssl" - ], - "Hash": "a525aba14184fec243f9eaec62fbed43" - }, - "hunspell": { - "Package": "hunspell", - "Version": "3.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "Rcpp", - "digest" - ], - "Hash": "3987784c19192ad0f2261c456d936df1" - }, - "ini": { - "Package": "ini", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "6154ec2223172bce8162d4153cda21f7" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools" - ], - "Hash": "5aab57a3bd297eee1c1d862735972182" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods" - ], - "Hash": "d07e729b27b372429d42d24d503613a0" - }, - "knitr": { - "Package": "knitr", - "Version": "1.40", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "evaluate", - "highr", - "methods", - "stringr", - "tools", - "xfun", - "yaml" - ], - "Hash": "caea8b0f899a0b1738444b9bc47067e7" - }, - "languageserver": { - "Package": "languageserver", - "Version": "0.3.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "callr", - "collections", - "fs", - "jsonlite", - "lintr", - "parallel", - "roxygen2", - "stringi", - "styler", - "tools", - "utils", - "xml2", - "xmlparsedata" - ], - "Hash": "f62ed8b09fd56cd70291bd077bc52c4b" - }, - "later": { - "Package": "later", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "Rcpp", - "rlang" - ], - "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "d908914ae53b04d4c0c0fd72ecc35370" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "rlang" - ], - "Hash": "001cecbeac1cff9301bdc3775ee46a86" - }, - "lintr": { - "Package": "lintr", - "Version": "3.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "backports", - "codetools", - "crayon", - "cyclocomp", - "digest", - "glue", - "jsonlite", - "knitr", - "rex", - "stats", - "utils", - "xml2", - "xmlparsedata" - ], - "Hash": "b21ebd652d940f099915221f3328ab7b" - }, - "lubridate": { - "Package": "lubridate", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11", - "generics", - "methods" - ], - "Hash": "2ff5eedb6ee38fb1b81205c73be1be5a" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "cdc87ecd81934679d1557633d8e1fe51" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cachem", - "rlang" - ], - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" - }, - "mime": { - "Package": "mime", - "Version": "0.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "tools" - ], - "Hash": "18e9c28c1d3ca1560ce30658b22ce104" - }, - "miniUI": { - "Package": "miniUI", - "Version": "0.1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools", - "shiny", - "utils" - ], - "Hash": "fec5f52652d60615fdb3957b3d74324a" - }, - "openssl": { - "Package": "openssl", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass" - ], - "Hash": "cf4329aac12c2c44089974559c18e446" - }, - "pillar": { - "Package": "pillar", - "Version": "1.9.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "fansi", - "glue", - "lifecycle", - "rlang", - "utf8", - "utils", - "vctrs" - ], - "Hash": "15da5a8412f317beeee6175fbc76f4bb" - }, - "pkgbuild": { - "Package": "pkgbuild", - "Version": "1.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "callr", - "cli", - "crayon", - "desc", - "prettyunits", - "rprojroot", - "withr" - ], - "Hash": "66d2adfed274daf81ccfe77d974c3b9b" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "01f28d4278f15c76cddbea05899c5d6f" - }, - "pkgdown": { - "Package": "pkgdown", - "Version": "2.0.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "callr", - "cli", - "desc", - "digest", - "downlit", - "fs", - "httr", - "jsonlite", - "magrittr", - "memoise", - "purrr", - "ragg", - "rlang", - "rmarkdown", - "tibble", - "whisker", - "withr", - "xml2", - "yaml" - ], - "Hash": "16fa15449c930bf3a7761d3c68f8abf9" - }, - "pkgload": { - "Package": "pkgload", - "Version": "1.2.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "crayon", - "desc", - "methods", - "rlang", - "rprojroot", - "rstudioapi", - "utils", - "withr" - ], - "Hash": "7533cd805940821bf23eaf3c8d4c1735" - }, - "praise": { - "Package": "praise", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "a555924add98c99d2f411e37e7d25e9f" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" - }, - "processx": { - "Package": "processx", - "Version": "3.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "ps", - "utils" - ], - "Hash": "a11891e28c1f1e5ddd773ba1b8c07cf6" - }, - "progress": { - "Package": "progress", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "crayon", - "hms", - "prettyunits" - ], - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" - }, - "promises": { - "Package": "promises", - "Version": "1.2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "Rcpp", - "later", - "magrittr", - "rlang", - "stats" - ], - "Hash": "4ab2c43adb4d4699cf3690acd378d75d" - }, - "ps": { - "Package": "ps", - "Version": "1.6.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "32620e2001c1dce1af49c49dccbb9420" - }, - "purrr": { - "Package": "purrr", - "Version": "0.3.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "magrittr", - "rlang" - ], - "Hash": "97def703420c8ab10d8f0e6c72101e02" - }, - "ragg": { - "Package": "ragg", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "systemfonts", - "textshaping" - ], - "Hash": "14932bb6f2739c771ca4ceaba6b4248e" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "5e3c5dc0b071b21fa128676560dbe94d" - }, - "rcmdcheck": { - "Package": "rcmdcheck", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "callr", - "cli", - "curl", - "desc", - "digest", - "pkgbuild", - "prettyunits", - "rprojroot", - "sessioninfo", - "utils", - "withr", - "xopen" - ], - "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" - }, - "readxl": { - "Package": "readxl", - "Version": "1.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "Rcpp", - "cellranger", - "progress", - "tibble", - "utils" - ], - "Hash": "63537c483c2dbec8d9e3183b3735254a" - }, - "rematch": { - "Package": "rematch", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c66b930d20bb6d858cd18e1cebcfae5c" - }, - "rematch2": { - "Package": "rematch2", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "tibble" - ], - "Hash": "76c9e04c712a05848ae7a23d2f170a40" - }, - "remotes": { - "Package": "remotes", - "Version": "2.4.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "63d15047eb239f95160112bcadc4fcb9" - }, - "renv": { - "Package": "renv", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "c321cd99d56443dbffd1c9e673c0c1a2" - }, - "rex": { - "Package": "rex", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "lazyeval" - ], - "Hash": "ae34cd56890607370665bee5bd17812f" - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "dc079ccd156cde8647360f473c1fa718" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.17", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "evaluate", - "htmltools", - "jquerylib", - "jsonlite", - "knitr", - "methods", - "stringr", - "tinytex", - "tools", - "utils", - "xfun", - "yaml" - ], - "Hash": "e97c8be593e010f93520e8215c0f9189" - }, - "roxygen2": { - "Package": "roxygen2", - "Version": "7.2.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "brew", - "cli", - "commonmark", - "cpp11", - "desc", - "knitr", - "methods", - "pkgload", - "purrr", - "rlang", - "stringi", - "stringr", - "utils", - "withr", - "xml2" - ], - "Hash": "7b153c746193b143c14baa072bae4e27" - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "249d8cd1e74a8f6a26194a91b47f21d1" - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.13", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "06c85365a03fdaf699966cc1d3cf53ea" - }, - "rversions": { - "Package": "rversions", - "Version": "2.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "curl", - "utils", - "xml2" - ], - "Hash": "f88fab00907b312f8b23ec13e2d437cb" - }, - "sass": { - "Package": "sass", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "fs", - "htmltools", - "rappdirs", - "rlang" - ], - "Hash": "50cf822feb64bb3977bda0b7091be623" - }, - "sessioninfo": { - "Package": "sessioninfo", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "tools", - "utils" - ], - "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" - }, - "shiny": { - "Package": "shiny", - "Version": "1.7.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "bslib", - "cachem", - "commonmark", - "crayon", - "ellipsis", - "fastmap", - "fontawesome", - "glue", - "grDevices", - "htmltools", - "httpuv", - "jsonlite", - "later", - "lifecycle", - "methods", - "mime", - "promises", - "rlang", - "sourcetools", - "tools", - "utils", - "withr", - "xtable" - ], - "Hash": "00344c227c7bd0ab5d78052c5d736c44" - }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "947e4e02a79effa5d512473e10f41797" - }, - "spelling": { - "Package": "spelling", - "Version": "2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "commonmark", - "hunspell", - "knitr", - "xml2" - ], - "Hash": "b8c899a5c83f0d897286550481c91798" - }, - "staged.dependencies": { - "Package": "staged.dependencies", - "Version": "0.3.1", - "Source": "GitHub", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteUsername": "openpharma", - "RemoteRepo": "staged.dependencies", - "RemoteRef": "main", - "RemoteSha": "1ab184a029bef8839a57bb6acd1c5c919cf1fd89", - "Requirements": [ - "desc", - "devtools", - "digest", - "dplyr", - "fs", - "git2r", - "glue", - "httr", - "jsonlite", - "methods", - "rcmdcheck", - "remotes", - "rlang", - "stats", - "tidyr", - "utils", - "withr", - "yaml" - ], - "Hash": "ea298f9fb221a8c7ca4c9e55e9c29b48" - }, - "stringi": { - "Package": "stringi", - "Version": "1.7.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stats", - "tools", - "utils" - ], - "Hash": "bba431031d30789535745a9627ac9271" - }, - "stringr": { - "Package": "stringr", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "glue", - "magrittr", - "stringi" - ], - "Hash": "0759e6b6c0957edb1311028a49a35e76" - }, - "styler": { - "Package": "styler", - "Version": "1.9.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.cache", - "cli", - "magrittr", - "purrr", - "rlang", - "rprojroot", - "tools", - "vctrs", - "withr" - ], - "Hash": "ed8c90822b7da46beee603f263a85fe0" - }, - "sys": { - "Package": "sys", - "Version": "3.4", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "b227d13e29222b4574486cfcbde077fa" - }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "90b28393209827327de889f49935140a" - }, - "testthat": { - "Package": "testthat", - "Version": "3.1.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "brio", - "callr", - "cli", - "desc", - "digest", - "ellipsis", - "evaluate", - "jsonlite", - "lifecycle", - "magrittr", - "methods", - "pkgload", - "praise", - "processx", - "ps", - "rlang", - "utils", - "waldo", - "withr" - ], - "Hash": "7eb5fd202a61d2fb78af5869b6c08998" - }, - "textshaping": { - "Package": "textshaping", - "Version": "0.3.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11", - "systemfonts" - ], - "Hash": "1ab6223d3670fac7143202cb6a2d43d5" - }, - "tibble": { - "Package": "tibble", - "Version": "3.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "fansi", - "lifecycle", - "magrittr", - "methods", - "pillar", - "pkgconfig", - "rlang", - "utils", - "vctrs" - ], - "Hash": "37695ff125982007d42a59ad10982ff2" - }, - "tidyr": { - "Package": "tidyr", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11", - "dplyr", - "ellipsis", - "glue", - "lifecycle", - "magrittr", - "purrr", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "d8b95b7fee945d7da6888cf7eb71a49c" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang", - "vctrs", - "withr" - ], - "Hash": "79540e5fcd9e0435af547d885f184fd5" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.37", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "xfun" - ], - "Hash": "a80abeb527a977e4bef21873d29222dd" - }, - "usethis": { - "Package": "usethis", - "Version": "2.1.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "clipr", - "crayon", - "curl", - "desc", - "fs", - "gert", - "gh", - "glue", - "jsonlite", - "lifecycle", - "purrr", - "rappdirs", - "rlang", - "rprojroot", - "rstudioapi", - "stats", - "utils", - "whisker", - "withr", - "yaml" - ], - "Hash": "c499f488e6dd7718accffaee5bc5a79b" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "c9c462b759a5cc844ae25b5942654d13" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.6.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang" - ], - "Hash": "7e877404388794361277be95d8445de8" - }, - "waldo": { - "Package": "waldo", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "diffobj", - "fansi", - "glue", - "methods", - "rematch2", - "rlang", - "tibble" - ], - "Hash": "035fba89d0c86e2113120f93301b98ad" - }, - "whisker": { - "Package": "whisker", - "Version": "0.4", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "ca970b96d894e90397ed20637a0c1bbe" - }, - "withr": { - "Package": "withr", - "Version": "2.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "graphics", - "stats" - ], - "Hash": "c0e49a9760983e81e55cdd9be92e7182" - }, - "xfun": { - "Package": "xfun", - "Version": "0.34", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "stats", - "tools" - ], - "Hash": "9eba2411b0b1f879797141bd24df7407" - }, - "xml2": { - "Package": "xml2", - "Version": "1.3.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "40682ed6a969ea5abfd351eb67833adc" - }, - "xmlparsedata": { - "Package": "xmlparsedata", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "45e4bf3c46476896e821fc0a408fb4fc" - }, - "xopen": { - "Package": "xopen", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "processx" - ], - "Hash": "6c85f015dee9cc7710ddd20f86881f58" - }, - "xtable": { - "Package": "xtable", - "Version": "1.8-4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stats", - "utils" - ], - "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.5", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "458bb38374d73bf83b1bb85e353da200" - }, - "zip": { - "Package": "zip", - "Version": "2.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c7eef2996ac270a18c2715c997a727c5" - } - } -} diff --git a/renv/profiles/4.1/renv/.gitignore b/renv/profiles/4.1/renv/.gitignore deleted file mode 100644 index 0ec0cbba..00000000 --- a/renv/profiles/4.1/renv/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -library/ -local/ -cellar/ -lock/ -python/ -sandbox/ -staging/ diff --git a/renv/profiles/4.1/renv/settings.json b/renv/profiles/4.1/renv/settings.json deleted file mode 100644 index 0c8943c5..00000000 --- a/renv/profiles/4.1/renv/settings.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "bioconductor.version": null, - "external.libraries": [], - "ignored.packages": [ - "admiral", - "admiraldev", - "admiralci", - "pharmaversesdtm" - ], - "package.dependency.fields": [ - "Imports", - "Depends", - "LinkingTo" - ], - "ppm.enabled": null, - "ppm.ignored.urls": [], - "r.version": null, - "snapshot.type": "custom", - "use.cache": true, - "vcs.ignore.cellar": true, - "vcs.ignore.library": true, - "vcs.ignore.local": true, - "vcs.manage.ignores": true -} diff --git a/renv/profiles/4.2/renv.lock b/renv/profiles/4.2/renv.lock deleted file mode 100644 index 7661270b..00000000 --- a/renv/profiles/4.2/renv.lock +++ /dev/null @@ -1,1785 +0,0 @@ -{ - "R": { - "Version": "4.2.3", - "Repositories": [ - { - "Name": "CRAN", - "URL": "https://packagemanager.posit.co/cran/latest" - }, - { - "Name": "RSPM", - "URL": "https://packagemanager.posit.co/cran/2023-03-15" - } - ] - }, - "Packages": { - "DT": { - "Package": "DT", - "Version": "0.27", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "crosstalk", - "htmltools", - "htmlwidgets", - "jquerylib", - "jsonlite", - "magrittr", - "promises" - ], - "Hash": "3444e6ed78763f9f13aaa39f2481eb34" - }, - "R.cache": { - "Package": "R.cache", - "Version": "0.16.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "R.oo", - "R.utils", - "digest", - "utils" - ], - "Hash": "fe539ca3f8efb7410c3ae2cf5fe6c0f8" - }, - "R.methodsS3": { - "Package": "R.methodsS3", - "Version": "1.8.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "278c286fd6e9e75d0c2e8f731ea445c8" - }, - "R.oo": { - "Package": "R.oo", - "Version": "1.25.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "methods", - "utils" - ], - "Hash": "a0900a114f4f0194cf4aa8cd4a700681" - }, - "R.utils": { - "Package": "R.utils", - "Version": "2.12.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "R.oo", - "methods", - "tools", - "utils" - ], - "Hash": "325f01db13da12c04d8f6e7be36ff514" - }, - "R6": { - "Package": "R6", - "Version": "2.5.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "470851b6d5d0ac559e9d01bb352b4021" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.0.10", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods", - "utils" - ], - "Hash": "e749cae40fa9ef469b6050959517453c" - }, - "askpass": { - "Package": "askpass", - "Version": "1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "sys" - ], - "Hash": "e8a22846fff485f0be3770c2da758713" - }, - "backports": { - "Package": "backports", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "c39fbec8a30d23e721980b8afb31984c" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "543776ae6848fde2f48ff3816d0628bc" - }, - "brew": { - "Package": "brew", - "Version": "1.0-8", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "d69a786e85775b126bddbee185ae6084" - }, - "brio": { - "Package": "brio", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "976cf154dfb043c012d87cddd8bca363" - }, - "bslib": { - "Package": "bslib", - "Version": "0.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "cachem", - "grDevices", - "htmltools", - "jquerylib", - "jsonlite", - "memoise", - "mime", - "rlang", - "sass" - ], - "Hash": "a7fbf03946ad741129dc81098722fca1" - }, - "cachem": { - "Package": "cachem", - "Version": "1.0.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "fastmap", - "rlang" - ], - "Hash": "cda74447c42f529de601fe4d4050daef" - }, - "callr": { - "Package": "callr", - "Version": "3.7.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "processx", - "utils" - ], - "Hash": "9b2191ede20fa29828139b9900922e51" - }, - "cellranger": { - "Package": "cellranger", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "rematch", - "tibble" - ], - "Hash": "f61dbaec772ccd2e17705c1e872e9e7c" - }, - "cli": { - "Package": "cli", - "Version": "3.6.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "3177a5a16c243adc199ba33117bd9657" - }, - "clipr": { - "Package": "clipr", - "Version": "0.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" - }, - "codetools": { - "Package": "codetools", - "Version": "0.2-19", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "c089a619a7fae175d149d89164f8c7d8" - }, - "collections": { - "Package": "collections", - "Version": "0.3.7", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "90a0eda114ab0bef170ddbf5ef0cd93f" - }, - "commonmark": { - "Package": "commonmark", - "Version": "1.8.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "b6e3e947d1d7ebf3d2bdcea1bde63fe7" - }, - "covr": { - "Package": "covr", - "Version": "3.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "crayon", - "digest", - "httr", - "jsonlite", - "methods", - "rex", - "stats", - "utils", - "withr", - "yaml" - ], - "Hash": "a861cee34fbb4b107a73dd414ef56724" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "ed588261931ee3be2c700d22e94a29ab" - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "methods", - "utils" - ], - "Hash": "e8a1e41acf02548751f45c718d55aa6a" - }, - "credentials": { - "Package": "credentials", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass", - "curl", - "jsonlite", - "openssl", - "sys" - ], - "Hash": "93762d0a34d78e6a025efdbfb5c6bb41" - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ], - "Hash": "6aa54f69598c32177e920eb3402e8293" - }, - "curl": { - "Package": "curl", - "Version": "5.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "e4f97056611e8e6b8b852d13b7400cf1" - }, - "cyclocomp": { - "Package": "cyclocomp", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "callr", - "crayon", - "desc", - "remotes", - "withr" - ], - "Hash": "53cbed70a2f7472d48fb6aef08442f25" - }, - "desc": { - "Package": "desc", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "rprojroot", - "utils" - ], - "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" - }, - "devtools": { - "Package": "devtools", - "Version": "2.4.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "desc", - "ellipsis", - "fs", - "lifecycle", - "memoise", - "miniUI", - "pkgbuild", - "pkgdown", - "pkgload", - "profvis", - "rcmdcheck", - "remotes", - "rlang", - "roxygen2", - "rversions", - "sessioninfo", - "stats", - "testthat", - "tools", - "urlchecker", - "usethis", - "utils", - "withr" - ], - "Hash": "ea5bc8b4a6a01e4f12d98b58329930bb" - }, - "diffdf": { - "Package": "diffdf", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "tibble" - ], - "Hash": "9ddedef46959baad2080047a1b0117fe" - }, - "diffobj": { - "Package": "diffobj", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "crayon", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" - }, - "digest": { - "Package": "digest", - "Version": "0.6.31", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "8b708f296afd9ae69f450f9640be8990" - }, - "downlit": { - "Package": "downlit", - "Version": "0.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "brio", - "desc", - "digest", - "evaluate", - "fansi", - "memoise", - "rlang", - "vctrs", - "withr", - "yaml" - ], - "Hash": "79bf3f66590752ffbba20f8d2da94c7c" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "generics", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "eb5742d256a0d9306d85ea68756d8187" - }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "rlang" - ], - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" - }, - "evaluate": { - "Package": "evaluate", - "Version": "0.20", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "4b68aa51edd89a0e044a66e75ae3cc6c" - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "utils" - ], - "Hash": "1d9e7ad3c8312a192dea7d3db0274fde" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "f7736a18de97dea803bde0a2daaafb27" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "htmltools", - "rlang" - ], - "Hash": "e80750aec5717dedc019ad7ee40e4a7c" - }, - "fs": { - "Package": "fs", - "Version": "1.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "f4dcd23b67e33d851d2079f703e8b985" - }, - "generics": { - "Package": "generics", - "Version": "0.1.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "15e9634c0fcd294799e9b2e929ed1b86" - }, - "gert": { - "Package": "gert", - "Version": "1.9.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass", - "credentials", - "openssl", - "rstudioapi", - "sys", - "zip" - ], - "Hash": "9122b3958e749badb5c939f498038b57" - }, - "gh": { - "Package": "gh", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "gitcreds", - "httr2", - "ini", - "jsonlite", - "rlang" - ], - "Hash": "03533b1c875028233598f848fda44c4c" - }, - "git2r": { - "Package": "git2r", - "Version": "0.31.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "graphics", - "utils" - ], - "Hash": "acb972e0be37f83b9c762d962d75a188" - }, - "gitcreds": { - "Package": "gitcreds", - "Version": "0.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" - }, - "glue": { - "Package": "glue", - "Version": "1.6.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" - }, - "highr": { - "Package": "highr", - "Version": "0.10", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "xfun" - ], - "Hash": "06230136b2d2b9ba5805e1963fa6e890" - }, - "hms": { - "Package": "hms", - "Version": "1.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "ellipsis", - "lifecycle", - "methods", - "pkgconfig", - "rlang", - "vctrs" - ], - "Hash": "41100392191e1244b887878b533eea91" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "digest", - "ellipsis", - "fastmap", - "grDevices", - "rlang", - "utils" - ], - "Hash": "9d27e99cc90bd701c0a7a63e5923f9b7" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "htmltools", - "jsonlite", - "knitr", - "rmarkdown", - "yaml" - ], - "Hash": "b677ee5954471eaa974c0d099a343a1a" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.9", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "Rcpp", - "later", - "promises", - "utils" - ], - "Hash": "1046aa31a57eae8b357267a56a0b6d8b" - }, - "httr": { - "Package": "httr", - "Version": "1.4.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "curl", - "jsonlite", - "mime", - "openssl" - ], - "Hash": "f6844033201269bec3ca0097bc6c97b3" - }, - "httr2": { - "Package": "httr2", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "curl", - "glue", - "magrittr", - "openssl", - "rappdirs", - "rlang", - "withr" - ], - "Hash": "5c09fe33064978ede54de42309c8b532" - }, - "hunspell": { - "Package": "hunspell", - "Version": "3.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "Rcpp", - "digest" - ], - "Hash": "656219b6f3f605499d7cdbe208656639" - }, - "ini": { - "Package": "ini", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "6154ec2223172bce8162d4153cda21f7" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools" - ], - "Hash": "5aab57a3bd297eee1c1d862735972182" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "1.8.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods" - ], - "Hash": "a4269a09a9b865579b2635c77e572374" - }, - "knitr": { - "Package": "knitr", - "Version": "1.42", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "evaluate", - "highr", - "methods", - "tools", - "xfun", - "yaml" - ], - "Hash": "8329a9bcc82943c8069104d4be3ee22d" - }, - "languageserver": { - "Package": "languageserver", - "Version": "0.3.15", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "callr", - "collections", - "fs", - "jsonlite", - "lintr", - "parallel", - "roxygen2", - "stringi", - "styler", - "tools", - "utils", - "xml2", - "xmlparsedata" - ], - "Hash": "fbea0dd12b4f5dedbe3654e4b9cbbddc" - }, - "later": { - "Package": "later", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "Rcpp", - "rlang" - ], - "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "d908914ae53b04d4c0c0fd72ecc35370" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "rlang" - ], - "Hash": "001cecbeac1cff9301bdc3775ee46a86" - }, - "lintr": { - "Package": "lintr", - "Version": "3.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "backports", - "codetools", - "crayon", - "cyclocomp", - "digest", - "glue", - "jsonlite", - "knitr", - "rex", - "stats", - "utils", - "xml2", - "xmlparsedata" - ], - "Hash": "b21ebd652d940f099915221f3328ab7b" - }, - "lubridate": { - "Package": "lubridate", - "Version": "1.9.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "generics", - "methods", - "timechange" - ], - "Hash": "e25f18436e3efd42c7c590a1c4c15390" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "7ce2733a9826b3aeb1775d56fd305472" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cachem", - "rlang" - ], - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" - }, - "mime": { - "Package": "mime", - "Version": "0.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "tools" - ], - "Hash": "18e9c28c1d3ca1560ce30658b22ce104" - }, - "miniUI": { - "Package": "miniUI", - "Version": "0.1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools", - "shiny", - "utils" - ], - "Hash": "fec5f52652d60615fdb3957b3d74324a" - }, - "openssl": { - "Package": "openssl", - "Version": "2.0.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass" - ], - "Hash": "0f7cd2962e3044bb940cca4f4b5cecbe" - }, - "pillar": { - "Package": "pillar", - "Version": "1.9.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "fansi", - "glue", - "lifecycle", - "rlang", - "utf8", - "utils", - "vctrs" - ], - "Hash": "15da5a8412f317beeee6175fbc76f4bb" - }, - "pkgbuild": { - "Package": "pkgbuild", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "callr", - "cli", - "crayon", - "desc", - "prettyunits", - "processx", - "rprojroot", - "withr" - ], - "Hash": "d6c3008d79653a0f267703288230105e" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "01f28d4278f15c76cddbea05899c5d6f" - }, - "pkgdown": { - "Package": "pkgdown", - "Version": "2.0.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "callr", - "cli", - "desc", - "digest", - "downlit", - "fs", - "httr", - "jsonlite", - "magrittr", - "memoise", - "purrr", - "ragg", - "rlang", - "rmarkdown", - "tibble", - "whisker", - "withr", - "xml2", - "yaml" - ], - "Hash": "16fa15449c930bf3a7761d3c68f8abf9" - }, - "pkgload": { - "Package": "pkgload", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "crayon", - "desc", - "fs", - "glue", - "methods", - "rlang", - "rprojroot", - "utils", - "withr" - ], - "Hash": "6b0c222c5071efe0f3baf3dae9aa40e2" - }, - "praise": { - "Package": "praise", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "a555924add98c99d2f411e37e7d25e9f" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" - }, - "processx": { - "Package": "processx", - "Version": "3.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "ps", - "utils" - ], - "Hash": "a33ee2d9bf07564efb888ad98410da84" - }, - "profvis": { - "Package": "profvis", - "Version": "0.3.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "htmlwidgets", - "stringr" - ], - "Hash": "e9d21e79848e02e524bea6f5bd53e7e4" - }, - "progress": { - "Package": "progress", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "crayon", - "hms", - "prettyunits" - ], - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" - }, - "promises": { - "Package": "promises", - "Version": "1.2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "Rcpp", - "later", - "magrittr", - "rlang", - "stats" - ], - "Hash": "4ab2c43adb4d4699cf3690acd378d75d" - }, - "ps": { - "Package": "ps", - "Version": "1.7.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "68dd03d98a5efd1eb3012436de45ba83" - }, - "purrr": { - "Package": "purrr", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "lifecycle", - "magrittr", - "rlang", - "vctrs" - ], - "Hash": "d71c815267c640f17ddbf7f16144b4bb" - }, - "ragg": { - "Package": "ragg", - "Version": "1.2.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "systemfonts", - "textshaping" - ], - "Hash": "690bc058ea2b1b8a407d3cfe3dce3ef9" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "5e3c5dc0b071b21fa128676560dbe94d" - }, - "rcmdcheck": { - "Package": "rcmdcheck", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "callr", - "cli", - "curl", - "desc", - "digest", - "pkgbuild", - "prettyunits", - "rprojroot", - "sessioninfo", - "utils", - "withr", - "xopen" - ], - "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" - }, - "readxl": { - "Package": "readxl", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cellranger", - "cpp11", - "progress", - "tibble", - "utils" - ], - "Hash": "2e6020b1399d95f947ed867045e9ca17" - }, - "rematch": { - "Package": "rematch", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c66b930d20bb6d858cd18e1cebcfae5c" - }, - "rematch2": { - "Package": "rematch2", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "tibble" - ], - "Hash": "76c9e04c712a05848ae7a23d2f170a40" - }, - "remotes": { - "Package": "remotes", - "Version": "2.4.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "63d15047eb239f95160112bcadc4fcb9" - }, - "renv": { - "Package": "renv", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "c321cd99d56443dbffd1c9e673c0c1a2" - }, - "rex": { - "Package": "rex", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "lazyeval" - ], - "Hash": "ae34cd56890607370665bee5bd17812f" - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "dc079ccd156cde8647360f473c1fa718" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.20", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "evaluate", - "htmltools", - "jquerylib", - "jsonlite", - "knitr", - "methods", - "stringr", - "tinytex", - "tools", - "utils", - "xfun", - "yaml" - ], - "Hash": "716fde5382293cc94a71f68c85b78d19" - }, - "roxygen2": { - "Package": "roxygen2", - "Version": "7.2.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "brew", - "cli", - "commonmark", - "cpp11", - "desc", - "knitr", - "methods", - "pkgload", - "purrr", - "rlang", - "stringi", - "stringr", - "utils", - "withr", - "xml2" - ], - "Hash": "7b153c746193b143c14baa072bae4e27" - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "1de7ab598047a87bba48434ba35d497d" - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.14", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "690bd2acc42a9166ce34845884459320" - }, - "rversions": { - "Package": "rversions", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "curl", - "utils", - "xml2" - ], - "Hash": "a9881dfed103e83f9de151dc17002cd1" - }, - "sass": { - "Package": "sass", - "Version": "0.4.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "fs", - "htmltools", - "rappdirs", - "rlang" - ], - "Hash": "2bb4371a4c80115518261866eab6ab11" - }, - "sessioninfo": { - "Package": "sessioninfo", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "tools", - "utils" - ], - "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" - }, - "shiny": { - "Package": "shiny", - "Version": "1.7.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "bslib", - "cachem", - "commonmark", - "crayon", - "ellipsis", - "fastmap", - "fontawesome", - "glue", - "grDevices", - "htmltools", - "httpuv", - "jsonlite", - "later", - "lifecycle", - "methods", - "mime", - "promises", - "rlang", - "sourcetools", - "tools", - "utils", - "withr", - "xtable" - ], - "Hash": "c2eae3d8c670fa9dfa35a12066f4a1d5" - }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7-1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "5f5a7629f956619d519205ec475fe647" - }, - "spelling": { - "Package": "spelling", - "Version": "2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "commonmark", - "hunspell", - "knitr", - "xml2" - ], - "Hash": "b8c899a5c83f0d897286550481c91798" - }, - "staged.dependencies": { - "Package": "staged.dependencies", - "Version": "0.3.1", - "Source": "GitHub", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteUsername": "openpharma", - "RemoteRepo": "staged.dependencies", - "RemoteRef": "main", - "RemoteSha": "1ab184a029bef8839a57bb6acd1c5c919cf1fd89", - "Requirements": [ - "desc", - "devtools", - "digest", - "dplyr", - "fs", - "git2r", - "glue", - "httr", - "jsonlite", - "methods", - "rcmdcheck", - "remotes", - "rlang", - "stats", - "tidyr", - "utils", - "withr", - "yaml" - ], - "Hash": "ea298f9fb221a8c7ca4c9e55e9c29b48" - }, - "stringi": { - "Package": "stringi", - "Version": "1.7.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stats", - "tools", - "utils" - ], - "Hash": "ca8bd84263c77310739d2cf64d84d7c9" - }, - "stringr": { - "Package": "stringr", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "magrittr", - "rlang", - "stringi", - "vctrs" - ], - "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" - }, - "styler": { - "Package": "styler", - "Version": "1.9.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.cache", - "cli", - "magrittr", - "purrr", - "rlang", - "rprojroot", - "tools", - "vctrs", - "withr" - ], - "Hash": "ed8c90822b7da46beee603f263a85fe0" - }, - "sys": { - "Package": "sys", - "Version": "3.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "34c16f1ef796057bfa06d3f4ff818a5d" - }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "90b28393209827327de889f49935140a" - }, - "testthat": { - "Package": "testthat", - "Version": "3.1.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "brio", - "callr", - "cli", - "desc", - "digest", - "ellipsis", - "evaluate", - "jsonlite", - "lifecycle", - "magrittr", - "methods", - "pkgload", - "praise", - "processx", - "ps", - "rlang", - "utils", - "waldo", - "withr" - ], - "Hash": "7eb5fd202a61d2fb78af5869b6c08998" - }, - "textshaping": { - "Package": "textshaping", - "Version": "0.3.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11", - "systemfonts" - ], - "Hash": "1ab6223d3670fac7143202cb6a2d43d5" - }, - "tibble": { - "Package": "tibble", - "Version": "3.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "fansi", - "lifecycle", - "magrittr", - "methods", - "pillar", - "pkgconfig", - "rlang", - "utils", - "vctrs" - ], - "Hash": "37695ff125982007d42a59ad10982ff2" - }, - "tidyr": { - "Package": "tidyr", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "cpp11", - "dplyr", - "glue", - "lifecycle", - "magrittr", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang", - "vctrs", - "withr" - ], - "Hash": "79540e5fcd9e0435af547d885f184fd5" - }, - "timechange": { - "Package": "timechange", - "Version": "0.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "8548b44f79a35ba1791308b61e6012d7" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.44", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "xfun" - ], - "Hash": "c0f007e2eeed7722ce13d42b84a22e07" - }, - "urlchecker": { - "Package": "urlchecker", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "curl", - "tools", - "xml2" - ], - "Hash": "409328b8e1253c8d729a7836fe7f7a16" - }, - "usethis": { - "Package": "usethis", - "Version": "2.1.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "clipr", - "crayon", - "curl", - "desc", - "fs", - "gert", - "gh", - "glue", - "jsonlite", - "lifecycle", - "purrr", - "rappdirs", - "rlang", - "rprojroot", - "rstudioapi", - "stats", - "utils", - "whisker", - "withr", - "yaml" - ], - "Hash": "a67a22c201832b12c036cc059f1d137d" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "1fe17157424bb09c48a8b3b550c753bc" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.6.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang" - ], - "Hash": "7e877404388794361277be95d8445de8" - }, - "waldo": { - "Package": "waldo", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "diffobj", - "fansi", - "glue", - "methods", - "rematch2", - "rlang", - "tibble" - ], - "Hash": "035fba89d0c86e2113120f93301b98ad" - }, - "whisker": { - "Package": "whisker", - "Version": "0.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c6abfa47a46d281a7d5159d0a8891e88" - }, - "withr": { - "Package": "withr", - "Version": "2.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "graphics", - "stats" - ], - "Hash": "c0e49a9760983e81e55cdd9be92e7182" - }, - "xfun": { - "Package": "xfun", - "Version": "0.37", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "stats", - "tools" - ], - "Hash": "a6860e1400a8fd1ddb6d9b4230cc34ab" - }, - "xml2": { - "Package": "xml2", - "Version": "1.3.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "40682ed6a969ea5abfd351eb67833adc" - }, - "xmlparsedata": { - "Package": "xmlparsedata", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "45e4bf3c46476896e821fc0a408fb4fc" - }, - "xopen": { - "Package": "xopen", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "processx" - ], - "Hash": "6c85f015dee9cc7710ddd20f86881f58" - }, - "xtable": { - "Package": "xtable", - "Version": "1.8-4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stats", - "utils" - ], - "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.7", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "0d0056cc5383fbc240ccd0cb584bf436" - }, - "zip": { - "Package": "zip", - "Version": "2.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c42bfcec3fa6a0cce17ce1f8bc684f88" - } - } -} diff --git a/renv/profiles/4.2/renv/.gitignore b/renv/profiles/4.2/renv/.gitignore deleted file mode 100644 index 0ec0cbba..00000000 --- a/renv/profiles/4.2/renv/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -library/ -local/ -cellar/ -lock/ -python/ -sandbox/ -staging/ diff --git a/renv/profiles/4.2/renv/settings.json b/renv/profiles/4.2/renv/settings.json deleted file mode 100644 index 0c8943c5..00000000 --- a/renv/profiles/4.2/renv/settings.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "bioconductor.version": null, - "external.libraries": [], - "ignored.packages": [ - "admiral", - "admiraldev", - "admiralci", - "pharmaversesdtm" - ], - "package.dependency.fields": [ - "Imports", - "Depends", - "LinkingTo" - ], - "ppm.enabled": null, - "ppm.ignored.urls": [], - "r.version": null, - "snapshot.type": "custom", - "use.cache": true, - "vcs.ignore.cellar": true, - "vcs.ignore.library": true, - "vcs.ignore.local": true, - "vcs.manage.ignores": true -} diff --git a/renv/profiles/4.3/renv.lock b/renv/profiles/4.3/renv.lock deleted file mode 100644 index 1ce40dba..00000000 --- a/renv/profiles/4.3/renv.lock +++ /dev/null @@ -1,1785 +0,0 @@ -{ - "R": { - "Version": "4.3.1", - "Repositories": [ - { - "Name": "CRAN", - "URL": "https://packagemanager.posit.co/cran/latest" - }, - { - "Name": "RSPM", - "URL": "https://packagemanager.posit.co/cran/2023-04-20" - } - ] - }, - "Packages": { - "DT": { - "Package": "DT", - "Version": "0.27", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "crosstalk", - "htmltools", - "htmlwidgets", - "jquerylib", - "jsonlite", - "magrittr", - "promises" - ], - "Hash": "3444e6ed78763f9f13aaa39f2481eb34" - }, - "R.cache": { - "Package": "R.cache", - "Version": "0.16.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "R.oo", - "R.utils", - "digest", - "utils" - ], - "Hash": "fe539ca3f8efb7410c3ae2cf5fe6c0f8" - }, - "R.methodsS3": { - "Package": "R.methodsS3", - "Version": "1.8.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "278c286fd6e9e75d0c2e8f731ea445c8" - }, - "R.oo": { - "Package": "R.oo", - "Version": "1.25.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "methods", - "utils" - ], - "Hash": "a0900a114f4f0194cf4aa8cd4a700681" - }, - "R.utils": { - "Package": "R.utils", - "Version": "2.12.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.methodsS3", - "R.oo", - "methods", - "tools", - "utils" - ], - "Hash": "325f01db13da12c04d8f6e7be36ff514" - }, - "R6": { - "Package": "R6", - "Version": "2.5.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "470851b6d5d0ac559e9d01bb352b4021" - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.0.10", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods", - "utils" - ], - "Hash": "e749cae40fa9ef469b6050959517453c" - }, - "askpass": { - "Package": "askpass", - "Version": "1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "sys" - ], - "Hash": "e8a22846fff485f0be3770c2da758713" - }, - "backports": { - "Package": "backports", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "c39fbec8a30d23e721980b8afb31984c" - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "543776ae6848fde2f48ff3816d0628bc" - }, - "brew": { - "Package": "brew", - "Version": "1.0-8", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "d69a786e85775b126bddbee185ae6084" - }, - "brio": { - "Package": "brio", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "976cf154dfb043c012d87cddd8bca363" - }, - "bslib": { - "Package": "bslib", - "Version": "0.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "cachem", - "grDevices", - "htmltools", - "jquerylib", - "jsonlite", - "memoise", - "mime", - "rlang", - "sass" - ], - "Hash": "a7fbf03946ad741129dc81098722fca1" - }, - "cachem": { - "Package": "cachem", - "Version": "1.0.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "fastmap", - "rlang" - ], - "Hash": "cda74447c42f529de601fe4d4050daef" - }, - "callr": { - "Package": "callr", - "Version": "3.7.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "processx", - "utils" - ], - "Hash": "9b2191ede20fa29828139b9900922e51" - }, - "cellranger": { - "Package": "cellranger", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "rematch", - "tibble" - ], - "Hash": "f61dbaec772ccd2e17705c1e872e9e7c" - }, - "cli": { - "Package": "cli", - "Version": "3.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "89e6d8219950eac806ae0c489052048a" - }, - "clipr": { - "Package": "clipr", - "Version": "0.8.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042" - }, - "codetools": { - "Package": "codetools", - "Version": "0.2-19", - "Source": "Repository", - "Repository": "CRAN", - "Requirements": [ - "R" - ], - "Hash": "c089a619a7fae175d149d89164f8c7d8" - }, - "collections": { - "Package": "collections", - "Version": "0.3.7", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "90a0eda114ab0bef170ddbf5ef0cd93f" - }, - "commonmark": { - "Package": "commonmark", - "Version": "1.9.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "d691c61bff84bd63c383874d2d0c3307" - }, - "covr": { - "Package": "covr", - "Version": "3.6.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "crayon", - "digest", - "httr", - "jsonlite", - "methods", - "rex", - "stats", - "utils", - "withr", - "yaml" - ], - "Hash": "a0d8f9a55add5311d48227b6f7f38e34" - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.4.3", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "ed588261931ee3be2c700d22e94a29ab" - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "methods", - "utils" - ], - "Hash": "e8a1e41acf02548751f45c718d55aa6a" - }, - "credentials": { - "Package": "credentials", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass", - "curl", - "jsonlite", - "openssl", - "sys" - ], - "Hash": "93762d0a34d78e6a025efdbfb5c6bb41" - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ], - "Hash": "6aa54f69598c32177e920eb3402e8293" - }, - "curl": { - "Package": "curl", - "Version": "5.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "e4f97056611e8e6b8b852d13b7400cf1" - }, - "cyclocomp": { - "Package": "cyclocomp", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "callr", - "crayon", - "desc", - "remotes", - "withr" - ], - "Hash": "53cbed70a2f7472d48fb6aef08442f25" - }, - "desc": { - "Package": "desc", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "rprojroot", - "utils" - ], - "Hash": "6b9602c7ebbe87101a9c8edb6e8b6d21" - }, - "devtools": { - "Package": "devtools", - "Version": "2.4.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "desc", - "ellipsis", - "fs", - "lifecycle", - "memoise", - "miniUI", - "pkgbuild", - "pkgdown", - "pkgload", - "profvis", - "rcmdcheck", - "remotes", - "rlang", - "roxygen2", - "rversions", - "sessioninfo", - "stats", - "testthat", - "tools", - "urlchecker", - "usethis", - "utils", - "withr" - ], - "Hash": "ea5bc8b4a6a01e4f12d98b58329930bb" - }, - "diffdf": { - "Package": "diffdf", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "tibble" - ], - "Hash": "9ddedef46959baad2080047a1b0117fe" - }, - "diffobj": { - "Package": "diffobj", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "crayon", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8" - }, - "digest": { - "Package": "digest", - "Version": "0.6.31", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "8b708f296afd9ae69f450f9640be8990" - }, - "downlit": { - "Package": "downlit", - "Version": "0.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "brio", - "desc", - "digest", - "evaluate", - "fansi", - "memoise", - "rlang", - "vctrs", - "withr", - "yaml" - ], - "Hash": "79bf3f66590752ffbba20f8d2da94c7c" - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "generics", - "glue", - "lifecycle", - "magrittr", - "methods", - "pillar", - "rlang", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "eb5742d256a0d9306d85ea68756d8187" - }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "rlang" - ], - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" - }, - "evaluate": { - "Package": "evaluate", - "Version": "0.20", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "4b68aa51edd89a0e044a66e75ae3cc6c" - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "utils" - ], - "Hash": "1d9e7ad3c8312a192dea7d3db0274fde" - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "f7736a18de97dea803bde0a2daaafb27" - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.5.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "htmltools", - "rlang" - ], - "Hash": "1e22b8cabbad1eae951a75e9f8b52378" - }, - "fs": { - "Package": "fs", - "Version": "1.6.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "f4dcd23b67e33d851d2079f703e8b985" - }, - "generics": { - "Package": "generics", - "Version": "0.1.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "15e9634c0fcd294799e9b2e929ed1b86" - }, - "gert": { - "Package": "gert", - "Version": "1.9.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass", - "credentials", - "openssl", - "rstudioapi", - "sys", - "zip" - ], - "Hash": "9122b3958e749badb5c939f498038b57" - }, - "gh": { - "Package": "gh", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "gitcreds", - "httr2", - "ini", - "jsonlite", - "rlang" - ], - "Hash": "03533b1c875028233598f848fda44c4c" - }, - "git2r": { - "Package": "git2r", - "Version": "0.32.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "graphics", - "utils" - ], - "Hash": "1882d7a76fd8c14b2322865f74c9a348" - }, - "gitcreds": { - "Package": "gitcreds", - "Version": "0.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "ab08ac61f3e1be454ae21911eb8bc2fe" - }, - "glue": { - "Package": "glue", - "Version": "1.6.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e" - }, - "highr": { - "Package": "highr", - "Version": "0.10", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "xfun" - ], - "Hash": "06230136b2d2b9ba5805e1963fa6e890" - }, - "hms": { - "Package": "hms", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "lifecycle", - "methods", - "pkgconfig", - "rlang", - "vctrs" - ], - "Hash": "b59377caa7ed00fa41808342002138f9" - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "base64enc", - "digest", - "ellipsis", - "fastmap", - "grDevices", - "rlang", - "utils" - ], - "Hash": "ba0240784ad50a62165058a27459304a" - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.6.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "grDevices", - "htmltools", - "jsonlite", - "knitr", - "rmarkdown", - "yaml" - ], - "Hash": "a865aa85bcb2697f47505bfd70422471" - }, - "httpuv": { - "Package": "httpuv", - "Version": "1.6.9", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "Rcpp", - "later", - "promises", - "utils" - ], - "Hash": "1046aa31a57eae8b357267a56a0b6d8b" - }, - "httr": { - "Package": "httr", - "Version": "1.4.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "curl", - "jsonlite", - "mime", - "openssl" - ], - "Hash": "f6844033201269bec3ca0097bc6c97b3" - }, - "httr2": { - "Package": "httr2", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "cli", - "curl", - "glue", - "magrittr", - "openssl", - "rappdirs", - "rlang", - "withr" - ], - "Hash": "5c09fe33064978ede54de42309c8b532" - }, - "hunspell": { - "Package": "hunspell", - "Version": "3.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "Rcpp", - "digest" - ], - "Hash": "656219b6f3f605499d7cdbe208656639" - }, - "ini": { - "Package": "ini", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "6154ec2223172bce8162d4153cda21f7" - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools" - ], - "Hash": "5aab57a3bd297eee1c1d862735972182" - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "1.8.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "methods" - ], - "Hash": "a4269a09a9b865579b2635c77e572374" - }, - "knitr": { - "Package": "knitr", - "Version": "1.42", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "evaluate", - "highr", - "methods", - "tools", - "xfun", - "yaml" - ], - "Hash": "8329a9bcc82943c8069104d4be3ee22d" - }, - "languageserver": { - "Package": "languageserver", - "Version": "0.3.15", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "callr", - "collections", - "fs", - "jsonlite", - "lintr", - "parallel", - "roxygen2", - "stringi", - "styler", - "tools", - "utils", - "xml2", - "xmlparsedata" - ], - "Hash": "fbea0dd12b4f5dedbe3654e4b9cbbddc" - }, - "later": { - "Package": "later", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "Rcpp", - "rlang" - ], - "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e" - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "d908914ae53b04d4c0c0fd72ecc35370" - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "rlang" - ], - "Hash": "001cecbeac1cff9301bdc3775ee46a86" - }, - "lintr": { - "Package": "lintr", - "Version": "3.0.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "backports", - "codetools", - "crayon", - "cyclocomp", - "digest", - "glue", - "jsonlite", - "knitr", - "rex", - "stats", - "utils", - "xml2", - "xmlparsedata" - ], - "Hash": "b21ebd652d940f099915221f3328ab7b" - }, - "lubridate": { - "Package": "lubridate", - "Version": "1.9.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "generics", - "methods", - "timechange" - ], - "Hash": "e25f18436e3efd42c7c590a1c4c15390" - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "7ce2733a9826b3aeb1775d56fd305472" - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cachem", - "rlang" - ], - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c" - }, - "mime": { - "Package": "mime", - "Version": "0.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "tools" - ], - "Hash": "18e9c28c1d3ca1560ce30658b22ce104" - }, - "miniUI": { - "Package": "miniUI", - "Version": "0.1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "htmltools", - "shiny", - "utils" - ], - "Hash": "fec5f52652d60615fdb3957b3d74324a" - }, - "openssl": { - "Package": "openssl", - "Version": "2.0.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "askpass" - ], - "Hash": "0f7cd2962e3044bb940cca4f4b5cecbe" - }, - "pillar": { - "Package": "pillar", - "Version": "1.9.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "fansi", - "glue", - "lifecycle", - "rlang", - "utf8", - "utils", - "vctrs" - ], - "Hash": "15da5a8412f317beeee6175fbc76f4bb" - }, - "pkgbuild": { - "Package": "pkgbuild", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "callr", - "cli", - "crayon", - "desc", - "prettyunits", - "processx", - "rprojroot", - "withr" - ], - "Hash": "d6c3008d79653a0f267703288230105e" - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "01f28d4278f15c76cddbea05899c5d6f" - }, - "pkgdown": { - "Package": "pkgdown", - "Version": "2.0.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "callr", - "cli", - "desc", - "digest", - "downlit", - "fs", - "httr", - "jsonlite", - "magrittr", - "memoise", - "purrr", - "ragg", - "rlang", - "rmarkdown", - "tibble", - "whisker", - "withr", - "xml2", - "yaml" - ], - "Hash": "16fa15449c930bf3a7761d3c68f8abf9" - }, - "pkgload": { - "Package": "pkgload", - "Version": "1.3.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "crayon", - "desc", - "fs", - "glue", - "methods", - "rlang", - "rprojroot", - "utils", - "withr" - ], - "Hash": "6b0c222c5071efe0f3baf3dae9aa40e2" - }, - "praise": { - "Package": "praise", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "a555924add98c99d2f411e37e7d25e9f" - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" - }, - "processx": { - "Package": "processx", - "Version": "3.8.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "ps", - "utils" - ], - "Hash": "d75b4059d781336efba24021915902b4" - }, - "profvis": { - "Package": "profvis", - "Version": "0.3.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "htmlwidgets", - "stringr" - ], - "Hash": "e9d21e79848e02e524bea6f5bd53e7e4" - }, - "progress": { - "Package": "progress", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "crayon", - "hms", - "prettyunits" - ], - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" - }, - "promises": { - "Package": "promises", - "Version": "1.2.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "Rcpp", - "later", - "magrittr", - "rlang", - "stats" - ], - "Hash": "4ab2c43adb4d4699cf3690acd378d75d" - }, - "ps": { - "Package": "ps", - "Version": "1.7.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "709d852d33178db54b17c722e5b1e594" - }, - "purrr": { - "Package": "purrr", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "lifecycle", - "magrittr", - "rlang", - "vctrs" - ], - "Hash": "d71c815267c640f17ddbf7f16144b4bb" - }, - "ragg": { - "Package": "ragg", - "Version": "1.2.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "systemfonts", - "textshaping" - ], - "Hash": "690bc058ea2b1b8a407d3cfe3dce3ef9" - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "5e3c5dc0b071b21fa128676560dbe94d" - }, - "rcmdcheck": { - "Package": "rcmdcheck", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "callr", - "cli", - "curl", - "desc", - "digest", - "pkgbuild", - "prettyunits", - "rprojroot", - "sessioninfo", - "utils", - "withr", - "xopen" - ], - "Hash": "8f25ebe2ec38b1f2aef3b0d2ef76f6c4" - }, - "readxl": { - "Package": "readxl", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cellranger", - "cpp11", - "progress", - "tibble", - "utils" - ], - "Hash": "2e6020b1399d95f947ed867045e9ca17" - }, - "rematch": { - "Package": "rematch", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c66b930d20bb6d858cd18e1cebcfae5c" - }, - "rematch2": { - "Package": "rematch2", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "tibble" - ], - "Hash": "76c9e04c712a05848ae7a23d2f170a40" - }, - "remotes": { - "Package": "remotes", - "Version": "2.4.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods", - "stats", - "tools", - "utils" - ], - "Hash": "63d15047eb239f95160112bcadc4fcb9" - }, - "renv": { - "Package": "renv", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "utils" - ], - "Hash": "c321cd99d56443dbffd1c9e673c0c1a2" - }, - "rex": { - "Package": "rex", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "lazyeval" - ], - "Hash": "ae34cd56890607370665bee5bd17812f" - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "utils" - ], - "Hash": "dc079ccd156cde8647360f473c1fa718" - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.21", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "bslib", - "evaluate", - "fontawesome", - "htmltools", - "jquerylib", - "jsonlite", - "knitr", - "methods", - "stringr", - "tinytex", - "tools", - "utils", - "xfun", - "yaml" - ], - "Hash": "493df4ae51e2e984952ea4d5c75786a3" - }, - "roxygen2": { - "Package": "roxygen2", - "Version": "7.2.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "brew", - "cli", - "commonmark", - "cpp11", - "desc", - "knitr", - "methods", - "pkgload", - "purrr", - "rlang", - "stringi", - "stringr", - "utils", - "withr", - "xml2" - ], - "Hash": "7b153c746193b143c14baa072bae4e27" - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "1de7ab598047a87bba48434ba35d497d" - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.14", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "690bd2acc42a9166ce34845884459320" - }, - "rversions": { - "Package": "rversions", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "curl", - "utils", - "xml2" - ], - "Hash": "a9881dfed103e83f9de151dc17002cd1" - }, - "sass": { - "Package": "sass", - "Version": "0.4.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R6", - "fs", - "htmltools", - "rappdirs", - "rlang" - ], - "Hash": "2bb4371a4c80115518261866eab6ab11" - }, - "sessioninfo": { - "Package": "sessioninfo", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "tools", - "utils" - ], - "Hash": "3f9796a8d0a0e8c6eb49a4b029359d1f" - }, - "shiny": { - "Package": "shiny", - "Version": "1.7.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "bslib", - "cachem", - "commonmark", - "crayon", - "ellipsis", - "fastmap", - "fontawesome", - "glue", - "grDevices", - "htmltools", - "httpuv", - "jsonlite", - "later", - "lifecycle", - "methods", - "mime", - "promises", - "rlang", - "sourcetools", - "tools", - "utils", - "withr", - "xtable" - ], - "Hash": "c2eae3d8c670fa9dfa35a12066f4a1d5" - }, - "sourcetools": { - "Package": "sourcetools", - "Version": "0.1.7-1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "5f5a7629f956619d519205ec475fe647" - }, - "spelling": { - "Package": "spelling", - "Version": "2.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "commonmark", - "hunspell", - "knitr", - "xml2" - ], - "Hash": "8ed9f010f7caeb8586523088b7f23dcd" - }, - "staged.dependencies": { - "Package": "staged.dependencies", - "Version": "0.3.1", - "Source": "GitHub", - "RemoteType": "github", - "RemoteHost": "api.github.com", - "RemoteUsername": "openpharma", - "RemoteRepo": "staged.dependencies", - "RemoteRef": "main", - "RemoteSha": "1ab184a029bef8839a57bb6acd1c5c919cf1fd89", - "Requirements": [ - "desc", - "devtools", - "digest", - "dplyr", - "fs", - "git2r", - "glue", - "httr", - "jsonlite", - "methods", - "rcmdcheck", - "remotes", - "rlang", - "stats", - "tidyr", - "utils", - "withr", - "yaml" - ], - "Hash": "ea298f9fb221a8c7ca4c9e55e9c29b48" - }, - "stringi": { - "Package": "stringi", - "Version": "1.7.12", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stats", - "tools", - "utils" - ], - "Hash": "ca8bd84263c77310739d2cf64d84d7c9" - }, - "stringr": { - "Package": "stringr", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "magrittr", - "rlang", - "stringi", - "vctrs" - ], - "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8" - }, - "styler": { - "Package": "styler", - "Version": "1.9.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R.cache", - "cli", - "magrittr", - "purrr", - "rlang", - "rprojroot", - "tools", - "vctrs", - "withr" - ], - "Hash": "ed8c90822b7da46beee603f263a85fe0" - }, - "sys": { - "Package": "sys", - "Version": "3.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "34c16f1ef796057bfa06d3f4ff818a5d" - }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "90b28393209827327de889f49935140a" - }, - "testthat": { - "Package": "testthat", - "Version": "3.1.7", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "R6", - "brio", - "callr", - "cli", - "desc", - "digest", - "ellipsis", - "evaluate", - "jsonlite", - "lifecycle", - "magrittr", - "methods", - "pkgload", - "praise", - "processx", - "ps", - "rlang", - "utils", - "waldo", - "withr" - ], - "Hash": "7eb5fd202a61d2fb78af5869b6c08998" - }, - "textshaping": { - "Package": "textshaping", - "Version": "0.3.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11", - "systemfonts" - ], - "Hash": "1ab6223d3670fac7143202cb6a2d43d5" - }, - "tibble": { - "Package": "tibble", - "Version": "3.2.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "fansi", - "lifecycle", - "magrittr", - "methods", - "pillar", - "pkgconfig", - "rlang", - "utils", - "vctrs" - ], - "Hash": "a84e2cc86d07289b3b6f5069df7a004c" - }, - "tidyr": { - "Package": "tidyr", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "cpp11", - "dplyr", - "glue", - "lifecycle", - "magrittr", - "purrr", - "rlang", - "stringr", - "tibble", - "tidyselect", - "utils", - "vctrs" - ], - "Hash": "e47debdc7ce599b070c8e78e8ac0cfcf" - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang", - "vctrs", - "withr" - ], - "Hash": "79540e5fcd9e0435af547d885f184fd5" - }, - "timechange": { - "Package": "timechange", - "Version": "0.2.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cpp11" - ], - "Hash": "8548b44f79a35ba1791308b61e6012d7" - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.45", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "xfun" - ], - "Hash": "e4e357f28c2edff493936b6cb30c3d65" - }, - "urlchecker": { - "Package": "urlchecker", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "curl", - "tools", - "xml2" - ], - "Hash": "409328b8e1253c8d729a7836fe7f7a16" - }, - "usethis": { - "Package": "usethis", - "Version": "2.1.6", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "clipr", - "crayon", - "curl", - "desc", - "fs", - "gert", - "gh", - "glue", - "jsonlite", - "lifecycle", - "purrr", - "rappdirs", - "rlang", - "rprojroot", - "rstudioapi", - "stats", - "utils", - "whisker", - "withr", - "yaml" - ], - "Hash": "a67a22c201832b12c036cc059f1d137d" - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "1fe17157424bb09c48a8b3b550c753bc" - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.6.2", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "cli", - "glue", - "lifecycle", - "rlang" - ], - "Hash": "a745bda7aff4734c17294bb41d4e4607" - }, - "waldo": { - "Package": "waldo", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "cli", - "diffobj", - "fansi", - "glue", - "methods", - "rematch2", - "rlang", - "tibble" - ], - "Hash": "035fba89d0c86e2113120f93301b98ad" - }, - "whisker": { - "Package": "whisker", - "Version": "0.4.1", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "c6abfa47a46d281a7d5159d0a8891e88" - }, - "withr": { - "Package": "withr", - "Version": "2.5.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "grDevices", - "graphics", - "stats" - ], - "Hash": "c0e49a9760983e81e55cdd9be92e7182" - }, - "xfun": { - "Package": "xfun", - "Version": "0.38", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "stats", - "tools" - ], - "Hash": "1ed71215d45e85562d3b1b29a068ccec" - }, - "xml2": { - "Package": "xml2", - "Version": "1.3.3", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "methods" - ], - "Hash": "40682ed6a969ea5abfd351eb67833adc" - }, - "xmlparsedata": { - "Package": "xmlparsedata", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R" - ], - "Hash": "45e4bf3c46476896e821fc0a408fb4fc" - }, - "xopen": { - "Package": "xopen", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "processx" - ], - "Hash": "6c85f015dee9cc7710ddd20f86881f58" - }, - "xtable": { - "Package": "xtable", - "Version": "1.8-4", - "Source": "Repository", - "Repository": "RSPM", - "Requirements": [ - "R", - "stats", - "utils" - ], - "Hash": "b8acdf8af494d9ec19ccb2481a9b11c2" - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.7", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "0d0056cc5383fbc240ccd0cb584bf436" - }, - "zip": { - "Package": "zip", - "Version": "2.3.0", - "Source": "Repository", - "Repository": "RSPM", - "Hash": "d98c94dacb7e0efcf83b0a133a705504" - } - } -} diff --git a/renv/profiles/4.3/renv/.gitignore b/renv/profiles/4.3/renv/.gitignore deleted file mode 100644 index 0ec0cbba..00000000 --- a/renv/profiles/4.3/renv/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -library/ -local/ -cellar/ -lock/ -python/ -sandbox/ -staging/ diff --git a/renv/profiles/4.3/renv/settings.json b/renv/profiles/4.3/renv/settings.json deleted file mode 100644 index 0c8943c5..00000000 --- a/renv/profiles/4.3/renv/settings.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "bioconductor.version": null, - "external.libraries": [], - "ignored.packages": [ - "admiral", - "admiraldev", - "admiralci", - "pharmaversesdtm" - ], - "package.dependency.fields": [ - "Imports", - "Depends", - "LinkingTo" - ], - "ppm.enabled": null, - "ppm.ignored.urls": [], - "r.version": null, - "snapshot.type": "custom", - "use.cache": true, - "vcs.ignore.cellar": true, - "vcs.ignore.library": true, - "vcs.ignore.local": true, - "vcs.manage.ignores": true -} diff --git a/renv/settings.json b/renv/settings.json deleted file mode 100644 index 0c8943c5..00000000 --- a/renv/settings.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "bioconductor.version": null, - "external.libraries": [], - "ignored.packages": [ - "admiral", - "admiraldev", - "admiralci", - "pharmaversesdtm" - ], - "package.dependency.fields": [ - "Imports", - "Depends", - "LinkingTo" - ], - "ppm.enabled": null, - "ppm.ignored.urls": [], - "r.version": null, - "snapshot.type": "custom", - "use.cache": true, - "vcs.ignore.cellar": true, - "vcs.ignore.library": true, - "vcs.ignore.local": true, - "vcs.manage.ignores": true -} diff --git a/vignettes/check-templates.Rmd b/vignettes/check-templates.Rmd new file mode 100644 index 00000000..8c99d46f --- /dev/null +++ b/vignettes/check-templates.Rmd @@ -0,0 +1,63 @@ +--- +title: "Check Templates" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Check Templates} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Check Templates Workflow + +This GitHub Actions workflow is designed to check templates in an R package. It utilizes a matrix strategy to test different versions of R. + +## Inputs + +### `r-version` + +- **Description**: The version of R to use for testing. +- **Default**: '4.1' +- **Options**: '4.1', '4.2', '4.3' +- **Required**: No + +## Workflow Triggers + +This workflow is triggered in two ways: + +1. **Manual Dispatch**: You can manually trigger the workflow using the "workflow_dispatch" event. When triggered manually, you can specify the R version to use. + +2. **Workflow Call**: The workflow can also be triggered by another workflow using the "workflow_call" event. The R version is an input for this event. + +## Workflow Setup + +- **Name**: Check Templates +- **Concurrency**: Templates are checked concurrently based on the branch or pull request number. + +## Job: `check_templates` + +This job verifies templates in the R package. It runs on a docker container instance using `admiralci` images (`ghcr.io/pharmaverse/admiralci-${{ inputs.r-version }}:latest`) for the R environment. + +### Steps + +#### Boilerplate Steps + +These steps perform initial setup, such as checking out the repository, normalizing inputs, and restoring the cache. + +1. **Get branch names**: Retrieves branch names for further processing. +2. **Checkout repo (PR)**: Checks out the repository for pull requests. +3. **Checkout repository**: Checks out the repository for non-pull request events. +4. **Add safe directory**: Adds a safe directory to the configuration. +5. **Normalize inputs**: Normalizes input values, including determining the R version and branch. + +#### Staged Dependencies + +These steps handle staged dependencies, including cache restoration and running the staged dependencies action. + +6. **Restore cache**: Restores the cache for staged dependencies. +7. **Run Staged dependencies**: Runs the staged dependencies action. + +#### Install and Run Templates + +8. **Install package**: Builds and installs the R package. +9. **Run Template Scripts**: Reads the package description, identifies template scripts, and executes them. If any script fails, the workflow stops and provides an error message. diff --git a/vignettes/code-coverage.Rmd b/vignettes/code-coverage.Rmd new file mode 100644 index 00000000..01991284 --- /dev/null +++ b/vignettes/code-coverage.Rmd @@ -0,0 +1,92 @@ +--- +title: "Code Coverage" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Code Coverage} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Code Coverage Workflow + +This GitHub Actions workflow is designed for testing and generating code coverage reports for an R package. It uses a matrix strategy to test different versions of R and includes options to skip code coverage badge creation. + +## Inputs + +### `r-version` + +- **Description**: The version of R to use for testing. +- **Default**: '4.1' +- **Options**: '4.1', '4.2', '4.3' +- **Required**: No + +### `skip-coverage-badges` + +- **Description**: Skip code coverage badge creation. +- **Default**: false +- **Required**: No +- **Type**: boolean + +## Workflow Triggers + +This workflow is triggered in two ways: + +1. **Manual Dispatch**: You can manually trigger the workflow using the "workflow_dispatch" event. When triggered manually, you can specify the R version and choose to skip code coverage badge creation. + +2. **Workflow Call**: The workflow can also be triggered by another workflow using the "workflow_call" event. The R version and skip-coverage-badges options are inputs for this event. + +## Workflow Setup + +- **Name**: Code Coverage +- **Concurrency**: Code coverage jobs are organized by the pull request number or branch. +- **Cancel-in-progress**: Allows canceling in-progress code coverage jobs. + +## Job: `coverage` + +This job verifies templates in the R package. It runs on a docker container instance using `admiralci` images (`ghcr.io/pharmaverse/admiralci-${{ inputs.r-version }}:latest`) for the R environment. + +### Steps + +#### Boilerplate Steps + +1. **Get branch names**: Retrieves branch names for further processing. +2. **Checkout repo (PR)**: Checks out the repository for pull requests. +3. **Checkout repository**: Checks out the repository for non-pull request events. +4. **Normalize inputs**: Normalizes input values, including determining the R version. + +#### Staged Dependencies + +5. **Restore cache**: Restores the cache for staged dependencies. +6. **Setup Pandoc**: Sets up Pandoc for documentation rendering. +7. **Run Staged dependencies**: Runs the staged dependencies action. + +#### Run Coverage + +8. **Run coverage**: Runs code coverage tests, generates coverage reports, and outputs the coverage percentage. + +#### Check Coverage Reports + +9. **Check whether coverage reports exist**: Checks for the existence of coverage reports. + +10. **Set coverage percentage as output**: Sets the coverage percentage as an output variable. + +11. **Generate Coverage Summary Report**: Generates a coverage summary report, adds badges, and uploads the report for review. + +#### Add Coverage PR Comment + +12. **Add Coverage PR Comment**: Adds a comment to the pull request with the coverage summary. + +## Job: `badge` + +This job generates a code coverage badge and commits it to the repository. It is triggered after the completion of the `coverage` job. + +### Steps + +1. **Checkout the badges branch in repo**: Checks out the badges branch for badge updates. + +2. **Generate the badge SVG image**: Generates the code coverage badge SVG image. + +3. **Commit badge**: Commits the updated badge to the badges branch. + +4. **Push badges**: Pushes the changes to the badges branch. \ No newline at end of file diff --git a/vignettes/common_structure.Rmd b/vignettes/common_structure.Rmd new file mode 100644 index 00000000..9fe348b4 --- /dev/null +++ b/vignettes/common_structure.Rmd @@ -0,0 +1,82 @@ +--- +title: "Common Structure" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Common Structure} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Common structure of the workflows + +## R-version input + +For most of the workflows, we need to select a specific R version to load the associated `renv` profile. +That's why most of the actions have a `r-version` input (by default set-up to `4.1`) : + +``` +inputs: + r-version: + description: 'The version of R to use' + default: '4.1' + required: false + type: string +``` + +## Use of `admiralci` docker images + +Once the `r-version` is picked, the worfklows will run inside a docker container instance. Indeed, `admiralci` contains an action `push-docker-image`, to be able to build `rocker:rstudio` images +for each available versions of `R` (versions specified in `renv/profiles`, see [renv profiles conf](get_started.html#renv-profiles-configuration-handling-several-r-versions)). +At the building step of these docker images, every dependencies specified in the `renv.lock` files are installed. +A total of 4 images are created : +- `admiralci-4.1` +- `admiralci-4.2` +- `admiralci-4.3` +- `admiralci-devel` + +These images and store them in admiralci ghcr (Github Container Registry - Place to store docker images), and are then reused to execute the workflows in docker container instances like this : + +``` +container: + image: "ghcr.io/pharmaverse/admiralci-${{ inputs.r-version }}:latest" +``` + +(More more details on docker images creation process and how they're used, please read [Docker images and codespaces](docker_and_codespaces.html)) section. + +## Checkout repository + +This action is used to checkout on the right repository. This is a step commonly used in github actions to be able to access a repository tree. + +``` +- name: Checkout repository + uses: actions/checkout@v3 +``` + +## Staged dependencies + +The staged dependencies action allow to install every necessary upstream dependencies for `admiral` package, suche as : +- `pharmaversesdtm` (SDTM test data) +- `admiraldev` (utilities functions for the Admiral package family) + +(note that these dependencies are refered inside `staged_dependencies.yml` file) + +For more details about staged.dependencies, please visit these links : + +- [Staged Dependencies Package](https://github.com/openpharma/staged.dependencies) +- [Staged Dependencies Action](https://github.com/insightsengineering/staged-dependencies-action) (Github action to use Staged Dependencies package through github workflows) + +``` +- name: Run Staged dependencies + uses: insightsengineering/staged-dependencies-action@v1 + with: + run-system-dependencies: false + renv-restore: false + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} +``` + +Note : the user can specify some parameters depending on the use case : +- run-system-dependencies : install or not sys dependencies +- renv-restore : restore or not renv.lock dependencies +(and many other options you can find on Staged Dependencies Action documentation). \ No newline at end of file diff --git a/vignettes/cran-status.Rmd b/vignettes/cran-status.Rmd new file mode 100644 index 00000000..c910db51 --- /dev/null +++ b/vignettes/cran-status.Rmd @@ -0,0 +1,59 @@ +--- +title: "Cran Status" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Cran Status} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# CRAN Status Workflow + +This GitHub Actions workflow checks the CRAN status of an R package. It can create an issue if specified statuses ('NOTE', 'WARN', 'ERROR') are reported on the check report. +Note : this workflow is using [insightEngineering Cran Status Monitor](https://github.com/insightsengineering/cran-status-monitor) action. + +## Inputs + +### `issue-assignees` + +- **Description**: Whom should the issue be assigned to if errors are encountered in the CRAN status checks? This is a comma-separated string of GitHub usernames. If undefined or empty, no assignments are made. +- **Default**: '' +- **Required**: No +- **Type**: string + +### `statuses` + +- **Description**: Create an issue if one or more of the following statuses are reported on the check report. This is a comma-separated string of statuses. Allowed statuses are 'NOTE', 'WARN', and 'ERROR'. +- **Default**: 'ERROR' +- **Required**: No +- **Type**: string + +### `path` + +- **Description**: Path to the R package root, if the package is not at the top level of the repository. +- **Default**: '.' +- **Required**: No +- **Type**: string + +## Workflow Triggers + +This workflow is triggered in two ways: + +1. **Manual Dispatch**: You can manually trigger the workflow using the "workflow_dispatch" event. When triggered manually, you can specify the issue-assignees, statuses, and path. + +2. **Workflow Call**: The workflow can also be triggered by another workflow using the "workflow_call" event. The issue-assignees, statuses, and path are inputs for this event. + +## Workflow Setup + +- **Permissions**: write-all +- **Concurrency**: CRAN status jobs are organized by the pull request number or branch. +- **Cancel-in-progress**: Allows canceling in-progress CRAN status jobs. + +## Job: `cran-status` + +This job checks the CRAN status of an R package. It runs on the latest version of Ubuntu and uses the rocker/tidyverse:latest Docker container. + +### Steps + +1. **Run CRAN Status Action**: Runs the CRAN Status Action with specified inputs. \ No newline at end of file diff --git a/vignettes/docker_and_codespaces.Rmd b/vignettes/docker_and_codespaces.Rmd index aed2d787..dc80e54f 100644 --- a/vignettes/docker_and_codespaces.Rmd +++ b/vignettes/docker_and_codespaces.Rmd @@ -24,6 +24,8 @@ This article will go over the following: * What are codespaces, why we are using it for Admiral, and how to use them. * How codespaces are built (this section concerns more admiralci developers to be able to maintain codespaces - it's not needed to use codespaces, but interesting for users that want to learn more about admiral CI/CD processes). +Go [here](https://www.youtube.com/watch?v=VUGeXqz_TXo&list=PLn-mqs_tEh86kA-UzWHeVZWIQNm6qvr_z&index=14) to watch codespaces demo ! + ## What are codespaces and how to use them ### What are codespaces, and why are we using it for Admiral ? @@ -127,7 +129,7 @@ knitr::include_graphics("./assets/prebuild_ready.png", dpi = 144) ### Propagation -Each time a change is detected inside .devcontainer folder, the [propagation job](./.github/workflows/propagate.yml) will be trigger (see doc [lock_and_prop](lock_and_prop)) +Each time a change is detected inside .devcontainer folder, the [propagation job](./.github/workflows/propagate.yml) will be trigger (see doc [lock_and_prop](lock_and_prop.html)) ### Improvement ideas diff --git a/vignettes/get_started.Rmd b/vignettes/get_started.Rmd new file mode 100644 index 00000000..98cfb2ef --- /dev/null +++ b/vignettes/get_started.Rmd @@ -0,0 +1,101 @@ +--- +title: "Get Started" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Get Started} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Purpose of admiralci + +This repository contains GitHub Actions continuous integration/continuous delivery (CI/CD) workflows, most of which are used by [`Admiral`](https://github.com/pharmaverse/admiral) and its extensions. +Workflows defined here are responsible for assuring high package quality standards without compromising performance, security, or reproducibility. + +Please refer to the [`.github/workflows`](.github/workflows) directory to view the source code for the GitHub Actions workflows. + +Notes : + +- Some workflows are using github actions from [InsightEngineering](https://github.com/insightsengineering/) group. + +- Most of the workflows are sharing the same steps (see [Common workflows structure](common_structure.html)) (boilerplate code) + + +# Available workflows + +## Workflows trigger by Admiral MR (feature branch to main branch) + +- [check-templates.yml](check-templates.html) +- [links.yml](links.html) +- [man-pages.yml](man-pages.html) +- [r-cmd-check.yml](r-cmd-checks.html) +- [spellcheck.yml](spellchecks.html) +- [code-coverage.yml](code-coverage.html) +- [lintr.yml](lintr.html) +- [readme-render.yml](readme-render.html) +- [style.yml](style.html) + +## Workflows trigger by a new release + +- [r-pkg-validation.yml](validation.html) +- [pkgdown.yml](pkgdown.html) + +## Workflows to manage dependencies change (`renv.lock` files changes) + +Before talking about workflows, let's first explain how dependencies are handled in `Admiral` package. +The developpers are using `renv` framework, to be able to use the same versions between developpers. + +### renv profiles configuration (Handling several R versions) + +#### renv folder content + +The admiral project is built to be compatible with several R-versions (for now `4.1`, `4.2`, `4.3` and also latest development version of R (`devel` version)). + +``` +renv +├── profiles +│ ├── 4.1 +│ ├── renv.lock +│ ├── 4.2 +│ ├── renv.lock +│ ├── 4.3 +│ ├── renv.lock +``` + +The activation of the proper `renv.lock` file is managed inside the `.Rprofile` file. (The code implemented in `.Rprofile` is implemented at each new R session). + +#### Structure of `.Rprofile file` file : + +- `.get_dependencies` function : + +This function is defined to determine the dependencies for the renv (R package manager) snapshot. +It looks for the "admiral" DESCRIPTION file and extracts its dependencies, looking for suggested packages in the current project. + +- Then there is a step to look for current R version on a admiral devlopper environment, and load the proper R profile (use of the associate `renv.lock` file) +- Then the variable `RENV_AUTOLOADER_ENABLED` is enabled or not depending on the context (if it's run through github workflows, it will be disabled, to preserve pre-installed dependencies on the workflows - more details on this in [Docker and Codespaces](docker_and_codespaces.html)) + + + +### Workflows to manage `renv` environment + +#### Automatic updates of `renv` environment + +2 workflows has been defined to do following steps : + +- automatically update the `renv.lock` file content. +- propagate the `renv.lock` file changes to every `admiral` packages (`admiral`, `admiralonco` ..). + +This [Lock updates and Propagation](lock-and-prop.html) section explains this in details. +And you can find more details here about these 2 workflows (technical details) : + +- [r-renv-lock.yml](renv-lock.html) +- [propagate.yml](propagate.html) + +#### Docker images updates (`admiralci` container registry images) + +## cron workflows + +- [push-docker-image.yml](push-docker.html) (to update the `devel` image only) +- [cran-status.yml](cran-status.html) diff --git a/vignettes/links.Rmd b/vignettes/links.Rmd new file mode 100644 index 00000000..cfc94490 --- /dev/null +++ b/vignettes/links.Rmd @@ -0,0 +1,50 @@ +--- +title: "Links" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Links} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Check URLs Workflow + +This GitHub Actions workflow checks URLs in documentation files. It runs on the main, devel, and pre-release branches for push events and specified pull request events. + +## Workflow Triggers + +This workflow is triggered in the following ways: + +1. **Push Events**: Triggered on pushes to the main, devel, and pre-release branches. + +2. **Pull Request Events**: Triggered on pull requests when opened, synchronized, reopened, or ready for review for the main, devel, and pre-release branches. + +3. **Manual Dispatch**: You can manually trigger the workflow using the "workflow_dispatch" event. + +4. **Workflow Call**: The workflow can also be triggered by another workflow using the "workflow_call" event. + +## Workflow Setup + +- **Concurrency**: URL check jobs are organized by the pull request number or branch. +- **Cancel-in-progress**: Allows canceling in-progress URL check jobs. + +## Job: `links` + +This job validates URLs in documentation files. It runs on Ubuntu 20.04. + +### Steps + +1. **Checkout repo**: Checks out the repository. + +2. **Check URLs in docs**: Uses the lycheeverse/lychee-action to check URLs in documentation files. It excludes private URLs, GitHub repository URLs, and additional specified patterns. + + - **Parameters**: + - `fail`: true (Fails the workflow if broken links are found) + - `jobSummary`: true (Provides a summary of link check results) + - `format`: markdown (Outputs results in markdown format) + - `output`: links-results.md (Saves link check results to a file) + - `args`: Additional arguments for link checking (includes exclusion patterns and file extensions) + + - **Environment Variables**: + - `GITHUB_TOKEN`: GitHub token for authentication. diff --git a/vignettes/lintr.Rmd b/vignettes/lintr.Rmd new file mode 100644 index 00000000..8df15c65 --- /dev/null +++ b/vignettes/lintr.Rmd @@ -0,0 +1,73 @@ +--- +title: "LintR" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{LintR} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +--- +title: GitHub Actions Workflow Documentation +author: Your Name +date: \today +--- + +# Lint Workflow + +This GitHub Actions workflow performs linting tasks for an R package. It runs on a docker container instance using `admiralci` images (`ghcr.io/pharmaverse/admiralci-${{ inputs.r-version }}:latest`) for the R environment. + +## Workflow Triggers + +This workflow is triggered in the following ways: + +- **Manual Dispatch**: You can manually trigger the workflow using the "workflow_dispatch" event. + +- **Workflow Call**: The workflow can also be triggered by another workflow using the "workflow_call" event. + +## Workflow Inputs + +The workflow accepts the following inputs during manual dispatch or workflow call: + +- `r-version`: The version of R to use, with options '4.1', '4.2', and '4.3'. + +- `lint-all-files`: Boolean indicating whether to lint all files every time. + +- `latest-lintr`: Boolean indicating whether to install the latest lintr CRAN release. + +- `install-package`: Boolean indicating whether to install the R package locally. + +## Workflow Setup + +- **Concurrency**: Lint jobs are organized by the pull request number or branch. + +- **Cancel-in-progress**: Allows canceling in-progress lint jobs. + +## Job: `lint` + +This job performs linting tasks. + +### Steps + +1. **Get branch names**: Gets the branch names using the tj-actions/branch-names action. + +2. **Checkout repo (PR)**: Checks out the repository for pull requests. + +3. **Checkout repository**: Checks out the repository for non-pull request events. + +4. **Normalize inputs**: Normalizes the R version input. + +5. **Restore cache**: Restores the cache for staged dependencies. + +6. **Run Staged dependencies**: Runs staged dependencies action to set up the environment. + +7. **Install latest release of lintr**: Installs the latest release of lintr from the CRAN repository if specified. + +8. **Install package**: Installs the R package locally if specified. + +9. **Changed files**: Gets the list of changed files using the Ana06/get-changed-files action. + +10. **Lint**: Performs linting using lintr on the R package. Excludes files based on the changed files list. + +11. **Error if lints are detected**: Raises an error if lints are detected, prompting a review and adjustment of the code. \ No newline at end of file diff --git a/vignettes/lock_and_prop.Rmd b/vignettes/lock_and_prop.Rmd index 05de2c8d..a53ad6a9 100644 --- a/vignettes/lock_and_prop.Rmd +++ b/vignettes/lock_and_prop.Rmd @@ -60,7 +60,7 @@ The process is implemented to generate `renv.lock` file automatically. It will b **Note:** In `[1]` you will see that one reviewer has a special shield symbol next to their name. This person is a codeowner of the `common.yml` and is alerted whenever a change is made to this file. You can read more about codeowners on [About Code Owners](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) in GitHub Documentation -Note that this propagate process also propagate .devcontainer files which are configuration files for codespaces (see [Codespaces](codespaces.Rmd)) +Note that this propagate process also propagate .devcontainer files which are configuration files for codespaces (see [Codespaces](codespaces.html)) ```{r, echo = FALSE} knitr::include_graphics("./assets/prop.png", dpi = 144) diff --git a/vignettes/man-pages.Rmd b/vignettes/man-pages.Rmd new file mode 100644 index 00000000..1ccb60ee --- /dev/null +++ b/vignettes/man-pages.Rmd @@ -0,0 +1,59 @@ +--- +title: "Man Pages" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Man Pages} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Man Pages Workflow + +This GitHub Actions workflow is designed for generating and checking man pages in an R package using Roxygen. It uses a matrix strategy to test different versions of R. + +## Inputs + +### `r-version` + +- **Description**: The version of R to use for testing. +- **Default**: '4.1' +- **Options**: '4.1', '4.2', '4.3' +- **Required**: No + +## Workflow Triggers + +This workflow is triggered in two ways: + +1. **Manual Dispatch**: You can manually trigger the workflow using the "workflow_dispatch" event. When triggered manually, you can specify the R version. + +2. **Workflow Call**: The workflow can also be triggered by another workflow using the "workflow_call" event. The R version is an input for this event. + +## Workflow Setup + +- **Name**: Man Pages +- **Concurrency**: Man page jobs are organized by the pull request number or branch. +- **Cancel-in-progress**: Allows canceling in-progress man page jobs. + +## Job: `lint` + +This job runs Roxygen to generate and check man pages in the R package. It runs on a docker container instance using `admiralci` images (`ghcr.io/pharmaverse/admiralci-${{ inputs.r-version }}:latest`) for the R environment. + +### Steps + +#### Boilerplate Steps + +1. **Get branch names**: Retrieves branch names for further processing. +2. **Checkout repo (PR)**: Checks out the repository for pull requests. +3. **Checkout repository**: Checks out the repository for non-pull request events. +4. **Normalize inputs**: Normalizes input values, including determining the R version. + +5. **Restore cache**: Restores the cache for staged dependencies. +6. **Run Staged dependencies**: Runs the staged dependencies action. + +#### Roxygen Workflow + +7. **Generate man pages**: Runs `roxygen2::roxygenize()` to generate man pages. +8. **Set-up safe dir**: Sets up a safe directory for git configuration. +9. **Roxygen check**: Checks if manuals are up-to-date with Roxygen comments and provides guidance if differences are found. If differences are found, the workflow will fail, giving the cmd to run to the admiral devs : +`roxygen2::roxygenize('.', roclets = c('rd', 'collate', 'namespace'))` \ No newline at end of file diff --git a/vignettes/pkgdown.Rmd b/vignettes/pkgdown.Rmd new file mode 100644 index 00000000..94ee8652 --- /dev/null +++ b/vignettes/pkgdown.Rmd @@ -0,0 +1,39 @@ +--- +title: "pkgdown" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{pkgdown} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# pkgdown Workflow + +This GitHub Actions workflow automates the generation and deployment of documentation for an R package using `pkgdown`. The workflow supports multiple versions and offers flexibility in customization. +This workflow use rmarkdown to be able to generate html documentation from `Rmd` files (vignettes folder). This documentation is then stored in `gh-pages` branch (an orphan branch) and published. +Note : this workflow is using [InsightEngineering pkgdown multiversion action](https://github.com/insightsengineering/r-pkgdown-multiversion) action. + +## Inputs + +### Required Inputs + +- `r-version`: The version of R to use. Default: '4.1'. + +### Optional Inputs + +- `skip-multiversion-docs`: Skip the creation of multi-version docs. Default: false. If set to True, a subfolder will be created under `gh-pages` (with the current github reference (branch/tag) name) +- `multiversion-docs-landing-page`: Ref to use for the multiversion docs landing page. Default: main. +- `latest-tag-alt-name`: An alternate name to use for 'latest-tag' for multiversion pkgdown docs. Default: "". +- `branches-or-tags-to-list`: Regular expression defining branches or tags listed under the 'Versions' dropdown menu. Default: ^main$|^devel$|^pre-release$|^latest-tag$|^cran-release$|^develop$|^v([0-9]+\\.)?([0-9]+\\.)?([0-9]+)$. + +## Workflow Structure + +### `pkgdown` Job + +This job runs the `pkgdown` process to generate documentation. It checks for `[skip docs]` in the commit message and, if not present, proceeds with the documentation generation. The documentation includes an additional script to fix rdrr.io links for pharmaverse packages. + +### `multi-version-docs` Job + +This job, if triggered, deploys the multi-version documentation to the `gh-pages` branch. It checks for the `skip-multiversion-docs` input and `[skip docs]` in the commit message before proceeding. + diff --git a/vignettes/propagate.Rmd b/vignettes/propagate.Rmd new file mode 100644 index 00000000..ca4d8dcf --- /dev/null +++ b/vignettes/propagate.Rmd @@ -0,0 +1,67 @@ +--- +title: "Propagate" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Propagate} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Propagate renv.lock, Rprofile, and .devcontainer Files Workflow + +This GitHub Actions workflow is specific to the admiralci project. It is designed to propagate changes in `renv.lock`, `.Rprofile`, and `.devcontainer` (for codespaces configuration) to multiple repositories within the project. + +## Workflow Structure + +The workflow consists of two jobs: `integrity` and `propagation`. + +### `integrity` Job + +This job checks the integrity of the `renv.lock` file and performs diagnostics to ensure consistency with the R environment. It is triggered on pull requests targeting the `main` branch and when run manually. + +### `propagation` Job + +This job propagates changes in `renv.lock`, `.Rprofile`, and `.devcontainer` files to specified repositories within the admiralci project. It is triggered on pull requests targeting the `main` branch and when run manually. This job is dependent on the successful completion of the `integrity` job. + +## Inputs + +### Triggers + +- `pull_request`: Triggered on pull requests targeting the `main` branch and specific file paths. +- `workflow_dispatch`: Allows manual triggering of the workflow. + +## Jobs + +### `integrity` Job + +#### Steps + +1. **Checkout repo:** Retrieves the repository for the current workflow run. +2. **Get R version from renv.lock file:** Extracts the R version from the `renv.lock` file. +3. **Setup R:** Sets up the R environment based on the extracted R version. +4. **Run renv.lock diagnostics:** Installs the `renv` package and performs diagnostics on the R environment. + +### `propagation` Job + +#### Steps + +1. **Checkout this repo:** Checks out the current repository. +2. **Checkout specified repository:** Checks out the specified repository based on the matrix configuration. +3. **Update files in the specified repository:** Updates `renv.lock`, `.Rprofile`, and `.devcontainer` files in the specified repository. +4. **Commit and push changes:** Commits the changes and pushes them to the repository. +5. **Create Pull Request:** Creates a pull request in the specified repository, assigning reviewers. + +### Matrix Configuration + +The `propagation` job uses a matrix strategy to iterate over specified repositories with different configurations. (MR with new `renv.lock`/`.Rprofile`/`.devcontainer` files will be created for each element of the matrix, with associated `reviewers` field) + +```yaml +repos: + - name: admiralonco + target-branch: main + reviewers: bundfussr, cicdguy + - name: admiraldev + target-branch: main + reviewers: bms63, cicdguy + # Add more repositories as needed diff --git a/vignettes/push-docker.Rmd b/vignettes/push-docker.Rmd new file mode 100644 index 00000000..f52fb871 --- /dev/null +++ b/vignettes/push-docker.Rmd @@ -0,0 +1,74 @@ +--- +title: "Push Docker Images" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Push Docker Images} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Deploy Docker Image Workflow + +This GitHub Actions workflow automates the deployment of Docker images based on changes in the `renv.lock` file within the `renv/profiles` directory. It is designed to run on pushes to the `main` branch, manual triggers, and on a schedule (every day at midnight UTC on Wednesdays and Sundays). +Note : this workflow is using [InsightEngineering R image creator action](https://github.com/insightsengineering/r-image-creator). + +## Workflow Structure + +The workflow consists of three jobs: `get_renv_list`, `deploy-image`, `deploy-image-devel`, and `store_deps`. + +### `get_renv_list` Job + +This job determines the list of `renv.lock` files that need updates based on the changed files in the `renv/profiles` directory. It differentiates between scheduled runs and manual/dispatch runs. +(For scheduled runs, only `devel` image will be created - see [devel image](#deploy-devel-image-job) section) + +#### Steps + +1. **Checkout repo:** Retrieves the repository for the current workflow run. +2. **Get changed files in renv/profiles:** Determines the changed `renv.lock` files. +3. **Get Updated renv:** Decides whether to update all Docker images or only modified `renv.lock` versions. + +### `deploy-image` Job + +This job deploys Docker images based on the specified configurations. + +#### Steps + +1. **Checkout repo:** Checks out the current repository. +2. **Print message:** Displays a message indicating the Docker image update. +3. **Set image specs:** Retrieves package name, R version, and other specifications. +4. **Call deploy docker image action:** Invokes the Docker image deployment action for each R version and associated `renv.lock` file. + +### `deploy-image-devel` Job + +This job deploys the development version of Docker images. (based on `rstudio/rocker:devel` images using development version of R). +For this job, we do not use `renv` lock files, but directly install dependencies from `DESCRIPTION` file with `devtools`. + +#### Steps + +1. **Call deploy docker image action devel:** Invokes the Docker image deployment action for the development version. + +### `store_deps` Job + +This job stores dependencies of `devel` image into a CSV file. (for now this CSV file is stored inside the action artifacts, but this should be moved to docker images releases artifacts) + +#### Steps + +1. **Store deps into CSV file:** Retrieves installed packages on `devel` image, and stores them in a CSV file. +2. **Upload deps.csv artifact:** Uploads the CSV file containing dependencies as an artifact. + +## Inputs + +### Triggers + +- `push`: Triggered on pushes to the `main` branch with changes in `renv/profiles/**/renv.lock`. +- `workflow_dispatch`: Allows manual triggering of the workflow. +- `schedule`: Runs every day at midnight UTC on Wednesdays and Sundays. (for `devel` image only) + +## Permissions + +- `write-all`: Provides write permissions for various operations. + +## Concurrency + +Concurrency settings are specified to manage concurrent workflow runs effectively. \ No newline at end of file diff --git a/vignettes/r-cmd-checks.Rmd b/vignettes/r-cmd-checks.Rmd new file mode 100644 index 00000000..d5b281c4 --- /dev/null +++ b/vignettes/r-cmd-checks.Rmd @@ -0,0 +1,70 @@ +--- +title: "R CMD CHECKS" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{R CMD CHECKS} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + + +# R CMD Check Workflow + +This GitHub Actions workflow performs R CMD checks on specified R versions and repositories. The checks are triggered by manual dispatch, pushes to the `main` or `devel` branches, and pull requests targeting these branches. + +## Workflow Structure + +The workflow consists of a single job: `R-CMD-check`. + +### `R-CMD-check` Job + +This job runs R CMD checks on different R versions, leveraging specified CRAN repositories. The job is conditioned not to run if the commit message contains '[skip r-cmd-check]'. The checks are performed in parallel for each specified R version, using [Matrix Strategy](#matrix) + + +#### Inputs + +- `error-on`: Input for the 'error_on' parameter in `rcmdcheck::rcmdcheck()`. Defaults to 'note'. + +#### Steps + +1. **Get branch names:** Extracts branch names. +2. **Checkout repo:** Checks out the repository based on the event type (push or pull request). +3. **Restore cache:** Restores cached dependencies. +4. **Run Staged dependencies:** Executes staged dependencies action. +5. **Check Version:** Determines if the package has a maintenance version. +6. **Check:** Performs R CMD checks using `rcmdcheck::rcmdcheck()`. +7. **Upload check results:** Uploads check results as an artifact in case of failure. + +### Concurrency + +Concurrency settings are specified to manage concurrent workflow runs effectively. + +## Inputs + +### Triggers + +- `workflow_dispatch`: Allows manual triggering of the workflow. +- `workflow_call`: Triggered by a workflow call event. +- `push`: Triggered on pushes to the `main` or `devel` branches. +- `pull_request`: Triggered on pull requests targeting the `main` or `devel` branches. + +### Matrix + +- The workflow runs on admiralci docker images (depending on the matrix element r version). +- R versions and CRAN repositories are specified in the matrix for parallel execution. + +``` +matrix: + config: + - {r: '4.1', repos: 'https://packagemanager.posit.co/cran/2021-05-03/'} + - {r: '4.2', repos: 'https://packagemanager.posit.co/cran/2022-01-03/'} + - {r: '4.3', repos: 'https://packagemanager.posit.co/cran/__linux__/focal/latest'} + - {r: 'devel', repos: 'https://packagemanager.posit.co/cran/__linux__/focal/latest'} +``` + +Note: We will change soon the `repos` element to use CRAN repo (https://cran.r-project.org/) + +## Permissions + +- `write-all`: Provides write permissions for various operations. diff --git a/vignettes/readme-render.Rmd b/vignettes/readme-render.Rmd new file mode 100644 index 00000000..191caa9d --- /dev/null +++ b/vignettes/readme-render.Rmd @@ -0,0 +1,47 @@ +--- +title: "Readme Render" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Readme Render} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Render README Workflow + +This GitHub Actions workflow renders the README from R Markdown (`README.Rmd`) to Markdown (`README.md`). Additionally, it can format the generated Markdown using a formatter. The workflow is triggered manually (`workflow_dispatch`) and can also be invoked as a workflow call (`workflow_call`). + +## Workflow Structure + +The workflow consists of a single job: `render`. + +### `render` Job + +This job renders the README from R Markdown to Markdown and optionally formats the generated Markdown. + +#### Inputs + +- `r-version`: The version of R to use. Default is '4.1'. +- `skip-md-formatting`: Skip markdown auto-formatting. Default is 'false'. + +#### Steps + +1. **Get branch names:** Extracts branch names. +2. **Checkout repo (PR):** Checks out the repository based on the event type (pull request). +3. **Checkout repository:** Checks out the repository for events other than pull requests. +4. **Normalize inputs:** Normalizes the R version input. +5. **Restore cache:** Restores cached dependencies. +6. **Run Staged dependencies:** Runs staged dependencies action. +7. **Render README to markdown:** Renders `README.Rmd` to `README.md`. +8. **Install Markdown formatter:** Installs the Markdown formatter if not skipping formatting. +9. **Commit and push formatted README.md:** Commits and pushes changes to the formatted README.md file. + +### Triggers + +- `workflow_dispatch`: Manually triggered workflow with optional inputs. +- `workflow_call`: Invoked as a workflow call. + +## Permissions + +- `contents: write`: Write permissions for repository contents. diff --git a/vignettes/renv-lock.Rmd b/vignettes/renv-lock.Rmd new file mode 100644 index 00000000..8c6e8861 --- /dev/null +++ b/vignettes/renv-lock.Rmd @@ -0,0 +1,51 @@ +--- +title: "renv.lock" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{renv.lock} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# R Renv Lock Generation Workflow + +This GitHub Actions workflow generates the `renv.lock` file for R packages. It is triggered on pull requests targeting the main branch, specifically on changes to the `.github/workflows/r-renv-lock.yml` file. + +## Workflow Structure + +The workflow consists of a single job: `r-renv-lock-gen`. + +### `r-renv-lock-gen` Job + +This job generates the `renv.lock` file for different R versions and operating systems. + +#### Inputs + +- `os`: The operating system for the job. Currently set to 'ubuntu-20.04'. +- `r`: The R version to use. Available versions are '4.1', '4.2', '4.3'. +- `repos`: The CRAN repository to use. + +#### Steps + +1. **Get branch names:** Extracts branch names. +2. **Checkout repo:** Checks out the repository based on the event type (pull request). +3. **Setup R:** Sets up the specified R version. +4. **Install system dependencies:** Installs required system dependencies. +5. **Collect dependencies:** Generates the `renv.lock` file based on the specified R version and the DESCRIPTION file. +6. **Commit and push changes:** Commits and pushes changes to the repository. + +### Triggers + +- `pull_request`: Triggered on pull requests targeting the main branch with changes to the `.github/workflows/r-renv-lock.yml` file. + +### Concurrency + +Concurrency settings are applied to prevent parallel execution for the same pull request or branch. + +## Permissions + +- `contents: write`: Write permissions for repository contents. + +Note : This action is quite hard to maintain, there are indeed some automation parts, such as `get_dependencies` function to configure `renv` snapshot with the `DESCRIPTION` file (taking also Suggests deps). +But some dependencies constraints have to be fixed manually, calling `install_min_version` function to install a dependency with minimal version constraint. diff --git a/vignettes/spellchecks.Rmd b/vignettes/spellchecks.Rmd new file mode 100644 index 00000000..32460532 --- /dev/null +++ b/vignettes/spellchecks.Rmd @@ -0,0 +1,48 @@ +--- +title: "Spellchecks" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Spellchecks} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Spelling Workflow + +This GitHub Actions workflow performs spellchecking on the specified R files. The workflow is triggered manually (`workflow_dispatch`) and can also be invoked as a workflow call (`workflow_call`). + +## Workflow Structure + +The workflow consists of a single job: `roxygen`. + +### `roxygen` Job + +This job runs spellcheck on R files. + +#### Inputs + +- `r-version`: The version of R to use. Default is '4.1'. +- `exclude`: List of paths to exclude (comma-separated list). Default is an empty string. + +#### Conditions + +The spellcheck job is skipped if the commit message contains `[skip spellcheck]`. + +#### Steps + +1. **Get branch names:** Extracts branch names. +2. **Checkout repo (PR):** Checks out the repository based on the event type (pull request). +3. **Checkout repository:** Checks out the repository for events other than pull requests. +4. **Restore cache:** Restores cached dependencies. +5. **Run Staged dependencies:** Runs staged dependencies action. +6. **Run Spellcheck:** Executes the spellcheck action on specified R files. + +### Triggers + +- `workflow_dispatch`: Manually triggered workflow with optional inputs. +- `workflow_call`: Invoked as a workflow call. + +### Permissions + +- `contents: write`: Write permissions for repository contents. diff --git a/vignettes/style.Rmd b/vignettes/style.Rmd new file mode 100644 index 00000000..ef152ab8 --- /dev/null +++ b/vignettes/style.Rmd @@ -0,0 +1,49 @@ +--- +title: "Style" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Style} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# Style Workflow + +This GitHub Actions workflow checks and enforces coding style using `styler` on R files. The workflow is triggered manually (`workflow_dispatch`) and can also be invoked as a workflow call (`workflow_call`). + +## Workflow Structure + +The workflow consists of a single job: `style`. + +### `style` Job + +This job performs code style checks and enforces styling using `styler`. + +#### Inputs + +- `r-version`: The version of R to use. Default is '4.1'. + +#### Conditions + +The style check job is skipped if the commit message contains `[skip style]`. + +#### Steps + +1. **Get branch names:** Extracts branch names. +2. **Checkout repo (PR):** Checks out the repository based on the event type (pull request). +3. **Checkout repository:** Checks out the repository for events other than pull requests. +4. **Normalize inputs:** Normalizes the R version input. +5. **Restore cache:** Restores cached dependencies. +6. **Run Staged dependencies:** Runs staged dependencies action. +7. **Get changed files:** Retrieves the list of changed files, excluding renv files. +8. **Run styler:** Applies `styler` to the changed R files and checks for style violations. If violations are found, the workflow displays relevant information and version details (files with style violation will be displayed using `git diff` after running styler on the workflows) + +### Triggers + +- `workflow_dispatch`: Manually triggered workflow with optional inputs. +- `workflow_call`: Invoked as a workflow call. + +### Permissions + +- `contents: write`: Write permissions for repository contents. diff --git a/vignettes/validation.Rmd b/vignettes/validation.Rmd new file mode 100644 index 00000000..47880780 --- /dev/null +++ b/vignettes/validation.Rmd @@ -0,0 +1,52 @@ +--- +title: "Spell Checks" +output: + rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Spell Checks} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +# R Package Validation Report Workflow + +This GitHub Actions workflow generates a validation report for an R package. The report is triggered by manual dispatch, workflow call, or the publication of a release. +It's mainly using [the validatoR](https://github.com/insightsengineering/thevalidatoR) downstream action. + +## Workflow Structure + +The workflow consists of a single job: `r-pkg-validation`. + +### `r-pkg-validation` Job + +This job generates a validation report for a specified version of R. The report is built using `thevalidatoR` action and uploaded to the release upon success. + +#### Inputs + +- `r-version`: The version of R to use. Defaults to '4.1' and accepts choices '4.1', '4.2', '4.3'. + +#### Steps + +1. **Get branch names:** Extracts branch names. +2. **Checkout repo:** Checks out the repository based on the event type (push or pull request). +3. **Normalize inputs:** Normalizes the input R version, defaulting to '4.1' if not specified. +4. **Restore cache:** Restores cached dependencies. +5. **Run Staged dependencies:** Executes staged dependencies action. +6. **Build report:** Uses `thevalidatoR` action to build the validation report. +7. **Upload report to release:** Uploads the validation report to the release if the job is successful. + +### Triggers + +- `workflow_dispatch`: Allows manual triggering of the workflow with the option to specify the R version. +- `workflow_call`: Triggered by a workflow call event with the option to specify the R version. +- `release`: Triggered on the publication of a release. + +### Concurrency + +Concurrency settings are not specified in this workflow. + +## Permissions + +- `contents: write`: Write permissions for repository contents. +- `packages: write`: Write permissions for packages. +- `deployments: write`: Write permissions for deployments.