@@ -4,7 +4,7 @@ use crate::{
4
4
error:: Result ,
5
5
registry_api:: { CrateData , CrateOwner , ReleaseData } ,
6
6
storage:: CompressionAlgorithm ,
7
- utils:: MetadataPackage ,
7
+ utils:: { rustc_version :: parse_rustc_date , MetadataPackage } ,
8
8
web:: crate_details:: { latest_release, releases_for_crate} ,
9
9
} ;
10
10
use anyhow:: Context ;
@@ -17,7 +17,7 @@ use std::{
17
17
io:: { BufRead , BufReader } ,
18
18
path:: Path ,
19
19
} ;
20
- use tracing:: { debug, info, instrument} ;
20
+ use tracing:: { debug, error , info, instrument} ;
21
21
22
22
/// Adds a package into database.
23
23
///
@@ -248,6 +248,17 @@ pub(crate) async fn finish_build(
248
248
debug ! ( "updating build after finishing" ) ;
249
249
let hostname = hostname:: get ( ) ?;
250
250
251
+ let rustc_date = match parse_rustc_date ( rustc_version) {
252
+ Ok ( date) => Some ( date) ,
253
+ Err ( err) => {
254
+ error ! (
255
+ "Failed to parse date from rustc version \" {}\" : {:?}" ,
256
+ rustc_version, err
257
+ ) ;
258
+ None
259
+ }
260
+ } ;
261
+
251
262
let release_id = sqlx:: query_scalar!(
252
263
"UPDATE builds
253
264
SET
@@ -257,16 +268,18 @@ pub(crate) async fn finish_build(
257
268
build_server = $4,
258
269
errors = $5,
259
270
documentation_size = $6,
271
+ rustc_nightly_date = $7,
260
272
build_finished = NOW()
261
273
WHERE
262
- id = $7
274
+ id = $8
263
275
RETURNING rid" ,
264
276
rustc_version,
265
277
docsrs_version,
266
278
build_status as BuildStatus ,
267
279
hostname. to_str( ) . unwrap_or( "" ) ,
268
280
errors,
269
281
documentation_size. map( |v| v as i64 ) ,
282
+ rustc_date,
270
283
build_id,
271
284
)
272
285
. fetch_one ( & mut * conn)
@@ -612,6 +625,7 @@ mod test {
612
625
use crate :: registry_api:: OwnerKind ;
613
626
use crate :: test:: * ;
614
627
use crate :: utils:: CargoMetadata ;
628
+ use chrono:: NaiveDate ;
615
629
use test_case:: test_case;
616
630
617
631
#[ test]
@@ -649,7 +663,56 @@ mod test {
649
663
}
650
664
651
665
#[ test]
652
- fn test_finish_build_success ( ) {
666
+ fn test_finish_build_success_valid_rustc_date ( ) {
667
+ async_wrapper ( |env| async move {
668
+ let mut conn = env. async_db ( ) . await . async_conn ( ) . await ;
669
+ let crate_id = initialize_crate ( & mut conn, "krate" ) . await ?;
670
+ let release_id = initialize_release ( & mut conn, crate_id, "0.1.0" ) . await ?;
671
+ let build_id = initialize_build ( & mut conn, release_id) . await ?;
672
+
673
+ finish_build (
674
+ & mut conn,
675
+ build_id,
676
+ "rustc 1.84.0-nightly (e7c0d2750 2024-10-15)" ,
677
+ "docsrs_version" ,
678
+ BuildStatus :: Success ,
679
+ None ,
680
+ None ,
681
+ )
682
+ . await ?;
683
+
684
+ let row = sqlx:: query!(
685
+ r#"SELECT
686
+ rustc_version,
687
+ docsrs_version,
688
+ build_status as "build_status: BuildStatus",
689
+ errors,
690
+ rustc_nightly_date
691
+ FROM builds
692
+ WHERE id = $1"# ,
693
+ build_id
694
+ )
695
+ . fetch_one ( & mut * conn)
696
+ . await ?;
697
+
698
+ assert_eq ! (
699
+ row. rustc_version,
700
+ Some ( "rustc 1.84.0-nightly (e7c0d2750 2024-10-15)" . into( ) )
701
+ ) ;
702
+ assert_eq ! ( row. docsrs_version, Some ( "docsrs_version" . into( ) ) ) ;
703
+ assert_eq ! ( row. build_status, BuildStatus :: Success ) ;
704
+ assert_eq ! (
705
+ row. rustc_nightly_date,
706
+ Some ( NaiveDate :: from_ymd_opt( 2024 , 10 , 15 ) . unwrap( ) )
707
+ ) ;
708
+ assert ! ( row. errors. is_none( ) ) ;
709
+
710
+ Ok ( ( ) )
711
+ } )
712
+ }
713
+
714
+ #[ test]
715
+ fn test_finish_build_success_invalid_rustc_date ( ) {
653
716
async_wrapper ( |env| async move {
654
717
let mut conn = env. async_db ( ) . await . async_conn ( ) . await ;
655
718
let crate_id = initialize_crate ( & mut conn, "krate" ) . await ?;
@@ -673,7 +736,8 @@ mod test {
673
736
docsrs_version,
674
737
build_status as "build_status: BuildStatus",
675
738
documentation_size,
676
- errors
739
+ errors,
740
+ rustc_nightly_date
677
741
FROM builds
678
742
WHERE id = $1"# ,
679
743
build_id
@@ -685,6 +749,7 @@ mod test {
685
749
assert_eq ! ( row. docsrs_version, Some ( "docsrs_version" . into( ) ) ) ;
686
750
assert_eq ! ( row. build_status, BuildStatus :: Success ) ;
687
751
assert_eq ! ( row. documentation_size, Some ( 42 ) ) ;
752
+ assert ! ( row. rustc_nightly_date. is_none( ) ) ;
688
753
assert ! ( row. errors. is_none( ) ) ;
689
754
690
755
Ok ( ( ) )
0 commit comments