@@ -226,6 +226,45 @@ def generate__notify(dst: Any) -> Any:
226226 return dst
227227
228228
229+ def generate__weekly (dst : Any ) -> Any :
230+ cfg = config .get_bench_runner_config ()
231+
232+ weekly = cfg .get ("weekly" , {})
233+ if not weekly :
234+ weekly = [{"default" : {"flags" : [], "runners" : cfg .get ("runners" , {}).keys ()}}]
235+ weekly = weekly [0 ]
236+
237+ all_jobs = []
238+
239+ for name , weekly_cfg in weekly .items ():
240+ for runner_nickname in weekly_cfg .get ("runners" , []):
241+ runner = runners .get_runner_by_nickname (runner_nickname )
242+ if runner .nickname == "unknown" :
243+ raise ValueError (
244+ f"Runner { runner_nickname } not found in bench_runner.toml"
245+ )
246+ weekly_flags = weekly_cfg .get ("flags" , [])
247+ job = {
248+ "uses" : "./.github/workflows/_benchmark.yml" ,
249+ "needs" : "determine_head" ,
250+ "with" : {
251+ "fork" : "python" ,
252+ "ref" : "${{ needs.determine_head.outputs.commit }}" ,
253+ "machine" : runner .name ,
254+ "benchmarks" : "all_and_excluded" ,
255+ ** flags .flags_to_gha_variables_yml (weekly_flags ),
256+ },
257+ "secrets" : "inherit" ,
258+ }
259+ job_name = f"weekly-{ name } -{ runner .nickname } "
260+ dst ["jobs" ][job_name ] = job
261+ all_jobs .append (job_name )
262+
263+ dst ["jobs" ]["generate" ]["needs" ].extend (all_jobs )
264+
265+ return dst
266+
267+
229268def generate_generic (dst : Any ) -> Any :
230269 return dst
231270
@@ -235,6 +274,7 @@ def generate_generic(dst: Any) -> Any:
235274 "_benchmark.src.yml" : generate__benchmark ,
236275 "_pystats.src.yml" : generate__pystats ,
237276 "_notify.src.yml" : generate__notify ,
277+ "_weekly.src.yml" : generate__weekly ,
238278}
239279
240280
0 commit comments