dist_templates_DATA = \
src/templates/base.html \
src/templates/index.html \
- src/templates/jobs-buildroot.html \
src/templates/log.html \
src/templates/login.html \
src/templates/queue.html \
else:
return datetime.datetime.utcnow() - self.started_at
- def save_buildroot(self, pkgs):
- # Cleanup old stuff first (for rebuilding packages)
- self.db.execute("DELETE FROM jobs_buildroots WHERE job_id = %s", self.id)
-
- for pkg_name, pkg_uuid in pkgs:
- self.db.execute("INSERT INTO jobs_buildroots(job_id, pkg_uuid, pkg_name) \
- VALUES(%s, %s, %s)", self.id, pkg_name, pkg_uuid)
-
- @lazy_property
- def buildroot(self):
- rows = self.db.query("SELECT * FROM jobs_buildroots \
- WHERE jobs_buildroots.job_id = %s ORDER BY pkg_name", self.id)
-
- pkgs = []
- for row in rows:
- # Search for this package in the packages table.
- pkg = self.backend.packages.get_by_uuid(row.pkg_uuid)
- pkgs.append((row.pkg_name, row.pkg_uuid, pkg))
-
- return pkgs
-
def pakfire(self, **kwargs):
"""
Generate the Pakfire configuration for this job
WHERE ((jobs.deleted_at IS NULL) AND (jobs.started_at IS NULL) AND (jobs.finished_at IS NULL) AND (jobs.depcheck_succeeded IS TRUE));
---
--- Name: jobs_buildroots; Type: TABLE; Schema: public; Owner: -
---
-
-CREATE TABLE public.jobs_buildroots (
- job_id integer NOT NULL,
- pkg_uuid uuid NOT NULL,
- pkg_name text NOT NULL
-);
-
-
--
-- Name: jobs_id_seq; Type: SEQUENCE; Schema: public; Owner: -
--
CREATE INDEX jobs_build_id ON public.jobs USING btree (build_id) WHERE (deleted_at IS NULL);
---
--- Name: jobs_buildroots_job_id; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX jobs_buildroots_job_id ON public.jobs_buildroots USING btree (job_id);
-
-ALTER TABLE public.jobs_buildroots CLUSTER ON jobs_buildroots_job_id;
-
-
---
--- Name: jobs_buildroots_pkg_uuid; Type: INDEX; Schema: public; Owner: -
---
-
-CREATE INDEX jobs_buildroots_pkg_uuid ON public.jobs_buildroots USING btree (pkg_uuid);
-
-
--
-- Name: jobs_finished_at; Type: INDEX; Schema: public; Owner: -
--
ADD CONSTRAINT jobs_builder_id FOREIGN KEY (builder_id) REFERENCES public.builders(id);
---
--- Name: jobs_buildroots jobs_buildroots_job_id; Type: FK CONSTRAINT; Schema: public; Owner: -
---
-
-ALTER TABLE ONLY public.jobs_buildroots
- ADD CONSTRAINT jobs_buildroots_job_id FOREIGN KEY (job_id) REFERENCES public.jobs(id);
-
-
--
-- Name: jobs jobs_deleted_by; Type: FK CONSTRAINT; Schema: public; Owner: -
--
+++ /dev/null
-{% extends "base.html" %}
-
-{% block title %}{{ _("Job buildroot")}}: {{ job.name }}{% end block %}
-
-{% block body %}
-
- <div class="row">
- <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
- <nav aria-label="breadcrumb" role="navigation">
- <ol class="breadcrumb">
- <li class="breadcrumb-item"><a href="/">{{ _("Home") }}</a></li>
- <li class="breadcrumb-item"><a href="/packages">{{ _("Packages") }}</a></li>
- <li class="breadcrumb-item"><a href="/package/{{ build.pkg.name }}">{{ build.pkg.name }}</a></li>
- <li class="breadcrumb-item"><a href="/build/{{ build.uuid }}">{{ build.pkg.friendly_version }}</a></li>
- <li class="breadcrumb-item"><a href="/job/{{ job.uuid }}">{{ job.arch }}</a></li>
- <li class="breadcrumb-item active"><a href="/job/{{ job.uuid }}/buildroot">{{ _("Buildroot") }}</a></li>
- </ol>
- </nav>
- </div>
- </div>
-
- <div class="row">
- <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
- <h2 style="word-wrap: break-word;">
- {{ _("Build job")}}: {{ job.name }}<br>
- <small>{{ _("Buildroot") }}</small>
- </h2>
- </div>
- </div>
-
-
- <div class="row">
- <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
- <div class="table-responsive mb-2">
- <table class="table table-striped table-hover">
- <tr>
- <td>{{ _("Packages") }}</td>
- <td>{{ len(buildroot) }}</td>
- </tr>
- <tr>
- <td>{{ _("Buildroot size") }}</td>
- <td>{{ format_size(buildroot_size) }}</td>
- </tr>
- <tr>
- <td>{{ _("Download size") }}</td>
- <td>{{ format_size(download_size) }}</td>
- </tr>
- </table>
- </div>
- </div>
- </div>
-
- <div class="row">
- <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
- <h4 style="word-wrap: break-word;">
- {{ _("The packages listed below were used to build %s.") % job.name }}
- </h4>
- </div>
- </div>
-
- <div class="row">
- <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
- <div class="table-responsive mb-2">
- <table class="table table-striped table-hover">
- <tbody>
- {% for name, uuid, pkg in buildroot %}
- <tr>
- {% if pkg %}
- <td>
- <a href="/package/{{ pkg.uuid }}">{{ pkg.friendly_name }}</a>
- </td>
- <td>
- {{ pkg.summary }}
- </td>
- <td>
- {{ format_size(pkg.filesize) }}
- </td>
- {% else %}
- <td>
- {{ name }}
- </td>
- <td>
- ({{ uuid }})
- </td>
- <td>
- {{ _("N/A") }}
- </td>
- {% end %}
- </tr>
- {% end %}
- </tbody>
- </table>
- </div>
- </div>
- </div>
-{% end block %}
(r"/jobs/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/abort", jobs.AbortHandler),
(r"/jobs/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/log", jobs.LogHandler),
(r"/jobs/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/retry", jobs.RetryHandler),
- (r"/job/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/buildroot", jobs.JobBuildrootHandler),
(r"/api/v1/jobs/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})",
jobs.APIv1ControlHandler),
(r"/api/v1/jobs/([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12})/finished",
self.write(line)
-class JobBuildrootHandler(base.BaseHandler):
- def get(self, uuid):
- job = self.backend.jobs.get_by_uuid(uuid)
- if not job:
- raise tornado.web.HTTPError(404, "Job not found: %s" % uuid)
-
- # Calculate the download size and buildroot size.
- download_size = 0
- buildroot_size = 0
-
- for name, uuid, pkg in job.buildroot:
- if not pkg:
- continue
-
- download_size += pkg.filesize
- buildroot_size += pkg.size
-
- self.render("jobs-buildroot.html", job=job, build=job.build,
- buildroot=job.buildroot, download_size=download_size,
- buildroot_size=buildroot_size)
-
-
class AbortHandler(base.BaseHandler):
@tornado.web.authenticated
def get(self, uuid):