Add path regex handling to luci sched generation, use for infra/config.
Add the ability for chromeos_config.py to specify path_regexps for
triggers and use them for luci-scheduler-updater triggering on the
infra/config repo.
BUG=None
TEST=cros_sdk -- /mnt/host/source/chromite/config/refresh_generated_files
TEST=./run_tests
Change-Id: I0a5009e878636e25ef8b209ba18512cadf3aba92
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2265200
Commit-Queue: David Burger <dburger@chromium.org>
Tested-by: David Burger <dburger@chromium.org>
Reviewed-by: Sean Abraham <seanabraham@chromium.org>
Reviewed-by: Dhanya Ganesh <dhanyaganesh@chromium.org>
diff --git a/scripts/gen_luci_scheduler.py b/scripts/gen_luci_scheduler.py
index 9a9f75b..2c06481 100644
--- a/scripts/gen_luci_scheduler.py
+++ b/scripts/gen_luci_scheduler.py
@@ -125,13 +125,15 @@
}
-def genSchedulerTrigger(trigger_name, repo, refs, builds):
+def genSchedulerTrigger(trigger_name, repo, refs, path_regexps, builds):
"""Generate the luci scheduler job for a given build config.
Args:
trigger_name: Name of the trigger as a string.
repo: Gitiles URL git git repository.
refs: Iterable of git refs to check. May use regular expressions.
+ path_regexps: Iterable of path regular expressions of files to trigger on
+ or falsy to trigger on everything.
builds: Iterable of build config names to trigger.
Returns:
@@ -144,16 +146,21 @@
schedule: "with 5m interval"
gitiles: {
repo: "%(repo)s"
-%(refs)s
+%(refs)s%(path_regexps)s
}
%(triggers)s
}
"""
-
+ if path_regexps:
+ path_regexps = '\n' + '\n'.join(' path_regexps: "%s"' %
+ r for r in path_regexps)
+ else:
+ path_regexps = ''
return template % {
'trigger_name': trigger_name,
'repo': repo,
'refs': '\n'.join(' refs: "%s"' % r for r in refs),
+ 'path_regexps': path_regexps,
'triggers': '\n'.join(' triggers: "%s"' % b for b in builds),
}
@@ -186,8 +193,13 @@
# Populate trigger_collection.
if config.triggered_gitiles:
- for gitiles_url, ref_list in config.triggered_gitiles:
- gitiles_key = (gitiles_url, tuple(ref_list))
+ for trigger in config.triggered_gitiles:
+ try:
+ gitiles_url, ref_list, path_regexps = trigger
+ except ValueError:
+ gitiles_url, ref_list = trigger
+ path_regexps = []
+ gitiles_key = (gitiles_url, tuple(ref_list), tuple(path_regexps))
trigger_collection.setdefault(gitiles_key, set())
trigger_collection[gitiles_key].add(buildJobName(config))
@@ -198,9 +210,9 @@
builds = sorted(trigger_collection[gitiles_key])
trigger_name = 'trigger_%s' % trigger_counter
- gitiles_url, refs = gitiles_key
+ gitiles_url, refs, path_regexps = gitiles_key
triggers.append(genSchedulerTrigger(
- trigger_name, gitiles_url, refs, builds))
+ trigger_name, gitiles_url, refs, path_regexps, builds))
trigger_counter += 1
return ''.join([_CONFIG_HEADER] + triggers + jobs)