@@ -25,7 +25,8 @@ use evergreen::{
25
25
} ;
26
26
use evergreen_names:: {
27
27
BURN_IN_TAGS , BURN_IN_TAG_COMPILE_TASK_DEPENDENCY , BURN_IN_TAG_INCLUDE_BUILD_VARIANTS ,
28
- BURN_IN_TASKS , BURN_IN_TESTS , ENTERPRISE_MODULE , GENERATOR_TASKS , UNIQUE_GEN_SUFFIX_EXPANSION ,
28
+ BURN_IN_TASKS , BURN_IN_TESTS , ENTERPRISE_MODULE , GENERATOR_TASKS ,
29
+ MULTIVERSION_BINARY_SELECTION , UNIQUE_GEN_SUFFIX_EXPANSION ,
29
30
} ;
30
31
use generate_sub_tasks_config:: GenerateSubTasksConfig ;
31
32
use resmoke:: {
@@ -35,7 +36,7 @@ use resmoke::{
35
36
use services:: config_extraction:: { ConfigExtractionService , ConfigExtractionServiceImpl } ;
36
37
use shrub_rs:: models:: {
37
38
project:: EvgProject ,
38
- task:: { EvgTask , TaskRef } ,
39
+ task:: { EvgTask , TaskDependency , TaskRef } ,
39
40
variant:: { BuildVariant , DisplayTask } ,
40
41
} ;
41
42
use task_types:: {
@@ -708,6 +709,7 @@ impl GenerateTasksService for GenerateTasksServiceImpl {
708
709
. infer_build_variant_platform ( build_variant) ;
709
710
let mut gen_config = GeneratedConfig :: new ( ) ;
710
711
let mut generating_tasks = vec ! [ ] ;
712
+ let mut includes_multiversion_tasks = false ;
711
713
for task in & build_variant. tasks {
712
714
if task. name == BURN_IN_TAGS {
713
715
if self . gen_burn_in {
@@ -748,12 +750,50 @@ impl GenerateTasksService for GenerateTasksServiceImpl {
748
750
gen_config
749
751
. display_tasks
750
752
. push ( generated_task. build_display_task ( ) ) ;
753
+
754
+ // If a task is a multiversion task and it has dependencies overriden on the task
755
+ // reference of the build variant, add the MULTIVERSION_BINARY_SELECTION task to
756
+ // those overrides too.
757
+ let mut task_ref_dependencies = self
758
+ . evg_config_utils
759
+ . get_task_ref_dependencies ( & task. name , build_variant) ;
760
+
761
+ if generated_task. is_multiversion ( ) && task_ref_dependencies. is_some ( ) {
762
+ task_ref_dependencies = Some (
763
+ [
764
+ task_ref_dependencies. unwrap ( ) ,
765
+ vec ! [ TaskDependency {
766
+ name: MULTIVERSION_BINARY_SELECTION . to_string( ) ,
767
+ variant: None ,
768
+ } ] ,
769
+ ]
770
+ . concat ( ) ,
771
+ ) ;
772
+ } else {
773
+ task_ref_dependencies = None ;
774
+ }
775
+
776
+ if generated_task. is_multiversion ( ) {
777
+ includes_multiversion_tasks = true ;
778
+ }
779
+
751
780
gen_config
752
781
. gen_task_specs
753
- . extend ( generated_task. build_task_ref ( large_distro) ) ;
782
+ . extend ( generated_task. build_task_ref ( large_distro, task_ref_dependencies ) ) ;
754
783
}
755
784
}
756
785
786
+ // If any generated task is multiversion, ensure the
787
+ // MULTIVERSION_BINARY_SELECTION task is added to the build variant.
788
+ if includes_multiversion_tasks {
789
+ gen_config. gen_task_specs . push ( TaskRef {
790
+ name : MULTIVERSION_BINARY_SELECTION . to_string ( ) ,
791
+ distros : None ,
792
+ activate : Some ( false ) ,
793
+ depends_on : None ,
794
+ } ) ;
795
+ }
796
+
757
797
if !generating_tasks. is_empty ( ) {
758
798
// Put all the "_gen" tasks into a display task to hide them from view.
759
799
gen_config. display_tasks . push ( DisplayTask {
@@ -1016,6 +1056,7 @@ pub async fn build_s3_client() -> aws_sdk_s3::Client {
1016
1056
#[ cfg( test) ]
1017
1057
mod tests {
1018
1058
use rstest:: rstest;
1059
+ use shrub_rs:: models:: task:: TaskDependency ;
1019
1060
1020
1061
use crate :: {
1021
1062
evergreen:: evg_config_utils:: MultiversionGenerateTaskConfig ,
@@ -1143,6 +1184,14 @@ mod tests {
1143
1184
todo ! ( )
1144
1185
}
1145
1186
1187
+ fn get_task_ref_dependencies (
1188
+ & self ,
1189
+ _task_name : & str ,
1190
+ _build_variant : & BuildVariant ,
1191
+ ) -> Option < Vec < TaskDependency > > {
1192
+ todo ! ( )
1193
+ }
1194
+
1146
1195
fn get_gen_task_var < ' a > ( & self , _task : & ' a EvgTask , _var : & str ) -> Option < & ' a str > {
1147
1196
todo ! ( )
1148
1197
}
0 commit comments