[copr] master: [frontend] pkg name and version on the build page (e319320)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit e319320c6e59deb49f91adefb897814f156366a3
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Thu Jul 3 16:52:44 2014 +0200
[frontend] pkg name and version on the build page
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/filters.py | 16 +++
frontend/coprs_frontend/coprs/static/copr.css | 23 ++++-
.../templates/coprs/detail/_builds_table.html | 2 +-
.../coprs/templates/coprs/detail/build.html | 127 ++++++++++++++------
4 files changed, 130 insertions(+), 38 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/filters.py b/frontend/coprs_frontend/coprs/filters.py
index 2f6aada..03e80cf 100644
--- a/frontend/coprs_frontend/coprs/filters.py
+++ b/frontend/coprs_frontend/coprs/filters.py
@@ -114,3 +114,19 @@ def parse_package_name(pkg):
if pkg is not None:
return helpers.parse_package_name(os.path.basename(pkg))
return pkg
+
+
+(a)app.template_filter("basename")
+def parse_package_name(pkg):
+ if pkg is not None:
+ return os.path.basename(pkg)
+ return pkg
+
+
+(a)app.template_filter("build_state_description")
+def build_state_decoration(state):
+ description = ""
+ if state == "skipped":
+ description = "This package has already been built previously"
+
+ return description
diff --git a/frontend/coprs_frontend/coprs/static/copr.css b/frontend/coprs_frontend/coprs/static/copr.css
index 8fb91e9..bb8cc40 100644
--- a/frontend/coprs_frontend/coprs/static/copr.css
+++ b/frontend/coprs_frontend/coprs/static/copr.css
@@ -22,7 +22,9 @@ h2 {
}
h2.build-detail {
- font-size: 1.8em;
+ font-size: 1.4em;
+ margin-bottom: 0px;
+ font-weight: normal;
}
h3 {
@@ -359,6 +361,25 @@ tr.build-row-skipped {
color: #666;
}
+dl.aligned dt {
+ font-weight: bolder;
+}
+
+dl.aligned dd {
+ margin-left: 0;
+}
+
+dl.aligned dt.oneline {
+ float: left;
+ clear: left;
+ margin-right: 9px;
+ font-weight: bold;
+}
+
+dl.aligned div {
+ margin-bottom: 18px;
+}
+
table.releases th {
background-color: #f2f2f2;
text-align: left;
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
index c3dbef2..65a2485 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
@@ -30,7 +30,7 @@
{% endif %}
</td>
<td> {{ build.started_on|time_ago(build.ended_on) }} </td>
- <td class="build-{{ build.state }}">{{ build.state }}</td>
+ <td class="build-{{build.state}}" alt="{{build.state|build_state_description}}">{{ build.state }}</td>
</tr>
{% endfor %}
</table>
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html
index a8377cd..bec6956 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html
@@ -10,7 +10,12 @@
{% else %}
- <h2 class="build-detail"> Build {{ build.id }} in {{ build.copr.owner.name }}/{{ build.copr.name }}</h2>
+ <h2 class="build-detail" alt="{{build.state|build_state_description}}">
+ <b>Build {{ build.id }}:</b>
+ <span class="build-{{build.state}}"> {{ build.state }} </span>
+ - {{build.pkgs|basename}}
+ </h2>
+
<div class="build-buttons" >
{% if g.user and g.user.can_build_in(copr) %}
{{ copr_build_cancel_form(build, page) }}
@@ -21,46 +26,96 @@
{% endif %}
</div>
- <dl>
- <dt class="field-label"> Package name:<dt>
- <dd>{{ build.pkgs|pkg_name }}</dd>
- </dt>
- <dt class="field-label"> Build time:</dt>
- <dd><b>Submitted: </b>
- {% if g.user %}
- {{ build.submitted_on|localized_time(g.user.timezone) }}
+ <dl class="aligned" >
+ <div>
+ <dt> Results:</dt>
+ {% if build.results %}
+ <dd><a href="{{ build.results }}">{{ build.results }}</a></dd>
+ {% else %}
+ <dd>No results yet</dd>
+ {% endif %}
+ </div>
+ <div>
+ <dt class="oneline"> Name:</dt>
+ {% if build.pkg_name %}
+ <dd>{{ build.pkg_name }}</dd>
{% else %}
- {{ build.submitted_on|localized_time("UTC") }}
+ <dd>{{ build.pkgs|pkg_name }}</dd>
{% endif %}
- ({{ build.submitted_on|time_ago }} ago)
- </dd>
- <dd><b>Started: </b>
- {% if g.user %}
- {{ build.started_on|localized_time(g.user.timezone) }}
+
+
+ <dt class="oneline"> Version:</dt>
+ {% if build.pkg_version %}
+ <dd>{{ build.pkg_version }}</dd>
{% else %}
- {{ build.started_on|localized_time("UTC") }}
+ <dd> - </dd>
{% endif %}
- ({{ build.started_on|time_ago }} ago)
- </dd>
- <dd><b>Build time: </b> {{ build.started_on|time_ago(build.ended_on) }} </dd>
- <dt class="field-label"> Results:</dt>
- {% if build.results %}
- <dd><a href="{{ build.results }}">{{ build.results }}</a></dd>
- {% else %}
- <dd>No results yet</dd>
- {% endif %}
- <dt class="field-label"> Chroots:</dt>
- {% for chroot in build.build_chroots %}
- <dd><b>{{ chroot.name }}: </b>
- <span class="build-{{ chroot.status|state_from_num }}">{{ chroot.status|state_from_num }}</span>
+ </div>
+ <div>
+ <dt> Chroots:</dt>
+ {% for chroot in build.build_chroots %} <tr>
+ <dd>
+ {{ chroot.name }}:
+ <span class="build-{{chroot.state}}"
+ alt="{{chroot.state|build_state_description}}">
+ {{ chroot.state }}
+ </span>
+ </dd>
+ {% endfor %}
+ </div>
+ <div>
+ <dt class="oneline"> Submitted: </dt>
+ <dd>
+ {% if g.user %}
+ {{ build.submitted_on|localized_time(g.user.timezone) }}
+ {% else %}
+ {{ build.submitted_on|localized_time("UTC") }}
+ {% endif %}
+ ({{ build.submitted_on|time_ago }} ago)
+ </dd>
+
+
+ <dt class="oneline"> Started: </dt>
+ <dd>
+ {% if g.user %}
+ {{ build.started_on|localized_time(g.user.timezone) }}
+ {% else %}
+ {{ build.started_on|localized_time("UTC") }}
+ {% endif %}
+ </dd>
+
+
+ <dt class="oneline"> Finished: </dt>
+ <dd>
+ {% if g.user %}
+ {{ build.ended_on|localized_time(g.user.timezone) }}
+ {% else %}
+ {{ build.ended_on|localized_time("UTC") }}
+ {% endif %}
+ </dd>
+
+
+ <dt class="oneline"> Build time: </dt>
+ <dd>
+ {{ build.started_on|time_ago(build.ended_on) }}
+ </dd>
+ </div>
+ <div>
+ <dt> Source: </dt>
+ <dd>
+ {% if build.pkgs is not none %}
+ {% for pkg in build.pkgs.split() %}
+ <dd> <a href="{{ pkg }}">{{ pkg }}</a></dd>
+ {% endfor %}
+ {% endif %}
+ </dd>
+ </div>
+ <div>
+ <dt class="oneline"> Submitted by: </dt>
+ <dd>
+ {{ build.user.name }}
</dd>
- {% endfor %}
- <dt class="field-label"> Package URL:</dt>
- {% if build.pkgs is not none %}{% for pkg in build.pkgs.split() %}
- <dd> <a href="{{ pkg }}">{{ pkg }}</a></dd>
- {% endfor %}{% endif %}
- <dt class="field-label"> Submitted by:</dt>
- <dd>{{ build.user.name }}</dd>
+ </div>
</dl>
9 years, 10 months
[copr] master: [frontend] pkg name and version support (5287c8a)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 5287c8adc736cf620c0e958980307bc705003b16
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Thu Jul 3 11:13:25 2014 +0200
[frontend] pkg name and version support
>---------------------------------------------------------------
.../coprs_frontend/coprs/logic/builds_logic.py | 2 +-
frontend/coprs_frontend/coprs/models.py | 4 ++++
.../templates/coprs/detail/_builds_table.html | 8 ++++++++
3 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index 2bd7b41..14bb10c 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -125,7 +125,7 @@ class BuildsLogic(object):
db.session.add(build_chroot)
- for attr in ["results", "started_on", "ended_on"]:
+ for attr in ["results", "started_on", "ended_on", "pkg_version", "pkg_name"]:
value = upd_dict.get(attr, None)
if value:
# only update started_on once
diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py
index 601a7b0..053b70b 100644
--- a/frontend/coprs_frontend/coprs/models.py
+++ b/frontend/coprs_frontend/coprs/models.py
@@ -233,6 +233,10 @@ class Build(db.Model, helpers.Serializer):
id = db.Column(db.Integer, primary_key=True)
# list of space separated urls of packages to build
pkgs = db.Column(db.Text)
+ # the real name of the package got by rpm
+ pkg_name = db.Column(db.Text)
+ # version of the package got by rpm
+ pkg_version = db.Column(db.Text)
# was this build canceled by user?
canceled = db.Column(db.Boolean, default=False)
# list of space separated additional repos
diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
index 2c1eae2..c3dbef2 100644
--- a/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
+++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/_builds_table.html
@@ -6,6 +6,7 @@
<tr>
<th>Id</th>
<th>Package</th>
+ <th>Version</th>
<th>Submitted</th>
<th>Build time</th>
<th>Status</th>
@@ -15,6 +16,13 @@
<td><a href="{{url_for("coprs_ns.copr_build", username = build.copr.owner.name, coprname = build.copr.name, build_id = build.id)}}">{{ build.id }}</a></td>
<td>{{ build.pkgs|pkg_name }}</td>
<td>
+ {% if build.pkg_version %}
+ {{ build.pkg_version}}
+ {% else %}
+ -
+ {% endif %}
+ </td>
+ <td>
{% if g.user %}
{{ build.submitted_on|localized_time(g.user.timezone) }}
{% else %}
9 years, 10 months
[copr] master: [backend] skipped status and package details implemented (e2c8025)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit e2c80250579c9c9feed8037d6a2e4bb54933f68b
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Wed Jul 2 15:00:15 2014 +0200
[backend] skipped status and package details implemented
>---------------------------------------------------------------
backend/backend/dispatcher.py | 13 ++++++++++++-
backend/backend/mockremote.py | 31 ++++++++++++++++++++++++++++---
2 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/backend/backend/dispatcher.py b/backend/backend/dispatcher.py
index f1cdf01..34fd385 100644
--- a/backend/backend/dispatcher.py
+++ b/backend/backend/dispatcher.py
@@ -307,6 +307,10 @@ class Worker(multiprocessing.Process):
jobdata.user_id = build["user_id"]
jobdata.user_name = build["copr"]["owner"]["name"]
jobdata.copr_name = build["copr"]["name"]
+
+ jobdata.pkg_version = ""
+ jobdata.pkg_name = ""
+
return jobdata
# maybe we move this to the callback?
@@ -350,6 +354,8 @@ class Worker(multiprocessing.Process):
"ended_on": job.ended_on,
"status": job.status,
"chroot": job.chroot,
+ "pkg_version": job.pkg_version,
+ "pkg_name": job.pkg_name,
}
data = {"builds": [build]}
@@ -500,7 +506,12 @@ class Worker(multiprocessing.Process):
callback=mockremote.CliLogCallBack(
quiet=True, logfn=chrootlogfile))
- mr.build_pkgs(job.pkgs)
+ skipped, build_details = mr.build_pkgs(job.pkgs)
+
+ if skipped:
+ status = 5 # skipped
+
+ job.update(build_details)
except mockremote.MockRemoteError, e:
# record and break
diff --git a/backend/backend/mockremote.py b/backend/backend/mockremote.py
index 85954cd..a136843 100755
--- a/backend/backend/mockremote.py
+++ b/backend/backend/mockremote.py
@@ -389,6 +389,7 @@ class Builder(object):
# returns success_bool, out, err
success = False
+ build_details = {}
self.modify_base_buildroot()
# check if pkg is local or http
@@ -409,6 +410,24 @@ class Builder(object):
else:
dest = pkg
+ # get the package information
+ # TODO
+ # version
+ self.conn.module_name = "shell"
+ self.conn.module_args = "rpm -qp --qf \"%{VERSION}\n\" "+pkg
+ self.mockremote.callback.log("Getting package information: version")
+ results = self.conn.run()
+ if "contacted" in results:
+ build_details["pkg_version"] = results["contacted"].itervalues().next()[u"stdout"]
+
+ # name
+ self.conn.module_name = "shell"
+ self.conn.module_args = "rpm -qp --qf \"%{NAME}\n\" "+pkg
+ self.mockremote.callback.log("Getting package information: name")
+ results = self.conn.run()
+ if "contacted" in results:
+ build_details["pkg_name"] = results["contacted"].itervalues().next()[u"stdout"]
+
# construct the mockchain command
buildcmd = "{0} -r {1} -l {2} ".format(
mockchain, pipes.quote(self.chroot),
@@ -440,7 +459,7 @@ class Builder(object):
if is_err:
return (success, err_results.get("stdout", ""),
- err_results.get("stderr", ""))
+ err_results.get("stderr", ""), build_details)
# we know the command ended successfully but not if the pkg built
# successfully
@@ -458,7 +477,7 @@ class Builder(object):
if not is_err:
success = True
- return success, out, err
+ return success, out, err, build_details
def download(self, pkg, destdir):
# download the pkg to destdir using rsync + ssh
@@ -596,6 +615,9 @@ class MockRemote(object):
built_pkgs = []
downloaded_pkgs = {}
+ build_details = {}
+ skipped = False
+
try_again = True
to_be_built = pkgs
while try_again:
@@ -615,6 +637,7 @@ class MockRemote(object):
# check the destdir to see if these pkgs need to be built
if os.path.exists(p_path):
if os.path.exists(os.path.join(p_path, "success")):
+ skipped = True
self.callback.log(
"Skipping already built pkg {0}".format(
os.path.basename(pkg)))
@@ -628,7 +651,7 @@ class MockRemote(object):
# off to the builder object
# building
self.callback.start_build(pkg)
- b_status, b_out, b_err = self.builder.build(pkg)
+ b_status, b_out, b_err, build_details = self.builder.build(pkg)
self.callback.end_build(pkg)
# downloading
@@ -715,6 +738,8 @@ class MockRemote(object):
else:
try_again = False
+ return skipped, build_details
+
def parse_args(args):
9 years, 10 months
[copr] master: [cli] skipped state support (f5de93d)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit f5de93dcda4a54a62262d8d61055d89949f03c1e
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Wed Jul 2 09:12:58 2014 +0200
[cli] skipped state support
>---------------------------------------------------------------
cli/copr_cli/subcommands.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/cli/copr_cli/subcommands.py b/cli/copr_cli/subcommands.py
index 7f2215b..2d017a6 100644
--- a/cli/copr_cli/subcommands.py
+++ b/cli/copr_cli/subcommands.py
@@ -283,7 +283,7 @@ def build(copr, pkgs, memory, timeout, wait=True, result=None, chroots=None):
print(" {0} Build {2}: {1}".format(now.strftime("%H:%M:%S"), status, id))
prevstatus[id] = status
- if status in ["succeeded", "failed", "canceled"]:
+ if status in ["succeeded", "skipped", "failed", "canceled"]:
if result is not None:
result[id]['status'] = status
if status in ["failed"]:
9 years, 10 months
[copr] master: [frontend] skipped state support (2516fa8)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 2516fa8f4642086a18c5842d098e592adc75e883
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Wed Jul 2 09:12:43 2014 +0200
[frontend] skipped state support
>---------------------------------------------------------------
frontend/coprs_frontend/coprs/helpers.py | 3 ++-
.../coprs_frontend/coprs/logic/builds_logic.py | 3 ++-
frontend/coprs_frontend/coprs/models.py | 2 +-
frontend/coprs_frontend/coprs/static/copr.css | 8 ++++++++
frontend/coprs_frontend/coprs/templates/api.html | 2 ++
5 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/frontend/coprs_frontend/coprs/helpers.py b/frontend/coprs_frontend/coprs/helpers.py
index 7da895d..bb26265 100644
--- a/frontend/coprs_frontend/coprs/helpers.py
+++ b/frontend/coprs_frontend/coprs/helpers.py
@@ -62,7 +62,8 @@ class StatusEnum(object):
"succeeded": 1,
"canceled": 2,
"running": 3,
- "pending": 4}
+ "pending": 4,
+ "skipped": 5} # if there was this package built already
class Paginator(object):
diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py
index b665b10..2bd7b41 100644
--- a/frontend/coprs_frontend/coprs/logic/builds_logic.py
+++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py
@@ -187,7 +187,8 @@ class BuildsLogic(object):
last_build = (builds
.join(models.BuildChroot)
- .filter(models.BuildChroot.status == helpers.StatusEnum("succeeded"))
+ .filter((models.BuildChroot.status == helpers.StatusEnum("succeeded"))
+ or (models.BuildChroot.status == helpers.StatusEnum("skipped")))
.filter(models.Build.ended_on != None)
.order_by(models.Build.ended_on.desc())
).first()
diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py
index 2909f9c..601a7b0 100644
--- a/frontend/coprs_frontend/coprs/models.py
+++ b/frontend/coprs_frontend/coprs/models.py
@@ -274,7 +274,7 @@ class Build(db.Model, helpers.Serializer):
if self.canceled:
return helpers.StatusEnum("canceled")
- for state in ["failed", "running", "pending", "succeeded"]:
+ for state in ["failed", "running", "pending", "succeeded", "skipped"]:
if helpers.StatusEnum(state) in self.chroot_states:
return helpers.StatusEnum(state)
diff --git a/frontend/coprs_frontend/coprs/static/copr.css b/frontend/coprs_frontend/coprs/static/copr.css
index baa56ef..8fb91e9 100644
--- a/frontend/coprs_frontend/coprs/static/copr.css
+++ b/frontend/coprs_frontend/coprs/static/copr.css
@@ -331,6 +331,10 @@ tr.build-row-succeeded {
color: black;
}
+tr.build-row-skipped {
+ color: black;
+}
+
.build-pending {
color: #55b;
}
@@ -343,6 +347,10 @@ tr.build-row-succeeded {
color: #272;
}
+.build-skipped {
+ color: #272;
+}
+
.build-failed {
color: #c44;
}
diff --git a/frontend/coprs_frontend/coprs/templates/api.html b/frontend/coprs_frontend/coprs/templates/api.html
index 0424c06..8b9ef57 100644
--- a/frontend/coprs_frontend/coprs/templates/api.html
+++ b/frontend/coprs_frontend/coprs/templates/api.html
@@ -241,6 +241,7 @@ copr_url = https://copr.fedoraproject.org
<li>running</li>
<li>failed</li>
<li>succeeded</li>
+ <li>skipped</li>
<li>canceled</li>
</ul>
</li>
@@ -272,6 +273,7 @@ copr_url = https://copr.fedoraproject.org
<li>running</li>
<li>failed</li>
<li>succeeded</li>
+ <li>skipped</li>
<li>canceled</li>
</ul>
</li>
9 years, 10 months
[copr] master: Ansible playbok to generate frontend db documentation (b4badb3)
by asamalik@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit b4badb340ec51bf2e9c8b14d19a6cecee3f3fc39
Author: Adam Samalik <asamalik(a)redhat.com>
Date: Tue Jul 1 16:12:25 2014 +0200
Ansible playbok to generate frontend db documentation
>---------------------------------------------------------------
frontend/documentation/copr-db-documentation.yml | 41 ++++++++++++++++++++++
1 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/frontend/documentation/copr-db-documentation.yml b/frontend/documentation/copr-db-documentation.yml
new file mode 100644
index 0000000..da90ee9
--- /dev/null
+++ b/frontend/documentation/copr-db-documentation.yml
@@ -0,0 +1,41 @@
+---
+
+# Playbook to generate a database documentation of Copr frontend
+# Needs a Copr frontend instance with postgreSQL database
+# and root access with rsa (without password)
+#
+# Usage:
+# $ ansible-playbook -i SERVER-IP, copr-db-documentation.yml
+#
+# Output:
+# coprdb.html, coprdb.png and coprdb.dia in the same folder as your playbook is
+
+- name: generate copr db documentation
+ hosts: all
+ user: root
+ gather_facts: False
+
+ tasks:
+ - name: install packages
+ action: yum name=postgresql_autodoc state=latest
+
+ - name: generate database graph
+ shell: postgresql_autodoc -t dot -u copr-fe -d coprdb --password=coprpass
+
+ - name: transform it into png
+ shell: dot -Tpng coprdb.dot -o coprdb.png
+
+ - name: generate database html
+ shell: postgresql_autodoc -t html -u copr-fe -d coprdb --password=coprpass
+
+ - name: generate database dia
+ shell: postgresql_autodoc -t dia -u copr-fe -d coprdb --password=coprpass
+
+ - name: get the png file
+ fetch: src=/root/coprdb.png dest=./ flat=yes
+
+ - name: get the html file
+ fetch: src=/root/coprdb.html dest=./ flat=yes
+
+ - name: get the dia file
+ fetch: src=/root/coprdb.dia dest=./ flat=yes
9 years, 10 months