diff --git a/.changeset/automatically_retry_webrtc_build_downloads.md b/.changeset/automatically_retry_webrtc_build_downloads.md new file mode 100644 index 000000000..4410c3d67 --- /dev/null +++ b/.changeset/automatically_retry_webrtc_build_downloads.md @@ -0,0 +1,9 @@ +--- +webrtc-sys: patch +webrtc-sys-build: patch +livekit: patch +livekit-ffi: patch +libwebrtc: patch +--- + +# Automatically retry webrtc build downloads diff --git a/webrtc-sys/build/src/lib.rs b/webrtc-sys/build/src/lib.rs index 4b07707df..ef7dde5e6 100644 --- a/webrtc-sys/build/src/lib.rs +++ b/webrtc-sys/build/src/lib.rs @@ -209,8 +209,22 @@ pub fn download_webrtc() -> Result<()> { return Ok(()); } - let mut resp = reqwest::blocking::get(download_url()) - .context("Failed to send HTTP request to download WebRTC")?; + let mut resp = reqwest::blocking::get(download_url()); + for attempt in 1..3 { + let transient = match &resp { + Ok(resp) => { + resp.status().is_server_error() || resp.status() == StatusCode::TOO_MANY_REQUESTS + } + Err(_) => true, + }; + if !transient { + break; + } + println!("cargo:warning=webrtc download attempt {} failed, retrying in 5s...", attempt); + std::thread::sleep(std::time::Duration::from_secs(5)); + resp = reqwest::blocking::get(download_url()); + } + let mut resp = resp.context("Failed to send HTTP request to download WebRTC")?; if resp.status() != StatusCode::OK { return Err(anyhow!("failed to download webrtc: {}", resp.status())); }