Changeset View
Changeset View
Standalone View
Standalone View
lilybuild/lilybuild/ci_syntax/ci_file.py
| Show First 20 Lines • Show All 83 Lines • ▼ Show 20 Lines | def expand_job(job_name, all_jobs, defaults): | ||||
| res = {} | res = {} | ||||
| for ancestor_name in reversed(seq): | for ancestor_name in reversed(seq): | ||||
| merge_job_deep(res, all_jobs[ancestor_name]) | merge_job_deep(res, all_jobs[ancestor_name]) | ||||
| merge_job_deep(res, defaults) | merge_job_deep(res, defaults) | ||||
| if 'extends' in res: | if 'extends' in res: | ||||
| del res['extends'] | del res['extends'] | ||||
| return res | return res | ||||
| def get_ref_from_ref_cond(ref_cond): | |||||
| # We don't support project name so ignore everything after @ | |||||
| pos = ref_cond.rfind('@') | |||||
| if pos != -1: | |||||
| ref_cond = ref_cond[:pos] | |||||
| if ref_cond[0] == '/' and ref_cond[-1] == '/': | |||||
| return '$CI_COMMIT_REF_NAME =~ ' + ref_cond | |||||
| else: | |||||
| return '$CI_COMMIT_REF_NAME == "' + ref_cond.replace('\\', '\\\\').replace('"', '\\"') + '"' | |||||
| def get_alt_rules_from_job_struct(job_struct): | |||||
| # Convert when/only/except to rules | |||||
| when = None | |||||
| if job_struct.get('when'): | |||||
| when = job_struct.get('when') | |||||
| positive_cond = [] | |||||
| if job_struct.get('only'): | |||||
| for ref_cond in job_struct.get('only'): | |||||
| positive_cond.append(get_ref_from_ref_cond(ref_cond)) | |||||
| negative_cond = [] | |||||
| if job_struct.get('except'): | |||||
| for ref_cond in job_struct.get('except'): | |||||
| negative_cond.append(get_ref_from_ref_cond(ref_cond)) | |||||
| rule_if = '' | |||||
| if positive_cond: | |||||
| rule_if += '(' + ' || '.join(positive_cond) + ')' | |||||
| if negative_cond: | |||||
| rule_if += ' && ' | |||||
| if negative_cond: | |||||
| rule_if += '!(' + ' || '.join(negative_cond) + ')' | |||||
| rule = {} | |||||
| if when: | |||||
| rule['when'] = when | |||||
| if positive_cond or negative_cond: | |||||
| rule['if'] = rule_if | |||||
| if rule: | |||||
| return [rule] | |||||
| else: | |||||
| return [] | |||||
| class CIJob: | class CIJob: | ||||
| def __init__(self, job_name, job_stage, job_struct): | def __init__(self, job_name, job_stage, job_struct): | ||||
| self.name = job_name | self.name = job_name | ||||
| self.stage = job_stage | self.stage = job_stage | ||||
| self.struct_raw = job_struct | self.struct_raw = job_struct | ||||
| self.image = job_struct.get('image') | self.image = job_struct.get('image') | ||||
| self.before_script = normalize_script(job_struct.get('before_script')) | self.before_script = normalize_script(job_struct.get('before_script')) | ||||
| self.script = normalize_script(job_struct.get('script')) | self.script = normalize_script(job_struct.get('script')) | ||||
| self.after_script = normalize_script(job_struct.get('after_script')) | self.after_script = normalize_script(job_struct.get('after_script')) | ||||
| self.artifacts = job_struct.get('artifacts') or {} | self.artifacts = job_struct.get('artifacts') or {} | ||||
| self.rules = job_struct.get('rules') or [] | self.rules = job_struct.get('rules') or get_alt_rules_from_job_struct(job_struct) | ||||
| self.dependencies = job_struct.get('dependencies') | self.dependencies = job_struct.get('dependencies') | ||||
| self.services = job_struct.get('services') or [] | self.services = job_struct.get('services') or [] | ||||
| def get_predefined_ci_variables(self): | def get_predefined_ci_variables(self): | ||||
| vs = { | vs = { | ||||
| 'CI': 'true', | 'CI': 'true', | ||||
| 'CI_JOB_NAME': self.name, | 'CI_JOB_NAME': self.name, | ||||
| 'CI_JOB_NAME_SLUG': ci_slugify(self.name), | 'CI_JOB_NAME_SLUG': ci_slugify(self.name), | ||||
| ▲ Show 20 Lines • Show All 131 Lines • Show Last 20 Lines | |||||