From 2318f4dc4818c81d95d0b4bc2e3422cb437ab3bf Mon Sep 17 00:00:00 2001 From: Xavier-Do Date: Mon, 19 Feb 2024 16:27:26 +0100 Subject: [PATCH] wip --- runbot/controllers/frontend.py | 38 ++++++++++++++++++++++++++++++++-- runbot/models/batch.py | 3 +++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/runbot/controllers/frontend.py b/runbot/controllers/frontend.py index d846e1c4..2493e91d 100644 --- a/runbot/controllers/frontend.py +++ b/runbot/controllers/frontend.py @@ -10,8 +10,7 @@ import werkzeug.urls from collections import defaultdict, OrderedDict from werkzeug.exceptions import NotFound, Forbidden -from odoo.addons.http_routing.models.ir_http import slug -from odoo.addons.website.controllers.main import QueryURL +from odoo.tools import consteq from odoo.http import Controller, Response, request, route as o_route from odoo.osv import expression @@ -641,3 +640,38 @@ class Runbot(Controller): def parse_log(self, ir_log, **kwargs): request.env['runbot.build.error']._parse_logs(ir_log) return werkzeug.utils.redirect('/runbot/build/%s' % ir_log.build_id.id) + + @route(['/runbot/stage/'], type='json', auth='public', sitemap=False) + def stage(self, params=None, **kwargs): + # expected call params: { + # 'token': 'token', + # 'bundle': 'staging.master', + # 'identifier': '12587', + # 'commits': [ + # { + # 'repo_name': 'odoo', + # 'name': '0d0015a11d944916ea1a8cc8080b6f840934570f', + # }, { + # 'repo_name': 'enterprise', + # 'name': '0d00f7a1a6a11d944916ea1a8cc8080b61588844', + # }, ... + # } + env = request.env + token = params['token'] + commits = env['runbot.commit'] + for commit_desc in params['commits']: + commit = env['runbot.commit'].search([('name', '=', commit_desc['name']), ('repo_id.name', '=', commit_desc['repo_name'])], limit=1) + if not commit: + return {'error': 'Commit %s not found' % commit_desc} + commits |= commit + project = commits.mapped('project_id') + if not len(commits.mapped('project_id') == 1): + return {'error': 'Multiple project found for commits: %s' % project.mapped('name')} + if not consteq(project.mapped('merge_token'), token): + return {'error': 'Invalid token'} + bundle_name = params['bundle'] + bundle = env['runbot.bundle'].search([('name', '=', bundle_name), ('project_id', '=', project.id)], limit=1) + batch = bundle._stage(commits) + return { + + } diff --git a/runbot/models/batch.py b/runbot/models/batch.py index 5f022810..cb8b77bb 100644 --- a/runbot/models/batch.py +++ b/runbot/models/batch.py @@ -27,6 +27,9 @@ class Batch(models.Model): has_warning = fields.Boolean("Has warning") base_reference_batch_id = fields.Many2one('runbot.batch') + # mergebot + staging_identifier = fields.Char('Staging identifier') + @api.depends('slot_ids.build_id') def _compute_all_build_ids(self): all_builds = self.env['runbot.build'].search([('id', 'child_of', self.slot_ids.build_id.ids)])