forked from r-lib/usethis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ci.R
91 lines (85 loc) · 2.93 KB
/
ci.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#' Continuous integration setup and badges
#'
#' @description
#' `r lifecycle::badge("questioning")`
#'
#' These functions are not actively used by the tidyverse team, and may not
#' currently work. Use at your own risk.
#'
#' Sets up third-party continuous integration (CI) services for an R package
#' on GitLab or CircleCI. These functions:
#'
#' * Add service-specific configuration files and add them to `.Rbuildignore`.
#' * Activate a service or give the user a detailed prompt.
#' * Provide the markdown to insert a badge into README.
#'
#' @section `use_gitlab_ci()`:
#' Adds a basic `.gitlab-ci.yml` to the top-level directory of a package. This
#' is a configuration file for the [GitLab
#' CI/CD](https://docs.gitlab.com/ee/ci/) continuous integration service.
#' @export
use_gitlab_ci <- function() {
check_uses_git()
new <- use_template(
"gitlab-ci.yml",
".gitlab-ci.yml",
ignore = TRUE
)
if (!new) {
return(invisible(FALSE))
}
invisible(TRUE)
}
#' @section `use_circleci()`:
#' Adds a basic `.circleci/config.yml` to the top-level directory of a package.
#' This is a configuration file for the [CircleCI](https://circleci.com/)
#' continuous integration service.
#' @param browse Open a browser window to enable automatic builds for the
#' package.
#' @param image The Docker image to use for build. Must be available on
#' [DockerHub](https://hub.docker.com). The
#' [rocker/verse](https://hub.docker.com/r/rocker/verse) image includes
#' TeXLive, pandoc, and the tidyverse packages. For a minimal image, try
#' [rocker/r-ver](https://hub.docker.com/r/rocker/r-ver). To specify a version
#' of R, change the tag from `latest` to the version you want, e.g.
#' `rocker/r-ver:3.5.3`.
#' @export
#' @rdname use_gitlab_ci
use_circleci <- function(browse = rlang::is_interactive(),
image = "rocker/verse:latest") {
repo_spec <- target_repo_spec()
use_directory(".circleci", ignore = TRUE)
new <- use_template(
"circleci-config.yml",
".circleci/config.yml",
data = list(package = project_name(), image = image),
ignore = TRUE
)
if (!new) {
return(invisible(FALSE))
}
use_circleci_badge(repo_spec)
circleci_activate(spec_owner(repo_spec), browse)
invisible(TRUE)
}
#' @section `use_circleci_badge()`:
#' Only adds the [Circle CI](https://circleci.com/) badge. Use for a project
#' where Circle CI is already configured.
#' @rdname use_gitlab_ci
#' @eval param_repo_spec()
#' @export
use_circleci_badge <- function(repo_spec = NULL) {
repo_spec <- repo_spec %||% target_repo_spec()
url <- glue("https://circleci.com/gh/{repo_spec}")
img <- glue("{url}.svg?style=svg")
use_badge("CircleCI build status", url, img)
}
circleci_activate <- function(owner, browse = is_interactive()) {
url <- glue("https://circleci.com/add-projects/gh/{owner}")
ui_bullets(c(
"_" = "Turn on CircleCI for your repo at {.url {url}}."
))
if (browse) {
utils::browseURL(url)
}
}