]> git.ipfire.org Git - pbs.git/blob - src/templates/jobs-detail.html
bootstrap4: port job details pages
[pbs.git] / src / templates / jobs-detail.html
1 {% extends "base.html" %}
2
3 {% block title %}{{ _("Job") }}: {{ job.name }}{% end block %}
4
5 {% block body %}
6
7 <div class="row">
8 <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
9 <nav aria-label="breadcrumb" role="navigation">
10 <ol class="breadcrumb">
11 <li class="breadcrumb-item"><a href="/">{{ _("Home") }}</a></li>
12 <li class="breadcrumb-item"><a href="/packages">{{ _("Packages") }}</a></li>
13 <li class="breadcrumb-item"><a href="/package/{{ build.pkg.name }}">{{ build.pkg.name }}</a></li>
14 <li class="breadcrumb-item"><a href="/build/{{ build.uuid }}">{{ build.pkg.friendly_version }}</a></li>
15 <li class="breadcrumb-item active"><a href="/job/{{ job.uuid }}">{{ job.arch }}</a></li>
16 </ol>
17 </nav>
18 </div>
19 </div>
20
21 <div class="row">
22 {% if current_user and job.state in ("dispatching", "running", "uploading", "aborted", "failed", "finished") %}
23 <div class="col-12 col-sm-12 col-md-9 col-lg-10 col-xl-10">
24 <h2 style="word-wrap: break-word;">
25 {{ _("Build job") }}: {{ job.name }}
26 {% module JobState(job, cls="float-lg-right float-xl-right", show_icon=False) %}
27 <br>
28 <small>{{ job.pkg.summary }}</small>
29 </h2>
30 </div>
31 <div class="col-12 col-sm-12 col-md-3 col-lg-2 col-xl-2">
32 <div class="dropdown">
33 <button class="btn btn-block btn-light dropdown-toggle mb-2" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
34 {{ _("Actions") }}
35 </button>
36 <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton">
37 {% if job.state in ("dispatching", "running", "uploading") %}
38 <a class="dropdown-item" href="/job/{{ job.uuid }}/abort">
39 {{ _("Abort job") }}
40 </a>
41 {% elif job.state in ("aborted", "failed") %}
42 <a class="dropdown-item" href="/job/{{ job.uuid }}/schedule?type=rebuild">
43 {{ _("Restart job") }}
44 </a>
45 {% elif job.state == "finished" %}
46 <a class="dropdown-item" href="/job/{{ job.uuid }}/schedule?type=test">
47 {{ _("Schedule test build") }}
48 </a>
49 {% end %}
50 </div>
51 </div>
52 </div>
53 {% else %}
54 <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
55 <h2 style="word-wrap: break-word;">
56 {{ _("Build job") }}: {{ job.name }}
57 {% module JobState(job, cls="float-lg-right float-xl-right", show_icon=False) %}
58 <br>
59 <small>{{ job.pkg.summary }}</small>
60 </h2>
61 </div>
62 {% end %}
63 </div>
64
65
66
67 {% if job.message %}
68 <div class="row">
69 <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
70 <div class="alert alert-info">
71 {{ "<br />".join(job.message.splitlines()) }}
72 </div>
73 </div>
74 </div>
75 {% end %}
76
77 {% if job.state == "aborted" and job.aborted_state %}
78 <div class="row">
79 <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
80 <div class="alert alert-danger" role="alert">
81 <h3 style="word-wrap: break-word;" class="alert-heading">
82 {{ _("Job has been aborted") }}
83 </h3>
84 <p>
85 {{ _("This build job is in an aborted state, because the build process crashed unexpectedly.") }}
86 {{ _("In most cases, there is no log file and you must figure out the issue on your own.") }}
87 </p>
88 <p>
89 {{ _("The error code is:") }}
90
91 {% if job.aborted_state == -11 %}
92 SEGV - {{ _("Segmentation violation") }}
93 {% else %}
94 {{ job.aborted_state }} - {{ _("Unknown") }}
95 {% end %}
96 </p>
97
98 {% if current_user and current_user.is_admin() %}
99 <p>
100 {{ _("You may resubmit the job to try again:") }}
101 <a href="/job/{{ job.uuid }}/schedule?type=rebuild">{{ _("Re-submit build") }}</a>
102 </p>
103 {% end %}
104 </div>
105 </div>
106 </div>
107 {% end %}
108
109 <div class="row">
110 <div class="col-12 col-sm-12 col-md-6 col-lg-6 col-xl-6">
111 <h3 class="text-center">{{ _("General") }}</h3>
112 <div class="table-responsive">
113 <table class="table table-striped table-hover">
114 <tbody>
115 {% if job.rank %}
116 <tr>
117 <td>
118 {{ _("Job rank") }}
119 </td>
120 <td>
121 {{ _("#%s in the build queue") % job.rank }}
122 </td>
123 </tr>
124 {% end %}
125 <tr>
126 <td>
127 {{ _("Time") }}
128 </td>
129 <td>
130 {{ friendly_time(job.duration) }}
131 </td>
132 </tr>
133
134 <tr>
135 <td>
136 {{ _("Builder") }}
137 </td>
138 <td>
139 {% if job.builder %}
140 <a href="/builder/{{ job.builder.name }}">{{ job.builder.name }}</a>
141 {% else %}
142 <span class="text-muted">{{ _("No builder assigned.") }}</span>
143 {% end %}
144 </td>
145 </tr>
146 <tr>
147 <td>
148 {{ _("Created") }}
149 </td>
150 <td>
151 {{ format_date(job.time_created, full_format=True) }}
152 </td>
153 </tr>
154 {% if job.time_started %}
155 <tr>
156 <td>
157 {{ _("Started") }}
158 </td>
159 <td>
160 {{ format_date(job.time_started, full_format=True) }}
161 </td>
162 </tr>
163 {% end %}
164 {% if job.time_finished %}
165 <tr>
166 <td>
167 {{ _("Finished") }}
168 </td>
169 <td>
170 {{ format_date(job.time_finished, full_format=True) }}
171 </td>
172 </tr>
173 {% end %}
174 </tbody>
175 </table>
176 </div>
177 </div>
178
179 <div class="col-12 col-sm-12 col-md-6 col-lg-6 col-xl-6">
180 <h3 class="text-center">{{ _("Build logs") }}</h3>
181 {% if job.logfiles %}
182 {% module LogFilesTable(job, job.logfiles) %}
183 {% else %}
184 <p class="muted">{{ _("No logs available, yet.") }}</p>
185 {% end %}
186
187 {% if job.buildroot %}
188 <p class="text-center">
189 <a href="/job/{{ job.uuid }}/buildroot">{{ _("Buildroot") }}</a>
190 ({{ _("%s package", "%s packages", len(job.buildroot)) % len(job.buildroot) }})
191 </p>
192 {% end %}
193 </div>
194 </div>
195
196 {% if len(job) > 0 %}
197 <div class="row">
198 <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
199 <h3 style="word-wrap: break-word;">
200 {{ _("Package files") }}
201 <small>({{ len(job) }})</small>
202 </h3>
203 </div>
204 <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
205 {% module PackagesTable(job, job) %}
206 </div>
207 </div>
208 {% end %}
209
210 {% if log %}
211 <div class="row">
212 <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
213 <h3 style="word-wrap: break-word;">
214 {{ _("Log") }}
215 </h3>
216 </div>
217 <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
218 {% module Log(log) %}
219 </div>
220 </div>
221 {% end %}
222 {% end block %}