R/deploy.R
cr_deploy_packagetests.RdThis tests an R package each time you commit, and uploads the test coverage results to Codecov
cr_deploy_packagetests(
steps = NULL,
cloudbuild_file = "cloudbuild-tests.yml",
env = c("NOT_CRAN=true"),
test_script = NULL,
codecov_script = NULL,
codecov_token = "$_CODECOV_TOKEN",
build_image = "gcr.io/gcer-public/packagetools:latest",
create_trigger = c("file", "inline", "no"),
trigger_repo = NULL,
...,
footer = TRUE
)extra steps to run before the cr_buildstep_packagetests steps run (such as decryption of auth files)
The cloudbuild yaml file to write to. See create_trigger
Environment arguments to be set during the test script runs
The script that will call rcmdcheck to perform tests. If NULL a default script is used in system.file("r_buildsteps", "devtools_tests.R", package="googlecloudRunner")
The script that will call codecov to perform coverage. If NULL a default script is used in system.file("r_buildsteps", "codecov_tests.R", package="googleCloudRunner")
If using codecov, supply your codecov token here.
The docker image that will be used to run the R code for the test scripts
If creating a trigger, whether to create it from the cloudbuild_file or inline
If not NULL, a cr_buildtrigger_repo where a buildtrigger will be created via cr_buildtrigger
Arguments passed on to cr_build_make
yamlA Yaml object created from cr_build_yaml or a file location of a .yaml/.yml cloud build file
artifactsArtifacts that may be built via cr_build_yaml_artifact
optionsOptions to pass to a Cloud Build
availableSecretsSecret Manager objects built by cr_build_yaml_secrets
logsBucketThe gs:// location of a bucket to put logs in
sourceA Source object specifying the location of the source files to build, usually created by cr_build_source
timeoutAmount of time that this build should be allowed to run, to second
imagesA list of images to be pushed upon the successful completion of all build
substitutionsSubstitutions data for `Build` resource
serviceAccountservice account email to be used for the build
flag passed to cr_build_write, indicating
if a footer in the YAML should be added with the creation date/time.
The trigger repository needs to hold an R package configured to do tests upon.
For GitHub, the repository will need to be linked to the project you are building within, via https://console.cloud.google.com/cloud-build/triggers/connect
If your tests need authentication details, add these via cr_buildstep_secret to the steps argument, which will prepend decrypting the authentication file before running the tests.
If you want codecov to ignore some files then also deploy a .covrignore file to your repository - see covr website at https://covr.r-lib.org/ for details.
Create your own custom deployment using cr_buildstep_packagetests which this function uses with some defaults
Other Deployment functions:
cr_deploy_docker_trigger(),
cr_deploy_docker(),
cr_deploy_pkgdown(),
cr_deploy_run_website(),
cr_deploy_run(),
cr_deploy_r()
# create a local cloudbuild.yml file for packagetests
pd <- cr_deploy_packagetests(create_trigger = "no")
#> ℹ 2022-03-26 19:55:58 > Writing to cloudbuild-tests.yml
#>
#> ℹ Complete deployment of tests Cloud Build yaml:
#> • Go to https://console.cloud.google.com/cloud-build/triggers and
#> make a build trigger pointing at this file in your repo:
#> cloudbuild-tests.yml
#> ℹ Build Trigger substitution variable settings:
#> _CODECOV_TOKEN = your-codecov-token
#> Ignored files filter (glob): docs/** and vignettes/**
pd
#> ==cloudRunnerYaml==
#> steps:
#> - name: gcr.io/gcer-public/packagetools:latest
#> args:
#> - Rscript
#> - -e
#> - |-
#> message("cran mirror: ", getOption("repos"))
#> remotes::install_deps(dependencies = TRUE)
#> rcmdcheck::rcmdcheck(args = "--no-manual", error_on = "warning")
#> env:
#> - NOT_CRAN=true
#> - name: gcr.io/gcer-public/packagetools:latest
#> args:
#> - Rscript
#> - -e
#> - |-
#> remotes::install_deps(dependencies = TRUE)
#> remotes::install_local()
#> cv <- covr::package_coverage()
#> up <- covr::codecov(coverage = cv,
#> commit = "$COMMIT_SHA", branch = "$BRANCH_NAME",
#> quiet = FALSE)
#> up
#> if (!up$uploaded) stop("Error uploading codecov reports")
#> env:
#> - NOT_CRAN=true
#> - CODECOV_TOKEN=$_CODECOV_TOKEN
#> - CI=true
#> - GCB_PROJECT_ID=$PROJECT_ID
#> - GCB_BUILD_ID=$BUILD_ID
#> - GCB_COMMIT_SHA=$COMMIT_SHA
#> - GCB_REPO_NAME=$REPO_NAME
#> - GCB_BRANCH_NAME=$BRANCH_NAME
#> - GCB_TAG_NAME=$TAG_NAME
#> - GCB_HEAD_BRANCH=$_HEAD_BRANCH
#> - GCB_BASE_BRANCH=$_BASE_BRANCH
#> - GCB_HEAD_REPO_URL=$_HEAD_REPO_URL
#> - GCB_PR_NUMBER=$_PR_NUMBER
# add a decryption step for an auth file
cr_deploy_packagetests(
steps = cr_buildstep_secret("my_secret", "auth.json"),
env = c("NOT_CRAN=true", "MY_AUTH_FILE=auth.json"),
timeout = 1200,
create_trigger = "no"
)
#> ℹ 2022-03-26 19:55:58 > Writing to cloudbuild-tests.yml
#>
#> ℹ Complete deployment of tests Cloud Build yaml:
#> • Go to https://console.cloud.google.com/cloud-build/triggers and
#> make a build trigger pointing at this file in your repo:
#> cloudbuild-tests.yml
#> ℹ Build Trigger substitution variable settings:
#> _CODECOV_TOKEN = your-codecov-token
#> Ignored files filter (glob): docs/** and vignettes/**
#> ==cloudRunnerYaml==
#> steps:
#> - name: gcr.io/cloud-builders/gcloud
#> entrypoint: bash
#> args:
#> - -c
#> - gcloud secrets versions access latest --secret=my_secret > auth.json
#> - name: gcr.io/gcer-public/packagetools:latest
#> args:
#> - Rscript
#> - -e
#> - |-
#> message("cran mirror: ", getOption("repos"))
#> remotes::install_deps(dependencies = TRUE)
#> rcmdcheck::rcmdcheck(args = "--no-manual", error_on = "warning")
#> env:
#> - NOT_CRAN=true
#> - MY_AUTH_FILE=auth.json
#> - name: gcr.io/gcer-public/packagetools:latest
#> args:
#> - Rscript
#> - -e
#> - |-
#> remotes::install_deps(dependencies = TRUE)
#> remotes::install_local()
#> cv <- covr::package_coverage()
#> up <- covr::codecov(coverage = cv,
#> commit = "$COMMIT_SHA", branch = "$BRANCH_NAME",
#> quiet = FALSE)
#> up
#> if (!up$uploaded) stop("Error uploading codecov reports")
#> env:
#> - NOT_CRAN=true
#> - MY_AUTH_FILE=auth.json
#> - CODECOV_TOKEN=$_CODECOV_TOKEN
#> - CI=true
#> - GCB_PROJECT_ID=$PROJECT_ID
#> - GCB_BUILD_ID=$BUILD_ID
#> - GCB_COMMIT_SHA=$COMMIT_SHA
#> - GCB_REPO_NAME=$REPO_NAME
#> - GCB_BRANCH_NAME=$BRANCH_NAME
#> - GCB_TAG_NAME=$TAG_NAME
#> - GCB_HEAD_BRANCH=$_HEAD_BRANCH
#> - GCB_BASE_BRANCH=$_BASE_BRANCH
#> - GCB_HEAD_REPO_URL=$_HEAD_REPO_URL
#> - GCB_PR_NUMBER=$_PR_NUMBER
#> timeout: 1200s
# creating a buildtrigger repo for trigger_repo
repo <- cr_buildtrigger_repo("MarkEdmondson1234/googleCloudRunner",
branch = "master"
)
if (FALSE) {
# will create the file in the repo, and point a buildtrigger at it
cr_deploy_packagetests(create_trigger = "file", trigger_repo = repo)
# will make an inline build within a buildtrigger
cr_deploy_packagetests(create_trigger = "inline", trigger_repo = repo)
}
unlink("cloudbuild-tests.yml")