wrangler/deploy/
schedule.rs1use crate::http;
2use crate::settings::global_user::GlobalUser;
3
4use anyhow::Result;
5
6#[derive(Clone, Debug, PartialEq)]
7pub struct ScheduleTarget {
8 pub account_id: String,
9 pub script_name: String,
10 pub crons: Vec<String>,
11}
12
13impl ScheduleTarget {
14 pub fn deploy(&self, user: &GlobalUser) -> Result<Vec<String>> {
15 log::info!("publishing schedules");
16 let schedule_worker_addr = format!(
17 "https://api.cloudflare.com/client/v4/accounts/{}/workers/scripts/{}/schedules",
18 self.account_id, self.script_name,
19 );
20
21 let client = http::legacy_auth_client(user);
22
23 log::info!("Pushing {} schedule(s)...", self.crons.len());
24 let res = client
25 .put(&schedule_worker_addr)
26 .header("Content-Type", "application/json")
27 .body(build_schedules_request(&self.crons))
28 .send()?;
29
30 let status = res.status();
31 let text = res.text()?;
32 if !status.is_success() {
33 anyhow::bail!(crate::format_api_errors(text))
34 }
35
36 Ok(self.crons.clone())
37 }
38}
39
40fn build_schedules_request(crons: &[String]) -> String {
41 let values = crons
42 .iter()
43 .map(|s| serde_json::json!({ "cron": s }))
44 .collect();
45 serde_json::Value::Array(values).to_string()
46}