kopia lustrzana https://github.com/espressif/esp-idf
64 wiersze
1.8 KiB
Python
Executable File
64 wiersze
1.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# internal use only
|
|
# called by CI jobs to determine if it need to be executed
|
|
|
|
import json
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
RE_FILTER_PATTERN = re.compile(r'^r"(.+)?"$')
|
|
|
|
RE_TYPE = type(re.compile('', 0))
|
|
|
|
|
|
def parse_filter(filter_name):
|
|
filter_raw = os.getenv(filter_name)
|
|
filters = []
|
|
if filter_raw:
|
|
filter_data = json.loads(filter_raw)
|
|
for _filter in filter_data:
|
|
match = RE_FILTER_PATTERN.search(_filter)
|
|
if match:
|
|
filters.append(re.compile(match.group(1)))
|
|
else:
|
|
filters.append(_filter)
|
|
return filters
|
|
|
|
|
|
def process_filter(execute_by_default, filter_name, ci_name):
|
|
execute = execute_by_default
|
|
|
|
# bot message is case insensitive (processed with lower case). so we also convert ci_name to lower case.
|
|
ci_name = ci_name.lower()
|
|
|
|
filter_list = parse_filter(filter_name)
|
|
|
|
for _filter in filter_list:
|
|
if isinstance(_filter, RE_TYPE):
|
|
match = _filter.search(ci_name) is not None
|
|
else:
|
|
match = _filter == ci_name
|
|
|
|
if match:
|
|
execute = True
|
|
break
|
|
else:
|
|
execute = False
|
|
return execute
|
|
|
|
|
|
if __name__ == '__main__':
|
|
execute_by_default = True
|
|
if os.getenv('BOT_NEEDS_TRIGGER_BY_NAME', '0') == '1':
|
|
execute_by_default = False
|
|
|
|
need_to_execute = process_filter(True, 'BOT_STAGE_FILTER', os.getenv('CI_JOB_STAGE')) and process_filter(execute_by_default,
|
|
'BOT_JOB_FILTER', os.getenv('CI_JOB_NAME'))
|
|
if need_to_execute:
|
|
sys.exit(0)
|
|
else:
|
|
print("Skip this job as it doesn't fit @bot's filter")
|
|
sys.exit(-1)
|