Skip to content

Commit f3d0200

Browse files
committed
fix builds.json API and make it backwards compatible
1 parent 1df9ffa commit f3d0200

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
@@ -91,7 +91,28 @@ pub(crate) async fn build_list_json_handler(
9191
Ok((
9292
Extension(CachePolicy::NoStoreMustRevalidate),
9393
[(ACCESS_CONTROL_ALLOW_ORIGIN, "*")],
94-
Json(get_builds(&mut conn, &name, &version).await?),
94+
Json(
95+
get_builds(&mut conn, &name, &version)
96+
.await?
97+
.iter()
98+
.filter_map(|build| {
99+
// for backwards compatibility in this API, we
100+
// * filter out in-progress builds
101+
// * convert the build status to a boolean
102+
if build.build_status != BuildStatus::InProgress {
103+
Some(serde_json::json!({
104+
"id": build.id,
105+
"rustc_version": build.rustc_version,
106+
"docsrs_version": build.docsrs_version,
107+
"build_status": build.build_status.is_success(),
108+
"build_time": build.build_time,
109+
}))
110+
} else {
111+
None
112+
}
113+
})
114+
.collect::<Vec<_>>(),
115+
),
95116
)
96117
.into_response())
97118
}
@@ -123,6 +144,7 @@ async fn get_builds(
123144

124145
#[cfg(test)]
125146
mod tests {
147+
use super::BuildStatus;
126148
use crate::{
127149
test::{assert_cache_control, wrapper, FakeBuild},
128150
web::cache::CachePolicy,
@@ -189,13 +211,19 @@ mod tests {
189211
FakeBuild::default()
190212
.rustc_version("rustc (blabla 2021-01-01)")
191213
.docsrs_version("docs.rs 3.0.0"),
214+
FakeBuild::default()
215+
.build_status(BuildStatus::InProgress)
216+
.rustc_version("rustc (blabla 2022-01-01)")
217+
.docsrs_version("docs.rs 4.0.0"),
192218
])
193219
.create()?;
194220

195221
let response = env.frontend().get("/crate/foo/0.1.0/builds.json").send()?;
196222
assert_cache_control(&response, CachePolicy::NoStoreMustRevalidate, &env.config());
197223
let value: serde_json::Value = serde_json::from_str(&response.text()?)?;
198224

225+
assert_eq!(value.as_array().unwrap().len(), 3);
226+
199227
assert_eq!(value.pointer("/0/build_status"), Some(&true.into()));
200228
assert_eq!(
201229
value.pointer("/0/docsrs_version"),

0 commit comments

Comments
 (0)