GitLab CI与r testthat包

9
有人能否在GitLab.com的持续集成工具中运行testthat测试来测试一个最小的R包? 我的尝试:
https://gitlab.com/djchapman/CI_example
这是我使用的.gitlab-CI.yml文本。
image: rocker/rstudio
test:
   script:
    - R -e 'install.packages(c("devtools", "testthat"))'
    - R CMD build . --no-build-vignettes --no-manual
    - PKG_FILE_NAME=$(ls -1t *.tar.gz | head -n 1)
    - R CMD check "${PKG_FILE_NAME}" --no-build-vignettes --no-manual
    - R -e 'devtools::test()'

这段内容是从这个网站改编而来。我意识到devtools有一些依赖关系,可能需要在安装软件包时包含它们,我尝试了这样做,但是git2r库似乎没有正确安装,现在我想知道我是否错了。谢谢。


3
你有任何错误吗?为什么要调用devtools::test()?检查一个软件包包括运行测试。 - Ralf Stubner
2个回答

7

您不需要通过devtools运行测试,因为R CMD check已经完成了这个操作。以下代码应该可以解决问题:

image: rocker/rstudio
test:
   script:
    - R -e 'install.packages(c("testthat"))'
    - R CMD build . --no-build-vignettes --no-manual
    - PKG_FILE_NAME=$(ls -1t *.tar.gz | head -n 1)
    - R CMD check "${PKG_FILE_NAME}" --no-build-vignettes --no-manual

或者您可以使用允许二进制安装的映像:

image: rocker/r-base
test:
   script:
    - apt-get update
    - apt-get install --yes --no-install-recommends r-cran-testthat r-cran-devtools
    - R -e "devtools::install_deps()"
    - R CMD build . --no-build-vignettes --no-manual
    - PKG_FILE_NAME=$(ls -1t *.tar.gz | head -n 1)
    - R CMD check "${PKG_FILE_NAME}" --no-build-vignettes --no-manual

这对于你的依赖关系没有被打包为Debian,或者当你添加一个新的依赖性时不想更新CI脚本很有用。

谢谢Ralf!我测试了两个解决方案,它们都通过了。我并没有完全理解R CMD check,并且对yaml不太熟悉。 - djchapman
2
请注意,如果您的任何测试依赖于 DESCRIPTION 文件中建议部分中的软件包,则应该阅读 "devtools::install_deps(dependencies = TRUE)"。默认行为是忽略建议的软件包。 - RDavey

2
对我来说,这没有按预期工作。我发现问题出在我有“vignettes”。使用以下内容的.gitlab-ci.yml,我解决了这个问题:
image: rocker/r-base
gitlab:
   script:
    - apt-get update
    # install dependencies for package
    - apt-get install --yes --no-install-recommends r-cran-xml2 r-cran-testthat r-cran-devtools
    - R -e 'devtools::install_deps(dependencies = c("Depends", "Imports", "Suggests"))'
    # remove vignettes folder and get VignetteBuilder field out of DESCRIPTION file
    - rm -rf vignettes
    - R -e 'd <- read.dcf("DESCRIPTION"); d[, colnames(d) == "VignetteBuilder"] <- NA; write.dcf(d, "DESCRIPTION")'
    - R CMD build . --no-build-vignettes --no-manual
    - PKG_FILE_NAME=$(ls -1t *.tar.gz | head -n 1)
    - R CMD check "${PKG_FILE_NAME}" --no-build-vignettes --no-manual --as-cran
    # update code coverage
    - apt-get install --yes git
    - R -e "covr::codecov(token = 'mytoken')"

它在开始构建之前删除了vignettes文件夹,并从DESCRIPTION文件中删除了VignetteBuilder字段。相当方便,尽管我现在无法测试其内容。
过了一会儿,我发现如果您将令牌作为输入(来自https://codecov.io/gl/yourname/yourproject/settings),并事先安装git,则covr :: codecov()非常有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接