@@ -85,7 +85,28 @@ pub(crate) async fn build_list_json_handler(
85
85
Ok ( (
86
86
Extension ( CachePolicy :: NoStoreMustRevalidate ) ,
87
87
[ ( 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
+ ) ,
89
110
)
90
111
. into_response ( ) )
91
112
}
@@ -117,6 +138,7 @@ async fn get_builds(
117
138
118
139
#[ cfg( test) ]
119
140
mod tests {
141
+ use super :: BuildStatus ;
120
142
use crate :: {
121
143
test:: { assert_cache_control, wrapper, FakeBuild } ,
122
144
web:: cache:: CachePolicy ,
@@ -183,13 +205,19 @@ mod tests {
183
205
FakeBuild :: default ( )
184
206
. rustc_version( "rustc (blabla 2021-01-01)" )
185
207
. 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" ) ,
186
212
] )
187
213
. create ( ) ?;
188
214
189
215
let response = env. frontend ( ) . get ( "/crate/foo/0.1.0/builds.json" ) . send ( ) ?;
190
216
assert_cache_control ( & response, CachePolicy :: NoStoreMustRevalidate , & env. config ( ) ) ;
191
217
let value: serde_json:: Value = serde_json:: from_str ( & response. text ( ) ?) ?;
192
218
219
+ assert_eq ! ( value. as_array( ) . unwrap( ) . len( ) , 3 ) ;
220
+
193
221
assert_eq ! ( value. pointer( "/0/build_status" ) , Some ( & true . into( ) ) ) ;
194
222
assert_eq ! (
195
223
value. pointer( "/0/docsrs_version" ) ,
0 commit comments