Skip to content

Commit 7749ebe

Browse files
committed
fix builds.json API and make it backwards compatible
1 parent e5a02fe commit 7749ebe

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

Diff for: src/web/builds.rs

+29-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,28 @@ pub(crate) async fn build_list_json_handler(
8585
Ok((
8686
Extension(CachePolicy::NoStoreMustRevalidate),
8787
[(ACCESS_CONTROL_ALLOW_ORIGIN, "*")],
88-
Json(get_builds(&mut conn, &name, &version).await?),
88+
Json(
89+
get_builds(&mut conn, &name, &version)
90+
.await?
91+
.iter()
92+
.filter_map(|build| {
93+
// for backwards compatibility in this API, we
94+
// * filter out in-progress builds
95+
// * convert the build status to a boolean
96+
if build.build_status != BuildStatus::InProgress {
97+
Some(serde_json::json!({
98+
"id": build.id,
99+
"rustc_version": build.rustc_version,
100+
"docsrs_version": build.docsrs_version,
101+
"build_status": build.build_status.is_success(),
102+
"build_time": build.build_time,
103+
}))
104+
} else {
105+
None
106+
}
107+
})
108+
.collect::<Vec<_>>(),
109+
),
89110
)
90111
.into_response())
91112
}
@@ -117,6 +138,7 @@ async fn get_builds(
117138

118139
#[cfg(test)]
119140
mod tests {
141+
use super::BuildStatus;
120142
use crate::{
121143
test::{assert_cache_control, wrapper, FakeBuild},
122144
web::cache::CachePolicy,
@@ -183,13 +205,19 @@ mod tests {
183205
FakeBuild::default()
184206
.rustc_version("rustc (blabla 2021-01-01)")
185207
.docsrs_version("docs.rs 3.0.0"),
208+
FakeBuild::default()
209+
.build_status(BuildStatus::InProgress)
210+
.rustc_version("rustc (blabla 2022-01-01)")
211+
.docsrs_version("docs.rs 4.0.0"),
186212
])
187213
.create()?;
188214

189215
let response = env.frontend().get("/crate/foo/0.1.0/builds.json").send()?;
190216
assert_cache_control(&response, CachePolicy::NoStoreMustRevalidate, &env.config());
191217
let value: serde_json::Value = serde_json::from_str(&response.text()?)?;
192218

219+
assert_eq!(value.as_array().unwrap().len(), 3);
220+
193221
assert_eq!(value.pointer("/0/build_status"), Some(&true.into()));
194222
assert_eq!(
195223
value.pointer("/0/docsrs_version"),

0 commit comments

Comments
 (0)