Skip to content

Commit

Permalink
prefetch-npm-deps: check response status and fail on error (#297863)
Browse files Browse the repository at this point in the history
Check response status and fail if error returned.
  • Loading branch information
johnnywalker authored Dec 15, 2024
1 parent 612838e commit 74e24a9
Showing 1 changed file with 24 additions and 8 deletions.
32 changes: 24 additions & 8 deletions pkgs/build-support/node/fetch-npm-deps/src/util.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
use anyhow::bail;
use backoff::{retry, ExponentialBackoff};
use data_encoding::BASE64;
use digest::Digest;
use isahc::{
config::{CaCertificate, Configurable, RedirectPolicy, SslOption},
Body, Request, RequestExt,
};
use log::info;
use nix_nar::{Encoder, NarError};
use serde_json::{Map, Value};
use sha2::Sha256;
Expand All @@ -15,7 +17,7 @@ use std::{
};
use url::Url;

pub fn get_url(url: &Url) -> Result<Body, isahc::Error> {
pub fn get_url(url: &Url) -> Result<Body, anyhow::Error> {
let mut request = Request::get(url.as_str()).redirect_policy(RedirectPolicy::Limit(10));

// Respect SSL_CERT_FILE if environment variable exists
Expand All @@ -37,16 +39,27 @@ pub fn get_url(url: &Url) -> Result<Body, isahc::Error> {
if let Ok(npm_tokens) = env::var("NIX_NPM_TOKENS") {
if let Ok(tokens) = serde_json::from_str::<Map<String, Value>>(&npm_tokens) {
if let Some(token) = tokens.get(host).and_then(serde_json::Value::as_str) {
info!("Found NPM token for {}. Adding authorization header to request.", host);
request = request.header("Authorization", format!("Bearer {token}"));
}
}
}
}

Ok(request.body(())?.send()?.into_body())
let res = request.body(())?.send()?;
if !res.status().is_success() {
if res.status().is_client_error() {
bail!("Client error: {}", res.status());
}
if res.status().is_server_error() {
bail!("Server error: {}", res.status());
}
bail!("{}", res.status());
}
Ok(res.into_body())
}

pub fn get_url_body_with_retry(url: &Url) -> Result<Vec<u8>, isahc::Error> {
pub fn get_url_body_with_retry(url: &Url) -> Result<Vec<u8>, anyhow::Error> {
retry(ExponentialBackoff::default(), || {
get_url(url)
.and_then(|mut body| {
Expand All @@ -56,12 +69,15 @@ pub fn get_url_body_with_retry(url: &Url) -> Result<Vec<u8>, isahc::Error> {

Ok(buf)
})
.map_err(|err| {
if err.is_network() || err.is_timeout() {
backoff::Error::transient(err)
} else {
backoff::Error::permanent(err)
.map_err(|err| match err.downcast_ref::<isahc::Error>() {
Some(isahc_err) => {
if isahc_err.is_network() || isahc_err.is_timeout() {
backoff::Error::transient(err)
} else {
backoff::Error::permanent(err)
}
}
None => backoff::Error::permanent(err),
})
})
.map_err(|backoff_err| match backoff_err {
Expand Down

0 comments on commit 74e24a9

Please sign in to comment.