#!/usr/bin/python3 import logging import threading from pathlib import Path from tools import RunbotClient, run, docker_monitoring_loop _logger = logging.getLogger(__name__) class BuilderClient(RunbotClient): def on_start(self): builds_path = self.env['runbot.runbot']._path('build') monitoring_thread = threading.Thread(target=docker_monitoring_loop, args=(builds_path,), daemon=True) monitoring_thread.start() if self.env['ir.config_parameter'].sudo().get_param('runbot.runbot_do_fetch'): for repo in self.env['runbot.repo'].search([('mode', '!=', 'disabled')]): repo._update(force=True) self.last_docker_updates = None def loop_turn(self): icp = self.env['ir.config_parameter'] docker_registry_host_id = icp.get_param('runbot.docker_registry_host_id', default=False) is_registry = docker_registry_host_id == str(self.host.id) if is_registry: self.env['runbot.runbot']._start_docker_registry() last_docker_updates = self.env['runbot.dockerfile'].search([('to_build', '=', True)]).mapped('write_date') if self.count == 1 or self.last_docker_updates != last_docker_updates: self.last_docker_updates = last_docker_updates self.host._docker_update_images() self.env.cr.commit() if self.count == 1: # cleanup at second iteration self.env['runbot.runbot']._source_cleanup() self.env.cr.commit() self.env['runbot.build']._local_cleanup() self.env.cr.commit() self.env['runbot.runbot']._docker_cleanup() self.env.cr.commit() self.host._set_psql_conn_count() self.env.cr.commit() self.env['runbot.repo']._update_git_config() self.env.cr.commit() self.git_gc() self.env.cr.commit() return self.env['runbot.runbot']._scheduler_loop_turn(self.host) if __name__ == '__main__': run(BuilderClient)