diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
new file mode 100644
index 0000000..02f7509
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
@@ -0,0 +1,18 @@
+Format: 3.0 (native)
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio, lua-ngcp-kamailio-dev
+Architecture: any
+Version: 9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9
+Maintainer: Sipwise Development Team <support@sipwise.com>
+Homepage: https://www.sipwise.com/
+Standards-Version: 3.9.8
+Build-Depends: debhelper-compat (= 12), dh-lua (>= 16~)
+Package-List:
+ lua-ngcp-kamailio deb interpreters optional arch=any
+ lua-ngcp-kamailio-dev deb interpreters optional arch=any
+Checksums-Sha1:
+ 34f8f2250540c327e49e749715148d6a64b8151f 36176 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.tar.xz
+Checksums-Sha256:
+ 3f3aebb8542437d73d8581eb5ca5f01e5a31699de4fb7652c580001dd49dab6b 36176 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.tar.xz
+Files:
+ 5bcc783a1988c0c13bddca31dd46146d 36176 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.tar.xz
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.buildinfo b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.buildinfo
new file mode 100644
index 0000000..3e15424
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.buildinfo
@@ -0,0 +1,183 @@
+Format: 1.0
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: amd64 source
+Version: 9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9
+Checksums-Md5:
+ fc53a8bcfede15e08d30ef98767e0fe3 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
+ 47e9bba5dd1dba489e95cfd41a8bc926 26984 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+ 8cf68ec805432cec42150b584f3f6154 19076 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+Checksums-Sha1:
+ c68337e4bcafd3ba81ff666f0685ec2b351c56d6 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
+ 780bc3aac0d8816329833bcefb6696205cdba1e1 26984 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+ 16c7cc540113311c7be0ac13ff08f6d09530d869 19076 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+Checksums-Sha256:
+ 6961af147470d183c72d2de78987556ef8db7eac922af921219b9650b25aec6b 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
+ df1586d1cc4a6d972f0988daeb7630c016390e6a6ec3b9f72248002923300093 26984 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+ b2efc0d92a3d9f6641b2132c1b5238dce591a4844c5a692c90144334001c1eab 19076 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+Build-Origin: Debian
+Build-Architecture: amd64
+Build-Date: Wed, 21 Oct 2020 15:34:02 +0000
+Build-Path: /build/lua-ngcp-kamailio-9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9
+Installed-Build-Depends:
+ autoconf (= 2.69-11),
+ automake (= 1:1.16.1-4),
+ autopoint (= 0.19.8.1-9),
+ autotools-dev (= 20180224.1),
+ base-files (= 10.3+deb10u6),
+ base-passwd (= 3.5.46),
+ bash (= 5.0-4),
+ binutils (= 2.31.1-16),
+ binutils-common (= 2.31.1-16),
+ binutils-x86-64-linux-gnu (= 2.31.1-16),
+ bsdmainutils (= 11.1.2+b1),
+ bsdutils (= 1:2.33.1-0.1),
+ build-essential (= 12.6),
+ bzip2 (= 1.0.6-9.2~deb10u1),
+ coreutils (= 8.30-3),
+ cpp (= 4:8.3.0-1),
+ cpp-8 (= 8.3.0-6),
+ dash (= 0.5.10.2-5),
+ dctrl-tools (= 2.24-3),
+ debconf (= 1.5.71),
+ debhelper (= 12.1.1),
+ debianutils (= 4.8.6.1),
+ dh-autoreconf (= 19),
+ dh-lua (= 25),
+ dh-strip-nondeterminism (= 1.1.2-1),
+ diffutils (= 1:3.7-3),
+ dpkg (= 1.19.7),
+ dpkg-dev (= 1.19.7),
+ dwz (= 0.12-3),
+ fdisk (= 2.33.1-0.1),
+ file (= 1:5.35-4+deb10u1),
+ findutils (= 4.6.0+git+20190209-2),
+ g++ (= 4:8.3.0-1),
+ g++-8 (= 8.3.0-6),
+ gcc (= 4:8.3.0-1),
+ gcc-8 (= 8.3.0-6),
+ gcc-8-base (= 8.3.0-6),
+ gettext (= 0.19.8.1-9),
+ gettext-base (= 0.19.8.1-9),
+ grep (= 3.3-1),
+ groff-base (= 1.22.4-3),
+ gzip (= 1.9-3),
+ hostname (= 3.21),
+ init-system-helpers (= 1.56+nmu1),
+ intltool-debian (= 0.35.0+20060710.5),
+ libacl1 (= 2.2.53-4),
+ libarchive-zip-perl (= 1.64-1),
+ libasan5 (= 8.3.0-6),
+ libatomic1 (= 8.3.0-6),
+ libattr1 (= 1:2.4.48-4),
+ libaudit-common (= 1:2.8.4-3),
+ libaudit1 (= 1:2.8.4-3),
+ libbinutils (= 2.31.1-16),
+ libblkid1 (= 2.33.1-0.1),
+ libbsd0 (= 0.9.1-2),
+ libbz2-1.0 (= 1.0.6-9.2~deb10u1),
+ libc-bin (= 2.28-10),
+ libc-dev-bin (= 2.28-10),
+ libc6 (= 2.28-10),
+ libc6-dev (= 2.28-10),
+ libcap-ng0 (= 0.7.9-2),
+ libcc1-0 (= 8.3.0-6),
+ libcroco3 (= 0.6.12-3),
+ libdb5.3 (= 5.3.28+dfsg1-0.5),
+ libdebconfclient0 (= 0.249),
+ libdpkg-perl (= 1.19.7),
+ libelf1 (= 0.176-1.1),
+ libfdisk1 (= 2.33.1-0.1),
+ libffi6 (= 3.2.1-9),
+ libfile-find-rule-perl (= 0.34-1),
+ libfile-stripnondeterminism-perl (= 1.1.2-1),
+ libgcc-8-dev (= 8.3.0-6),
+ libgcc1 (= 1:8.3.0-6),
+ libgcrypt20 (= 1.8.4-5),
+ libgdbm-compat4 (= 1.18.1-4),
+ libgdbm6 (= 1.18.1-4),
+ libglib2.0-0 (= 2.58.3-2+deb10u2),
+ libgmp10 (= 2:6.1.2+dfsg-4),
+ libgomp1 (= 8.3.0-6),
+ libgpg-error0 (= 1.35-1),
+ libicu63 (= 63.1-6+deb10u1),
+ libisl19 (= 0.20-2),
+ libitm1 (= 8.3.0-6),
+ liblsan0 (= 8.3.0-6),
+ liblua5.1-0 (= 5.1.5-8.1+b2),
+ liblua5.1-0-dev (= 5.1.5-8.1+b2),
+ liblua5.2-0 (= 5.2.4-1.1+b2),
+ liblua5.2-dev (= 5.2.4-1.1+b2),
+ liblua5.3-0 (= 5.3.3-1.1),
+ liblua5.3-dev (= 5.3.3-1.1),
+ liblz4-1 (= 1.8.3-1),
+ liblzma5 (= 5.2.4-1),
+ libmagic-mgc (= 1:5.35-4+deb10u1),
+ libmagic1 (= 1:5.35-4+deb10u1),
+ libmount1 (= 2.33.1-0.1),
+ libmpc3 (= 1.1.0-1),
+ libmpfr6 (= 4.0.2-1),
+ libmpx2 (= 8.3.0-6),
+ libncurses-dev (= 6.1+20181013-2+deb10u2),
+ libncurses6 (= 6.1+20181013-2+deb10u2),
+ libncursesw6 (= 6.1+20181013-2+deb10u2),
+ libnumber-compare-perl (= 0.03-1),
+ libpam-modules (= 1.3.1-5),
+ libpam-modules-bin (= 1.3.1-5),
+ libpam-runtime (= 1.3.1-5),
+ libpam0g (= 1.3.1-5),
+ libpcre3 (= 2:8.39-12),
+ libperl5.28 (= 5.28.1-6+deb10u1),
+ libpipeline1 (= 1.5.1-2),
+ libquadmath0 (= 8.3.0-6),
+ libreadline-dev (= 7.0-5),
+ libreadline7 (= 7.0-5),
+ libseccomp2 (= 2.3.3-4),
+ libselinux1 (= 2.8-1+b1),
+ libsigsegv2 (= 2.12-2),
+ libsmartcols1 (= 2.33.1-0.1),
+ libstdc++-8-dev (= 8.3.0-6),
+ libstdc++6 (= 8.3.0-6),
+ libsystemd0 (= 241-7~deb10u4),
+ libtext-glob-perl (= 0.10-1),
+ libtinfo6 (= 6.1+20181013-2+deb10u2),
+ libtool (= 2.4.6-9),
+ libtool-bin (= 2.4.6-9),
+ libtsan0 (= 8.3.0-6),
+ libubsan1 (= 8.3.0-6),
+ libuchardet0 (= 0.0.6-3),
+ libudev1 (= 241-7~deb10u4),
+ libunistring2 (= 0.9.10-1),
+ libuuid1 (= 2.33.1-0.1),
+ libxml2 (= 2.9.4+dfsg1-7+b3),
+ linux-libc-dev (= 4.19.146-1),
+ login (= 1:4.5-1.1),
+ lua5.1 (= 5.1.5-8.1+b2),
+ lua5.2 (= 5.2.4-1.1+b2),
+ lua5.3 (= 5.3.3-1.1),
+ m4 (= 1.4.18-2),
+ make (= 4.2.1-1.2),
+ man-db (= 2.8.5-2),
+ mawk (= 1.3.3-17+b3),
+ ncurses-base (= 6.1+20181013-2+deb10u2),
+ ncurses-bin (= 6.1+20181013-2+deb10u2),
+ patch (= 2.7.6-3+deb10u1),
+ perl (= 5.28.1-6+deb10u1),
+ perl-base (= 5.28.1-6+deb10u1),
+ perl-modules-5.28 (= 5.28.1-6+deb10u1),
+ pkg-config (= 0.29-6),
+ po-debconf (= 1.0.21),
+ readline-common (= 7.0-5),
+ sed (= 4.7-1),
+ sensible-utils (= 0.0.12),
+ sysvinit-utils (= 2.93-8),
+ tar (= 1.30+dfsg-6),
+ util-linux (= 2.33.1-0.1),
+ xz-utils (= 5.2.4-1),
+ zlib1g (= 1:1.2.11.dfsg-1)
+Environment:
+ DEB_BUILD_OPTIONS="parallel=8"
+ LANG="C"
+ LC_ALL="C"
+ LD_LIBRARY_PATH="/usr/lib/libeatmydata"
+ SOURCE_DATE_EPOCH="1603294428"
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.changes b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.changes
new file mode 100644
index 0000000..48cc285
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.changes
@@ -0,0 +1,38 @@
+Format: 1.8
+Date: Wed, 21 Oct 2020 15:33:48 +0000
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: source amd64
+Version: 9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9
+Distribution: UNRELEASED
+Urgency: medium
+Maintainer: Sipwise Development Team <support@sipwise.com>
+Changed-By: Jenkins Sipwise <jenkins@sipwise.com>
+Description:
+ lua-ngcp-kamailio - lua framework for ngcp-kamailio config
+ lua-ngcp-kamailio-dev - lua framework for ngcp-kamailio config development tests
+Changes:
+ lua-ngcp-kamailio (9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9) UNRELEASED; urgency=medium
+ .
+   ** SNAPSHOT build @fca1e982e19312599d8b24a4c7065f887c833ccb **
+ .
+   [ Victor Seva ]
+   * TT#95650 mocks/pv: add missing KSR.pv.get* functions
+Checksums-Sha1:
+ c68337e4bcafd3ba81ff666f0685ec2b351c56d6 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
+ 34f8f2250540c327e49e749715148d6a64b8151f 36176 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.tar.xz
+ 780bc3aac0d8816329833bcefb6696205cdba1e1 26984 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+ 55a870d8c6da16a56e6316f2fd0de8304f09f97d 6052 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.buildinfo
+ 16c7cc540113311c7be0ac13ff08f6d09530d869 19076 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+Checksums-Sha256:
+ 6961af147470d183c72d2de78987556ef8db7eac922af921219b9650b25aec6b 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
+ 3f3aebb8542437d73d8581eb5ca5f01e5a31699de4fb7652c580001dd49dab6b 36176 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.tar.xz
+ df1586d1cc4a6d972f0988daeb7630c016390e6a6ec3b9f72248002923300093 26984 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+ aed7a9198a899d81a00e1c7269a11330fc1d09ef6ca296ff6f26be82b663c24a 6052 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.buildinfo
+ b2efc0d92a3d9f6641b2132c1b5238dce591a4844c5a692c90144334001c1eab 19076 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+Files:
+ fc53a8bcfede15e08d30ef98767e0fe3 940 interpreters optional lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
+ 5bcc783a1988c0c13bddca31dd46146d 36176 interpreters optional lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.tar.xz
+ 47e9bba5dd1dba489e95cfd41a8bc926 26984 interpreters optional lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
+ 45f845707123c9df801261f791da4e36 6052 interpreters optional lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.buildinfo
+ 8cf68ec805432cec42150b584f3f6154 19076 interpreters optional lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_amd64.deb
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_source.buildinfo b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_source.buildinfo
new file mode 100644
index 0000000..6991617
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/605/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9_source.buildinfo
@@ -0,0 +1,120 @@
+Format: 1.0
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: source
+Version: 9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9
+Checksums-Md5:
+ ad7a665fb40ba5b7d698e153baf23c7f 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
+Checksums-Sha1:
+ 00bc1eb0acc31edba6007674e2abd38b85478747 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
+Checksums-Sha256:
+ ce5b5f5242b229dc294fa2bba95e206dd1775c93432ccf29580c15fa4ccfbdd4 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201021153348.610+buster~1.gbpfca1e9.dsc
+Build-Origin: Debian
+Build-Architecture: amd64
+Build-Date: Wed, 21 Oct 2020 15:33:49 +0000
+Build-Tainted-By:
+ usr-local-has-programs
+Installed-Build-Depends:
+ base-files (= 10.3+deb10u6),
+ base-passwd (= 3.5.46),
+ bash (= 5.0-4),
+ binutils (= 2.31.1-16),
+ binutils-common (= 2.31.1-16),
+ binutils-x86-64-linux-gnu (= 2.31.1-16),
+ bsdutils (= 1:2.33.1-0.1),
+ build-essential (= 12.6),
+ bzip2 (= 1.0.6-9.2~deb10u1),
+ coreutils (= 8.30-3),
+ cpp (= 4:8.3.0-1),
+ cpp-8 (= 8.3.0-6),
+ dash (= 0.5.10.2-5),
+ debconf (= 1.5.71),
+ debianutils (= 4.8.6.1),
+ diffutils (= 1:3.7-3),
+ dpkg (= 1.19.7),
+ dpkg-dev (= 1.19.7),
+ fdisk (= 2.33.1-0.1),
+ findutils (= 4.6.0+git+20190209-2),
+ g++ (= 4:8.3.0-1),
+ g++-8 (= 8.3.0-6),
+ gcc (= 4:8.3.0-1),
+ gcc-8 (= 8.3.0-6),
+ gcc-8-base (= 8.3.0-6),
+ grep (= 3.3-1),
+ gzip (= 1.9-3),
+ hostname (= 3.21),
+ init-system-helpers (= 1.56+nmu1),
+ libacl1 (= 2.2.53-4),
+ libasan5 (= 8.3.0-6),
+ libatomic1 (= 8.3.0-6),
+ libattr1 (= 1:2.4.48-4),
+ libaudit-common (= 1:2.8.4-3),
+ libaudit1 (= 1:2.8.4-3),
+ libbinutils (= 2.31.1-16),
+ libblkid1 (= 2.33.1-0.1),
+ libbz2-1.0 (= 1.0.6-9.2~deb10u1),
+ libc-bin (= 2.28-10),
+ libc-dev-bin (= 2.28-10),
+ libc6 (= 2.28-10),
+ libc6-dev (= 2.28-10),
+ libcap-ng0 (= 0.7.9-2),
+ libcc1-0 (= 8.3.0-6),
+ libdb5.3 (= 5.3.28+dfsg1-0.5),
+ libdebconfclient0 (= 0.249),
+ libdpkg-perl (= 1.19.7),
+ libfdisk1 (= 2.33.1-0.1),
+ libgcc-8-dev (= 8.3.0-6),
+ libgcc1 (= 1:8.3.0-6),
+ libgcrypt20 (= 1.8.4-5),
+ libgdbm-compat4 (= 1.18.1-4),
+ libgdbm6 (= 1.18.1-4),
+ libgmp10 (= 2:6.1.2+dfsg-4),
+ libgomp1 (= 8.3.0-6),
+ libgpg-error0 (= 1.35-1),
+ libisl19 (= 0.20-2),
+ libitm1 (= 8.3.0-6),
+ liblsan0 (= 8.3.0-6),
+ liblz4-1 (= 1.8.3-1),
+ liblzma5 (= 5.2.4-1),
+ libmount1 (= 2.33.1-0.1),
+ libmpc3 (= 1.1.0-1),
+ libmpfr6 (= 4.0.2-1),
+ libmpx2 (= 8.3.0-6),
+ libncursesw6 (= 6.1+20181013-2+deb10u2),
+ libpam-modules (= 1.3.1-5),
+ libpam-modules-bin (= 1.3.1-5),
+ libpam-runtime (= 1.3.1-5),
+ libpam0g (= 1.3.1-5),
+ libpcre3 (= 2:8.39-12),
+ libperl5.28 (= 5.28.1-6+deb10u1),
+ libquadmath0 (= 8.3.0-6),
+ libselinux1 (= 2.8-1+b1),
+ libsmartcols1 (= 2.33.1-0.1),
+ libstdc++-8-dev (= 8.3.0-6),
+ libstdc++6 (= 8.3.0-6),
+ libsystemd0 (= 241-7~deb10u4),
+ libtinfo6 (= 6.1+20181013-2+deb10u2),
+ libtsan0 (= 8.3.0-6),
+ libubsan1 (= 8.3.0-6),
+ libudev1 (= 241-7~deb10u4),
+ libuuid1 (= 2.33.1-0.1),
+ linux-libc-dev (= 4.19.152-1),
+ login (= 1:4.5-1.1),
+ make (= 4.2.1-1.2),
+ mawk (= 1.3.3-17+b3),
+ ncurses-base (= 6.1+20181013-2+deb10u2),
+ ncurses-bin (= 6.1+20181013-2+deb10u2),
+ patch (= 2.7.6-3+deb10u1),
+ perl (= 5.28.1-6+deb10u1),
+ perl-base (= 5.28.1-6+deb10u1),
+ perl-modules-5.28 (= 5.28.1-6+deb10u1),
+ sed (= 4.7-1),
+ sysvinit-utils (= 2.93-8),
+ tar (= 1.30+dfsg-6),
+ util-linux (= 2.33.1-0.1),
+ xz-utils (= 5.2.4-1),
+ zlib1g (= 1:1.2.11.dfsg-1)
+Environment:
+ DEB_BUILD_OPTIONS="parallel=8"
+ LANG="C.UTF-8"
+ SOURCE_DATE_EPOCH="1603294428"
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
new file mode 100644
index 0000000..472d239
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
@@ -0,0 +1,18 @@
+Format: 3.0 (native)
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio, lua-ngcp-kamailio-dev
+Architecture: any
+Version: 9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9
+Maintainer: Sipwise Development Team <support@sipwise.com>
+Homepage: https://www.sipwise.com/
+Standards-Version: 3.9.8
+Build-Depends: debhelper-compat (= 12), dh-lua (>= 16~)
+Package-List:
+ lua-ngcp-kamailio deb interpreters optional arch=any
+ lua-ngcp-kamailio-dev deb interpreters optional arch=any
+Checksums-Sha1:
+ df140fba4cc564f661760a3110d8626ed87bea1a 36200 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.tar.xz
+Checksums-Sha256:
+ eae95226cbc17423408260c9dd517ad6669be874c256403dc9398a63e5dc0edd 36200 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.tar.xz
+Files:
+ cd383dc63b328bc62396128a0bfb19cc 36200 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.tar.xz
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.buildinfo b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.buildinfo
new file mode 100644
index 0000000..2770b04
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.buildinfo
@@ -0,0 +1,183 @@
+Format: 1.0
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: amd64 source
+Version: 9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9
+Checksums-Md5:
+ 55661a6a68d42a5a13549e05825d62ee 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
+ 6a3e19bc7d1565d24faee5433b84f957 27000 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+ 120b5d5be0b4e22b0a18dbff8575c5db 19104 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+Checksums-Sha1:
+ 0964c38de2695ec536286b3aaa6e87afbc4fb23d 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
+ 89708f9c4e2c7696e56dec4274b24fa6fe45ac3b 27000 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+ 1eeea6587fa49788826eae4b0dbcc6f879b3b2ef 19104 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+Checksums-Sha256:
+ 1d5aacd94e18a96c31fcbf4a6e3e07efd32eefe4c8ac4857b89e1f3a6080a24f 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
+ c12c60a54f2cb3a2fe75d23b115daffd9391145c70b4afb25b0b5a28fea6e0b4 27000 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+ 716e11e0f1c6760e46bcbc4e9a23c32d2bb8e33e88db2a320d8c23bb8e80bf66 19104 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+Build-Origin: Debian
+Build-Architecture: amd64
+Build-Date: Thu, 22 Oct 2020 07:31:19 +0000
+Build-Path: /build/lua-ngcp-kamailio-9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9
+Installed-Build-Depends:
+ autoconf (= 2.69-11),
+ automake (= 1:1.16.1-4),
+ autopoint (= 0.19.8.1-9),
+ autotools-dev (= 20180224.1),
+ base-files (= 10.3+deb10u6),
+ base-passwd (= 3.5.46),
+ bash (= 5.0-4),
+ binutils (= 2.31.1-16),
+ binutils-common (= 2.31.1-16),
+ binutils-x86-64-linux-gnu (= 2.31.1-16),
+ bsdmainutils (= 11.1.2+b1),
+ bsdutils (= 1:2.33.1-0.1),
+ build-essential (= 12.6),
+ bzip2 (= 1.0.6-9.2~deb10u1),
+ coreutils (= 8.30-3),
+ cpp (= 4:8.3.0-1),
+ cpp-8 (= 8.3.0-6),
+ dash (= 0.5.10.2-5),
+ dctrl-tools (= 2.24-3),
+ debconf (= 1.5.71),
+ debhelper (= 12.1.1),
+ debianutils (= 4.8.6.1),
+ dh-autoreconf (= 19),
+ dh-lua (= 25),
+ dh-strip-nondeterminism (= 1.1.2-1),
+ diffutils (= 1:3.7-3),
+ dpkg (= 1.19.7),
+ dpkg-dev (= 1.19.7),
+ dwz (= 0.12-3),
+ fdisk (= 2.33.1-0.1),
+ file (= 1:5.35-4+deb10u1),
+ findutils (= 4.6.0+git+20190209-2),
+ g++ (= 4:8.3.0-1),
+ g++-8 (= 8.3.0-6),
+ gcc (= 4:8.3.0-1),
+ gcc-8 (= 8.3.0-6),
+ gcc-8-base (= 8.3.0-6),
+ gettext (= 0.19.8.1-9),
+ gettext-base (= 0.19.8.1-9),
+ grep (= 3.3-1),
+ groff-base (= 1.22.4-3),
+ gzip (= 1.9-3),
+ hostname (= 3.21),
+ init-system-helpers (= 1.56+nmu1),
+ intltool-debian (= 0.35.0+20060710.5),
+ libacl1 (= 2.2.53-4),
+ libarchive-zip-perl (= 1.64-1),
+ libasan5 (= 8.3.0-6),
+ libatomic1 (= 8.3.0-6),
+ libattr1 (= 1:2.4.48-4),
+ libaudit-common (= 1:2.8.4-3),
+ libaudit1 (= 1:2.8.4-3),
+ libbinutils (= 2.31.1-16),
+ libblkid1 (= 2.33.1-0.1),
+ libbsd0 (= 0.9.1-2),
+ libbz2-1.0 (= 1.0.6-9.2~deb10u1),
+ libc-bin (= 2.28-10),
+ libc-dev-bin (= 2.28-10),
+ libc6 (= 2.28-10),
+ libc6-dev (= 2.28-10),
+ libcap-ng0 (= 0.7.9-2),
+ libcc1-0 (= 8.3.0-6),
+ libcroco3 (= 0.6.12-3),
+ libdb5.3 (= 5.3.28+dfsg1-0.5),
+ libdebconfclient0 (= 0.249),
+ libdpkg-perl (= 1.19.7),
+ libelf1 (= 0.176-1.1),
+ libfdisk1 (= 2.33.1-0.1),
+ libffi6 (= 3.2.1-9),
+ libfile-find-rule-perl (= 0.34-1),
+ libfile-stripnondeterminism-perl (= 1.1.2-1),
+ libgcc-8-dev (= 8.3.0-6),
+ libgcc1 (= 1:8.3.0-6),
+ libgcrypt20 (= 1.8.4-5),
+ libgdbm-compat4 (= 1.18.1-4),
+ libgdbm6 (= 1.18.1-4),
+ libglib2.0-0 (= 2.58.3-2+deb10u2),
+ libgmp10 (= 2:6.1.2+dfsg-4),
+ libgomp1 (= 8.3.0-6),
+ libgpg-error0 (= 1.35-1),
+ libicu63 (= 63.1-6+deb10u1),
+ libisl19 (= 0.20-2),
+ libitm1 (= 8.3.0-6),
+ liblsan0 (= 8.3.0-6),
+ liblua5.1-0 (= 5.1.5-8.1+b2),
+ liblua5.1-0-dev (= 5.1.5-8.1+b2),
+ liblua5.2-0 (= 5.2.4-1.1+b2),
+ liblua5.2-dev (= 5.2.4-1.1+b2),
+ liblua5.3-0 (= 5.3.3-1.1),
+ liblua5.3-dev (= 5.3.3-1.1),
+ liblz4-1 (= 1.8.3-1),
+ liblzma5 (= 5.2.4-1),
+ libmagic-mgc (= 1:5.35-4+deb10u1),
+ libmagic1 (= 1:5.35-4+deb10u1),
+ libmount1 (= 2.33.1-0.1),
+ libmpc3 (= 1.1.0-1),
+ libmpfr6 (= 4.0.2-1),
+ libmpx2 (= 8.3.0-6),
+ libncurses-dev (= 6.1+20181013-2+deb10u2),
+ libncurses6 (= 6.1+20181013-2+deb10u2),
+ libncursesw6 (= 6.1+20181013-2+deb10u2),
+ libnumber-compare-perl (= 0.03-1),
+ libpam-modules (= 1.3.1-5),
+ libpam-modules-bin (= 1.3.1-5),
+ libpam-runtime (= 1.3.1-5),
+ libpam0g (= 1.3.1-5),
+ libpcre3 (= 2:8.39-12),
+ libperl5.28 (= 5.28.1-6+deb10u1),
+ libpipeline1 (= 1.5.1-2),
+ libquadmath0 (= 8.3.0-6),
+ libreadline-dev (= 7.0-5),
+ libreadline7 (= 7.0-5),
+ libseccomp2 (= 2.3.3-4),
+ libselinux1 (= 2.8-1+b1),
+ libsigsegv2 (= 2.12-2),
+ libsmartcols1 (= 2.33.1-0.1),
+ libstdc++-8-dev (= 8.3.0-6),
+ libstdc++6 (= 8.3.0-6),
+ libsystemd0 (= 241-7~deb10u4),
+ libtext-glob-perl (= 0.10-1),
+ libtinfo6 (= 6.1+20181013-2+deb10u2),
+ libtool (= 2.4.6-9),
+ libtool-bin (= 2.4.6-9),
+ libtsan0 (= 8.3.0-6),
+ libubsan1 (= 8.3.0-6),
+ libuchardet0 (= 0.0.6-3),
+ libudev1 (= 241-7~deb10u4),
+ libunistring2 (= 0.9.10-1),
+ libuuid1 (= 2.33.1-0.1),
+ libxml2 (= 2.9.4+dfsg1-7+b3),
+ linux-libc-dev (= 4.19.146-1),
+ login (= 1:4.5-1.1),
+ lua5.1 (= 5.1.5-8.1+b2),
+ lua5.2 (= 5.2.4-1.1+b2),
+ lua5.3 (= 5.3.3-1.1),
+ m4 (= 1.4.18-2),
+ make (= 4.2.1-1.2),
+ man-db (= 2.8.5-2),
+ mawk (= 1.3.3-17+b3),
+ ncurses-base (= 6.1+20181013-2+deb10u2),
+ ncurses-bin (= 6.1+20181013-2+deb10u2),
+ patch (= 2.7.6-3+deb10u1),
+ perl (= 5.28.1-6+deb10u1),
+ perl-base (= 5.28.1-6+deb10u1),
+ perl-modules-5.28 (= 5.28.1-6+deb10u1),
+ pkg-config (= 0.29-6),
+ po-debconf (= 1.0.21),
+ readline-common (= 7.0-5),
+ sed (= 4.7-1),
+ sensible-utils (= 0.0.12),
+ sysvinit-utils (= 2.93-8),
+ tar (= 1.30+dfsg-6),
+ util-linux (= 2.33.1-0.1),
+ xz-utils (= 5.2.4-1),
+ zlib1g (= 1:1.2.11.dfsg-1)
+Environment:
+ DEB_BUILD_OPTIONS="parallel=8"
+ LANG="C"
+ LC_ALL="C"
+ LD_LIBRARY_PATH="/usr/lib/libeatmydata"
+ SOURCE_DATE_EPOCH="1603351866"
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.changes b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.changes
new file mode 100644
index 0000000..df58a72
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.changes
@@ -0,0 +1,38 @@
+Format: 1.8
+Date: Thu, 22 Oct 2020 07:31:06 +0000
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: source amd64
+Version: 9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9
+Distribution: UNRELEASED
+Urgency: medium
+Maintainer: Sipwise Development Team <support@sipwise.com>
+Changed-By: Jenkins Sipwise <jenkins@sipwise.com>
+Description:
+ lua-ngcp-kamailio - lua framework for ngcp-kamailio config
+ lua-ngcp-kamailio-dev - lua framework for ngcp-kamailio config development tests
+Changes:
+ lua-ngcp-kamailio (9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9) UNRELEASED; urgency=medium
+ .
+   ** SNAPSHOT build @fca1e982e19312599d8b24a4c7065f887c833ccb **
+ .
+   [ Victor Seva ]
+   * TT#95650 mocks/pv: add missing KSR.pv.get* functions
+Checksums-Sha1:
+ 0964c38de2695ec536286b3aaa6e87afbc4fb23d 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
+ df140fba4cc564f661760a3110d8626ed87bea1a 36200 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.tar.xz
+ 89708f9c4e2c7696e56dec4274b24fa6fe45ac3b 27000 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+ 2fd87c37420cf1df78548a66a5bb1f3c21347d7e 6052 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.buildinfo
+ 1eeea6587fa49788826eae4b0dbcc6f879b3b2ef 19104 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+Checksums-Sha256:
+ 1d5aacd94e18a96c31fcbf4a6e3e07efd32eefe4c8ac4857b89e1f3a6080a24f 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
+ eae95226cbc17423408260c9dd517ad6669be874c256403dc9398a63e5dc0edd 36200 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.tar.xz
+ c12c60a54f2cb3a2fe75d23b115daffd9391145c70b4afb25b0b5a28fea6e0b4 27000 lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+ 11fa0732c42e54fc7f7e2c599423ed10ea71900586ae6ffebb666ece13b34d68 6052 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.buildinfo
+ 716e11e0f1c6760e46bcbc4e9a23c32d2bb8e33e88db2a320d8c23bb8e80bf66 19104 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+Files:
+ 55661a6a68d42a5a13549e05825d62ee 940 interpreters optional lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
+ cd383dc63b328bc62396128a0bfb19cc 36200 interpreters optional lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.tar.xz
+ 6a3e19bc7d1565d24faee5433b84f957 27000 interpreters optional lua-ngcp-kamailio-dev_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
+ 91642aee1797e0b732cff1bf882fb1dd 6052 interpreters optional lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.buildinfo
+ 120b5d5be0b4e22b0a18dbff8575c5db 19104 interpreters optional lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_amd64.deb
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_source.buildinfo b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_source.buildinfo
new file mode 100644
index 0000000..aae718f
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/606/artifact/lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9_source.buildinfo
@@ -0,0 +1,120 @@
+Format: 1.0
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: source
+Version: 9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9
+Checksums-Md5:
+ b302a9e11ca68fa71ab56bad1d36750f 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
+Checksums-Sha1:
+ ef02a728dfee85c44f55d30d64e339602200e47e 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
+Checksums-Sha256:
+ 10c07e5e9da2a8216626caba179a623d69fa92398a8283a8a62a44eda2abc4b1 940 lua-ngcp-kamailio_9.1.0.0+0~mr9.1.0.0+0~20201022073105.611+buster~1.gbpfca1e9.dsc
+Build-Origin: Debian
+Build-Architecture: amd64
+Build-Date: Thu, 22 Oct 2020 07:31:06 +0000
+Build-Tainted-By:
+ usr-local-has-programs
+Installed-Build-Depends:
+ base-files (= 10.3+deb10u6),
+ base-passwd (= 3.5.46),
+ bash (= 5.0-4),
+ binutils (= 2.31.1-16),
+ binutils-common (= 2.31.1-16),
+ binutils-x86-64-linux-gnu (= 2.31.1-16),
+ bsdutils (= 1:2.33.1-0.1),
+ build-essential (= 12.6),
+ bzip2 (= 1.0.6-9.2~deb10u1),
+ coreutils (= 8.30-3),
+ cpp (= 4:8.3.0-1),
+ cpp-8 (= 8.3.0-6),
+ dash (= 0.5.10.2-5),
+ debconf (= 1.5.71),
+ debianutils (= 4.8.6.1),
+ diffutils (= 1:3.7-3),
+ dpkg (= 1.19.7),
+ dpkg-dev (= 1.19.7),
+ fdisk (= 2.33.1-0.1),
+ findutils (= 4.6.0+git+20190209-2),
+ g++ (= 4:8.3.0-1),
+ g++-8 (= 8.3.0-6),
+ gcc (= 4:8.3.0-1),
+ gcc-8 (= 8.3.0-6),
+ gcc-8-base (= 8.3.0-6),
+ grep (= 3.3-1),
+ gzip (= 1.9-3),
+ hostname (= 3.21),
+ init-system-helpers (= 1.56+nmu1),
+ libacl1 (= 2.2.53-4),
+ libasan5 (= 8.3.0-6),
+ libatomic1 (= 8.3.0-6),
+ libattr1 (= 1:2.4.48-4),
+ libaudit-common (= 1:2.8.4-3),
+ libaudit1 (= 1:2.8.4-3),
+ libbinutils (= 2.31.1-16),
+ libblkid1 (= 2.33.1-0.1),
+ libbz2-1.0 (= 1.0.6-9.2~deb10u1),
+ libc-bin (= 2.28-10),
+ libc-dev-bin (= 2.28-10),
+ libc6 (= 2.28-10),
+ libc6-dev (= 2.28-10),
+ libcap-ng0 (= 0.7.9-2),
+ libcc1-0 (= 8.3.0-6),
+ libdb5.3 (= 5.3.28+dfsg1-0.5),
+ libdebconfclient0 (= 0.249),
+ libdpkg-perl (= 1.19.7),
+ libfdisk1 (= 2.33.1-0.1),
+ libgcc-8-dev (= 8.3.0-6),
+ libgcc1 (= 1:8.3.0-6),
+ libgcrypt20 (= 1.8.4-5),
+ libgdbm-compat4 (= 1.18.1-4),
+ libgdbm6 (= 1.18.1-4),
+ libgmp10 (= 2:6.1.2+dfsg-4),
+ libgomp1 (= 8.3.0-6),
+ libgpg-error0 (= 1.35-1),
+ libisl19 (= 0.20-2),
+ libitm1 (= 8.3.0-6),
+ liblsan0 (= 8.3.0-6),
+ liblz4-1 (= 1.8.3-1),
+ liblzma5 (= 5.2.4-1),
+ libmount1 (= 2.33.1-0.1),
+ libmpc3 (= 1.1.0-1),
+ libmpfr6 (= 4.0.2-1),
+ libmpx2 (= 8.3.0-6),
+ libncursesw6 (= 6.1+20181013-2+deb10u2),
+ libpam-modules (= 1.3.1-5),
+ libpam-modules-bin (= 1.3.1-5),
+ libpam-runtime (= 1.3.1-5),
+ libpam0g (= 1.3.1-5),
+ libpcre3 (= 2:8.39-12),
+ libperl5.28 (= 5.28.1-6+deb10u1),
+ libquadmath0 (= 8.3.0-6),
+ libselinux1 (= 2.8-1+b1),
+ libsmartcols1 (= 2.33.1-0.1),
+ libstdc++-8-dev (= 8.3.0-6),
+ libstdc++6 (= 8.3.0-6),
+ libsystemd0 (= 241-7~deb10u4),
+ libtinfo6 (= 6.1+20181013-2+deb10u2),
+ libtsan0 (= 8.3.0-6),
+ libubsan1 (= 8.3.0-6),
+ libudev1 (= 241-7~deb10u4),
+ libuuid1 (= 2.33.1-0.1),
+ linux-libc-dev (= 4.19.152-1),
+ login (= 1:4.5-1.1),
+ make (= 4.2.1-1.2),
+ mawk (= 1.3.3-17+b3),
+ ncurses-base (= 6.1+20181013-2+deb10u2),
+ ncurses-bin (= 6.1+20181013-2+deb10u2),
+ patch (= 2.7.6-3+deb10u1),
+ perl (= 5.28.1-6+deb10u1),
+ perl-base (= 5.28.1-6+deb10u1),
+ perl-modules-5.28 (= 5.28.1-6+deb10u1),
+ sed (= 4.7-1),
+ sysvinit-utils (= 2.93-8),
+ tar (= 1.30+dfsg-6),
+ util-linux (= 2.33.1-0.1),
+ xz-utils (= 5.2.4-1),
+ zlib1g (= 1:1.2.11.dfsg-1)
+Environment:
+ DEB_BUILD_OPTIONS="parallel=8"
+ LANG="C.UTF-8"
+ SOURCE_DATE_EPOCH="1603351866"
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/607/artifact/lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.dsc b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/607/artifact/lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.dsc
new file mode 100644
index 0000000..c754f76
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/607/artifact/lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.dsc
@@ -0,0 +1,18 @@
+Format: 3.0 (native)
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio, lua-ngcp-kamailio-dev
+Architecture: any
+Version: 5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1
+Maintainer: Sipwise Development Team <support@sipwise.com>
+Homepage: http://sipwise.com/
+Standards-Version: 3.9.7
+Build-Depends: debhelper (>= 8~), dh-lua (>= 16~)
+Package-List:
+ lua-ngcp-kamailio deb libs extra arch=any
+ lua-ngcp-kamailio-dev deb libs extra arch=any
+Checksums-Sha1:
+ 34ea851580c2f637f8347ac4b636ed9f4d4490e8 34440 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.tar.xz
+Checksums-Sha256:
+ a4351332b736b7446fb221b67aa73d7b17209d620eaf20410995fe8812de7e61 34440 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.tar.xz
+Files:
+ c8ca417f88ace9940d3ce15d5682eab9 34440 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.tar.xz
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/607/artifact/lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.buildinfo b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/607/artifact/lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.buildinfo
new file mode 100644
index 0000000..51521c1
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/607/artifact/lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.buildinfo
@@ -0,0 +1,190 @@
+Format: 1.0
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: amd64 source
+Version: 5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1
+Checksums-Md5:
+ ba9aeab2d6b1068465dfa8452c6621db 919 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.dsc
+ 61f0dd1a22168ccd679eb703a6b5023d 25468 lua-ngcp-kamailio-dev_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+ db68992f25e165654e8eb4898f60e1c4 17436 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+Checksums-Sha1:
+ 8fc380a26b64faa600c91ce92ef0ce9c3354eda3 919 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.dsc
+ 05fb1571e8d346efeffa672727de929363a74a38 25468 lua-ngcp-kamailio-dev_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+ c72e6213e939b5eb61624b12baaf3b5d3808ebb9 17436 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+Checksums-Sha256:
+ 7bd78af97344cbc0c9321f3c3a0d78a30e06d1c30ae6417f54f36c722e16f596 919 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.dsc
+ ed8527c54b25c58fa5b09323f932da680340791d506f41688a26236479f22bfc 25468 lua-ngcp-kamailio-dev_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+ d6758b963604cab34790369bc4b5b7f0e7833767c33ddcfc401c0fc509af7709 17436 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+Build-Origin: Debian
+Build-Architecture: amd64
+Build-Date: Thu, 22 Oct 2020 18:25:01 +0000
+Build-Path: /build/lua-ngcp-kamailio-5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1
+Installed-Build-Depends:
+ autoconf (= 2.69-10),
+ automake (= 1:1.15-6),
+ autopoint (= 0.19.8.1-2+deb9u1),
+ autotools-dev (= 20161112.1),
+ base-files (= 9.9+deb9u13),
+ base-passwd (= 3.5.43),
+ bash (= 4.4-5),
+ binutils (= 2.28-5),
+ bsdmainutils (= 9.0.12+nmu1),
+ bsdutils (= 1:2.29.2-1+deb9u1),
+ build-essential (= 12.3),
+ bzip2 (= 1.0.6-8.1),
+ coreutils (= 8.26-3),
+ cpp (= 4:6.3.0-4),
+ cpp-6 (= 6.3.0-18+deb9u1),
+ dash (= 0.5.8-2.4),
+ dctrl-tools (= 2.24-2+b1),
+ debconf (= 1.5.61),
+ debhelper (= 10.2.5),
+ debianutils (= 4.8.1.1),
+ dh-autoreconf (= 14),
+ dh-lua (= 24),
+ dh-strip-nondeterminism (= 0.034-1),
+ diffutils (= 1:3.5-3),
+ dpkg (= 1.18.25),
+ dpkg-dev (= 1.18.25),
+ e2fslibs (= 1.43.4-2+deb9u1),
+ e2fsprogs (= 1.43.4-2+deb9u1),
+ file (= 1:5.30-1+deb9u3),
+ findutils (= 4.6.0+git+20161106-2),
+ g++ (= 4:6.3.0-4),
+ g++-6 (= 6.3.0-18+deb9u1),
+ gcc (= 4:6.3.0-4),
+ gcc-6 (= 6.3.0-18+deb9u1),
+ gcc-6-base (= 6.3.0-18+deb9u1),
+ gettext (= 0.19.8.1-2+deb9u1),
+ gettext-base (= 0.19.8.1-2+deb9u1),
+ grep (= 2.27-2),
+ groff-base (= 1.22.3-9),
+ gzip (= 1.6-5+b1),
+ hostname (= 3.18+b1),
+ init-system-helpers (= 1.48),
+ intltool-debian (= 0.35.0+20060710.4),
+ libacl1 (= 2.2.52-3+b1),
+ libarchive-zip-perl (= 1.59-1+deb9u1),
+ libasan3 (= 6.3.0-18+deb9u1),
+ libatomic1 (= 6.3.0-18+deb9u1),
+ libattr1 (= 1:2.4.47-2+b2),
+ libaudit-common (= 1:2.6.7-2),
+ libaudit1 (= 1:2.6.7-2),
+ libblkid1 (= 2.29.2-1+deb9u1),
+ libbsd0 (= 0.8.3-1),
+ libbz2-1.0 (= 1.0.6-8.1),
+ libc-bin (= 2.24-11+deb9u4),
+ libc-dev-bin (= 2.24-11+deb9u4),
+ libc6 (= 2.24-11+deb9u4),
+ libc6-dev (= 2.24-11+deb9u4),
+ libcap-ng0 (= 0.7.7-3+b1),
+ libcc1-0 (= 6.3.0-18+deb9u1),
+ libcilkrts5 (= 6.3.0-18+deb9u1),
+ libcomerr2 (= 1.43.4-2+deb9u1),
+ libcroco3 (= 0.6.11-3),
+ libdb5.3 (= 5.3.28-12+deb9u1),
+ libdebconfclient0 (= 0.227),
+ libdpkg-perl (= 1.18.25),
+ libfdisk1 (= 2.29.2-1+deb9u1),
+ libffi6 (= 3.2.1-6),
+ libfile-find-rule-perl (= 0.34-1),
+ libfile-stripnondeterminism-perl (= 0.034-1),
+ libgcc-6-dev (= 6.3.0-18+deb9u1),
+ libgcc1 (= 1:6.3.0-18+deb9u1),
+ libgcrypt20 (= 1.7.6-2+deb9u3),
+ libgdbm3 (= 1.8.3-14),
+ libglib2.0-0 (= 2.50.3-2+deb9u2),
+ libgmp10 (= 2:6.1.2+dfsg-1),
+ libgomp1 (= 6.3.0-18+deb9u1),
+ libgpg-error0 (= 1.26-2),
+ libicu57 (= 57.1-6+deb9u4),
+ libisl15 (= 0.18-1),
+ libitm1 (= 6.3.0-18+deb9u1),
+ liblsan0 (= 6.3.0-18+deb9u1),
+ liblua5.1-0 (= 5.1.5-8.1+b2),
+ liblua5.1-0-dev (= 5.1.5-8.1+b2),
+ liblua5.2-0 (= 5.2.4-1.1+b2),
+ liblua5.2-dev (= 5.2.4-1.1+b2),
+ liblua5.3-0 (= 5.3.3-1+deb9u1),
+ liblua5.3-dev (= 5.3.3-1+deb9u1),
+ libluasandbox-bin (= 1.2.1-4),
+ libluasandbox-dev (= 1.2.1-4),
+ libluasandbox0 (= 1.2.1-4),
+ liblz4-1 (= 0.0~r131-2+b1),
+ liblzma5 (= 5.2.2-1.2+b1),
+ libmagic-mgc (= 1:5.30-1+deb9u3),
+ libmagic1 (= 1:5.30-1+deb9u3),
+ libmount1 (= 2.29.2-1+deb9u1),
+ libmpc3 (= 1.0.3-1+b2),
+ libmpfr4 (= 3.1.5-1),
+ libmpx2 (= 6.3.0-18+deb9u1),
+ libncurses5 (= 6.0+20161126-1+deb9u2),
+ libncursesw5 (= 6.0+20161126-1+deb9u2),
+ libnumber-compare-perl (= 0.03-1),
+ libpam-modules (= 1.1.8-3.6),
+ libpam-modules-bin (= 1.1.8-3.6),
+ libpam-runtime (= 1.1.8-3.6),
+ libpam0g (= 1.1.8-3.6),
+ libpcre3 (= 2:8.39-3),
+ libperl5.24 (= 5.24.1-3+deb9u7),
+ libpipeline1 (= 1.4.1-2),
+ libquadmath0 (= 6.3.0-18+deb9u1),
+ libreadline-dev (= 7.0-3),
+ libreadline7 (= 7.0-3),
+ libselinux1 (= 2.6-3+b3),
+ libsemanage-common (= 2.6-2),
+ libsemanage1 (= 2.6-2),
+ libsepol1 (= 2.6-2),
+ libsigsegv2 (= 2.10-5),
+ libsmartcols1 (= 2.29.2-1+deb9u1),
+ libss2 (= 1.43.4-2+deb9u1),
+ libstdc++-6-dev (= 6.3.0-18+deb9u1),
+ libstdc++6 (= 6.3.0-18+deb9u1),
+ libsystemd0 (= 232-25+deb9u12),
+ libtext-glob-perl (= 0.10-1),
+ libtimedate-perl (= 2.3000-2+deb9u1),
+ libtinfo-dev (= 6.0+20161126-1+deb9u2),
+ libtinfo5 (= 6.0+20161126-1+deb9u2),
+ libtool (= 2.4.6-2),
+ libtool-bin (= 2.4.6-2),
+ libtsan0 (= 6.3.0-18+deb9u1),
+ libubsan0 (= 6.3.0-18+deb9u1),
+ libudev1 (= 232-25+deb9u12),
+ libunistring0 (= 0.9.6+really0.9.3-0.1),
+ libustr-1.0-1 (= 1.0.4-6),
+ libuuid1 (= 2.29.2-1+deb9u1),
+ libxml2 (= 2.9.4+dfsg1-2.2+deb9u3),
+ linux-libc-dev (= 4.9.228-1),
+ login (= 1:4.4-4.1),
+ lua5.1 (= 5.1.5-8.1+b2),
+ lua5.2 (= 5.2.4-1.1+b2),
+ lua5.3 (= 5.3.3-1+deb9u1),
+ m4 (= 1.4.18-1),
+ make (= 4.1-9.1),
+ man-db (= 2.7.6.1-2),
+ mawk (= 1.3.3-17+b3),
+ mount (= 2.29.2-1+deb9u1),
+ multiarch-support (= 2.24-11+deb9u4),
+ ncurses-base (= 6.0+20161126-1+deb9u2),
+ ncurses-bin (= 6.0+20161126-1+deb9u2),
+ passwd (= 1:4.4-4.1),
+ patch (= 2.7.5-1+deb9u2),
+ perl (= 5.24.1-3+deb9u7),
+ perl-base (= 5.24.1-3+deb9u7),
+ perl-modules-5.24 (= 5.24.1-3+deb9u7),
+ pkg-config (= 0.29-4+b1),
+ po-debconf (= 1.0.20),
+ readline-common (= 7.0-3),
+ sed (= 4.4-1),
+ sensible-utils (= 0.0.9+deb9u1),
+ sysvinit-utils (= 2.88dsf-59.9),
+ tar (= 1.29b-1.1),
+ util-linux (= 2.29.2-1+deb9u1),
+ xz-utils (= 5.2.2-1.2+b1),
+ zlib1g (= 1:1.2.8.dfsg-5)
+Environment:
+ DEB_BUILD_OPTIONS="parallel=8"
+ LANG="C"
+ LC_ALL="C"
+ LD_LIBRARY_PATH="/usr/lib/libeatmydata"
+ SOURCE_DATE_EPOCH="1603391086"
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/607/artifact/lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.changes b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/607/artifact/lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.changes
new file mode 100644
index 0000000..0b7c809
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/607/artifact/lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.changes
@@ -0,0 +1,37 @@
+Format: 1.8
+Date: Thu, 22 Oct 2020 18:24:46 +0000
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: source amd64
+Version: 5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1
+Distribution: UNRELEASED
+Urgency: medium
+Maintainer: Sipwise Development Team <support@sipwise.com>
+Changed-By: Jenkins Sipwise <jenkins@sipwise.com>
+Description:
+ lua-ngcp-kamailio - lua framework for ngcp-kamailio config
+ lua-ngcp-kamailio-dev - lua framework for ngcp-kamailio config development tests
+Changes:
+ lua-ngcp-kamailio (5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1) UNRELEASED; urgency=medium
+ .
+   ** SNAPSHOT build @878fb1e6645c8167c17e286e30af179250d1d2b8 **
+ .
+   * UNRELEASED
+Checksums-Sha1:
+ 8fc380a26b64faa600c91ce92ef0ce9c3354eda3 919 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.dsc
+ 34ea851580c2f637f8347ac4b636ed9f4d4490e8 34440 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.tar.xz
+ 05fb1571e8d346efeffa672727de929363a74a38 25468 lua-ngcp-kamailio-dev_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+ aa7f4332c854e7e13bb1325f508a975fb96da52f 6615 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.buildinfo
+ c72e6213e939b5eb61624b12baaf3b5d3808ebb9 17436 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+Checksums-Sha256:
+ 7bd78af97344cbc0c9321f3c3a0d78a30e06d1c30ae6417f54f36c722e16f596 919 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.dsc
+ a4351332b736b7446fb221b67aa73d7b17209d620eaf20410995fe8812de7e61 34440 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.tar.xz
+ ed8527c54b25c58fa5b09323f932da680340791d506f41688a26236479f22bfc 25468 lua-ngcp-kamailio-dev_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+ 4db1b281d3b2ac07c5e11e4d9e1c31559fdf9786efca7ad653da80a6918c4a93 6615 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.buildinfo
+ d6758b963604cab34790369bc4b5b7f0e7833767c33ddcfc401c0fc509af7709 17436 lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+Files:
+ ba9aeab2d6b1068465dfa8452c6621db 919 libs extra lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.dsc
+ c8ca417f88ace9940d3ce15d5682eab9 34440 libs extra lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1.tar.xz
+ 61f0dd1a22168ccd679eb703a6b5023d 25468 libs extra lua-ngcp-kamailio-dev_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
+ 705d87a811b4a9ddfdf90bcc49d98eff 6615 libs extra lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.buildinfo
+ db68992f25e165654e8eb4898f60e1c4 17436 libs extra lua-ngcp-kamailio_5.5.14.0+0~mr5.5.14.0+0~20201022182445.612+stretch~1.gbp878fb1_amd64.deb
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/608/artifact/lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.dsc b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/608/artifact/lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.dsc
new file mode 100644
index 0000000..0682ea9
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/608/artifact/lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.dsc
@@ -0,0 +1,18 @@
+Format: 3.0 (native)
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio, lua-ngcp-kamailio-dev
+Architecture: any
+Version: 5.5.13.1+0~mr5.5.13.1
+Maintainer: Sipwise Development Team <support@sipwise.com>
+Homepage: http://sipwise.com/
+Standards-Version: 3.9.7
+Build-Depends: debhelper (>= 8~), dh-lua (>= 16~)
+Package-List:
+ lua-ngcp-kamailio deb libs extra arch=any
+ lua-ngcp-kamailio-dev deb libs extra arch=any
+Checksums-Sha1:
+ ed9235b5de9241ab0c2c3a2d237f2f33aa5e6d1f 34016 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.tar.xz
+Checksums-Sha256:
+ 89ea415c8de43666040f49ff7a0e532707ca019a6a075f39bc9a7e86bda00ed6 34016 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.tar.xz
+Files:
+ bc7854b667e5ac5f90acfe0d95e163aa 34016 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.tar.xz
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/608/artifact/lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.buildinfo b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/608/artifact/lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.buildinfo
new file mode 100644
index 0000000..af3a9b9
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/608/artifact/lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.buildinfo
@@ -0,0 +1,190 @@
+Format: 1.0
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: amd64 source
+Version: 5.5.13.1+0~mr5.5.13.1
+Checksums-Md5:
+ 4f4ca5f67003e0d773ca94d5ff28e196 755 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.dsc
+ e4c32bc186276e31545d3e265c8365cd 25316 lua-ngcp-kamailio-dev_5.5.13.1+0~mr5.5.13.1_amd64.deb
+ 675dd1c6b04170943f00531daf41ddaa 17284 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.deb
+Checksums-Sha1:
+ a877fc2f3b1a74c42155611b1c5137b5d462ca65 755 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.dsc
+ dcd5ea2f2960e53f6c2db30089ed73c6a7b5fc33 25316 lua-ngcp-kamailio-dev_5.5.13.1+0~mr5.5.13.1_amd64.deb
+ 8b16f0ccc74537883d1a70036e00a18f5d727c3b 17284 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.deb
+Checksums-Sha256:
+ d8a4e10552295885ead23c0b9ccfb0782a901cbcbfdadf14687040463fa3e224 755 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.dsc
+ 6ea150ec530dcc3965df0fb62f0e03cabbcd8871f1743c2a0b38cd3a54c65ef7 25316 lua-ngcp-kamailio-dev_5.5.13.1+0~mr5.5.13.1_amd64.deb
+ 6e8136cd1a3cc03d5caab27b550cc836356d3ce55293e2686674c45371c10cd7 17284 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.deb
+Build-Origin: Debian
+Build-Architecture: amd64
+Build-Date: Thu, 22 Oct 2020 19:13:36 +0000
+Build-Path: /build/lua-ngcp-kamailio-5.5.13.1+0~mr5.5.13.1
+Installed-Build-Depends:
+ autoconf (= 2.69-10),
+ automake (= 1:1.15-6),
+ autopoint (= 0.19.8.1-2+deb9u1),
+ autotools-dev (= 20161112.1),
+ base-files (= 9.9+deb9u13),
+ base-passwd (= 3.5.43),
+ bash (= 4.4-5),
+ binutils (= 2.28-5),
+ bsdmainutils (= 9.0.12+nmu1),
+ bsdutils (= 1:2.29.2-1+deb9u1),
+ build-essential (= 12.3),
+ bzip2 (= 1.0.6-8.1),
+ coreutils (= 8.26-3),
+ cpp (= 4:6.3.0-4),
+ cpp-6 (= 6.3.0-18+deb9u1),
+ dash (= 0.5.8-2.4),
+ dctrl-tools (= 2.24-2+b1),
+ debconf (= 1.5.61),
+ debhelper (= 10.2.5),
+ debianutils (= 4.8.1.1),
+ dh-autoreconf (= 14),
+ dh-lua (= 24),
+ dh-strip-nondeterminism (= 0.034-1),
+ diffutils (= 1:3.5-3),
+ dpkg (= 1.18.25),
+ dpkg-dev (= 1.18.25),
+ e2fslibs (= 1.43.4-2+deb9u1),
+ e2fsprogs (= 1.43.4-2+deb9u1),
+ file (= 1:5.30-1+deb9u3),
+ findutils (= 4.6.0+git+20161106-2),
+ g++ (= 4:6.3.0-4),
+ g++-6 (= 6.3.0-18+deb9u1),
+ gcc (= 4:6.3.0-4),
+ gcc-6 (= 6.3.0-18+deb9u1),
+ gcc-6-base (= 6.3.0-18+deb9u1),
+ gettext (= 0.19.8.1-2+deb9u1),
+ gettext-base (= 0.19.8.1-2+deb9u1),
+ grep (= 2.27-2),
+ groff-base (= 1.22.3-9),
+ gzip (= 1.6-5+b1),
+ hostname (= 3.18+b1),
+ init-system-helpers (= 1.48),
+ intltool-debian (= 0.35.0+20060710.4),
+ libacl1 (= 2.2.52-3+b1),
+ libarchive-zip-perl (= 1.59-1+deb9u1),
+ libasan3 (= 6.3.0-18+deb9u1),
+ libatomic1 (= 6.3.0-18+deb9u1),
+ libattr1 (= 1:2.4.47-2+b2),
+ libaudit-common (= 1:2.6.7-2),
+ libaudit1 (= 1:2.6.7-2),
+ libblkid1 (= 2.29.2-1+deb9u1),
+ libbsd0 (= 0.8.3-1),
+ libbz2-1.0 (= 1.0.6-8.1),
+ libc-bin (= 2.24-11+deb9u4),
+ libc-dev-bin (= 2.24-11+deb9u4),
+ libc6 (= 2.24-11+deb9u4),
+ libc6-dev (= 2.24-11+deb9u4),
+ libcap-ng0 (= 0.7.7-3+b1),
+ libcc1-0 (= 6.3.0-18+deb9u1),
+ libcilkrts5 (= 6.3.0-18+deb9u1),
+ libcomerr2 (= 1.43.4-2+deb9u1),
+ libcroco3 (= 0.6.11-3),
+ libdb5.3 (= 5.3.28-12+deb9u1),
+ libdebconfclient0 (= 0.227),
+ libdpkg-perl (= 1.18.25),
+ libfdisk1 (= 2.29.2-1+deb9u1),
+ libffi6 (= 3.2.1-6),
+ libfile-find-rule-perl (= 0.34-1),
+ libfile-stripnondeterminism-perl (= 0.034-1),
+ libgcc-6-dev (= 6.3.0-18+deb9u1),
+ libgcc1 (= 1:6.3.0-18+deb9u1),
+ libgcrypt20 (= 1.7.6-2+deb9u3),
+ libgdbm3 (= 1.8.3-14),
+ libglib2.0-0 (= 2.50.3-2+deb9u2),
+ libgmp10 (= 2:6.1.2+dfsg-1),
+ libgomp1 (= 6.3.0-18+deb9u1),
+ libgpg-error0 (= 1.26-2),
+ libicu57 (= 57.1-6+deb9u4),
+ libisl15 (= 0.18-1),
+ libitm1 (= 6.3.0-18+deb9u1),
+ liblsan0 (= 6.3.0-18+deb9u1),
+ liblua5.1-0 (= 5.1.5-8.1+b2),
+ liblua5.1-0-dev (= 5.1.5-8.1+b2),
+ liblua5.2-0 (= 5.2.4-1.1+b2),
+ liblua5.2-dev (= 5.2.4-1.1+b2),
+ liblua5.3-0 (= 5.3.3-1+deb9u1),
+ liblua5.3-dev (= 5.3.3-1+deb9u1),
+ libluasandbox-bin (= 1.2.1-4),
+ libluasandbox-dev (= 1.2.1-4),
+ libluasandbox0 (= 1.2.1-4),
+ liblz4-1 (= 0.0~r131-2+b1),
+ liblzma5 (= 5.2.2-1.2+b1),
+ libmagic-mgc (= 1:5.30-1+deb9u3),
+ libmagic1 (= 1:5.30-1+deb9u3),
+ libmount1 (= 2.29.2-1+deb9u1),
+ libmpc3 (= 1.0.3-1+b2),
+ libmpfr4 (= 3.1.5-1),
+ libmpx2 (= 6.3.0-18+deb9u1),
+ libncurses5 (= 6.0+20161126-1+deb9u2),
+ libncursesw5 (= 6.0+20161126-1+deb9u2),
+ libnumber-compare-perl (= 0.03-1),
+ libpam-modules (= 1.1.8-3.6),
+ libpam-modules-bin (= 1.1.8-3.6),
+ libpam-runtime (= 1.1.8-3.6),
+ libpam0g (= 1.1.8-3.6),
+ libpcre3 (= 2:8.39-3),
+ libperl5.24 (= 5.24.1-3+deb9u7),
+ libpipeline1 (= 1.4.1-2),
+ libquadmath0 (= 6.3.0-18+deb9u1),
+ libreadline-dev (= 7.0-3),
+ libreadline7 (= 7.0-3),
+ libselinux1 (= 2.6-3+b3),
+ libsemanage-common (= 2.6-2),
+ libsemanage1 (= 2.6-2),
+ libsepol1 (= 2.6-2),
+ libsigsegv2 (= 2.10-5),
+ libsmartcols1 (= 2.29.2-1+deb9u1),
+ libss2 (= 1.43.4-2+deb9u1),
+ libstdc++-6-dev (= 6.3.0-18+deb9u1),
+ libstdc++6 (= 6.3.0-18+deb9u1),
+ libsystemd0 (= 232-25+deb9u12),
+ libtext-glob-perl (= 0.10-1),
+ libtimedate-perl (= 2.3000-2+deb9u1),
+ libtinfo-dev (= 6.0+20161126-1+deb9u2),
+ libtinfo5 (= 6.0+20161126-1+deb9u2),
+ libtool (= 2.4.6-2),
+ libtool-bin (= 2.4.6-2),
+ libtsan0 (= 6.3.0-18+deb9u1),
+ libubsan0 (= 6.3.0-18+deb9u1),
+ libudev1 (= 232-25+deb9u12),
+ libunistring0 (= 0.9.6+really0.9.3-0.1),
+ libustr-1.0-1 (= 1.0.4-6),
+ libuuid1 (= 2.29.2-1+deb9u1),
+ libxml2 (= 2.9.4+dfsg1-2.2+deb9u3),
+ linux-libc-dev (= 4.9.228-1),
+ login (= 1:4.4-4.1),
+ lua5.1 (= 5.1.5-8.1+b2),
+ lua5.2 (= 5.2.4-1.1+b2),
+ lua5.3 (= 5.3.3-1+deb9u1),
+ m4 (= 1.4.18-1),
+ make (= 4.1-9.1),
+ man-db (= 2.7.6.1-2),
+ mawk (= 1.3.3-17+b3),
+ mount (= 2.29.2-1+deb9u1),
+ multiarch-support (= 2.24-11+deb9u4),
+ ncurses-base (= 6.0+20161126-1+deb9u2),
+ ncurses-bin (= 6.0+20161126-1+deb9u2),
+ passwd (= 1:4.4-4.1),
+ patch (= 2.7.5-1+deb9u2),
+ perl (= 5.24.1-3+deb9u7),
+ perl-base (= 5.24.1-3+deb9u7),
+ perl-modules-5.24 (= 5.24.1-3+deb9u7),
+ pkg-config (= 0.29-4+b1),
+ po-debconf (= 1.0.20),
+ readline-common (= 7.0-3),
+ sed (= 4.4-1),
+ sensible-utils (= 0.0.9+deb9u1),
+ sysvinit-utils (= 2.88dsf-59.9),
+ tar (= 1.29b-1.1),
+ util-linux (= 2.29.2-1+deb9u1),
+ xz-utils (= 5.2.2-1.2+b1),
+ zlib1g (= 1:1.2.8.dfsg-5)
+Environment:
+ DEB_BUILD_OPTIONS="parallel=8"
+ LANG="C"
+ LC_ALL="C"
+ LD_LIBRARY_PATH="/usr/lib/libeatmydata"
+ SOURCE_DATE_EPOCH="1603387341"
diff --git a/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/608/artifact/lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.changes b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/608/artifact/lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.changes
new file mode 100644
index 0000000..94f6962
--- /dev/null
+++ b/repoapi/fixtures/jbi_files/lua-ngcp-kamailio-repos/608/artifact/lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.changes
@@ -0,0 +1,35 @@
+Format: 1.8
+Date: Thu, 22 Oct 2020 19:22:21 +0200
+Source: lua-ngcp-kamailio
+Binary: lua-ngcp-kamailio lua-ngcp-kamailio-dev
+Architecture: source amd64
+Version: 5.5.13.1+0~mr5.5.13.1
+Distribution: unstable
+Urgency: medium
+Maintainer: Sipwise Development Team <support@sipwise.com>
+Changed-By: Sipwise Jenkins Builder <jenkins@sipwise.com>
+Description:
+ lua-ngcp-kamailio - lua framework for ngcp-kamailio config
+ lua-ngcp-kamailio-dev - lua framework for ngcp-kamailio config development tests
+Changes:
+ lua-ngcp-kamailio (5.5.13.1+0~mr5.5.13.1) unstable; urgency=medium
+ .
+   * New release.
+Checksums-Sha1:
+ a877fc2f3b1a74c42155611b1c5137b5d462ca65 755 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.dsc
+ ed9235b5de9241ab0c2c3a2d237f2f33aa5e6d1f 34016 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.tar.xz
+ dcd5ea2f2960e53f6c2db30089ed73c6a7b5fc33 25316 lua-ngcp-kamailio-dev_5.5.13.1+0~mr5.5.13.1_amd64.deb
+ 03193c753eca156e8c89873af579ddc53972d454 6164 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.buildinfo
+ 8b16f0ccc74537883d1a70036e00a18f5d727c3b 17284 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.deb
+Checksums-Sha256:
+ d8a4e10552295885ead23c0b9ccfb0782a901cbcbfdadf14687040463fa3e224 755 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.dsc
+ 89ea415c8de43666040f49ff7a0e532707ca019a6a075f39bc9a7e86bda00ed6 34016 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.tar.xz
+ 6ea150ec530dcc3965df0fb62f0e03cabbcd8871f1743c2a0b38cd3a54c65ef7 25316 lua-ngcp-kamailio-dev_5.5.13.1+0~mr5.5.13.1_amd64.deb
+ 82f213960e9914403898b2583331ced85f1fb0ffdff52582698fba5ddc0c2391 6164 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.buildinfo
+ 6e8136cd1a3cc03d5caab27b550cc836356d3ce55293e2686674c45371c10cd7 17284 lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.deb
+Files:
+ 4f4ca5f67003e0d773ca94d5ff28e196 755 libs extra lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.dsc
+ bc7854b667e5ac5f90acfe0d95e163aa 34016 libs extra lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1.tar.xz
+ e4c32bc186276e31545d3e265c8365cd 25316 libs extra lua-ngcp-kamailio-dev_5.5.13.1+0~mr5.5.13.1_amd64.deb
+ 39105226396f9cfa87fb03af86d6337a 6164 libs extra lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.buildinfo
+ 675dd1c6b04170943f00531daf41ddaa 17284 libs extra lua-ngcp-kamailio_5.5.13.1+0~mr5.5.13.1_amd64.deb
diff --git a/repoapi/migrations/0010_gerritrepoinfo_projectname.py b/repoapi/migrations/0010_gerritrepoinfo_projectname.py
new file mode 100644
index 0000000..dacea1e
--- /dev/null
+++ b/repoapi/migrations/0010_gerritrepoinfo_projectname.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.29 on 2020-11-10 14:35
+from django.db import migrations
+from django.db import models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ("repoapi", "0009_allow_blank"),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name="gerritrepoinfo",
+            name="projectname",
+            field=models.CharField(default="unknown", max_length=100),
+            preserve_default=False,
+        ),
+    ]
diff --git a/repoapi/models/gri.py b/repoapi/models/gri.py
index f648eb8..e750e6b 100644
--- a/repoapi/models/gri.py
+++ b/repoapi/models/gri.py
@@ -1,73 +1,112 @@
-# Copyright (C) 2015 The Sipwise Team - http://sipwise.com
-
+# Copyright (C) 2015-2020 The Sipwise Team - http://sipwise.com
+#
 # This program is free software: you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by the Free
 # Software Foundation, either version 3 of the License, or (at your option)
 # any later version.
-
+#
 # This program is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 # more details.
-
+#
 # You should have received a copy of the GNU General Public License along
 # with this program.  If not, see <http://www.gnu.org/licenses/>.
-import logging
-
+import structlog
 from django.db import models
+
 from repoapi import utils
+from repoapi.tasks import jenkins_remove_project
 
-logger = logging.getLogger(__name__)
+logger = structlog.get_logger(__name__)
 
 
 class GerritRepoInfo(models.Model):
     param_ppa = models.CharField(max_length=50, null=False)
     gerrit_change = models.CharField(max_length=50, null=False)
+    projectname = models.CharField(max_length=100)
 
     class Meta:
         unique_together = ["param_ppa", "gerrit_change"]
 
     def __str__(self):
-        return "%s:%s" % (self.param_ppa, self.gerrit_change)
+        return "{}:{}:{}".format(
+            self.param_ppa, self.gerrit_change, self.projectname
+        )
 
 
 def gerrit_repo_add(instance):
+    log = logger.bind(
+        instance=instance,
+    )
+    if instance.param_ppa == "$ppa":
+        log.warn("ppa unset, skip removal")
+        return
     gri = GerritRepoInfo.objects
     ppa, created = gri.get_or_create(
         param_ppa=instance.param_ppa,
-        gerrit_change=instance.gerrit_change)
+        gerrit_change=instance.gerrit_change,
+        projectname=instance.projectname,
+    )
     if created:
-        logging.debug("%s created", ppa)
+        log.debug("ppa created", ppa=ppa)
 
 
 def gerrit_repo_del(instance):
-    if instance.param_ppa == '$ppa':
-        logger.warn("ppa unset, skip removal")
+    log = logger.bind(
+        instance=instance,
+    )
+    if instance.param_ppa == "$ppa":
+        log.warn("ppa unset, skip removal")
         return
     gri = GerritRepoInfo.objects
     try:
-        ppa = gri.get(param_ppa=instance.param_ppa,
-                      gerrit_change=instance.gerrit_change)
+        ppa = gri.get(
+            param_ppa=instance.param_ppa, gerrit_change=instance.gerrit_change
+        )
         ppa.delete()
-        logger.debug("removed %s", ppa)
+        log.debug("removed ppa", ppa=ppa)
     except GerritRepoInfo.DoesNotExist:
         pass
-    if gri.filter(param_ppa=instance.param_ppa).count() == 0:
+    qs = gri.filter(param_ppa=instance.param_ppa)
+    ppa_count = qs.count()
+    project_ppa_count = qs.filter(projectname=instance.projectname).count()
+    if ppa_count == 0:
         utils.jenkins_remove_ppa(instance.param_ppa)
+    elif project_ppa_count == 0:
+        log.debug("remove source+packages from ppa")
+        jenkins_remove_project.delay(instance.id)
+    else:
+        log.debug(
+            "nothing to do here",
+            ppa_count=ppa_count,
+            project_ppa_count=project_ppa_count,
+        )
 
 
 def gerrit_repo_manage(sender, **kwargs):
     if kwargs["created"]:
         instance = kwargs["instance"]
-        if instance.jobname.endswith("-repos") and \
-                instance.result == "SUCCESS":
-            logger.debug("we need to count this %s", instance.param_ppa)
+        log = logger.bind(
+            instance=instance,
+            ppa=instance.param_ppa,
+        )
+        if instance.param_ppa == "$ppa":
+            log.warn("ppa unset, skip")
+            return
+        if (
+            instance.jobname.endswith("-repos")
+            and instance.result == "SUCCESS"
+        ):
+            logger.debug("we need to count this")
             if instance.gerrit_eventtype == "patchset-created":
                 gerrit_repo_add(instance)
             elif instance.gerrit_eventtype == "change-merged":
                 gerrit_repo_del(instance)
-        elif instance.jobname.endswith("-cleanup") and \
-                instance.result == "SUCCESS" and \
-                instance.gerrit_eventtype == "change-abandoned":
-            logger.debug("we need to count this %s", instance.param_ppa)
+        elif (
+            instance.jobname.endswith("-cleanup")
+            and instance.result == "SUCCESS"
+            and instance.gerrit_eventtype == "change-abandoned"
+        ):
+            logger.debug("we need to count this")
             gerrit_repo_del(instance)
diff --git a/repoapi/models/jbi.py b/repoapi/models/jbi.py
index 1d93b10..b8ee0d6 100644
--- a/repoapi/models/jbi.py
+++ b/repoapi/models/jbi.py
@@ -12,20 +12,24 @@
 #
 # You should have received a copy of the GNU General Public License along
 # with this program.  If not, see <http://www.gnu.org/licenses/>.
-import logging
+import glob
+import json
 import re
 from collections import OrderedDict
 from datetime import datetime
 from datetime import timedelta
+from os.path import join
 from urllib.parse import urlparse
 
+import structlog
 from django.db import models
 from django.forms.models import model_to_dict
 
+from debian import deb822
 from repoapi.conf import settings
 from repoapi.tasks import get_jbi_files
 
-logger = logging.getLogger(__name__)
+logger = structlog.get_logger(__name__)
 workfront_re = re.compile(r"TT#(\d+)")
 commit_re = re.compile(r"^(\w{7}) ")
 
@@ -244,6 +248,44 @@ class JenkinsBuildInfo(models.Model):
             self.tag,
         )
 
+    @property
+    def build_path(self):
+        return join(settings.JBI_BASEDIR, self.jobname, str(self.buildnumber))
+
+    @property
+    def build_info(self):
+        path = join(self.build_path, "build.json")
+        try:
+            with open(path, "r") as data_file:
+                data = json.load(data_file)
+            return data
+        except FileNotFoundError:
+            logger.warn("file not found", path=path)
+            return None
+
+    @property
+    def artifacts(self):
+        build_info = self.build_info
+        if build_info is None:
+            return []
+        return [x["fileName"] for x in build_info["artifacts"]]
+
+    @property
+    def source(self):
+        try:
+            return getattr(self, "_source")
+        except AttributeError:
+            pass
+        path = join(self.build_path, "artifact")
+        dscs = glob.glob(join(path, "*.dsc"))
+        if len(dscs) != 1:
+            logger.error("more than one dsc file on artifact dir", path=path)
+            return None
+        with open(dscs[0]) as f:
+            d = deb822.Dsc(f)
+        self._source = d["Source"]
+        return self._source
+
 
 def jbi_manage(sender, **kwargs):
     if kwargs["created"]:
diff --git a/repoapi/tasks.py b/repoapi/tasks.py
index 9b981f0..1d25de4 100644
--- a/repoapi/tasks.py
+++ b/repoapi/tasks.py
@@ -14,10 +14,10 @@
 # with this program.  If not, see <http://www.gnu.org/licenses/>.
 import json
 from datetime import timedelta
-from os.path import basename
+from pathlib import Path
 
+import structlog
 from celery import shared_task
-from celery.utils.log import get_task_logger
 from django.apps import apps
 
 from .celery import app
@@ -28,30 +28,55 @@ from .utils import jenkins_get_artifact
 from .utils import jenkins_get_build
 from .utils import jenkins_get_console
 from .utils import jenkins_get_env
+from .utils import jenkins_remove_project_ppa
 
-logger = get_task_logger(__name__)
+logger = structlog.get_logger(__name__)
+
+
+@app.task(bind=True)
+def jenkins_remove_project(self, jbi_id):
+    JenkinsBuildInfo = apps.get_model("repoapi", "JenkinsBuildInfo")
+    jbi = JenkinsBuildInfo.objects.get(id=jbi_id)
+    log = logger.bind(
+        jbi=jbi,
+    )
+    if (
+        jbi.jobname.endswith("-repos")
+        and jbi.result == "SUCCESS"
+        and jbi.gerrit_eventtype == "change-merged"
+    ):
+        try:
+            jenkins_remove_project_ppa(jbi.param_ppa, jbi.source)
+        except FileNotFoundError as exc:
+            log.warn("source is not there yet, try again in 60 secs")
+            raise self.retry(exc=exc, countdown=60)
 
 
 @shared_task(ignore_result=True)
 def jbi_get_artifact(jbi_id, jobname, buildnumber, artifact_info):
-    path = jenkins_get_artifact(jobname, buildnumber, artifact_info)
-    if basename(path) == settings.HOTFIX_ARTIFACT:
-        jbi_parse_hotfix.delay(jbi_id, path)
+    path = Path(jenkins_get_artifact(jobname, buildnumber, artifact_info))
+    if path.name == settings.HOTFIX_ARTIFACT:
+        jbi_parse_hotfix.delay(jbi_id, str(path))
 
 
 @shared_task(ignore_result=True)
 def get_jbi_files(jbi_id, jobname, buildnumber):
+    log = logger.bind(
+        jbi_id=jbi_id,
+        jobname=jobname,
+        buildnumber=buildnumber,
+    )
     jenkins_get_console(jobname, buildnumber)
     path_envVars = jenkins_get_env(jobname, buildnumber)
     path_build = jenkins_get_build(jobname, buildnumber)
     if is_download_artifacts(jobname):
         with open(path_build) as data_file:
             data = json.load(data_file)
-        logger.debug("job_info:%s", data)
+        log.debug("job_info", data=data)
         for artifact in data["artifacts"]:
             jbi_get_artifact.delay(jbi_id, jobname, buildnumber, artifact)
     else:
-        logger.debug("skip artifacts download for jobname: %s", jobname)
+        log.debug("skip artifacts download")
     if jobname in settings.RELEASE_CHANGED_JOBS:
         app.send_task(
             "release_changed.tasks.process_result", args=[jbi_id, path_envVars]
diff --git a/repoapi/test/base.py b/repoapi/test/base.py
index e4db632..5518dcb 100644
--- a/repoapi/test/base.py
+++ b/repoapi/test/base.py
@@ -28,12 +28,12 @@ JBI_BASEDIR = mkdtemp(dir=os.environ.get("RESULTS"))
 
 @override_settings(DEBUG=True, JBI_BASEDIR=JBI_BASEDIR)
 class BaseTest(TestCase):
-    def setUp(self):
+    def setUp(self, *args, **kwargs):
         from repoapi.conf import settings
 
         mkpath(settings.JBI_BASEDIR, verbose=True)
 
-    def tearDown(self):
+    def tearDown(self, *args, **kwargs):
         from repoapi.conf import settings
 
         if os.path.exists(settings.JBI_BASEDIR):
diff --git a/repoapi/test/test_basic_model.py b/repoapi/test/test_basic_model.py
index 6b060c6..83d6870 100644
--- a/repoapi/test/test_basic_model.py
+++ b/repoapi/test/test_basic_model.py
@@ -1,80 +1,164 @@
-# Copyright (C) 2015 The Sipwise Team - http://sipwise.com
-
+# Copyright (C) 2015-2020 The Sipwise Team - http://sipwise.com
+#
 # This program is free software: you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by the Free
 # Software Foundation, either version 3 of the License, or (at your option)
 # any later version.
-
+#
 # This program is distributed in the hope that it will be useful, but WITHOUT
 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 # more details.
-
+#
 # You should have received a copy of the GNU General Public License along
 # with this program.  If not, see <http://www.gnu.org/licenses/>.
+from os.path import join
 
-from repoapi.models import JenkinsBuildInfo
 from django.test import override_settings
-from repoapi.test.base import BaseTest
+from mock import mock_open
+from mock import patch
+
+from .base import BaseTest
+from repoapi.conf import settings
+from repoapi.models import JenkinsBuildInfo
 
+FIXTURES_PATH = join(settings.BASE_DIR, "repoapi", "fixtures", "jbi_files")
 JBI_HOST = "https://%s/job/fake-gerrit/"
+ARTIFACTS_JSON = """{
+    "artifacts": [
+        {
+            "displayPath": "builddeps.list",
+            "fileName": "builddeps.list",
+            "relativePath": "builddeps.list"
+        }
+    ]
+}"""
 
 
 class JenkinsBuildInfoTestCase(BaseTest):
-
     def test_creation_no_tag(self):
         jbi = JenkinsBuildInfo.objects.create(
-            projectname='fake',
-            jobname='fake-get-code',
+            projectname="fake",
+            jobname="fake-get-code",
             buildnumber=1,
-            result='OK')
+            result="OK",
+        )
         self.assertIsNone(jbi.tag)
 
     def test_empty_tag_with_release(self):
         jbi = JenkinsBuildInfo.objects.create(
-            projectname='fake',
-            jobname='fake-get-code',
+            projectname="fake",
+            jobname="fake-get-code",
             buildnumber=1,
-            result='OK',
-            param_release='release-mr4.0')
+            result="OK",
+            param_release="release-mr4.0",
+        )
         self.assertIsNone(jbi.tag)
 
-    @override_settings(JBI_ALLOWED_HOSTS=['jenkins-dev.local'])
+    @override_settings(JBI_ALLOWED_HOSTS=["jenkins-dev.local"])
     def test_job_url_not_allowed(self):
         job = JenkinsBuildInfo.objects.create(
-            projectname='fake',
-            jobname='fake-get-code',
+            projectname="fake",
+            jobname="fake-get-code",
             buildnumber=1,
-            result='OK',
-            param_release='release-mr4.0')
+            result="OK",
+            param_release="release-mr4.0",
+        )
         self.assertFalse(job.is_job_url_allowed())
-        job.job_url = JBI_HOST % 'jenkins.mgm.sipwise.com'
+        job.job_url = JBI_HOST % "jenkins.mgm.sipwise.com"
         self.assertFalse(job.is_job_url_allowed())
 
     @override_settings(JBI_ALLOWED_HOSTS=[])
     def test_job_url_not_allowed_empty(self):
         job = JenkinsBuildInfo.objects.create(
-            projectname='fake',
-            jobname='fake-get-code',
+            projectname="fake",
+            jobname="fake-get-code",
             buildnumber=1,
-            result='OK',
-            param_release='release-mr4.0')
+            result="OK",
+            param_release="release-mr4.0",
+        )
         self.assertFalse(job.is_job_url_allowed())
-        job.job_url = JBI_HOST % 'jenkins.mgm.sipwise.com'
+        job.job_url = JBI_HOST % "jenkins.mgm.sipwise.com"
         self.assertFalse(job.is_job_url_allowed())
         job.job_url = None
         self.assertFalse(job.is_job_url_allowed())
 
-    @override_settings(JBI_ALLOWED_HOSTS=['jenkins-dev.local',
-                                          'jenkins.local'])
+    @override_settings(
+        JBI_ALLOWED_HOSTS=["jenkins-dev.local", "jenkins.local"]
+    )
     def test_job_url_allowed(self):
         job = JenkinsBuildInfo.objects.create(
-            projectname='fake',
-            jobname='fake-get-code',
+            projectname="fake",
+            jobname="fake-get-code",
             buildnumber=1,
-            result='OK',
-            param_release='release-mr4.0')
-        job.job_url = JBI_HOST % 'jenkins-dev.local'
+            result="OK",
+            param_release="release-mr4.0",
+        )
+        job.job_url = JBI_HOST % "jenkins-dev.local"
         self.assertTrue(job.is_job_url_allowed())
-        job.job_url = JBI_HOST % 'jenkins.local'
+        job.job_url = JBI_HOST % "jenkins.local"
         self.assertTrue(job.is_job_url_allowed())
+
+
+class JenkinsBuildInfoProperties(BaseTest):
+    fixtures = ["test_model_queries"]
+
+    def setUp(self):
+        self.jbi = JenkinsBuildInfo.objects.get(id=1)
+
+    def test_build_path(self):
+        self.assertRegex(self.jbi.build_path, "^.+/fake-source/1$")
+
+    @patch("builtins.open", mock_open(read_data="{}"))
+    def test_build_info(self):
+        self.assertEqual(self.jbi.build_info, {})
+
+    def test_build_info_ko(self):
+        self.assertIsNone(self.jbi.build_info)
+
+    @patch("builtins.open", mock_open(read_data=ARTIFACTS_JSON))
+    def test_artifacts(self):
+        self.assertEqual(self.jbi.artifacts, ["builddeps.list"])
+
+    def test_artifacts_ko(self):
+        self.assertEqual(self.jbi.artifacts, [])
+
+
+@override_settings(JBI_BASEDIR=FIXTURES_PATH)
+class JenkinsBuildInfoSourceProp(BaseTest):
+    fixtures = ["test_model_queries"]
+
+    def setUp(self):
+        self.jbi = JenkinsBuildInfo.objects.get(id=1)
+
+    def tearDown(self, *args, **kwargs):
+        pass  # don't remove FIXTURES_PATH
+
+    def test_source_ko(self):
+        self.assertIsNone(self.jbi.source)
+
+    def test_source(self):
+        params = {
+            "gerrit_patchset": "44323",
+            "gerrit_change": "44323",
+            "gerrit_eventtype": "patchset-created",
+            "tag": "de13c0b6-2e70-4c9d-b3a5-3a476149d2d1",
+            "projectname": "lua-ngcp-kamailio",
+            "git_commit_msg": "TT#95650 mocks/pv: ",
+            "job_url": "https://fake/job/lua-ngcp-kamailio-repos/",
+            "buildnumber": 605,
+            "jobname": "lua-ngcp-kamailio-repos",
+            "result": "SUCCESS",
+            "param_tag": "none",
+            "param_branch": "master",
+            "param_release": "none",
+            "param_release_uuid": "",
+            "param_distribution": "buster",
+            "param_ppa": "gerrit_vseva_95650",
+        }
+        jbi = JenkinsBuildInfo.objects.create(**params)
+        self.assertEqual(jbi.source, "lua-ngcp-kamailio")
+
+    def test_source_already_there(self):
+        self.jbi._source = "fake"
+        self.assertEqual(self.jbi.source, "fake")
diff --git a/repoapi/test/test_gerritinfo.py b/repoapi/test/test_gerritinfo.py
index 5354b65..a4521cb 100644
--- a/repoapi/test/test_gerritinfo.py
+++ b/repoapi/test/test_gerritinfo.py
@@ -19,6 +19,8 @@ from repoapi.models import JenkinsBuildInfo
 from repoapi.test.base import BaseTest
 
 
+@patch("repoapi.models.gri.jenkins_remove_project")
+@patch("repoapi.utils.jenkins_remove_ppa")
 class GerritRepoInfoTestCase(BaseTest):
     def get_defaults(self):
         defaults = {
@@ -39,17 +41,15 @@ class GerritRepoInfoTestCase(BaseTest):
         }
         return defaults
 
-    @patch("repoapi.utils.jenkins_remove_ppa")
-    def test_creation(self, utils):
+    def test_creation(self, rppa, rp):
         JenkinsBuildInfo.objects.create(**self.get_defaults())
         gri = GerritRepoInfo.objects.filter(
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 1)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
-    @patch("repoapi.utils.jenkins_remove_ppa")
-    def test_creation_deletion(self, utils):
+    def test_creation_deletion(self, rppa, rp):
         param = self.get_defaults()
         param["gerrit_eventtype"] = "change-merged"
         JenkinsBuildInfo.objects.create(**param)
@@ -58,10 +58,9 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 0)
-        utils.assert_called_with("gerrit_MT10339_review2054")
+        rppa.assert_called_with("gerrit_MT10339_review2054")
 
-    @patch("repoapi.utils.jenkins_remove_ppa")
-    def test_no_creation(self, utils):
+    def test_no_creation(self, rppa, rp):
         param = self.get_defaults()
         param["jobname"] = "kamailio-get-code"
         JenkinsBuildInfo.objects.create(**param)
@@ -70,10 +69,9 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 0)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
-    @patch("repoapi.utils.jenkins_remove_ppa")
-    def test_creation_review(self, utils):
+    def test_creation_review(self, rppa, rp):
         param = self.get_defaults()
         param["buildnumber"] = 898
         JenkinsBuildInfo.objects.create(**param)
@@ -82,17 +80,16 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 1)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
-    @patch("repoapi.utils.jenkins_remove_ppa")
-    def test_creation_multi_review(self, utils):
+    def test_creation_multi_review(self, rppa, rp):
         param = self.get_defaults()
         JenkinsBuildInfo.objects.create(**param)
         gri = GerritRepoInfo.objects.filter(
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 1)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
         param["projectname"] = "fake"
         param["jobname"] = "fake-repos"
@@ -104,17 +101,16 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 2)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
-    @patch("repoapi.utils.jenkins_remove_ppa")
-    def test_creation_multi_review_no_del(self, utils):
+    def test_creation_multi_review_no_del(self, rppa, rp):
         param = self.get_defaults()
         JenkinsBuildInfo.objects.create(**param)
         gri = GerritRepoInfo.objects.filter(
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 1)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
         param_fake = self.get_defaults()
         param_fake["projectname"] = "fake"
@@ -127,7 +123,7 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 2)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
         param["gerrit_eventtype"] = "change-merged"
         param["buildnumber"] = 898
@@ -137,17 +133,16 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 1)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
-    @patch("repoapi.utils.jenkins_remove_ppa")
-    def test_creation_multi_review_del(self, utils):
+    def test_creation_multi_review_del(self, rppa, rp):
         param = self.get_defaults()
         JenkinsBuildInfo.objects.create(**param)
         gri = GerritRepoInfo.objects.filter(
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 1)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
         param_fake = self.get_defaults()
         param_fake["projectname"] = "fake"
@@ -160,7 +155,7 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 2)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
         param["gerrit_eventtype"] = "change-merged"
         param["buildnumber"] = 898
@@ -170,7 +165,7 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 1)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
         param_fake["buildnumber"] = 9
         param_fake["gerrit_eventtype"] = "change-merged"
@@ -180,17 +175,16 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 0)
-        utils.assert_called_with("gerrit_MT10339_review2054")
+        rppa.assert_called_with("gerrit_MT10339_review2054")
 
-    @patch("repoapi.utils.jenkins_remove_ppa")
-    def test_abandoned_review_del(self, utils):
+    def test_abandoned_review_del(self, rppa, rp):
         param = self.get_defaults()
         JenkinsBuildInfo.objects.create(**param)
         gri = GerritRepoInfo.objects.filter(
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 1)
-        utils.assert_not_called()
+        rppa.assert_not_called()
 
         param["jobname"] = "kamailio-cleanup"
         param["gerrit_eventtype"] = "change-abandoned"
@@ -201,4 +195,4 @@ class GerritRepoInfoTestCase(BaseTest):
             param_ppa="gerrit_MT10339_review2054"
         )
         self.assertEqual(gri.count(), 0)
-        utils.assert_called_with("gerrit_MT10339_review2054")
+        rppa.assert_called_with("gerrit_MT10339_review2054")
diff --git a/repoapi/test/test_tasks.py b/repoapi/test/test_tasks.py
index 0882b8e..b29a42f 100644
--- a/repoapi/test/test_tasks.py
+++ b/repoapi/test/test_tasks.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2017 The Sipwise Team - http://sipwise.com
+# Copyright (C) 2017-2020 The Sipwise Team - http://sipwise.com
 #
 # This program is free software: you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by the Free
@@ -12,12 +12,21 @@
 #
 # You should have received a copy of the GNU General Public License along
 # with this program.  If not, see <http://www.gnu.org/licenses/>.
+from copy import deepcopy
 from datetime import datetime
+from os.path import join
+from unittest.mock import patch
+
+from django.test import override_settings
 
 from repoapi import tasks
+from repoapi.conf import settings
+from repoapi.models import GerritRepoInfo
 from repoapi.models import JenkinsBuildInfo
 from repoapi.test.base import BaseTest
 
+FIXTURES_PATH = join(settings.BASE_DIR, "repoapi", "fixtures", "jbi_files")
+
 
 class TasksTestCase(BaseTest):
     fixtures = ["test_model_queries.json"]
@@ -45,3 +54,141 @@ class TasksTestCase(BaseTest):
         self.assertEqual(JenkinsBuildInfo.objects.count(), prev_count)
         tasks.jbi_purge.delay(None, 3)
         self.assertEqual(JenkinsBuildInfo.objects.count(), prev_count - 1)
+
+
+@override_settings(JBI_BASEDIR=FIXTURES_PATH)
+@patch("repoapi.tasks.jenkins_remove_project_ppa")
+@patch("repoapi.utils.jenkins_remove_ppa")
+class TaskGerritRepoTest(BaseTest):
+    default_params = {
+        "gerrit_patchset": "44323",
+        "gerrit_change": "44323",
+        "gerrit_eventtype": "patchset-created",
+        "tag": "de13c0b6-2e70-4c9d-b3a5-3a476149d2d1",
+        "projectname": "lua-ngcp-kamailio",
+        "git_commit_msg": "TT#95650 mocks/pv: ",
+        "job_url": "https://fake/job/lua-ngcp-kamailio-repos/",
+        "buildnumber": 605,
+        "jobname": "lua-ngcp-kamailio-repos",
+        "result": "SUCCESS",
+        "param_tag": "none",
+        "param_branch": "master",
+        "param_release": "none",
+        "param_release_uuid": "",
+        "param_distribution": "buster",
+        "param_ppa": "gerrit_vseva_95650",
+    }
+
+    def setUp(self, *args, **kwargs):
+        super(TaskGerritRepoTest, self).setUp(*args, **kwargs)
+        self.params = deepcopy(self.default_params)
+
+    def tearDown(self, *args, **kwargs):
+        pass  # don't remove FIXTURES_PATH
+
+    def test_ppa_created(self, rppa, rp):
+        jbi = JenkinsBuildInfo.objects.create(**self.params)
+        self.assertIsNotNone(jbi.source)
+        rp.assert_not_called()
+        rppa.assert_not_called()
+
+    def test_ppa_created_failed(self, rppa, rp):
+        self.params["result"] = "FAILED"
+        jbi = JenkinsBuildInfo.objects.create(**self.params)
+        self.assertIsNotNone(jbi.source)
+        rp.assert_not_called()
+        rppa.assert_not_called()
+
+    def test_repo_not_ppa(self, rppa, rp):
+        self.params["param_ppa"] = "$ppa"
+        JenkinsBuildInfo.objects.create(**self.params)
+        rp.assert_not_called()
+        rppa.assert_not_called()
+
+    def test_not_repo_job(self, rppa, rp):
+        self.params["jobname"] = "lua-ngcp-kamailio-binaries"
+        JenkinsBuildInfo.objects.create(**self.params)
+        rp.assert_not_called()
+        rppa.assert_not_called()
+
+    def test_ppa_merged_just_one_review(self, rppa, rp):
+        self.params["gerrit_eventtype"] = "change-merged"
+        jbi = JenkinsBuildInfo.objects.create(**self.params)
+        self.assertIsNotNone(jbi.source)
+        rp.assert_not_called()
+        rppa.assert_called_with("gerrit_vseva_95650")
+
+    def test_ppa_merged_multiple_just_one_project(self, rppa, rp):
+        ppa = GerritRepoInfo.objects.filter(param_ppa=self.params["param_ppa"])
+        self.assertEqual(ppa.count(), 0)
+
+        JenkinsBuildInfo.objects.create(**self.params)
+        self.assertEqual(ppa.count(), 1)
+
+        self.params["gerrit_change"] = "54"
+        self.params["gerrit_patchset"] = "54"
+        JenkinsBuildInfo.objects.create(**self.params)
+        self.assertEqual(ppa.count(), 2)
+
+        self.params = deepcopy(self.default_params)
+        self.params["gerrit_eventtype"] = "change-merged"
+        jbi = JenkinsBuildInfo.objects.create(**self.params)
+        self.assertIsNotNone(jbi.source)
+        self.assertEqual(ppa.count(), 1)
+        rp.assert_not_called()
+        rppa.assert_not_called()
+
+    def test_ppa_cleaned(self, rppa, rp):
+        self.test_ppa_merged_multiple_just_one_project()
+        # be sure that the PPA is removed when all reviews merged
+        self.params["gerrit_change"] = "54"
+        self.params["gerrit_patchset"] = "54"
+        self.params["gerrit_eventtype"] = "change-merged"
+        JenkinsBuildInfo.objects.create(**self.params)
+        rp.assert_not_called()
+        rppa.assert_called_with("gerrit_vseva_95650")
+
+    def _prepare(self):
+        ppa = GerritRepoInfo.objects.filter(param_ppa=self.params["param_ppa"])
+        self.assertEqual(ppa.count(), 0)
+
+        self.params["gerrit_change"] = "54"
+        self.params["gerrit_patchset"] = "54"
+        self.params["projectname"] = "vmnotify"
+        self.params["jobname"] = "vmnotify-repos"
+        JenkinsBuildInfo.objects.create(**self.params)
+        self.assertEqual(ppa.count(), 1)
+
+        self.params = deepcopy(self.default_params)
+        JenkinsBuildInfo.objects.create(**self.params)
+        self.assertEqual(ppa.count(), 2)
+        return ppa
+
+    def test_ppa_merged_more_reviews_open_same_project(self, rppa, rp):
+        ppa = self._prepare()
+        ppa_project = ppa.filter(projectname=self.params["projectname"])
+        self.assertEqual(ppa_project.count(), 1)
+
+        self.params["gerrit_change"] = "545"
+        self.params["gerrit_patchset"] = "545"
+        JenkinsBuildInfo.objects.create(**self.params)
+        self.assertEqual(ppa.count(), 3)
+        self.assertEqual(ppa_project.count(), 2)
+
+        self.params["gerrit_eventtype"] = "change-merged"
+        jbi = JenkinsBuildInfo.objects.create(**self.params)
+        self.assertIsNotNone(jbi.source)
+        self.assertEqual(ppa.count(), 2)
+        self.assertEqual(ppa_project.count(), 1)
+        rp.assert_not_called()
+        rppa.assert_not_called()
+
+    def test_ppa_merged_multiple_more_reviews_open(self, rppa, rp):
+        ppa = self._prepare()
+
+        self.params["gerrit_eventtype"] = "change-merged"
+        jbi = JenkinsBuildInfo.objects.create(**self.params)
+        self.assertIsNotNone(jbi.source)
+        self.assertEqual(ppa.count(), 1)
+        rp.assert_called_once_with("gerrit_vseva_95650", "lua-ngcp-kamailio")
+        rppa.assert_not_called()
diff --git a/repoapi/utils.py b/repoapi/utils.py
index 3dfe581..9c8480b 100644
--- a/repoapi/utils.py
+++ b/repoapi/utils.py
@@ -12,18 +12,18 @@
 #
 # You should have received a copy of the GNU General Public License along
 # with this program.  If not, see <http://www.gnu.org/licenses/>.
-import logging
 import os
 import re
 import subprocess
 from distutils.dir_util import mkpath
 
 import requests
+import structlog
 from requests.auth import HTTPBasicAuth
 
 from .conf import settings
 
-logger = logging.getLogger(__name__)
+logger = structlog.get_logger(__name__)
 
 JBI_CONSOLE_URL = "{}/job/{}/{}/consoleText"
 JBI_BUILD_URL = "{}/job/{}/{}/api/json"
@@ -32,12 +32,15 @@ JBI_ENVVARS_URL = "{}/job/{}/{}/injectedEnvVars/api/json"
 
 
 def executeAndReturnOutput(command, env=None):
+    log = logger.bind(
+        command=command,
+        env=env,
+    )
     proc = subprocess.Popen(
         command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env
     )
     stdoutdata, stderrdata = proc.communicate()
-    logger.debug("<stdout>%s</stdout>", stdoutdata)
-    logger.debug("<strerr>%s</stderr>", stderrdata)
+    log.debug("command done", stdout=stdoutdata, stderr=stderrdata)
     return proc.returncode, stdoutdata, stderrdata
 
 
@@ -51,13 +54,17 @@ def get_jenkins_response(url):
 
 
 def dlfile(url, path):
+    log = logger.bind(
+        url=url,
+        path=path,
+    )
     if settings.DEBUG:
-        logger.info("I would call %s", url)
+        log.info("_NOT_ calling due to DEBUG is set", url)
     else:
         auth = HTTPBasicAuth(
             settings.JENKINS_HTTP_USER, settings.JENKINS_HTTP_PASSWD
         )
-        logger.debug("url:[%s]", url)
+        log.debug("get request")
         req = requests.get(url, auth=auth)
         with open(path, "wb") as local_file:
             for chunk in req.iter_content(chunk_size=128):
@@ -65,17 +72,18 @@ def dlfile(url, path):
 
 
 def open_jenkins_url(url):
-    logger.debug("Trying to retrieve url: [%s]", url)
+    log = logger.bind(
+        url=url,
+    )
+    log.debug("Trying to retrieve")
     try:
         res = get_jenkins_response(url)
-        logger.debug("OK[{}] URL[{}]".format(res.status_code, url))
+        log.debug("OK", status_code=res.status_code)
         return True
     except requests.HTTPError as e:
-        logger.error(
-            "Error[{}] retrieving URL[{}]: {}".format(res.status_code, url, e)
-        )
+        log.error("Error %s", e, status_code=res.status_code)
     except Exception as e:
-        logger.error("Fatal error retrieving URL[{}]: {}".format(url, e))
+        log.error("Fatal error retrieving: %s", e)
 
     return False
 
@@ -86,8 +94,31 @@ def jenkins_remove_ppa(repo):
         "token=%s&repository=%s"
         % (settings.JENKINS_URL, settings.JENKINS_TOKEN, repo)
     )
+    log = logger.bind(
+        repo=repo,
+        url=url,
+    )
     if settings.DEBUG:
-        logger.debug("I would call %s", url)
+        log.debug("_NOT_ calling due to DEBUG is set", url)
+    else:
+        open_jenkins_url(url)
+
+
+def jenkins_remove_project_ppa(repo, source):
+    url = (
+        "%s/job/remove-reprepro-project/buildWithParameters?"
+        "token=%s&repository=%s&source=%s"
+        % (settings.JENKINS_URL, settings.JENKINS_TOKEN, repo, source)
+    )
+    log = logger.bind(
+        repo=repo,
+        source=source,
+        url=url,
+    )
+    if source is None:
+        raise FileNotFoundError()
+    if settings.DEBUG:
+        log.debug("_NOT_ calling due to DEBUG is set")
     else:
         open_jenkins_url(url)
 
@@ -95,7 +126,12 @@ def jenkins_remove_ppa(repo):
 def _jenkins_get(url, base_path, filename):
     mkpath(base_path)
     path = os.path.join(base_path, filename)
-    logger.debug("url:[%s] path[%s]", url, path)
+    log = logger.bind(
+        base_path=base_path,
+        filename=filename,
+        url=url,
+    )
+    log.debug("download file from jenkins", url, path)
     dlfile(url, path)
     return path
 
@@ -138,7 +174,6 @@ def workfront_note_send(_id, message):
         "--taskid=%s" % _id,
         '--message="%s"' % message,
     ]
-    logger.debug("workfront-jenkins-update command: %s", command)
     res = executeAndReturnOutput(command)
     if res[0] != 0:
         logger.error("can't post workfront note. %s. %s", res[1], res[2])
@@ -148,7 +183,6 @@ def workfront_note_send(_id, message):
 
 def get_next_release(branch):
     command = ["/usr/bin/meta-release-helper", "--next-release", branch]
-    logger.debug("meta-release-helper command: %s", command)
     res = executeAndReturnOutput(command)
     if res[0] != 0:
         logger.error(
@@ -176,7 +210,6 @@ def workfront_set_release_target(_id, release):
         "--taskid=%s" % _id,
         "--release=%s" % release,
     ]
-    logger.debug("workfront-target-task command: %s", command)
     res = executeAndReturnOutput(command)
     if res[0] != 0:
         logger.error("can't set release target. %s. %s", res[1], res[2])
diff --git a/tox.ini b/tox.ini
index db753b6..66f9280 100644
--- a/tox.ini
+++ b/tox.ini
@@ -10,6 +10,10 @@ filterwarnings =
 	error::django.utils.deprecation.RemovedInNextVersionWarning:repoapi[.*]
 #log_cli = true
 #log_cli_level = DEBUG
+pep8ignore = W503
+
+[pep8]
+ignore = W503
 
 [coverage:run]
 data_file = ${RESULTS}/.coverage