Fix GitHub api requests
This commit is contained in:
parent
3ab0c2dc7b
commit
2c9b81aba6
|
@ -6,6 +6,8 @@ use tokio::io::AsyncWriteExt;
|
||||||
|
|
||||||
use crate::Context;
|
use crate::Context;
|
||||||
|
|
||||||
|
const USER_AGENT_STR: &'static str = "Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0";
|
||||||
|
|
||||||
/// A sequential pipeline of [`Step`]s.
|
/// A sequential pipeline of [`Step`]s.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Pipeline<'a> {
|
pub struct Pipeline<'a> {
|
||||||
|
@ -84,24 +86,7 @@ impl<'a> Step<'a> {
|
||||||
.into_diagnostic()
|
.into_diagnostic()
|
||||||
.wrap_err("Invalid url for download step.")?,
|
.wrap_err("Invalid url for download step.")?,
|
||||||
RemoteResource::GitHubArtifact { repo, pattern } => {
|
RemoteResource::GitHubArtifact { repo, pattern } => {
|
||||||
const FETCH_META_ERROR_MSG: &'static str =
|
let mut release = fetch_latest_release(&ctx.reqwest, repo).await?;
|
||||||
"Fetching the latest release metadata from GitHub failed.";
|
|
||||||
let url = url::Url::parse(&format!(
|
|
||||||
"https://api.github.com/repos/{repo}/releases/latest"
|
|
||||||
))
|
|
||||||
.into_diagnostic()
|
|
||||||
.wrap_err("Invalid GitHub repo for download step.")?;
|
|
||||||
let mut release: GitHubRelease = ctx
|
|
||||||
.reqwest
|
|
||||||
.get(url)
|
|
||||||
.send()
|
|
||||||
.await
|
|
||||||
.into_diagnostic()
|
|
||||||
.wrap_err(FETCH_META_ERROR_MSG)?
|
|
||||||
.json()
|
|
||||||
.await
|
|
||||||
.into_diagnostic()
|
|
||||||
.wrap_err(FETCH_META_ERROR_MSG)?;
|
|
||||||
let pattern = ramhorns::Template::new(*pattern)
|
let pattern = ramhorns::Template::new(*pattern)
|
||||||
.into_diagnostic()
|
.into_diagnostic()
|
||||||
.wrap_err("Invalid pattern for artifact matching in download step.")?;
|
.wrap_err("Invalid pattern for artifact matching in download step.")?;
|
||||||
|
@ -122,6 +107,7 @@ impl<'a> Step<'a> {
|
||||||
let mut resp = ctx
|
let mut resp = ctx
|
||||||
.reqwest
|
.reqwest
|
||||||
.get(url)
|
.get(url)
|
||||||
|
.header("User-Agent", USER_AGENT_STR)
|
||||||
.send()
|
.send()
|
||||||
.await
|
.await
|
||||||
.into_diagnostic()
|
.into_diagnostic()
|
||||||
|
@ -333,3 +319,50 @@ async fn mkdir_all(path: impl AsRef<Path>) -> Result<()> {
|
||||||
.into_diagnostic()
|
.into_diagnostic()
|
||||||
.wrap_err("Creating directory and any missing parents failed.")
|
.wrap_err("Creating directory and any missing parents failed.")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn fetch_latest_release<'a, 'b>(
|
||||||
|
reqwest: &'b reqwest::Client,
|
||||||
|
repo: &'b str,
|
||||||
|
) -> Result<GitHubRelease<'a>> {
|
||||||
|
const FETCH_META_ERROR_MSG: &'static str =
|
||||||
|
"Fetching the latest release metadata from GitHub failed.";
|
||||||
|
let url = url::Url::parse(&format!(
|
||||||
|
"https://api.github.com/repos/{repo}/releases/latest"
|
||||||
|
))
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err("Invalid GitHub repo for download step.")?;
|
||||||
|
let mut resp = reqwest
|
||||||
|
.get(url)
|
||||||
|
.header("User-Agent", USER_AGENT_STR)
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err(FETCH_META_ERROR_MSG)?;
|
||||||
|
let body = resp.text().await
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err(FETCH_META_ERROR_MSG)?;
|
||||||
|
let release: GitHubRelease = serde_json::from_str(&body)
|
||||||
|
.into_diagnostic()
|
||||||
|
.wrap_err_with(|| format!("{}: {}", FETCH_META_ERROR_MSG, body))?;
|
||||||
|
Ok(release)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
#[test]
|
||||||
|
fn decode_latest_release() {
|
||||||
|
tokio::runtime::Builder::new_current_thread()
|
||||||
|
.enable_io()
|
||||||
|
.build()
|
||||||
|
.unwrap()
|
||||||
|
.block_on(async move {
|
||||||
|
let body = super::fetch_latest_release(
|
||||||
|
&reqwest::Client::new(),
|
||||||
|
"notepad-plus-plus/notepad-plus-plus",
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(body.meta.draft, false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue