Skip to content

Commit e7b3a1d

Browse files
committed
more error handling
1 parent 1633826 commit e7b3a1d

File tree

5 files changed

+275
-258
lines changed

5 files changed

+275
-258
lines changed

Cargo.lock

+19-19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "api"
3-
version = "2.4.1"
3+
version = "2.4.2"
44
edition = "2024"
55

66
[profile.dev]

src/schedules/github.rs

+48-33
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,57 @@
11
use crate::routes::State;
22
use colored::Colorize;
3+
use serde::Deserialize;
4+
5+
#[derive(Deserialize)]
6+
struct GithubRelease {
7+
pub tag_name: String,
8+
}
9+
10+
async fn run_inner(state: State) -> Result<(), Box<dyn std::error::Error>> {
11+
let start = std::time::Instant::now();
12+
13+
let releases = state
14+
.client()
15+
.get("https://api.github.com/repos/BlueprintFramework/framework/releases")
16+
.send()
17+
.await?
18+
.json::<Vec<GithubRelease>>()
19+
.await?;
20+
21+
*state.github_releases.write().await = releases
22+
.into_iter()
23+
.map(|release| release.tag_name)
24+
.collect();
25+
26+
crate::logger::log(
27+
crate::logger::LoggerLevel::Info,
28+
format!(
29+
"{} releases refreshed {}",
30+
"github".black(),
31+
format!(
32+
"({} releases, {}ms)",
33+
state.github_releases.read().await.len(),
34+
start.elapsed().as_millis()
35+
)
36+
.bright_black()
37+
),
38+
);
39+
40+
Ok(())
41+
}
342

443
pub async fn run(state: State) {
544
loop {
6-
let start = std::time::Instant::now();
7-
8-
let releases = state
9-
.client()
10-
.get("https://api.github.com/repos/BlueprintFramework/framework/releases")
11-
.send()
12-
.await
13-
.unwrap()
14-
.json::<serde_json::Value>()
15-
.await
16-
.unwrap();
17-
18-
let releases = releases
19-
.as_array()
20-
.unwrap()
21-
.iter()
22-
.map(|release| release["tag_name"].as_str().unwrap().to_string())
23-
.collect::<Vec<String>>();
24-
25-
*state.github_releases.write().await = releases;
26-
27-
crate::logger::log(
28-
crate::logger::LoggerLevel::Info,
29-
format!(
30-
"{} releases refreshed {}",
31-
"github".black(),
45+
if let Err(err) = run_inner(state.clone()).await {
46+
crate::logger::log(
47+
crate::logger::LoggerLevel::Error,
3248
format!(
33-
"({} releases, {}ms)",
34-
state.github_releases.read().await.len(),
35-
start.elapsed().as_millis()
36-
)
37-
.bright_black()
38-
),
39-
);
49+
"{} {}",
50+
"github".black(),
51+
format!("failed to fetch releases: {}", err).bright_red()
52+
),
53+
);
54+
}
4055

4156
tokio::time::sleep(tokio::time::Duration::from_secs(60 * 60)).await;
4257
}

0 commit comments

Comments
 (0)