22
22
23
23
24
24
def name_jobs (jobs : List [Dict ], prefix : str ) -> List [Dict ]:
25
+ """
26
+ Add a `name` attribute to each job, based on its image and the given `prefix`.
27
+ """
25
28
for job in jobs :
26
29
job ["name" ] = f"{ prefix } - { job ['image' ]} "
27
30
return jobs
28
31
29
32
33
+ def add_base_env (jobs : List [Dict ], environment : Dict [str , str ]) -> List [Dict ]:
34
+ """
35
+ Prepends `environment` to the `env` attribute of each job.
36
+ The `env` of each job has higher precedence than `environment`.
37
+ """
38
+ for job in jobs :
39
+ env = environment .copy ()
40
+ env .update (job .get ("env" , {}))
41
+ job ["env" ] = env
42
+ return jobs
43
+
44
+
30
45
class JobType (enum .Enum ):
31
46
PR = enum .auto ()
32
47
Try = enum .auto ()
48
+ Auto = enum .auto ()
33
49
34
50
35
51
def find_job_type (github_ctx : Dict [str , Any ]) -> Optional [JobType ]:
@@ -53,26 +69,31 @@ def find_job_type(github_ctx: Dict[str, Any]) -> Optional[JobType]:
53
69
if try_build :
54
70
return JobType .Try
55
71
72
+ if ref == "refs/heads/auto" and repository == "rust-lang-ci/rust" :
73
+ return JobType .Auto
74
+
56
75
return None
57
76
58
77
59
78
def calculate_jobs (job_type : JobType , job_data : Dict [str , Any ]) -> List [Dict [str , Any ]]:
60
79
if job_type == JobType .PR :
61
- return name_jobs (job_data ["pr" ], "PR" )
80
+ return add_base_env ( name_jobs (job_data ["pr" ], "PR" ), job_data [ "env" ][ "pr" ] )
62
81
elif job_type == JobType .Try :
63
- return name_jobs (job_data ["try" ], "try" )
82
+ return add_base_env (name_jobs (job_data ["try" ], "try" ), job_data ["env" ]["production" ])
83
+ elif job_type == JobType .Auto :
84
+ return add_base_env (name_jobs (job_data ["auto" ], "auto" ), job_data ["env" ]["production" ])
64
85
65
86
return []
66
87
67
88
68
89
if __name__ == "__main__" :
69
90
logging .basicConfig (level = logging .INFO )
70
91
71
- github_ctx = json .loads (os .environ ["GITHUB_CTX" ])
72
-
73
92
with open (JOBS_YAML_PATH ) as f :
74
93
data = yaml .safe_load (f )
75
94
95
+ github_ctx = json .loads (os .environ ["GITHUB_CTX" ])
96
+
76
97
job_type = find_job_type (github_ctx )
77
98
logging .info (f"Job type: { job_type } " )
78
99
0 commit comments