mirror of
https://github.com/odoo/runbot.git
synced 2025-03-30 14:55:45 +07:00
311 lines
15 KiB
XML
311 lines
15 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data>
|
|
<template id="runbot.build">
|
|
<t t-call='website.layout'>
|
|
<t t-set="nav_form">
|
|
<form class="form-inline">
|
|
<div class="btn-group">
|
|
<t t-call="runbot.build_button">
|
|
<t t-set="bu" t-value="build"/>
|
|
<t t-set="klass" t-value="''"/>
|
|
<t t-set="show_commit_button" t-value="True"/>
|
|
</t>
|
|
</div>
|
|
</form>
|
|
<form class="form-inline" t-attf-action="/runbot/build/#{build['id']}/force" method='POST' t-if="request.params.get('ask_rebuild')" groups="runbot.group_user">
|
|
<a href='#' class="btn btn-danger" data-runbot="rebuild" t-attf-data-runbot-build="#{build['id']}">
|
|
<i class='fa fa-refresh'/>
|
|
Force Rebuild
|
|
</a>
|
|
</form>
|
|
</t>
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<t t-set="batches" t-value="build.slot_ids.mapped('batch_id')"/>
|
|
<t t-set="bundles" t-value="batches.mapped('bundle_id')"/>
|
|
<t t-if="batches">
|
|
<t t-if="len(bundles) == 1">
|
|
<t t-if="len(batches) == 1">
|
|
<b>Batch:</b>
|
|
<a t-esc="bundles.name" t-attf-href="/runbot/batch/{{batches[0].id}}"/>
|
|
</t>
|
|
<t t-else="">
|
|
<b>Bundle:</b>
|
|
<t t-esc="bundles.name" t-attf-href="/runbot/bundle/{{bundle.id}}"/>
|
|
<br/>
|
|
</t>
|
|
</t>
|
|
<t t-else="">
|
|
This build is referenced in
|
|
<t t-esc="len(bundles)"/>
|
|
bundles
|
|
<t t-if="more">
|
|
:
|
|
<a t-foreach="bundles" class="badge badge-light" t-as="bundle" t-esc="bundle.name" t-attf-href="/runbot/bundle/{{bundle.id}}"/>
|
|
</t>
|
|
<br/>
|
|
</t>
|
|
<t t-if="len(batches) > 1">
|
|
First apparition:
|
|
<a t-esc="batches[0].bundle_id.name" t-attf-href="/runbot/batch/{{batches[0].id}}"/>
|
|
<br/>
|
|
Last apparition:
|
|
<a t-esc="batches[-1].bundle_id.name" t-attf-href="/runbot/batch/{{batches[-1].id}}"/>
|
|
<br/>
|
|
</t>
|
|
</t>
|
|
</div>
|
|
<div class="col-md-12">
|
|
<table class="table table-condensed tabel-bordered">
|
|
<tr>
|
|
<t t-set="rowclass">
|
|
<t t-call="runbot.build_class">
|
|
<t t-set="build" t-value="build"/>
|
|
</t>
|
|
</t>
|
|
<td t-attf-class="bg-{{rowclass.strip()}}-light">
|
|
<t t-if="build.description">
|
|
<b>Description:</b>
|
|
<t t-raw="build.md_description"/>
|
|
<br/>
|
|
</t>
|
|
<t t-foreach="build.params_id.sudo().commit_link_ids" t-as="build_commit">
|
|
<b>Commit:</b>
|
|
<a t-attf-href="/runbot/commit/{{build_commit.commit_id.id}}">
|
|
<t t-esc="build_commit.commit_id.dname"/>
|
|
</a>
|
|
<a t-att-href="'https://%s/commit/%s' % (build_commit.branch_id.remote_id.base_url, build_commit.commit_id.name)" class="btn btn-sm text-left" title="View Commit on Github"><i class="fa fa-github"/></a>
|
|
<t t-if="build_commit.match_type in ('default', 'pr_target', 'prefix') ">
|
|
from base branch
|
|
<br/>
|
|
</t>
|
|
<div t-else="" class="ml-3">
|
|
<b>Subject:</b>
|
|
<t t-esc="build_commit.commit_id.subject"/>
|
|
<br/>
|
|
<b>Author:</b>
|
|
<t t-esc="build_commit.commit_id.author"/>
|
|
<br/>
|
|
<b>Committer:</b>
|
|
<t t-esc="build_commit.commit_id.committer"/>
|
|
<br/>
|
|
</div>
|
|
</t>
|
|
<b>Version:</b>
|
|
<t t-esc="build.params_id.version_id.name"/>
|
|
<br/>
|
|
<b>Config:</b>
|
|
<t t-esc="build.params_id.config_id.name"/>
|
|
<br/>
|
|
<t t-if='more'>
|
|
<b>Trigger:</b>
|
|
<t t-esc="build.params_id.trigger_id.name"/>
|
|
<br/>
|
|
<b>Config data:</b>
|
|
<t t-esc="build.params_id.config_data.dict"/>
|
|
<br/>
|
|
<b>Modules:</b>
|
|
<t t-esc="build.params_id.modules"/>
|
|
<br/>
|
|
<b>Extra params:</b>
|
|
<t t-esc="build.params_id.extra_params"/>
|
|
<br/>
|
|
|
|
<t t-if="len(build.params_id.builds_reference_ids) > 1">
|
|
<b>Reference batch:</b>
|
|
<t t-foreach="build.params_id.builds_reference_ids" t-as="reference">
|
|
<span t-esc="reference.id"/>
|
|
</t>
|
|
<br/>
|
|
</t>
|
|
|
|
<t t-if="len(build.params_id.build_ids) > 1">
|
|
<b>Similar builds:</b>
|
|
<t t-foreach="build.params_id.build_ids" t-as="simbuild">
|
|
<a t-if="simbuild.id != build.id" t-attf-href="/runbot/build/#{simbuild.id}">
|
|
<span
|
|
t-attf-class="badge badge-{{simbuild.get_color_class()}}"
|
|
t-esc="simbuild.id"/>
|
|
</a>
|
|
</t>
|
|
<br/>
|
|
</t>
|
|
<b>Host:</b>
|
|
<t t-esc="build.host"/>
|
|
<br/>
|
|
</t>
|
|
<b>Total time:</b>
|
|
<t t-esc="build.get_formated_build_time()"/>
|
|
<br/>
|
|
<b>Trigger:</b>
|
|
<t t-esc="build.params_id.trigger_id.name"/>
|
|
<br/>
|
|
<br/>
|
|
</td>
|
|
<td t-if="build.children_ids">
|
|
Children:
|
|
<table class="table table-condensed">
|
|
<t t-foreach="build.children_ids.sorted('id')" t-as="child">
|
|
<t t-set="rowclass">
|
|
<t t-call="runbot.build_class">
|
|
<t t-set="build" t-value="child"/>
|
|
</t>
|
|
</t>
|
|
<tr t-attf-class="bg-{{rowclass.strip()}}-light{{' line-through' if child.orphan_result else ''}}">
|
|
<td>
|
|
<a t-attf-href="/runbot/build/{{child.id}}">
|
|
Build
|
|
<t t-esc="child.id"/>
|
|
</a>
|
|
<t t-if="child.description">
|
|
<t t-raw="child.md_description" />
|
|
</t>
|
|
<t t-else="">
|
|
with config
|
|
<t t-esc="child.params_id.config_id.name"/>
|
|
</t>
|
|
<a groups="runbot.group_build_config_user" t-attf-href="/web#id={{child.params_id.config_id.id}}&view_type=form&model=runbot.build.config">...</a>
|
|
<t t-if="child.orphan_result">
|
|
<i class="fa fa-chain-broken" title="Build result ignored for parent" />
|
|
</t>
|
|
<t t-if="child.job">
|
|
Running step:
|
|
<t t-esc="child.job"/>
|
|
</t>
|
|
<t t-if="child.global_state in ['testing', 'waiting']">
|
|
<i class="fa fa-spinner fa-spin"/>
|
|
<t t-esc="child.global_state"/>
|
|
</t>
|
|
</td>
|
|
<td>
|
|
<span t-attf-class="badge badge-info" t-esc="child.get_formated_build_time()"/>
|
|
</td>
|
|
<td>
|
|
<t t-call="runbot.build_button">
|
|
<t t-set="bu" t-value="child"/>
|
|
<t t-set="klass" t-value="'btn-group-ssm'"/>
|
|
</t>
|
|
|
|
</td>
|
|
</tr>
|
|
</t>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<p t-if="build.parent_id">
|
|
Child of
|
|
<a t-attf-href="/runbot/build/#{build.parent_id.id}">
|
|
<t t-esc="build.parent_id.dest"/>
|
|
</a>
|
|
<t t-if="build.orphan_result">
|
|
&nbsp;
|
|
<i class="fa fa-chain-broken" title="Build result ignored for parent" />
|
|
&nbsp;Orphaned build, the result does not affect parent build result
|
|
</t>
|
|
</p>
|
|
<table class="table table-condensed">
|
|
<tr>
|
|
<th>Date</th>
|
|
<th>Level</th>
|
|
<th>Type</th>
|
|
<th>Message</th>
|
|
</tr>
|
|
|
|
<t t-set="commit_link_per_name" t-value="{commit_link.commit_id.repo_id.name:commit_link for commit_link in build.params_id.commit_link_ids}"/>
|
|
<t t-foreach="build.sudo().log_ids" t-as="l">
|
|
<t t-set="subbuild" t-value="(([child for child in build.children_ids if child.id == int(l.path)] if l.type == 'subbuild' else False) or [build.browse()])[0]"/>
|
|
<t t-set="logclass" t-value="dict(CRITICAL='danger', ERROR='danger', WARNING='warning', OK='success', SEPARATOR='separator').get(l.level)"/>
|
|
<tr t-att-class="'separator' if logclass == 'separator' else ''">
|
|
<td style="white-space: nowrap; width:1%;">
|
|
<t t-esc="l.create_date.strftime('%Y-%m-%d %H:%M:%S')"/>
|
|
</td>
|
|
<td style="white-space: nowrap; width:1%;">
|
|
<b t-if="l.level != 'SEPARATOR' and l.type not in ['link', 'markdown']" t-esc="l.level"/>
|
|
</td>
|
|
<td style="white-space: nowrap; width:1%;">
|
|
<t t-if="l.level != 'SEPARATOR' and l.type not in ['link', 'markdown']" t-esc="l.type"/>
|
|
</td>
|
|
<t t-set="message_class" t-value="''"/>
|
|
<t t-if="subbuild" t-set="message_class">
|
|
<t t-call="runbot.build_class">
|
|
<t t-set="build" t-value="subbuild"/>
|
|
</t>
|
|
</t>
|
|
<td t-attf-class="bg-{{message_class.strip() or logclass}}-light">
|
|
<t t-if="l.type not in ('runbot', 'link', 'markdown')">
|
|
<t t-if="l.type == 'subbuild'">
|
|
<a t-attf-href="/runbot/build/{{l.path}}">
|
|
Build #
|
|
<t t-esc="l.path"/>
|
|
</a>
|
|
</t>
|
|
<t t-else="">
|
|
<t t-set="repo_name" t-value="l.path.replace('/data/build/', '').split('/')[0] "/>
|
|
<t t-set="href" t-value=""/>
|
|
<t t-if="repo_name in commit_link_per_name">
|
|
<t t-set="repo_base_url" t-value="commit_link_per_name[repo_name].branch_id.remote_id.base_url if repo_name in commit_link_per_name else ''"/>
|
|
<t t-set="commit_hash" t-value="commit_link_per_name[repo_name].commit_id.name if repo_name in commit_link_per_name else ''"/>
|
|
<t t-set="path" t-value="l.path.replace('/data/build/%s/' % repo_name, '')"/>
|
|
<t t-set="href" t-value="'https://%s/blob/%s/%s#L%s' % (repo_base_url, commit_hash, path, l.line)"/>
|
|
</t>
|
|
<a t-att-href="href" t-att-title="l.func"><t t-esc="l.name"/>:<t t-esc="l.line"/></a>
|
|
</t>
|
|
</t>
|
|
<t t-if="l.type == 'link' and len(l.message.split('$$')) == 3">
|
|
<t t-set="message" t-value="l.message.split('$$')"/>
|
|
<t t-if="message[1].startswith('fa-')">
|
|
<t t-esc="message[0]"/>
|
|
<a t-attf-href="{{l.path}}">
|
|
<i t-attf-class="fa {{message[1]}}"/>
|
|
</a>
|
|
<t t-esc="message[2]"/>
|
|
</t>
|
|
<t t-else="">
|
|
<t t-esc="message[0]"/>
|
|
<a t-attf-href="{{l.path}}">
|
|
<t t-esc="message[1]"/>
|
|
</a>
|
|
<t t-esc="message[2]"/>
|
|
</t>
|
|
</t>
|
|
<t t-elif="l.type == 'markdown'" t-raw="l._markdown()"/>
|
|
<t t-else="">
|
|
<t t-if="'\n' not in l.message" t-esc="l.message"/>
|
|
<pre t-if="'\n' in l.message" style="margin:0;padding:0; border: none;"><t t-esc="l.message"/></pre>
|
|
<t t-if="l.type == 'subbuild' and subbuild.sudo().error_log_ids">
|
|
<a class="show" data-toggle="collapse" t-attf-data-target="#subbuild-{{subbuild.id}}">
|
|
<i class="fa"/>
|
|
</a>
|
|
<div t-attf-id="subbuild-{{subbuild.id}}" class="collapse in">
|
|
<table class="table table-condensed" style="margin-bottom:0;">
|
|
<t t-foreach="subbuild.sudo().error_log_ids" t-as="sl">
|
|
<tr>
|
|
<td t-att-class="dict(CRITICAL='danger', ERROR='danger', WARNING='warning', OK='success', SEPARATOR='separator').get(sl.level)">
|
|
<t t-if="sl.type == 'server'">
|
|
<!--t-attf-href="https://{{repo.base_url}}/blob/{{build['name']}}/{{sl.path}}#L{{sl.line}}"-->
|
|
<a t-att-title="sl.func"><t t-esc="sl.name"/>:<t t-esc="sl.line"/></a>
|
|
</t>
|
|
<t t-if="'\n' not in sl.message" t-esc="sl.message"/>
|
|
<pre t-if="'\n' in sl.message" style="margin:0;padding:0; border: none;">
|
|
<t t-esc="sl.message"/>
|
|
</pre>
|
|
</td>
|
|
</tr>
|
|
</t>
|
|
</table>
|
|
</div>
|
|
</t>
|
|
</t>
|
|
</td>
|
|
</tr>
|
|
</t>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</template>
|
|
</data>
|
|
</odoo>
|