@@ -25,7 +25,8 @@ use evergreen::{
2525} ;
2626use evergreen_names:: {
2727 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 ,
2930} ;
3031use generate_sub_tasks_config:: GenerateSubTasksConfig ;
3132use resmoke:: {
@@ -35,7 +36,7 @@ use resmoke::{
3536use services:: config_extraction:: { ConfigExtractionService , ConfigExtractionServiceImpl } ;
3637use shrub_rs:: models:: {
3738 project:: EvgProject ,
38- task:: { EvgTask , TaskRef } ,
39+ task:: { EvgTask , TaskDependency , TaskRef } ,
3940 variant:: { BuildVariant , DisplayTask } ,
4041} ;
4142use task_types:: {
@@ -708,6 +709,7 @@ impl GenerateTasksService for GenerateTasksServiceImpl {
708709 . infer_build_variant_platform ( build_variant) ;
709710 let mut gen_config = GeneratedConfig :: new ( ) ;
710711 let mut generating_tasks = vec ! [ ] ;
712+ let mut includes_multiversion_tasks = false ;
711713 for task in & build_variant. tasks {
712714 if task. name == BURN_IN_TAGS {
713715 if self . gen_burn_in {
@@ -748,12 +750,50 @@ impl GenerateTasksService for GenerateTasksServiceImpl {
748750 gen_config
749751 . display_tasks
750752 . 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+
751780 gen_config
752781 . gen_task_specs
753- . extend ( generated_task. build_task_ref ( large_distro) ) ;
782+ . extend ( generated_task. build_task_ref ( large_distro, task_ref_dependencies ) ) ;
754783 }
755784 }
756785
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+
757797 if !generating_tasks. is_empty ( ) {
758798 // Put all the "_gen" tasks into a display task to hide them from view.
759799 gen_config. display_tasks . push ( DisplayTask {
@@ -1016,6 +1056,7 @@ pub async fn build_s3_client() -> aws_sdk_s3::Client {
10161056#[ cfg( test) ]
10171057mod tests {
10181058 use rstest:: rstest;
1059+ use shrub_rs:: models:: task:: TaskDependency ;
10191060
10201061 use crate :: {
10211062 evergreen:: evg_config_utils:: MultiversionGenerateTaskConfig ,
@@ -1143,6 +1184,14 @@ mod tests {
11431184 todo ! ( )
11441185 }
11451186
1187+ fn get_task_ref_dependencies (
1188+ & self ,
1189+ _task_name : & str ,
1190+ _build_variant : & BuildVariant ,
1191+ ) -> Option < Vec < TaskDependency > > {
1192+ todo ! ( )
1193+ }
1194+
11461195 fn get_gen_task_var < ' a > ( & self , _task : & ' a EvgTask , _var : & str ) -> Option < & ' a str > {
11471196 todo ! ( )
11481197 }
0 commit comments