使用R TestThat软件包的GitLab CI

时间:2018-08-15 21:49:14

标签: r gitlab testthat

任何人都可以使用GitLab.com持续集成工具运行可测试最小R包的测试吗? 我的尝试:
https://gitlab.com/djchapman/CI_example
这是我正在使用的.gitlab-CI.yml文本

$PATH

它是根据this网站改编而成的。我意识到devtools具有依赖关系,在安装软件包时可能需要包括这些依赖关系,我尝试过这样做,但是git2r的库似乎未正确安装,现在我想知道我是否要解决这个问题。谢谢。

2 个答案:

答案 0 :(得分:4)

您不需要通过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脚本,这将非常有用。

答案 1 :(得分:1)

对我来说,这没有按预期进行。我发现问题出在我有小插曲。使用.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文件夹并从VignetteBuilder文件中删除DESCRIPTION字段。非常方便,尽管我现在无法测试其内容。

过了一会儿,我发现如果您将令牌作为输入(来自https://codecov.io/gl/yourname/yourproject/settings)并预先安装covr::codecov()git的效果很好。

希望这对其他人也有帮助。 GitLab是GitHub的理想替代品。
是2018年和some things have changed