如何为R包的CI制作azure-pipeline.yml?

66bbxpm5  于 2022-11-17  发布在  其他
关注(0)|答案(2)|浏览(106)

我一直在尝试让Azure管道为我公司的内部R包工作。我希望管道:

  1. Check() Package
    1.运行/testthat中的测试
    1.使用covr检查代码覆盖率
    我们使用Azure DevOps,并在其中使用Azure Repos。我发现的几个例子主要集中在GitHub解决方案上。我尝试过使用https://github.com/r-lib/r-azure-pipelines,但是,由于一开始对如何设置管道没有太多的知识,我发现学习和前进非常困难。我也在RStudio社区here上发表了文章,但是我当前的方法不运行check()。我想尝试使用Azure DevOps提供的所有测试功能。
rjjhvcjd

rjjhvcjd1#

在两个不同的组织中,我在让Azure管道与R包一起工作时面临着完全相同的挑战,我认为我应该花时间分享我在这一过程中学到的东西。
请参阅https://github.com/jamiegaida/AzurePipelineR处的简要说明和代码
这建立在上面Louish沿着其他来源的伟大答案的基础上。它还通过MegaLinter运行Lintr包。

8qgya5xd

8qgya5xd2#

我需要做一些类似的事情,并发现您的RStudio社区帖子在让我开始这方面非常有用-谢谢您的帖子。我现在已经设法建立了一个管道:
1.使用rcmdcheck检查套件(这也会执行测试的test)
1.使用covr运行代码覆盖率
1.发布测试结果、代码覆盖率报告和check.log文件
首先,您需要确保测试.R脚本使用如下指定得reporter参数运行test_check
test_check("mypackage", reporter = JunitReporter$new(file = "test-result.xml"))
那么下面的.yml文件应该可以做到这一点:

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

container:
  image: 'rocker/tidyverse:latest'

variables:
  _R_CHECK_FORCE_SUGGESTS_: false
  MAKEFLAGS: "-j 2"

steps:
- bash: R -q -e 'writeLines(".libPaths(\"~/R-private\")", ".Rprofile"); dir.create("~/R-private", recursive = TRUE); print(Sys.getenv());'
  displayName: "Preliminaries"

- bash: R -q -e 'install.packages(c("covr", "roxygen2", "testthat", "remotes", "rcmdcheck")); remotes::install_deps(dependencies = TRUE);'
  displayName: 'Install Dependencies'

- bash: R -q -e "rcmdcheck::rcmdcheck(args = '--no-manual', error_on = 'warning', check_dir = 'check')"
  displayName: 'Check Package'

- bash: R -q -e 'cov <- covr::package_coverage(); covr::to_cobertura(cov, "coverage.xml")'
  displayName: 'Run Code Coverage'
  condition: succeededOrFailed()

- task: UseDotNet@2
  displayName: 'Use .NET Core sdk'
  inputs:
    packageType: sdk
    version: 2.2.203
    installationPath: $(Agent.ToolsDirectory)/dotnet
  condition: succeededOrFailed()

- task: PublishCodeCoverageResults@1
  displayName: 'Publish Code Coverage'
  inputs:
    codeCoverageTool: 'Cobertura'
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
  condition: succeededOrFailed()

- task: PublishTestResults@2
  displayName: 'Publish Test Results'
  inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '**/test-*.xml'
  condition: succeededOrFailed()

- task: PublishBuildArtifacts@1
  displayName: 'Publish Check log'
  inputs:
    pathToPublish: 'check/mypackage.Rcheck/00check.log' 
    artifactName: check 
  condition: succeededOrFailed()

相关问题