You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.9 KiB
102 lines
2.9 KiB
#' Submits a build job for a package
|
|
#'
|
|
#' This function assumes you know what you're doing and expects a valid
|
|
#' `.build.yml` in the `package` directory.
|
|
#'
|
|
#' @param package path to package (assumes current directory)
|
|
#' @param note human-friendly description of this build (markdown, optional)
|
|
#' @param tags character vector of strings that identify this build and can be
|
|
#' used to navigate the dashboard. Each string must use only lowercase
|
|
#' alphanumeric characters, or any of "-_."
|
|
#' @param read_access,write_access character vector of users that have read or write access to the job.
|
|
#' @param execute start build immediately? (Default: `TRUE`)
|
|
#' @param secrets provide secrets to the build? (Default: `TRUE`)
|
|
#' @param browse open browser to the builder URL? (Default: `FALSE`)
|
|
#' @param username see [sourcehut_user()]
|
|
#' @param pat see [sourcehut_pat()]
|
|
#' @references <https://man.sr.ht/builds.sr.ht/api.md>
|
|
#' @export
|
|
build_pkg <- function(package = ".",
|
|
note = "New build",
|
|
tags = c("package", "rstats"),
|
|
read_access = NULL,
|
|
write_access = NULL,
|
|
execute = TRUE,
|
|
secrets = TRUE,
|
|
browse = FALSE,
|
|
username = sourcehut_user(),
|
|
pat = sourcehut_pat()) {
|
|
|
|
stopifnot(is_package(package))
|
|
|
|
build_yml <- rprojroot::find_package_root_file(".build.yml", path = package)
|
|
build_yml <- paste0(readLines(build_yml, warn = FALSE), collapse="\n")
|
|
|
|
httr::POST(
|
|
url = "https://builds.sr.ht/api/jobs",
|
|
body = list(
|
|
`manifest` = build_yml,
|
|
`note` = note,
|
|
`tags` = tags,
|
|
`access:read` = read_access,
|
|
`access:write` = write_access,
|
|
`execute` = execute,
|
|
`secrets` = secrets
|
|
),
|
|
encode = "json",
|
|
sh_authorize(pat),
|
|
.SOURCEHUT_UA
|
|
) -> res
|
|
|
|
out <- process_response(res)
|
|
|
|
if ("id" %in% names(out)) {
|
|
if (browse) {
|
|
browseURL(glue::glue("https://builds.sr.ht/{username}/job/{out[['id']]}"))
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#' @rdname build_pkg
|
|
#' @param job_id `builds.sr.ht` job id
|
|
#' @export
|
|
get_build_status <- function(job_id, pat = sourcehut_pat()) {
|
|
|
|
route_url <- glue::glue("https://builds.sr.ht/api/jobs/{job_id}")
|
|
|
|
res <- make_get_request(route_url)
|
|
process_response(res)
|
|
|
|
}
|
|
|
|
#' @rdname build_pkg
|
|
#' @export
|
|
get_build_manifest <- function(job_id, pat = sourcehut_pat()) {
|
|
|
|
route_url <- glue::glue("https://builds.sr.ht/api/jobs/{job_id}/manifest")
|
|
|
|
res <- make_get_request(route_url)
|
|
|
|
httr::stop_for_status(res)
|
|
|
|
httr::content(res, as = "text", encoding = "UTF-8")
|
|
|
|
}
|
|
|
|
#' @rdname build_pkg
|
|
#' @export
|
|
start_build <- function(job_id, pat = sourcehut_pat()) {
|
|
|
|
route_url <- glue::glue("https://builds.sr.ht/api/jobs/{job_id}/start")
|
|
|
|
httr::POST(
|
|
url = route_url,
|
|
encode = "json",
|
|
sh_authorize(pat),
|
|
.SOURCEHUT_UA
|
|
) -> res
|
|
|
|
process_response(res)
|
|
|
|
}
|
|
|