Faire fonctionner le template pour build le manual d'un projet R
Ce template doit permettre de générer un manuel pdf pour un paquet R.
J'arrive bien à faire fonctionner ces commandes sur mon PC mais je n'ai pas réussi dans la CI.
Voici les jobs que j'ai essayé :
- Test 1 : (à mettre dans templates-r.yml) utilise l'image tidyverse et essaie d'installer tout ce qu'il faut :
# Build a pdf manual
.R-build-pdf-manual:
image: rocker/tidyverse
tags:
- docker
- stable
extends:
- .R-default-globals
- .R-package-cache
- .R-update-packages
script:
- cd ${R_PACKAGE_ROOT_ABSOLUTE_PATH}
- !reference [.R-update-packages, script]
- echo '*** Additional configs... ***'
- apt-get update
- apt-get -yq install pandoc
- >
${R_RUN_CODE_COMMAND} '
source(file.path(Sys.getenv("CI_PROJECT_DIR"), "temp_gitlabTemplates", "optionsForCi.R")); setOptionsForCi();
if (Sys.getenv("R_DO_PACKAGE_UPDATE") == 1 || !require("devtools")) {
install.packages(pkgs = "devtools", repos = Sys.getenv("R_PACKAGE_SOURCE_REPO"))
}
'
- >
${R_RUN_CODE_COMMAND} '
source(file.path(Sys.getenv("CI_PROJECT_DIR"), "temp_gitlabTemplates", "optionsForCi.R")); setOptionsForCi();
if (Sys.getenv("R_DO_PACKAGE_UPDATE") == 1 || !require("tinytex")) {
install.packages(pkgs = "tinytex", repos = Sys.getenv("R_PACKAGE_SOURCE_REPO"))
}
'
# Install tinytex
- ${R_RUN_CODE_COMMAND} 'source(file.path(Sys.getenv("CI_PROJECT_DIR"), "temp_gitlabTemplates", "optionsForCi.R")); setOptionsForCi(); tinytex::install_tinytex()'
# To solve error "Failed to build manual" with devtools::build_manual()
# Solution from: https://stackoverflow.com/questions/69847540/devtoolsbuild-manual-error-failed-to-build-manual
- ${R_RUN_CODE_COMMAND} 'source(file.path(Sys.getenv("CI_PROJECT_DIR"), "temp_gitlabTemplates", "optionsForCi.R")); setOptionsForCi(); tinytex::tlmgr_install("makeindex")'
# Create package pdf manual
- echo '*** Generate pdf manual... ***'
- >
${R_RUN_CODE_COMMAND} '
source(file.path(Sys.getenv("CI_PROJECT_DIR"), "temp_gitlabTemplates", "optionsForCi.R")); setOptionsForCi();
res <- devtools::build_manual(path = ".");
if (res$status != 0) {
stop("devtools::build_manual() return a status code different from 0!")
}
pdfFilePath <- strsplit(x = res$command[4], split = "=")[[1]][2];
message("Created file = ", pdfFilePath)
'
when: manual
artifacts:
paths:
- ${R_PACKAGE_ROOT_RELATIVE_PATH}/*.pdf
- Test 2 : (à mettre dans templates-r.yml) essaie d'utiliser l'image verse qui est sensée contenir tout ce qu'il faut :
# Build a pdf manual
.R-build-pdf-manual:
image: rocker/verse
tags:
- docker
- stable
extends:
- .R-default-globals
- .R-package-cache
- .R-update-packages
script:
- cd ${R_PACKAGE_ROOT_ABSOLUTE_PATH}
- !reference [.R-update-packages, script]
- echo '*** Additional configs... ***'
- >
${R_RUN_CODE_COMMAND} '
source(file.path(Sys.getenv("CI_PROJECT_DIR"), "temp_gitlabTemplates", "optionsForCi.R")); setOptionsForCi();
if (Sys.getenv("R_DO_PACKAGE_UPDATE") == 1 || !require("devtools")) {
install.packages(pkgs = "devtools", repos = Sys.getenv("R_PACKAGE_SOURCE_REPO"))
}
'
# Create package pdf manual
- echo '*** Generate pdf manual... ***'
- >
${R_RUN_CODE_COMMAND} '
source(file.path(Sys.getenv("CI_PROJECT_DIR"), "temp_gitlabTemplates", "optionsForCi.R")); setOptionsForCi();
res <- devtools::build_manual(path = ".");
if (res$status != 0) {
stop("devtools::build_manual() return a status code different from 0!")
}
pdfFilePath <- strsplit(x = res$command[4], split = "=")[[1]][2];
message("Created file = ", pdfFilePath)
'
when: manual
artifacts:
paths:
- ${R_PACKAGE_ROOT_RELATIVE_PATH}/*.pdf
Dans les deux cas le test suivant (à mettre dans .gitlab-ci-r-tests.yml) retourne l'erreur vague Error in
value[3L]: ! Failed to build manual
:
Test R-build-pdf-manual Good:
extends:
- .R-build-pdf-manual
rules:
- changes:
- .gitlab-ci.yml
- tests/.gitlab-ci-r-tests.yml
- templates/templates-r.yml
- tests/r-package/*
- R/*
variables:
R_PACKAGE_ROOT_RELATIVE_PATH: tests/r-package
script:
- !reference [.R-build-pdf-manual, script]
- if [ -f "${R_PACKAGE_ROOT_ABSOLUTE_PATH}/minimal-1.0.0.pdf" ];
then echo "File found"; exit 0;
else echo "File not found"; exit -1;
fi
when: on_success
allow_failure: false
Penser remettre la description dans /docs/Descriptions.md
:
- **.R-build-pdf-manual**
Build a pdf manual for the package.
The generated pdf is available as un artifacts or at the parent package folder for subsequent jobs (named `/packagename-versionnumber.pdf`)