Merge ppa-dev-tools:job-class into ppa-dev-tools:main

Proposed by Bryce Harrington
Status: Merged
Merge reported by: Bryce Harrington
Merged at revision: 29e2c6593124656083bcfa933f30ba81ac15caa6
Proposed branch: ppa-dev-tools:job-class
Merge into: ppa-dev-tools:main
Diff against target: 713 lines (+683/-0)
5 files modified
.flake8 (+2/-0)
ppa/job.py (+183/-0)
tests/data/queues-20220822.json (+385/-0)
tests/data/running-20220822.json (+1/-0)
tests/test_job.py (+112/-0)
Reviewer Review Type Date Requested Status
Athos Ribeiro (community) Approve
Canonical Server Reporter Pending
Review via email: mp+428760@code.launchpad.net

Description of the change

Imports the Job class from lp-test-ppa into ppa-dev-tools, adds docs, tests, and a bit more refactoring.

This is not hooked up to any commands in the ppa cli itself, but there's a smoke test using snapshot data you can run:

    $ python3 ./ppa/job.py

The tests can be run as well:

    $ pytest-3 ./tests/test_job.py

To post a comment you must log in.
Revision history for this message
Athos Ribeiro (athos-ribeiro) wrote :

Nice work, Bryce :)

I left a couple inline comments, but this LGTM as is.

I am also wondering if instead of including the complete samples of the json files, including hand-crafted minimal samples of those would be enough. The reason for the question is that this change alone increased the project root size from <200kb to 1.9Mb (not counting git data here). While this shouldn't matter much ATM, I was wondering if there's any chance this could pile up in the future with new test additions.

review: Approve
Revision history for this message
Bryce Harrington (bryce) wrote :

> Nice work, Bryce :)
>
> I left a couple inline comments, but this LGTM as is.

Thanks!

> I am also wondering if instead of including the complete samples of the json
> files, including hand-crafted minimal samples of those would be enough. The
> reason for the question is that this change alone increased the project root
> size from <200kb to 1.9Mb (not counting git data here). While this shouldn't
> matter much ATM, I was wondering if there's any chance this could pile up in
> the future with new test additions.

Good point. Ironically I had started with hand-crafted snippets but switched to snapshots as being easier to add and more closely representative of actual usage. However, it may be better to just go ahead and add the code to download live data, and keep the local data snapshots trimmed to specific examples. You're right that over time this could pile up.

Revision history for this message
Bryce Harrington (bryce) wrote :

I've made the suggested changes, and trimmed down the data files. Will go ahead and land the branch.

Revision history for this message
Bryce Harrington (bryce) wrote :

Total 0 (delta 0), reused 0 (delta 0)
To git+ssh://git.launchpad.net/ppa-dev-tools
   6c1e1a8..8fcdc4f main -> main

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/.flake8 b/.flake8
0new file mode 1006440new file mode 100644
index 0000000..7da1f96
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,2 @@
1[flake8]
2max-line-length = 100
diff --git a/ppa/job.py b/ppa/job.py
0new file mode 1007553new file mode 100755
index 0000000..61d6fb2
--- /dev/null
+++ b/ppa/job.py
@@ -0,0 +1,183 @@
1#!/usr/bin/env python3
2# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3
4# Copyright (C) 2022 Authors
5#
6# Released under GNU GPLv2 or later, read the file 'LICENSE.GPLv2+' for
7# more information.
8#
9# Authors:
10# Bryce Harrington <bryce@canonical.com>
11
12"""An individual autopkgtest run"""
13
14from typing import Iterator
15import json
16
17# Global constants
18ARCHES = ["amd64", "s390x", "ppc64el", "arm64", "armhf", "riscv64"]
19URL_LPAPI = "https://api.launchpad.net/devel"
20URL_AUTOPKGTEST = "https://autopkgtest.ubuntu.com"
21
22
23class Job:
24 """An individual autopkgtest run that has not yet completed.
25
26 A Job will correspond to one Result object once it has completed.
27 """
28 def __init__(self, number, submit_time, source_package, series, arch,
29 triggers=None, ppas=None):
30 """Initializes a new Job object.
31
32 :param str number: Position within the waiting queue.
33 :param str submit_time: Timestamp when job was submitted.
34 :param str source_package: Source package containing the DEP8 tests to run.
35 :param str series: Codename of the Ubuntu release to run tests on.
36 :param str arch: Hardware architecture type to run tests on.
37 :param list[str] triggers: List of package/version triggers for the job.
38 :param list[str] ppas: List of PPAs to enable.
39 """
40 self.number = number
41 self.submit_time = submit_time
42 self.source_package = source_package
43 self.series = series
44 self.arch = arch
45 self.triggers = triggers or []
46 self.ppas = ppas or []
47
48 def __repr__(self) -> str:
49 """Machine-parsable unique representation of object.
50
51 :rtype: str
52 :returns: Official string representation of the object.
53 """
54 return (f'{self.__class__.__name__}('
55 f'source_package={self.source_package!r}, '
56 f'series={self.series!r}, '
57 f'arch={self.arch!r}'
58 f')')
59
60 def __str__(self) -> str:
61 """Human-readable summary of the object.
62
63 :rtype: str
64 :returns: Printable summary of the object.
65 """
66 return f"{self.source_package} {self.series} ({self.arch})"
67
68 @property
69 def request_url(self) -> str:
70 """Renders URL for requesting the testing run be started
71
72 :rtype: str
73 :returns: Full URL for invoking the test.
74 """
75 rel_str = f"release={self.series}"
76 arch_str = f"&arch={self.arch}"
77 pkg_str = f"&package={self.source_package}"
78 trigger_str = ''
79 for trigger in self.triggers:
80 trigger_str += f"&trigger={trigger}"
81 return f"{URL_AUTOPKGTEST}/request.cgi?{rel_str}{arch_str}{pkg_str}{trigger_str}"
82
83
84def get_running(response, series=None, ppa=None) -> Iterator[Job]:
85 """Returns iterator currently running autopkgtests for given criteria
86
87 Filters the list of running autopkgtest jobs by the given series
88 and/or ppa names, returning an iterator with matching results as Job
89 objects. If series and ppa are not provided, then returns all
90 results; if one or the other is provided, provides all available
91 results for that series or ppa.
92
93 :param HTTPResponse response: Context manager; the response from urlopen()
94 :param str series: The Ubuntu release codename criteria, or None.
95 :param str ppa: The PPA address criteria, or None.
96 :rtype: Iterator[Job]
97 :returns: Currently running jobs, if any, or an empty list on error
98 """
99 for pkg, jobs in json.loads(response.read().decode('utf-8')).items():
100 for handle in jobs:
101 for codename in jobs[handle]:
102 for arch, jobinfo in jobs[handle][codename].items():
103 triggers = jobinfo[0].get('triggers', None)
104 ppas = jobinfo[0].get('ppas', None)
105 submit_time = jobinfo[1]
106 job = Job(0, submit_time, pkg, codename, arch, triggers, ppas)
107 if (series and (series != job.series)) or (ppa and (ppa not in job.ppas)):
108 continue
109 yield job
110
111
112def get_waiting(response, series=None, ppa=None) -> Iterator[Job]:
113 """Returns iterator of queued autopkgtests for given criteria
114
115 Filters the list of autopkgtest jobs waiting for execution by the
116 given series and/or ppa names, returning an iterator with matching
117 results as Job objects. If series and ppa are not provided, then
118 returns all results; if one or the other is provided, provides all
119 available results for that series or ppa.
120
121 :param HTTPResponse response: Context manager; the response from urlopen()
122 :param str series: The Ubuntu release codename criteria, or None.
123 :param str ppa: The PPA address criteria, or None.
124 :rtype: Iterator[Job]
125 :returns: Currently waiting jobs, if any, or an empty list on error
126 """
127 for _, queue in json.loads(response.read().decode('utf-8')).items():
128 for codename in queue:
129 for arch in queue[codename]:
130 n = 0
131 for key in queue[codename][arch]:
132 if key == 'private job':
133 continue
134 (pkg, json_data) = key.split(maxsplit=1)
135 jobinfo = json.loads(json_data)
136 n += 1
137 triggers = jobinfo.get('triggers', None)
138 ppas = jobinfo.get('ppas', None)
139 job = Job(n, None, pkg, codename, arch, triggers, ppas)
140 if (series and (series != job.series)) or (ppa and (ppa not in job.ppas)):
141 continue
142 yield job
143
144
145if __name__ == "__main__":
146 import os
147 from urllib.request import urlopen
148
149 print("### Job class smoke test ###")
150
151 root_dir = os.path.realpath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..'))
152 jobinfo = {
153 'triggers': ['a/1', 'b/2.1', 'c/3.2.1'],
154 'ppas': ['ppa:me/myppa'],
155 }
156 job_1 = Job(
157 number=0,
158 submit_time='time',
159 source_package='my-package',
160 series='kinetic',
161 arch='amd64',
162 triggers=jobinfo.get('triggers', None),
163 ppas=jobinfo.get('ppas', None)
164 )
165 print(job_1)
166 print(f"triggers: {job_1.triggers}")
167 print(f"ppas: {job_1.ppas}")
168 print(f"request_url: {job_1.request_url}")
169 print()
170
171 ppa = "bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"
172
173 print("running:")
174 response = urlopen(f"file://{root_dir}/tests/data/running-20220822.json")
175 for job in get_running(response, 'kinetic', ppa):
176 print(job)
177 print()
178
179 print("waiting:")
180 response = urlopen(f"file://{root_dir}/tests/data/queues-20220822.json")
181 for job in get_waiting(response, 'kinetic', ppa):
182 print(job)
183
diff --git a/tests/data/queues-20220822.json b/tests/data/queues-20220822.json
0new file mode 100644184new file mode 100644
index 0000000..7844a74
--- /dev/null
+++ b/tests/data/queues-20220822.json
@@ -0,0 +1,385 @@
1{
2 "ubuntu": {
3 "trusty": {
4 "amd64": [],
5 "arm64": [],
6 "armhf": [],
7 "i386": [],
8 "ppc64el": []
9 },
10 "xenial": {
11 "amd64": [],
12 "arm64": [],
13 "armhf": [],
14 "i386": [],
15 "ppc64el": [],
16 "s390x": []
17 },
18 "bionic": {
19 "amd64": [],
20 "arm64": [],
21 "armhf": [],
22 "i386": [],
23 "ppc64el": [],
24 "s390x": []
25 },
26 "focal": {
27 "amd64": [],
28 "arm64": [],
29 "armhf": [],
30 "i386": [],
31 "ppc64el": [],
32 "s390x": []
33 },
34 "hirsute": {
35 "amd64": [],
36 "arm64": [],
37 "armhf": [],
38 "i386": [],
39 "ppc64el": [],
40 "s390x": []
41 },
42 "impish": {
43 "amd64": [],
44 "ppc64el": [],
45 "i386": [],
46 "armhf": [],
47 "arm64": [],
48 "s390x": []
49 },
50 "jammy": {
51 "amd64": [],
52 "arm64": [],
53 "i386": [],
54 "s390x": [],
55 "ppc64el": [],
56 "armhf": []
57 },
58 "kinetic": {
59 "ppc64el": [],
60 "arm64": [],
61 "s390x": [],
62 "armhf": [],
63 "i386": [],
64 "amd64": []
65 }
66 },
67 "huge": {
68 "trusty": {
69 "amd64": [],
70 "arm64": [],
71 "armhf": [],
72 "i386": [],
73 "ppc64el": []
74 },
75 "xenial": {
76 "amd64": [],
77 "arm64": [],
78 "armhf": [],
79 "i386": [],
80 "ppc64el": [],
81 "s390x": []
82 },
83 "bionic": {
84 "amd64": [],
85 "arm64": [],
86 "armhf": [],
87 "i386": [],
88 "ppc64el": [],
89 "s390x": []
90 },
91 "focal": {
92 "amd64": [],
93 "arm64": [],
94 "armhf": [],
95 "i386": [],
96 "ppc64el": [],
97 "s390x": []
98 },
99 "hirsute": {
100 "amd64": [],
101 "arm64": [],
102 "armhf": [],
103 "i386": [],
104 "ppc64el": [],
105 "s390x": []
106 },
107 "impish": {
108 "amd64": [],
109 "ppc64el": [],
110 "i386": [],
111 "armhf": [],
112 "arm64": [],
113 "s390x": []
114 },
115 "jammy": {
116 "amd64": [],
117 "arm64": [],
118 "i386": [],
119 "s390x": [],
120 "ppc64el": [],
121 "armhf": []
122 },
123 "kinetic": {
124 "ppc64el": [
125 "x11iraf\n{\"submit-time\": \"2022-08-22 07:50:13\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
126 "x11vnc\n{\"submit-time\": \"2022-08-22 07:50:13\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
127 "x264\n{\"submit-time\": \"2022-08-22 07:50:13\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
128 "x265\n{\"submit-time\": \"2022-08-22 07:50:14\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
129 "x42-plugins\n{\"submit-time\": \"2022-08-22 07:50:14\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
130 "xapian-core\n{\"submit-time\": \"2022-08-22 07:50:14\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
131 "xapian-omega\n{\"submit-time\": \"2022-08-22 07:50:14\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
132 "xautolock\n{\"submit-time\": \"2022-08-22 07:50:15\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
133 "xbrzscale\n{\"submit-time\": \"2022-08-22 07:50:15\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
134 "xchain\n{\"submit-time\": \"2022-08-22 07:50:15\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
135 "xcolorsel\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
136 "xdelta3\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
137 "xdemorse\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
138 "xdg-dbus-proxy\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
139 "xdg-desktop-portal\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
140 "xdp-tools\n{\"submit-time\": \"2022-08-22 07:50:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
141 "xerces-c\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
142 "xerial-sqlite-jdbc\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
143 "xeus-python\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
144 "xfig\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
145 "xflip\n{\"submit-time\": \"2022-08-22 07:50:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
146 "xgboost\n{\"submit-time\": \"2022-08-22 07:50:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
147 "xilinx-runtime\n{\"submit-time\": \"2022-08-22 07:50:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
148 "xlbiff\n{\"submit-time\": \"2022-08-22 07:50:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
149 "xml-security-c\n{\"submit-time\": \"2022-08-22 07:50:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
150 "xmltooling\n{\"submit-time\": \"2022-08-22 07:50:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
151 "xmobar\n{\"submit-time\": \"2022-08-22 07:50:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
152 "xmpp-dns\n{\"submit-time\": \"2022-08-22 07:50:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
153 "xorgxrdp\n{\"submit-time\": \"2022-08-22 07:50:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
154 "xpad\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
155 "xpra\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
156 "xq\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
157 "xrayutilities\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
158 "xrootconsole\n{\"submit-time\": \"2022-08-22 07:50:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
159 "xsel\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
160 "xsnow\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
161 "xtables-addons\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
162 "xtail\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
163 "xterm\n{\"submit-time\": \"2022-08-22 07:50:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
164 "xtermcontrol\n{\"submit-time\": \"2022-08-22 07:50:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
165 "xtrlock\n{\"submit-time\": \"2022-08-22 07:50:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
166 "x11vnc\n{\"submit-time\": \"2022-08-22 05:32:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
167 "x264\n{\"submit-time\": \"2022-08-22 05:32:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
168 "x265\n{\"submit-time\": \"2022-08-22 05:32:16\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
169 "x42-plugins\n{\"submit-time\": \"2022-08-22 05:32:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
170 "xapian-bindings\n{\"submit-time\": \"2022-08-22 05:32:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
171 "xapian-core\n{\"submit-time\": \"2022-08-22 05:32:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
172 "xapian-omega\n{\"submit-time\": \"2022-08-22 05:32:17\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
173 "xautolock\n{\"submit-time\": \"2022-08-22 05:32:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
174 "xautomation\n{\"submit-time\": \"2022-08-22 05:32:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
175 "xbrzscale\n{\"submit-time\": \"2022-08-22 05:32:18\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
176 "xchain\n{\"submit-time\": \"2022-08-22 05:32:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
177 "xdelta3\n{\"submit-time\": \"2022-08-22 05:32:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
178 "xdemorse\n{\"submit-time\": \"2022-08-22 05:32:19\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
179 "xdg-dbus-proxy\n{\"submit-time\": \"2022-08-22 05:32:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
180 "xdg-desktop-portal\n{\"submit-time\": \"2022-08-22 05:32:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
181 "xdp-tools\n{\"submit-time\": \"2022-08-22 05:32:20\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
182 "xerial-sqlite-jdbc\n{\"submit-time\": \"2022-08-22 05:32:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
183 "xeus-python\n{\"submit-time\": \"2022-08-22 05:32:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
184 "xfig\n{\"submit-time\": \"2022-08-22 05:32:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
185 "xflip\n{\"submit-time\": \"2022-08-22 05:32:21\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
186 "xfrisk\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
187 "xgboost\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
188 "xlbiff\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
189 "xli\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
190 "xml-security-c\n{\"submit-time\": \"2022-08-22 05:32:22\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
191 "xmltooling\n{\"submit-time\": \"2022-08-22 05:32:23\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
192 "xmobar\n{\"submit-time\": \"2022-08-22 05:32:23\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
193 "xmoto\n{\"submit-time\": \"2022-08-22 05:32:23\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
194 "xorgxrdp\n{\"submit-time\": \"2022-08-22 05:32:24\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
195 "xpa\n{\"submit-time\": \"2022-08-22 05:32:24\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
196 "xpad\n{\"submit-time\": \"2022-08-22 05:32:25\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
197 "xpra\n{\"submit-time\": \"2022-08-22 05:32:25\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
198 "xq\n{\"submit-time\": \"2022-08-22 05:32:25\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
199 "xrayutilities\n{\"submit-time\": \"2022-08-22 05:32:26\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
200 "xrootconsole\n{\"submit-time\": \"2022-08-22 05:32:26\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
201 "xsel\n{\"submit-time\": \"2022-08-22 05:32:26\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
202 "xsnow\n{\"submit-time\": \"2022-08-22 05:32:26\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
203 "xtables-addons\n{\"submit-time\": \"2022-08-22 05:32:27\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
204 "xtail\n{\"submit-time\": \"2022-08-22 05:32:27\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
205 "xterm\n{\"submit-time\": \"2022-08-22 05:32:27\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
206 "xtermcontrol\n{\"submit-time\": \"2022-08-22 05:32:28\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
207 "xtrlock\n{\"submit-time\": \"2022-08-22 05:32:28\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
208 "x11iraf\n{\"submit-time\": \"2022-08-22 07:25:42\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
209 "x264\n{\"submit-time\": \"2022-08-22 07:25:43\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
210 "x265\n{\"submit-time\": \"2022-08-22 07:25:44\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
211 "x42-plugins\n{\"submit-time\": \"2022-08-22 07:25:45\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
212 "xapian-bindings\n{\"submit-time\": \"2022-08-22 07:25:46\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
213 "xapian-core\n{\"submit-time\": \"2022-08-22 07:25:46\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
214 "xapian-omega\n{\"submit-time\": \"2022-08-22 07:25:46\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
215 "xautomation\n{\"submit-time\": \"2022-08-22 07:25:47\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
216 "xbrzscale\n{\"submit-time\": \"2022-08-22 07:25:47\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
217 "xchain\n{\"submit-time\": \"2022-08-22 07:25:48\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
218 "xcolorsel\n{\"submit-time\": \"2022-08-22 07:25:48\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
219 "xdelta3\n{\"submit-time\": \"2022-08-22 07:25:48\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
220 "xdemorse\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
221 "xdg-dbus-proxy\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
222 "xdg-desktop-portal\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
223 "xdp-tools\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
224 "xerces-c\n{\"submit-time\": \"2022-08-22 07:25:49\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
225 "xerial-sqlite-jdbc\n{\"submit-time\": \"2022-08-22 07:25:50\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
226 "xfig\n{\"submit-time\": \"2022-08-22 07:25:50\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
227 "xflip\n{\"submit-time\": \"2022-08-22 07:25:50\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
228 "xfrisk\n{\"submit-time\": \"2022-08-22 07:25:50\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
229 "xgboost\n{\"submit-time\": \"2022-08-22 07:25:51\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
230 "xlbiff\n{\"submit-time\": \"2022-08-22 07:25:51\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
231 "xli\n{\"submit-time\": \"2022-08-22 07:25:51\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
232 "xml-security-c\n{\"submit-time\": \"2022-08-22 07:25:51\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
233 "xmltooling\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
234 "xmobar\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
235 "xmoto\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
236 "xorgxrdp\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
237 "xpa\n{\"submit-time\": \"2022-08-22 07:25:52\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
238 "xpad\n{\"submit-time\": \"2022-08-22 07:25:53\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
239 "xpra\n{\"submit-time\": \"2022-08-22 07:25:53\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
240 "xq\n{\"submit-time\": \"2022-08-22 07:25:53\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
241 "xrayutilities\n{\"submit-time\": \"2022-08-22 07:25:53\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
242 "xrootconsole\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
243 "xsel\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
244 "xsnow\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
245 "xtables-addons\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
246 "xtail\n{\"submit-time\": \"2022-08-22 07:25:54\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
247 "xterm\n{\"submit-time\": \"2022-08-22 07:25:55\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
248 "xtermcontrol\n{\"submit-time\": \"2022-08-22 07:25:55\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}",
249 "xtrlock\n{\"submit-time\": \"2022-08-22 07:25:55\", \"triggers\": [\"glibc/2.36-0ubuntu2\", \"cross-toolchain-base/59ubuntu6\", \"glib2.0/2.73.3-1\", \"tracker/3.3.3-1\"]}"
250 ]
251 }
252 },
253 "ppa": {
254 "trusty": {
255 "amd64": [],
256 "arm64": [],
257 "armhf": [],
258 "i386": [],
259 "ppc64el": []
260 },
261 "xenial": {
262 "amd64": [],
263 "arm64": [],
264 "armhf": [],
265 "i386": [],
266 "ppc64el": [],
267 "s390x": []
268 },
269 "bionic": {
270 "amd64": [],
271 "arm64": [],
272 "armhf": [],
273 "i386": [],
274 "ppc64el": [],
275 "s390x": []
276 },
277 "focal": {
278 "amd64": [],
279 "arm64": [],
280 "armhf": [],
281 "i386": [],
282 "ppc64el": [],
283 "s390x": []
284 },
285 "hirsute": {
286 "amd64": [],
287 "arm64": [],
288 "armhf": [],
289 "i386": [],
290 "ppc64el": [],
291 "s390x": []
292 },
293 "impish": {
294 "amd64": [],
295 "ppc64el": [],
296 "i386": [],
297 "armhf": [],
298 "arm64": [],
299 "s390x": []
300 },
301 "jammy": {
302 "amd64": [],
303 "arm64": [],
304 "i386": [],
305 "s390x": [],
306 "ppc64el": [],
307 "armhf": []
308 },
309 "kinetic": {
310 "ppc64el": [],
311 "arm64": [],
312 "s390x": [],
313 "armhf": [
314 "dovecot {\"all-proposed\": \"1\", \"ppas\": [\"bryce/dovecot-merge-v1e2.3.19.1adfsg1-2\"], \"requester\": \"bryce\", \"submit-time\": \"2022-08-23 05:02:46\", \"triggers\": [\"dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1\"]}"
315 ],
316 "i386": [],
317 "amd64": []
318 }
319 },
320 "upstream": {
321 "trusty": {
322 "amd64": [],
323 "arm64": [],
324 "armhf": [],
325 "i386": [],
326 "ppc64el": []
327 },
328 "xenial": {
329 "amd64": [],
330 "arm64": [],
331 "armhf": [],
332 "i386": [],
333 "ppc64el": [],
334 "s390x": []
335 },
336 "bionic": {
337 "amd64": [],
338 "arm64": [],
339 "armhf": [],
340 "i386": [],
341 "ppc64el": [],
342 "s390x": []
343 },
344 "focal": {
345 "amd64": [],
346 "arm64": [],
347 "armhf": [],
348 "i386": [],
349 "ppc64el": [],
350 "s390x": []
351 },
352 "hirsute": {
353 "amd64": [],
354 "arm64": [],
355 "armhf": [],
356 "i386": [],
357 "ppc64el": [],
358 "s390x": []
359 },
360 "impish": {
361 "amd64": [],
362 "ppc64el": [],
363 "i386": [],
364 "armhf": [],
365 "arm64": [],
366 "s390x": []
367 },
368 "jammy": {
369 "amd64": [],
370 "arm64": [],
371 "i386": [],
372 "s390x": [],
373 "ppc64el": [],
374 "armhf": []
375 },
376 "kinetic": {
377 "ppc64el": [],
378 "arm64": [],
379 "s390x": [],
380 "armhf": [],
381 "i386": [],
382 "amd64": []
383 }
384 }
385}
diff --git a/tests/data/running-20220822.json b/tests/data/running-20220822.json
0new file mode 100644386new file mode 100644
index 0000000..76d677f
--- /dev/null
+++ b/tests/data/running-20220822.json
@@ -0,0 +1 @@
1{"systemd-upstream": {"build-git_https://salsa.debian.org/systemd-team/systemd.git#upstream-ci;env_['CFLAGS=-O0', 'DEB_BUILD_PROFILES=noudeb', 'TEST_UPSTREAM=1', 'CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true', 'UPSTREAM_PULL_REQUEST=24405', 'GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893'];ppas_['upstream-systemd-ci/systemd-ci'];submit-time_2022-08-23 03:27:19;": {"focal": {"arm64": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true", "UPSTREAM_PULL_REQUEST=24405", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-23 03:27:19"}, 5219, "\tRenaming libudev1-dbgsym_251.1398.gf315d476c6.0_arm64.deb to libudev1-dbgsym_251.1398.gf315d476c6.0_arm64.ddeb\ndpkg-deb: building package 'libudev-dev' in '../libudev-dev_251.1398.gf315d476c6.0_arm64.deb'.\ndpkg-deb: building package 'systemd-standalone-sysusers' in '../systemd-standalone-sysusers_251.1398.gf315d476c6.0_arm64.deb'.\ndpkg-deb: building package 'systemd-standalone-sysusers-dbgsym' in 'debian/.debhelper/scratch-space/build-systemd-standalone-sysusers/systemd-standalone-sysusers-dbgsym_251.1398.gf315d476c6.0_arm64.deb'.\n\tRenaming systemd-standalone-sysusers-dbgsym_251.1398.gf315d476c6.0_arm64.deb to systemd-standalone-sysusers-dbgsym_251.1398.gf315d476c6.0_arm64.ddeb\ndpkg-deb: building package 'systemd-standalone-tmpfiles' in '../systemd-standalone-tmpfiles_251.1398.gf315d476c6.0_arm64.deb'.\ndpkg-deb: building package 'systemd-standalone-tmpfiles-dbgsym' in 'debian/.debhelper/scratch-space/build-systemd-standalone-tmpfiles/systemd-standalone-tmpfiles-dbgsym_251.1398.gf315d476c6.0_arm64.deb'.\n\tRenaming systemd-standalone-tmpfiles-dbgsym_251.1398.gf315d476c6.0_arm64.deb to systemd-standalone-tmpfiles-dbgsym_251.1398.gf315d476c6.0_arm64.ddeb\ndpkg-deb: building package 'systemd-oomd' in '../systemd-oomd_251.1398.gf315d476c6.0_arm64.deb'.\ndpkg-deb: building package 'systemd-oomd-dbgsym' in 'debian/.debhelper/scratch-space/build-systemd-oomd/systemd-oomd-dbgsym_251.1398.gf315d476c6.0_arm64.deb'.\n\tRenaming systemd-oomd-dbgsym_251.1398.gf315d476c6.0_arm64.deb to systemd-oomd-dbgsym_251.1398.gf315d476c6.0_arm64.ddeb\n dpkg-genbuildinfo --build=binary\n dpkg-genchanges --build=binary >../systemd_251.2-1_arm64.changes\ndpkg-genchanges: info: binary-only upload (no source code included)\n dpkg-source --after-build .\ndpkg-buildpackage: info: binary-only upload (no source included)\nautopkgtest [04:59:39]: test timedated: preparing testbed\n"], "s390x": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true", "UPSTREAM_PULL_REQUEST=24405", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-23 03:27:19"}, 5249, "[860/2304] cc -o systemd-user-runtime-dir 'systemd-user-runtime-dir@exe/src_login_user-runtime-dir.c.o' -flto -Wl,--as-needed -Wl,--no-undefined -pie -Wl,--fatal-warnings -Wl,-z,now -Wl,-z,relro -fstack-protector -Wl,--warn-common -Wl,--gc-sections -g -O2 -fdebug-prefix-map=/tmp/autopkgtest.UNl3GD/build.uT0/systemd=. -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--start-group src/shared/libsystemd-shared-251.so -Wl,--end-group '-Wl,-rpath,$ORIGIN/src/shared:XXXXXXXXXXXXXX' -Wl,-rpath-link,/tmp/autopkgtest.UNl3GD/build.uT0/systemd/build-deb/src/shared\n"]}}, "build-git_https://salsa.debian.org/systemd-team/systemd.git#upstream-ci;env_['CFLAGS=-O0', 'DEB_BUILD_PROFILES=noudeb', 'TEST_UPSTREAM=1', 'CONFFLAGS_UPSTREAM=--werror', 'UPSTREAM_PULL_REQUEST=24405', 'GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893'];ppas_['upstream-systemd-ci/systemd-ci'];submit-time_2022-08-23 03:27:12;": {"focal": {"ppc64el": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror", "UPSTREAM_PULL_REQUEST=24405", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-23 03:27:12"}, 5156, "+ timeout --foreground 300 /bin/qemu-system-ppc64 -smp 4 -net none -m 512M -nographic -kernel /boot/vmlinux-5.4.0-124-generic -drive format=raw,cache=unsafe,file=/var/tmp/systemd-test.NKw8hr/default.img -device virtio-rng-pci,max-bytes=1024,period=1000 -initrd /boot/initrd.img-5.4.0-124-generic -append 'root=LABEL=systemd_boot rw raid=noautodetect rd.luks=0 loglevel=2 init=/lib/systemd/systemd console=hvc0 SYSTEMD_UNIT_PATH=/usr/lib/systemd/tests/testdata/testsuite-09.units:/usr/lib/systemd/tests/testdata/units: systemd.unit=testsuite.target systemd.wants=testsuite-09.service systemd.wants=end.service'\nqemu-system-ppc64: warning: TCG doesn't support requested feature, cap-cfpc=workaround\nqemu-system-ppc64: warning: TCG doesn't support requested feature, cap-sbbc=workaround\nqemu-system-ppc64: warning: TCG doesn't support requested feature, cap-ibs=workaround\n\n\r\nSLOF\u001b[0m\u001b[?25l **********************************************************************\r\n\u001b[1mQEMU Starting\r\n\u001b[0m Build Date = Jan 31 2020 20:27:09\r\n FW Version = buildd@ release 20191209\r\n Press \"s\" to enter Open Firmware.\r\r\n\r\r\n\u001b[0m\u001b[?25hC0000\rC0100\rC0120\rC0140\rC0200\rC0240\rC0260\rC02E0\rC0300\rC0320\rC0340\rC0360\rC0370\rC0380\rC0371\rC0373\rC0374\rC03F0\rC0400\rC0480\rC04C0\rC04D0\rC0500\rPopulating /vdevice methods\r\nPopulating /vdevice/vty@71000000\r\nPopulating /vdevice/nvram@71000001\r\nPopulating /vdevice/v-scsi@71000002\r\n SCSI: Looking for devices\r\n 8000000000000000 DISK : \"QEMU QEMU HARDDISK 2.5+\"\r\n 8200000000000000 CD-ROM : \"QEMU QEMU CD-ROM 2.5+\"\r\nC05A0\rPopulating /pci@800000020000000\r\n 00 0000 (D) : 1234 1111 qemu vga\r\n 00 0800 (D) : 1033 0194 serial bus [ usb-xhci ]\r\n 00 1000 (D) : 1af4 1005 legacy-device*\r\nC0600\rC06C0\rC0700\rC0800\rC0880\rNo NVRAM common partition, re-initializing...\r\nC0890\rC08A0\rC08A8\rInstalling QEMU fb\r\n\r\n\r\n\r\nC08B0\rScanning USB \r\n XHCI: Initializing\r\n USB Keyboard \r\n"]}}, "build-git_https://salsa.debian.org/systemd-team/systemd.git#upstream-ci;env_['CFLAGS=-O0', 'DEB_BUILD_PROFILES=noudeb', 'TEST_UPSTREAM=1', 'CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true', 'UPSTREAM_PULL_REQUEST=24405', 'GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893'];ppas_['upstream-systemd-ci/systemd-ci'];submit-time_2022-08-23 03:27:12;": {"focal": {"amd64": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true", "UPSTREAM_PULL_REQUEST=24405", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/f315d476c60ca7e5458a8db995cb8a4094569893"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-23 03:27:12"}, 5137, "[ 263.470842] testsuite-02.sh[33]: test-conf-files OK\r\n[ 263.479534] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-hmac'\r\n[ 263.491161] testsuite-02.sh[33]: test-hmac OK\r\n[ 263.500096] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-set-disable-mempool'\r\n[ 263.511745] testsuite-02.sh[33]: test-set-disable-mempool OK\r\n[ 263.520582] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-libudev-sym'\r\n[ 263.532425] testsuite-02.sh[33]: test-libudev-sym OK\r\n[ 263.542344] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-udev-util'\r\n[ 263.554598] testsuite-02.sh[33]: test-udev-util OK\r\n[ 263.564466] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-network-generator-conversion.sh'\r\n[ 263.598931] testsuite-02.sh[33]: test-network-generator-conversion.sh OK\r\n[ 263.608357] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-lldp-rx'\r\n[ 263.620026] testsuite-02.sh[33]: test-lldp-rx OK\r\n[ 263.629083] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-ether-addr-util'\r\n[ 263.640881] testsuite-02.sh[33]: test-ether-addr-util OK\r\n[ 263.649836] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-watch-pid'\r\n[ 263.682230] testsuite-02.sh[33]: test-watch-pid OK\r\n[ 263.706128] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-libsystemd-sym'\r\n[ 263.718171] testsuite-02.sh[33]: test-libsystemd-sym OK\r\n[ 263.728677] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-fido-id-desc'\r\n[ 263.740393] testsuite-02.sh[33]: test-fido-id-desc OK\r\n[ 263.749484] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-sigbus'\r\n[ 263.761337] testsuite-02.sh[33]: test-sigbus OK\r\n[ 263.770099] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-env-util'\r\n[ 263.781948] testsuite-02.sh[33]: test-env-util OK\r\n[ 263.791839] testsuite-02.sh[33]: Executing test '/usr/lib/systemd/tests/test-random-util'\r\n"]}}, "build-git_https://salsa.debian.org/systemd-team/systemd.git#upstream-ci;env_['CFLAGS=-O0', 'DEB_BUILD_PROFILES=noudeb', 'TEST_UPSTREAM=1', 'CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true', 'UPSTREAM_PULL_REQUEST=24351', 'GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/02c2f7ea526b414f0e83903d9cb77b364340cd22'];ppas_['upstream-systemd-ci/systemd-ci'];submit-time_2022-08-22 21:56:53;": {"focal": {"s390x": [{"build-git": "https://salsa.debian.org/systemd-team/systemd.git#upstream-ci", "env": ["CFLAGS=-O0", "DEB_BUILD_PROFILES=noudeb", "TEST_UPSTREAM=1", "CONFFLAGS_UPSTREAM=--werror -Dslow-tests=true", "UPSTREAM_PULL_REQUEST=24351", "GITHUB_STATUSES_URL=https://api.github.com/repos/systemd/systemd/statuses/02c2f7ea526b414f0e83903d9cb77b364340cd22"], "ppas": ["upstream-systemd-ci/systemd-ci"], "submit-time": "2022-08-22 21:56:53"}, 5255, "[847/2304] cc -Isystemd-resolved@exe -I. -I.. -Isrc/basic -I../src/basic -Isrc/fundamental -I../src/fundamental -Isrc/systemd -I../src/systemd -I../ -I../src/libsystemd/sd-bus -I../src/libsystemd/sd-device -I../src/libsystemd/sd-event -I../src/libsystemd/sd-hwdb -I../src/libsystemd/sd-id128 -I../src/libsystemd/sd-journal -I../src/libsystemd/sd-netlink -I../src/libsystemd/sd-network -I../src/libsystemd/sd-resolve -Isrc/shared -I../src/shared -Isrc/resolve -I../src/resolve -flto -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Werror -std=gnu11 -Wno-format-signedness -Wno-missing-field-initializers -Wno-unused-parameter -Wdate-time -Wendif-labels -Werror=format=2 -Werror=implicit-function-declaration -Werror=incompatible-pointer-types -Werror=int-conversion -Werror=overflow -Werror=override-init -Werror=return-type -Werror=shift-count-overflow -Werror=shift-overflow=2 -Werror=undef -Wfloat-equal -Wimplicit-fallthrough=5 -Winit-self -Wlogical-op -Wmissing-include-dirs -Wmissing-noreturn -Wnested-externs -Wold-style-definition -Wpointer-arith -Wredundant-decls -Wshadow -Wstrict-aliasing=2 -Wstrict-prototypes -Wsuggest-attribute=noreturn -Wunused-function -Wwrite-strings -Wno-maybe-uninitialized -Wno-unused-result -Werror=missing-declarations -Werror=missing-prototypes -fdiagnostics-show-option -fno-common -fno-strict-aliasing -fstack-protector -fstack-protector-strong -fvisibility=hidden --param=ssp-buffer-size=4 -ffunction-sections -fdata-sections -Werror=shadow -include config.h -g -O2 -fdebug-prefix-map=/tmp/autopkgtest.b8jMMa/build.QI1/systemd=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIE -pthread -MD -MQ 'systemd-resolved@exe/src_resolve_resolved.c.o' -MF 'systemd-resolved@exe/src_resolve_resolved.c.o.d' -o 'systemd-resolved@exe/src_resolve_resolved.c.o' -c ../src/resolve/resolved.c\n"]}}}, "dovecot": {"ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 04:56:40;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"amd64": [{"ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 04:56:40", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 270, "Unpacking mokutil (0.6.0-2) over (0.4.0-1ubuntu2) ...\r\nPreparing to unpack .../18-python3-distutils_3.10.6-1_all.deb ...\r\nUnpacking python3-distutils (3.10.6-1) over (3.10.5-2ubuntu2) ...\r\nPreparing to unpack .../19-python3-lib2to3_3.10.6-1_all.deb ...\r\nUnpacking python3-lib2to3 (3.10.6-1) over (3.10.5-2ubuntu2) ...\r\nSetting up libkeyutils1:amd64 (1.6.3-1) ...\r\nSetting up libtirpc-common (1.3.3+ds-1) ...\r\nSetting up libssl3:amd64 (3.0.5-2ubuntu1) ...\r\nSetting up ubuntu-standard (1.489) ...\r\nSetting up libappstream4:amd64 (0.15.5-1) ...\r\nSetting up libsasl2-modules-db:amd64 (2.1.28+dfsg-6ubuntu2) ...\r\nSetting up libsigsegv2:amd64 (2.14-1ubuntu1) ...\r\nSetting up usrmerge (29ubuntu1) ...\r\nSetting up libsasl2-2:amd64 (2.1.28+dfsg-6ubuntu2) ...\r\nSetting up openssl (3.0.5-2ubuntu1) ...\r\nInstalling new version of config file /etc/ssl/openssl.cnf ...\r\nSetting up libpython3-stdlib:amd64 (3.10.6-1) ...\r\nSetting up initramfs-tools-bin (0.140ubuntu16) ...\r\nSetting up libtirpc3:amd64 (1.3.3+ds-1) ...\r\nSetting up mokutil (0.6.0-2) ...\r\nSetting up libsasl2-modules:amd64 (2.1.28+dfsg-6ubuntu2) ...\r\nSetting up python3 (3.10.6-1) ...\r\nSetting up initramfs-tools-core (0.140ubuntu16) ...\r\nSetting up python3-lib2to3 (3.10.6-1) ...\r\nSetting up python3-distutils (3.10.6-1) ...\r\nSetting up initramfs-tools (0.140ubuntu16) ...\r\nupdate-initramfs: deferring update (trigger activated)\r\nSetting up ubuntu-minimal (1.489) ...\r\nSetting up python3-gdbm:amd64 (3.10.6-1) ...\r\nProcessing triggers for man-db (2.10.2-2) ...\r\nProcessing triggers for libc-bin (2.35-0ubuntu3) ...\r\nProcessing triggers for initramfs-tools (0.140ubuntu16) ...\r\nupdate-initramfs: Generating /boot/initrd.img-5.15.0-27-generic\r\nNo lz4 in /usr/bin:/sbin:/bin, using gzip\r\nReading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\nautopkgtest [05:01:10]: rebooting testbed after setup commands that affected boot\n"]}}, "ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 04:59:38;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"s390x": [{"ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 04:59:38", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 130, "autopkgtest [04:59:44]: git checkout: 14935a6 Merge branch 'cross-arch-architecture-filtering'\nautopkgtest [04:59:44]: host juju-4d1272-prod-proposed-migration-9; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.0mwj_par/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-9@bos01-s390x-4.secgroup --name adt-kinetic-s390x-dovecot-20220823-045944-juju-4d1272-prod-proposed-migration-9 --image adt/ubuntu-kinetic-s390x-server --keyname testbed-juju-4d1272-prod-proposed-migration-9 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}, "ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 05:00:23;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"armhf": [{"ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 05:00:23", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 80, "autopkgtest [05:00:26]: starting date: 2022-08-23\nautopkgtest [05:00:26]: git checkout: 167b209 lxd: Increase various timeouts\nautopkgtest [05:00:26]: host juju-4d1272-prod-proposed-migration-5; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.70eb48qe/out --timeout-copy=6000 --setup-commands 'sed -i \"s/ports.ubuntu.com/ftpmaster.internal/; s/ubuntu-ports/ubuntu/\" /etc/apt/sources.list `ls /etc/apt/sources.list.d/*.list 2>/dev/null || true`; ln -s /dev/null /etc/systemd/system/bluetooth.service; printf \"http_proxy=http://squid.internal:3128\\nhttps_proxy=http://squid.internal:3128\\nno_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24\\n\" >> /etc/environment' --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- lxd -r lxd-armhf-10.44.124.77 lxd-armhf-10.44.124.77:autopkgtest/ubuntu/kinetic/armhf\nautopkgtest [05:01:35]: @@@@@@@@@@@@@@@@@@@@ test bed setup\n"]}}, "ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 04:59:40;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"ppc64el": [{"ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 04:59:40", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 80, "autopkgtest [05:00:31]: git checkout: 14935a6 Merge branch 'cross-arch-architecture-filtering'\nautopkgtest [05:00:31]: host juju-4d1272-prod-proposed-migration-4; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.0gq45tvi/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-4@bos02-ppc64el-9.secgroup --name adt-kinetic-ppc64el-dovecot-20220823-050031-juju-4d1272-prod-proposed-migration-4 --image adt/ubuntu-kinetic-ppc64el-server --keyname testbed-juju-4d1272-prod-proposed-migration-4 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}, "all-proposed_1;ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 05:00:18;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"s390x": [{"all-proposed": "1", "ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 05:00:18", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 70, "autopkgtest [05:00:39]: host juju-4d1272-prod-proposed-migration-4; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.dkxt87g0/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-pocket=proposed --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-4@bos01-s390x-7.secgroup --name adt-kinetic-s390x-dovecot-20220823-050039-juju-4d1272-prod-proposed-migration-4 --image adt/ubuntu-kinetic-s390x-server --keyname testbed-juju-4d1272-prod-proposed-migration-4 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}, "all-proposed_1;ppas_['bryce/dovecot-merge-v1e2.3.19.1adfsg1-2'];requester_bryce;submit-time_2022-08-23 05:00:17;triggers_['dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1'];": {"kinetic": {"amd64": [{"all-proposed": "1", "ppas": ["bryce/dovecot-merge-v1e2.3.19.1adfsg1-2"], "requester": "bryce", "submit-time": "2022-08-23 05:00:17", "triggers": ["dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1"]}, 50, "autopkgtest [05:00:56]: host juju-4d1272-prod-proposed-migration-4; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.7yvknlf_/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --setup-commands 'apt-key adv --keyserver keyserver.ubuntu.com --recv-key 510DE9AC846B40EB94EDB3AEFBB49579B75FECB0' --setup-commands 'REL=$(sed -rn \"/^(deb|deb-src) .*(ubuntu.com|ftpmaster)/ { s/^[^ ]+ +(\\[.*\\] *)?[^ ]* +([^ -]+) +.*$/\\2/p; q }\" /etc/apt/sources.list); echo \"deb http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" > /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list; echo \"deb-src http://ppa.launchpad.net/bryce/dovecot-merge-v1e2.3.19.1adfsg1-2/ubuntu $REL main\" >> /etc/apt/sources.list.d/autopkgtest-bryce-dovecot-merge-v1e2.3.19.1adfsg1-2.list;' --apt-pocket=proposed --apt-upgrade dovecot --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=dovecot/1:2.3.19.1+dfsg1-2ubuntu2~kinetic1' -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-4@lgw01-5.secgroup --name adt-kinetic-amd64-dovecot-20220823-050056-juju-4d1272-prod-proposed-migration-4 --image adt/ubuntu-kinetic-amd64-server --keyname testbed-juju-4d1272-prod-proposed-migration-4 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}}, "r-cran-pheatmap": {"submit-time_2022-08-23 00:34:17;triggers_['r-cran-scales/1.2.1-1'];": {"kinetic": {"amd64": [{"submit-time": "2022-08-23 00:34:17", "triggers": ["r-cran-scales/1.2.1-1"]}, 10, "autopkgtest [05:01:42]: starting date: 2022-08-23\nautopkgtest [05:01:43]: git checkout: 14935a6 Merge branch 'cross-arch-architecture-filtering'\nautopkgtest [05:01:43]: host juju-4d1272-prod-proposed-migration-4; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.8654qrvj/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --apt-pocket=proposed=src:r-cran-scales --apt-upgrade r-cran-pheatmap --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=r-cran-scales/1.2.1-1 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-4@lgw01-29.secgroup --name adt-kinetic-amd64-r-cran-pheatmap-20220823-050142-juju-4d1272-prod-proposed-migration-4 --image adt/ubuntu-kinetic-amd64-server --keyname testbed-juju-4d1272-prod-proposed-migration-4 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}}, "r-cran-plotly": {"submit-time_2022-08-23 00:34:17;triggers_['r-cran-scales/1.2.1-1'];": {"kinetic": {"amd64": [{"submit-time": "2022-08-23 00:34:17", "triggers": ["r-cran-scales/1.2.1-1"]}, 10, "autopkgtest [05:01:45]: starting date: 2022-08-23\nautopkgtest [05:01:45]: git checkout: 14935a6 Merge branch 'cross-arch-architecture-filtering'\nautopkgtest [05:01:45]: host juju-4d1272-prod-proposed-migration-9; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.mrd6nrdp/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --setup-commands /home/ubuntu/autopkgtest/setup-commands/setup-testbed --apt-pocket=proposed=src:r-cran-scales --apt-upgrade r-cran-plotly --timeout-short=300 --timeout-copy=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=r-cran-scales/1.2.1-1 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest --security-groups autopkgtest-juju-4d1272-prod-proposed-migration-9@lgw01-2.secgroup --name adt-kinetic-amd64-r-cran-plotly-20220823-050145-juju-4d1272-prod-proposed-migration-9 --image adt/ubuntu-kinetic-amd64-server --keyname testbed-juju-4d1272-prod-proposed-migration-9 --net-id=net_prod-proposed-migration -e TERM=linux -e ''\"'\"'http_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'https_proxy=http://squid.internal:3128'\"'\"'' -e ''\"'\"'no_proxy=127.0.0.1,127.0.1.1,localhost,localdomain,novalocal,internal,archive.ubuntu.com,ports.ubuntu.com,security.ubuntu.com,ddebs.ubuntu.com,changelogs.ubuntu.com,launchpad.net,10.24.0.0/24'\"'\"'' --mirror=http://ftpmaster.internal/ubuntu/\n"]}}}}
diff --git a/tests/test_job.py b/tests/test_job.py
0new file mode 1006442new file mode 100644
index 0000000..d9a9967
--- /dev/null
+++ b/tests/test_job.py
@@ -0,0 +1,112 @@
1#!/usr/bin/env python3
2# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
3
4# Author: Bryce Harrington <bryce@canonical.com>
5#
6# Copyright (C) 2022 Bryce W. Harrington
7#
8# Released under GNU GPLv2 or later, read the file 'LICENSE.GPLv2+' for
9# more information.
10
11"""Job class tests"""
12
13import os
14import sys
15
16sys.path.insert(0, os.path.realpath(
17 os.path.join(os.path.dirname(__file__), "..")))
18
19from ppa.job import Job, get_running, get_waiting
20
21
22class ResponseMock:
23 def __init__(self, text):
24 self._text = text.encode('utf-8')
25
26 def read(self):
27 return self._text
28
29
30def test_object():
31 """Checks that Job objects can be instantiated."""
32 job = Job(0, '', '', '', '')
33 assert job
34
35
36def test_init():
37 job = Job(0, 'a', 'b', 'c', 'd')
38 assert job.number == 0
39 assert job.submit_time == 'a'
40 assert job.source_package == 'b'
41 assert job.series == 'c'
42 assert job.arch == 'd'
43
44
45def test_repr():
46 """Checks Job object machine-parsable representation."""
47 job = Job(0, 'a', 'b', 'c', 'd')
48 assert repr(job) == "Job(source_package='b', series='c', arch='d')"
49
50
51def test_str():
52 """Checks Job object textual presentation."""
53 job = Job(0, 'a', 'b', 'c', 'd')
54 assert f"{job}" == 'b c (d)'
55
56
57def test_triggers():
58 """Checks Job object's triggers."""
59 job = Job(0, '', '', '', '', triggers=['a/1', 'b/2'])
60 assert job.triggers == ['a/1', 'b/2']
61
62
63def test_ppas():
64 """Checks Job object textual presentation."""
65 job = Job(0, '', '', '', '', ppas=['ppa:a/b', 'ppa:c/d'])
66 assert job.ppas == ['ppa:a/b', 'ppa:c/d']
67
68
69def test_request_url():
70 """Checks Job object textual presentation."""
71 jobinfo = {
72 'triggers': ['t/1'],
73 'ppas': ['ppa:a/b', 'ppa:c/d']
74 }
75 job = Job(0, 'a', 'b', 'c', 'd', jobinfo['triggers'], jobinfo['ppas'])
76 assert job.request_url == "https://autopkgtest.ubuntu.com/request.cgi?release=c&arch=d&package=b&trigger=t/1"
77
78
79def test_get_running():
80 """Checks output from the get_running() command"""
81 json_text = ('{"mypackage": {"my-job-id": {"focal": { "arm64": ['
82 '{"submit-time": "2022-08-19 20:59:01", '
83 '"triggers": ["yourpackage/1.2.3"], '
84 '"ppas": ["ppa:me/myppa"]}, '
85 '1234, '
86 '"Log Output Here"'
87 '] } } } }')
88 fake_response = ResponseMock(json_text)
89 job = next(get_running(fake_response, series='focal', ppa='ppa:me/myppa'))
90 assert repr(job) == "Job(source_package='mypackage', series='focal', arch='arm64')"
91 assert job.triggers == ["yourpackage/1.2.3"]
92 assert job.ppas == ["ppa:me/myppa"]
93
94
95def test_get_waiting():
96 """Checks output from the get_waiting() command"""
97 # TODO: I think ppas need to be in "ppa" instead of under "ubuntu" but need to doublecheck.
98 json_text = ('{ "ubuntu": { "focal": { "amd64": ['
99 ' "a\\n{\\"requester\\": \\"you\\",'
100 ' \\"submit-time\\": \\"2022-08-19 07:37:56\\",'
101 ' \\"triggers\\": [ \\"a/1.2-3\\", \\"b/1-1\\" ] }",'
102 ' "b\\n{\\"requester\\": \\"you\\",'
103 ' \\"submit-time\\": \\"2022-08-19 07:37:57\\",'
104 ' \\"ppas\\": [ \\"ppa:me/myppa\\" ],'
105 ' \\"triggers\\": [ \\"c/3.2-1\\", \\"d/2-2\\" ] }"'
106 '] } } }')
107 fake_response = ResponseMock(json_text)
108 job = next(get_waiting(fake_response, series='focal', ppa='ppa:me/myppa'))
109 assert job
110 assert job.source_package == "b"
111 assert job.ppas == ['ppa:me/myppa']
112 assert job.triggers == ['c/3.2-1', 'd/2-2']

Subscribers

People subscribed via source and target branches

to all changes: