wrangler/deploy/
zoneless.rs1use crate::commands::subdomain::Subdomain;
2use crate::http;
3use crate::settings::global_user::GlobalUser;
4use crate::settings::toml::target::LazyAccountId;
5use crate::settings::toml::RouteConfig;
6
7use anyhow::Result;
8
9#[derive(Clone, Debug, PartialEq)]
10pub struct ZonelessTarget {
11 pub account_id: LazyAccountId,
12 pub script_name: String,
13}
14
15impl ZonelessTarget {
16 pub fn build(script_name: &str, route_config: &RouteConfig) -> Result<Self> {
17 Ok(Self {
18 script_name: script_name.to_string(),
19 account_id: route_config.account_id.clone(),
20 })
21 }
22
23 pub fn deploy(&self, user: &GlobalUser) -> Result<String> {
24 log::info!("publishing to workers.dev subdomain");
25 log::info!("checking that subdomain is registered");
26 let subdomain = match Subdomain::get(self.account_id.load()?, user)? {
27 Some(subdomain) => subdomain,
28 None => anyhow::bail!("Before publishing to workers.dev, you must register a subdomain. Please choose a name for your subdomain and run `wrangler subdomain <name>`.")
29 };
30
31 let sd_worker_addr = format!(
32 "https://api.cloudflare.com/client/v4/accounts/{}/workers/scripts/{}/subdomain",
33 self.account_id.load()?,
34 self.script_name,
35 );
36
37 let client = http::legacy_auth_client(user);
38
39 log::info!("Making public on subdomain...");
40 let res = client
41 .post(&sd_worker_addr)
42 .header("Content-type", "application/json")
43 .body(build_subdomain_request())
44 .send()?;
45
46 let status = res.status();
47 let text = res.text()?;
48 if !status.is_success() {
49 anyhow::bail!(crate::format_api_errors(text))
50 }
51
52 let deploy_address = format!("https://{}.{}.workers.dev", self.script_name, subdomain);
53
54 Ok(deploy_address)
55 }
56}
57
58fn build_subdomain_request() -> String {
59 serde_json::json!({ "enabled": true }).to_string()
60}