@@ -134,6 +134,8 @@ impl Context {
134
134
return println ! ( "version hasn't changed, skipping" ) ;
135
135
}
136
136
137
+ self . assert_all_components_present ( ) ;
138
+
137
139
// Ok we've now determined that a release needs to be done. Let's
138
140
// configure rust, sign the artifacts we just downloaded, and upload the
139
141
// signatures to the CI bucket.
@@ -251,6 +253,28 @@ upload-addr = \"{}/{}\"
251
253
prev_version == current_version
252
254
}
253
255
256
+ /// An emergency fix for the current situation where the RLS isn't available
257
+ /// too often. Don't produce nightlies if a missing component happens.
258
+ ///
259
+ /// Note that we already shouldn't merge PRs in rust-lang/rust that don't
260
+ /// build the rls/rustfmt
261
+ fn assert_all_components_present ( & self ) {
262
+ if self . release != "nightly" {
263
+ return
264
+ }
265
+ let components = t ! ( self . dl_dir( ) . read_dir( ) )
266
+ . map ( |e| t ! ( e) )
267
+ . map ( |e| e. file_name ( ) . into_string ( ) . unwrap ( ) )
268
+ . filter ( |s| s. contains ( "x86_64-unknown-linux-gnu" ) )
269
+ . collect :: < Vec < _ > > ( ) ;
270
+ println ! ( "components in this nightly {:?}" , components) ;
271
+ assert ! ( components. iter( ) . any( |s| s. starts_with( "rls-" ) ) ) ;
272
+ assert ! ( components. iter( ) . any( |s| s. starts_with( "rustfmt-" ) ) ) ;
273
+ assert ! ( components. iter( ) . any( |s| s. starts_with( "rustc-" ) ) ) ;
274
+ assert ! ( components. iter( ) . any( |s| s. starts_with( "rust-std-" ) ) ) ;
275
+ assert ! ( components. iter( ) . any( |s| s. starts_with( "cargo-" ) ) ) ;
276
+ }
277
+
254
278
fn download_artifacts ( & mut self , rev : & str ) {
255
279
let dl = self . dl_dir ( ) ;
256
280
drop ( fs:: remove_dir_all ( & dl) ) ;
0 commit comments