0

我正在 GitLab 上构建一个 R 包,我试图让 GitLab CI 工作,问题是

  • devtools::check如果出现错误、警告或注释,则失败。我只希望它因错误而失败
  • 部署pkgdown到 GitLab 页面,它似乎不起作用?

下面是.gitlab-ci-yml我正在使用的。我使用了 R Studio 的 R 包模板来测试它。

# .gitlab-ci.yml

image: methodsconsultants/r-packaging

variables:
  DOCKER_DRIVER: overlay2
  PKGNAME: "test"
  R_LIBS_USER: "$CI_PROJECT_DIR/ci/lib"
  CHECK_DIR: "$CI_PROJECT_DIR/ci/logs"
  BUILD_LOGS_DIR: "$CI_PROJECT_DIR/ci/logs/$PKGNAME.Rcheck"

cache:
    paths:
    - $R_LIBS_USER
    - vendor/apt

stages:
  - build
  - check
  - test
  - pages

before_script:
  - mkdir -p vendor/apt
  - apt-get --allow-releaseinfo-change update -qq
  - apt-get remove -y libgcc-8-dev
  - apt-get -o dir::cache::archives="vendor/apt" install -y libcairo2-dev -qq

buildbinary:
  stage: build
  script:
    - r -e 'devtools::build(binary = TRUE)'

 checkErrors:
   stage: check
   script:
     - r -e 'if (!identical(devtools::check(document = FALSE, args = "--no-tests")[["errors"]], character(0))) stop("Check with Errors")'

unittests:
  stage: test
  script:
    - r -e 'if (any(as.data.frame(devtools::test())[["failed"]] > 0)) stop("Some tests failed.")'

pages:
  script:
    - R -e "pkgdown::build_site()"
  artifacts:
    paths:
      - public
  only:
    - master 

笔记

  • 一切都在本地工作,devtools::check()产生警告和注释,但没有错误。pkgdown构建良好。测试通过。
  • Gitlab CI 正在工作,构建步骤和测试阶段通过正常,然后失败并devtools::check() 显示错误消息
  • 我通过删除短语尝试了 gitlab 页面check(),管道完成得很好,但在setting > Pages我看不到任何东西?
4

1 回答 1

0

解决了:

  • devtools::check似乎在 gitlab CI 但不是本地的警告上引发错误?不明白,但你可以明确设置它的工作原理devtools::check(error_on = "error")
  • 我认为 GitLab 页面需要处于部署阶段?无论如何它现在可以工作了:) 我确实将 pkgdown 的输出文件夹更改为 public 以匹配 gitlab 页面(如下所示)

希望这可以帮助任何偶然发现此问题的人!

# .gitlab-ci.yml

image: rocker/tidyverse

variables:
  DOCKER_DRIVER: overlay2
  PKGNAME: "test"
  R_LIBS_USER: "$CI_PROJECT_DIR/ci/lib"
  CHECK_DIR: "$CI_PROJECT_DIR/ci/logs"
  BUILD_LOGS_DIR: "$CI_PROJECT_DIR/ci/logs/$PKGNAME.Rcheck"

cache:
    paths:
    - $R_LIBS_USER
    - vendor/apt

stages:
  - build
  - test
  - deploy

before_script:
  - R -e 'devtools::install_deps(dep = T)'

buildbinary:
  stage: build
  script:
    - R -e 'devtools::check(vignettes = FALSE, error_on = "error")'

unittests:
  stage: test
  script:
    - r -e 'if (any(as.data.frame(devtools::test())[["failed"]] > 0)) stop("Some tests failed.")'

pages:
  stage: deploy
  script:
  - R -e "install.packages('pkgdown')"
  - R -e "pkgdown::build_site()"
  artifacts:
    paths:
    - public
    expire_in: 1 day
  rules:
    - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH

# _pkgdown.yml
url: ~
template:
  bootstrap: 5
destination: public/

于 2022-03-03T16:58:01.233 回答