{"record":{"id":"cf4626c8578db477","repo":"nikivdev/code","slug":"wrangler-pages-domain-add-failed","errorCode":null,"errorMessage":"wrangler pages domain add failed","messagePattern":"wrangler pages domain add failed","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/docs.rs","lineNumber":708,"sourceCode":"        cmd\n    } else if which(\"npm\").is_ok() {\n        let mut cmd = Command::new(\"npm\");\n        cmd.args([\n            \"exec\", \"wrangler\", \"--\", \"pages\", \"domain\", \"add\", project, domain,\n        ]);\n        cmd\n    } else {\n        bail!(\"bun, npx, or npm is required to run wrangler\");\n    };\n    let status = cmd\n        .current_dir(hub_root)\n        .stdin(std::process::Stdio::inherit())\n        .stdout(std::process::Stdio::inherit())\n        .stderr(std::process::Stdio::inherit())\n        .status()\n        .context(\"failed to run wrangler pages domain add\")?;\n    if !status.success() {\n        bail!(\"wrangler pages domain add failed\");\n    }\n    Ok(())\n}\n\nfn prompt_line(message: &str, default: Option<&str>) -> Result<String> {\n    if let Some(default) = default {\n        print!(\"{message} [{default}]: \");\n    } else {\n        print!(\"{message}: \");\n    }\n    io::stdout().flush()?;\n    let mut input = String::new();\n    io::stdin().read_line(&mut input)?;\n    let trimmed = input.trim();\n    if trimmed.is_empty() {\n        return Ok(default.unwrap_or(\"\").to_string());\n    }\n    Ok(trimmed.to_string())","sourceCodeStart":690,"sourceCodeEnd":726,"githubUrl":"https://github.com/nikivdev/code/blob/a747e741ae92c09071d0ae946ab48488adcff1ce/src/docs.rs#L690-L726","documentation":"After running `wrangler pages domain add <project> <domain>`, attach_pages_domain checks the exit status and bails if wrangler failed. The failure occurred inside wrangler — typically Cloudflare authentication, permissions, or an invalid project/domain — not in this library.","triggerScenarios":"Calling deploy_docs_hub with a custom domain when wrangler exits non-zero: not logged in (no CLOUDFLARE_API_TOKEN), token lacking Pages domain permissions, project name wrong or not yet deployed, domain not owned/zone not on the account, or wrangler not resolvable indirectly (npm exec failing).","commonSituations":"CI deploying with missing/expired CLOUDFLARE_API_TOKEN; typo in project name; custom domain whose DNS zone belongs to another Cloudflare account; wrangler version too old for `pages domain add`.","solutions":["Run the command manually in the hub root to see wrangler's real error: npx wrangler pages domain add <project> <domain>","Ensure Cloudflare credentials are set (wrangler login or CLOUDFLARE_API_TOKEN with Pages:Edit permission)","Verify the Pages project name matches an existing deployed project and the domain's zone is in the same Cloudflare account","Update wrangler (`npm i -g wrangler` or bun equivalent) if the pages subcommand is unsupported"],"exampleFix":"// before\n$ mytool docs hub deploy --domain docs.example.com\nError: wrangler pages domain add failed\n  (wrangler: Not logged in)\n// after\n$ export CLOUDFLARE_API_TOKEN=cf_...   # token with Pages:Edit\n$ mytool docs hub deploy --domain docs.example.com","handlingStrategy":"try-catch","validationCode":"// verify Cloudflare credentials before deploying a custom domain\nif std::env::var(\"CLOUDFLARE_API_TOKEN\").is_err() {\n    eprintln!(\"CLOUDFLARE_API_TOKEN not set; wrangler domain add will fail\");\n    return;\n}","typeGuard":null,"tryCatchPattern":"match deploy_docs_hub(&opts) {\n    Err(e) if e.to_string().contains(\"wrangler pages domain add failed\") => {\n        eprintln!(\"wrangler failed; run `npx wrangler pages domain add <project> <domain>` manually for the real error (auth? project? zone?)\");\n    }\n    Err(e) => return Err(e),\n    Ok(()) => {}\n}","preventionTips":["Set CLOUDFLARE_API_TOKEN (Pages:Edit permission) in deploy environments","Confirm the Pages project exists and is deployed before attaching domains","Ensure the custom domain's zone belongs to the same Cloudflare account","Keep wrangler up to date so `pages domain add` is supported"],"tags":["rust","subprocess","cloudflare","wrangler","authentication"],"backgroundTag":"command-exited-nonzero","analyzedSha":"a747e741ae92c09071d0ae946ab48488adcff1ce","analyzedAt":"2026-09-01T22:43:55.719Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}