# -*- encoding: utf-8 -*- import glob import io import logging import re from odoo import models, fields _logger = logging.getLogger(__name__) class Step(models.Model): _inherit = "runbot.build.config.step" job_type = fields.Selection(selection_add=[('cla_check', 'Check cla')]) def _run_step(self, build, log_path): if self.job_type == 'cla_check': return self._runbot_cla_check(build, log_path) return super(Step, self)._run_step(build, log_path) def _runbot_cla_check(self, build, log_path): build._checkout() cla_glob = glob.glob(build._get_server_commit()._source_path("doc/cla/*/*.md")) if cla_glob: description = "%s Odoo CLA signature check" % build.author mo = re.search('[^ <@]+@[^ @>]+', build.author_email or '') state = "failure" if mo: email = mo.group(0).lower() if re.match('.*@(odoo|openerp|tinyerp)\.com$', email): state = "success" else: try: cla = ''.join(io.open(f, encoding='utf-8').read() for f in cla_glob) if cla.lower().find(email) != -1: state = "success" except UnicodeDecodeError: description = 'Invalid CLA encoding (must be utf-8)' _logger.info('CLA build:%s email:%s result:%s', build.dest, email, state) status = { "state": state, "target_url": "https://www.odoo.com/sign-cla", "description": description, "context": "legal/cla" } build._log('check_cla', 'CLA %s' % state) build._github_status_notify_all(status) # 0 is myself, -1 is everybody else, -2 nothing return -2