Nothing
library(shiny)
library(shinyjs)
library(googleCloudRunner)
# nolint start
ui <- fluidPage(
shinyjs::useShinyjs(),
titlePanel("Cloud Build Scheduler"),
sidebarLayout(
sidebarPanel(
helpText("Upload a cloudbuild.yml file to schedule"),
fileInput("cbfile", "cloudbuild.yml",
accept = c(
"text/yaml",
"text/x-yaml",
"application/x-yaml",
"text/vnd.yaml"
)),
textInput("schedule_name", label = "Schedule name",
value = paste0("my-schedule-",
format(Sys.time(), "%Y%m%d%H%M%S"))),
textInput("cron", "cron schedule", value = "15 9 * * *"),
h4("Project:", cr_project_get()),
p(a(href = sprintf(
"https://console.cloud.google.com/cloudscheduler?project=%s",
cr_project_get()), "Project schedule listings")),
p(a(href = sprintf(
"https://console.cloud.google.com/cloud-build/builds?project=%s",
cr_project_get()), "Project build history")),
uiOutput("logs_link")
),
mainPanel(
helpText("This app will take an existing cloudbuild.yml, validate a build and then schedule it"),
helpText("Create the cloudbuild.yml file either via",
a(href = "https://code.markedmondson.me/googleCloudRunner/reference/cr_build_write.html",
"googleCloudRunner's cr_build_write() function"),
"or manually following the",
a(href = "https://cloud.google.com/cloud-build/docs/build-config",
"Cloud Build yaml schema")),
shinyjs::hidden(h3(id = "working", "Building...")),
p(textOutput("validated")),
uiOutput("scheduled")
)
)
)
server <- function(input, output, session){
do_build <- reactive({
req(input$cbfile) #nolint
bb <- input$cbfile$datapath
cr_build(bb)
})
output$logs_link <- renderUI({
req(do_build()) #nolint
a(href = do_build()$metadata$build$logUrl, "Build Log") #nolint
})
built <- reactive({
req(do_build()) #nolint
shinyjs::show("working")
cr_build_wait(do_build())
})
output$validated <- renderText({
req(built()) #nolint
shinyjs::hide("working")
if(built()$status == "SUCCESS"){
return("Build validated")
}
"Build error - check logs"
})
output$scheduled <- renderUI({
req(built()) #nolint
if(built()$status == "SUCCESS"){
bb <- cr_schedule_http(built())
x <- cr_schedule(input$schedule_name,
schedule = input$cron,
httpTarget = bb,
description = "Scheduled via googleCloudRunner shiny",
overwrite = TRUE)
if(!is.null(x$state))
return(
tagList(
h3("Cloud Build Scheduled"),
tags$ul(
tags$li(paste("name: ", x$name)),
tags$li(paste("state: ", x$state)),
tags$li(paste("userUpdateTime: ", x$userUpdateTime)),
tags$li(paste("schedule: ", x$schedule)),
tags$li(paste("timezone: ", x$timeZone)),
)
)
)
}
h3("Build Error - not scheduling - see build logs") #nolint
})
}
shinyApp(ui, server)
# nolint end
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.