diff --git a/.gitignore b/.gitignore
index dc28167..e457b03 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,6 @@
/.tox/
-/dir2module/*.egg-info/
-/dir2module/build/
-/dir2module/dist/
-/repo2module/*.egg-info/
-/repo2module/build/
-/repo2module/dist/
+/*/*.egg-info/
+/*/build/
+/*/dist/
__pycache__/
+.vscode/
diff --git a/.tito/packages/modulemd-tools b/.tito/packages/modulemd-tools
index ab403cf..9f9c5a0 100644
--- a/.tito/packages/modulemd-tools
+++ b/.tito/packages/modulemd-tools
@@ -1 +1 @@
-0.7-1 ./
+0.7-6 ./
diff --git a/.tito/releasers.conf b/.tito/releasers.conf
index 6ccadd0..62fd4b9 100644
--- a/.tito/releasers.conf
+++ b/.tito/releasers.conf
@@ -1,7 +1,7 @@
[fedora]
releaser = tito.release.FedoraGitReleaser
-branches = master f32 f33 epel8
+branches = rawhide f33 f34 f35
[copr]
releaser = tito.release.CoprReleaser
-project_name = frostyx/modulemd-tools
\ No newline at end of file
+project_name = frostyx/modulemd-tools
diff --git a/.tito/tito.props b/.tito/tito.props
index eab3f19..74b55a4 100644
--- a/.tito/tito.props
+++ b/.tito/tito.props
@@ -1,5 +1,5 @@
[buildconfig]
-builder = tito.builder.Builder
-tagger = tito.tagger.VersionTagger
+builder = tito.builder.UpstreamBuilder
+tagger = tito.tagger.ReleaseTagger
changelog_do_not_remove_cherrypick = 0
changelog_format = %s (%ae)
diff --git a/.travis.yml b/.travis.yml
index ea4a3c1..62c815b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,5 +16,13 @@ jobs:
script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
- env: TOXENV=py39 MODULEMD_TOOL=dir2module SITEPACKAGES=true
script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
+ - env: TOXENV=py39 MODULEMD_TOOL=createrepo_mod SITEPACKAGES=true
+ script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
+ - env: TOXENV=py39 MODULEMD_TOOL=modulemd-merge SITEPACKAGES=true
+ script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
+ - env: TOXENV=py39 MODULEMD_TOOL=modulemd_tools SITEPACKAGES=true
+ script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
+ - env: TOXENV=py39 MODULEMD_TOOL=bld2repo SITEPACKAGES=true
+ script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
- env: TOXENV=flake8
script: ./travis-stage.sh docker_pull && ./travis-stage.sh test
diff --git a/README.md b/README.md
index a947860..e7eeb6a 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,6 @@ For more information about `modulemd-merge`, please see
### modulemd-generate-macros
-
Generate `module-build-macros` SRPM package, which is a central piece
for building modules. It should be present in the buildroot before any
other module packages are submitted to be built.
@@ -57,6 +56,50 @@ other tools yet, be cautious.**
[modulemd_tools/README.md](modulemd_tools/README.md)
+### bld2repo
+Simple tool for dowloading build required RPMs of a modular build from koji.
+
+For more information about `bld2repo`, please see
+[bld2repo/README.md](bld2repo/README.md)
+
+
+## Installation instructions
+
+The `modulemd-tools` package is available in the official Fedora
+repositories, and RHEL 8.5 and higher. As such, it can be easily
+installed with:
+
+```
+dnf install modulemd-tools
+```
+
+There is also a Copr repository providing up-to-date stable builds for
+EPEL8. It is recommended to use this repository for installing
+`modulemd-tools` on RHEL 8.4 and lower.
+
+```
+dnf copr enable frostyx/modulemd-tools-epel
+dnf install modulemd-tools
+```
+
+If you prefer to install the latest stable package from this
+repository, use
+
+```
+git clone https://github.com/rpm-software-management/modulemd-tools.git
+cd modulemd-tools
+sudo dnf builddep modulemd-tools.spec
+tito build --rpm --install
+```
+
+Alternatively, if you want to build and install a package from the
+latest commit, use
+
+```
+tito build --rpm --test --install
+```
+
+
## Use cases
### Creating a module repository from a regular repository
diff --git a/bld2repo/README.md b/bld2repo/README.md
new file mode 100644
index 0000000..7b5f9b5
--- /dev/null
+++ b/bld2repo/README.md
@@ -0,0 +1,25 @@
+# bld2repo
+
+Simple tool which will download modular build dependencies from a
+modular build in a koji instance and create a RPM repository out of it.
+
+## usage
+
+Provide a build id of modular build in koji and the cli tool will
+download all the rpms tagged in a build tag of a modular rpm build.
+
+```
+$ bld2repo --build-id 1234
+```
+
+After the download is finished the tool will call createrepo_c on the
+working directory, creating a rpm repository.
+
+The defaults are set to the current fedora koji instance.
+If you are using a different koji instance please adjust those
+values through script arguments. For more information about script
+arguments please run:
+
+```
+$ bld2repo -h
+```
\ No newline at end of file
diff --git a/bld2repo/bld2repo/__init__.py b/bld2repo/bld2repo/__init__.py
new file mode 100644
index 0000000..2a6c071
--- /dev/null
+++ b/bld2repo/bld2repo/__init__.py
@@ -0,0 +1,142 @@
+import os
+import sys
+import urllib.request
+import subprocess
+
+import koji
+
+
+def get_buildrequire_pkgs_from_build(build_id, session, config):
+ """
+ Function which queries koji for pkgs whom belong to a given build tag
+ of a koji build and paires rpms with their respective package.
+
+ :param str build_id: build id of a build in koji.
+ :param koji.ClientSession session: koji connection session object
+ :return: list of pairings of package and rpms.
+ :rtype: list
+ """
+ print("Retriewing build metadata from: ", config.koji_host)
+ build = session.getBuild(build_id)
+ if not build:
+ raise Exception("Build with id '{id}' has not been found.".format(id=build_id))
+
+ print("Build with the ID", build_id, "found.")
+ tags = session.listTags(build["build_id"])
+
+ build_tag = [t["name"] for t in tags if t["name"].endswith("-build")]
+ if not build_tag:
+ raise Exception("Build with id '{id}' is not tagged in a 'build' tag.".format(id=build_id))
+
+ tag_data = session.listTaggedRPMS(build_tag[0], latest=True, inherit=True)
+
+ print("Found the build tag '", build_tag[0], "' associated with the build.")
+ tagged_rpms = tag_data[0]
+ tagged_pkgs = tag_data[1]
+ pkgs = []
+ archs = [config.arch, "noarch"]
+ print("Gathering packages and rpms tagged in '", build_tag[0],"'.")
+ for pkg in tagged_pkgs:
+ pkg_md = {
+ "package": pkg,
+ "rpms": [],
+ }
+
+ for rpm in tagged_rpms:
+ if pkg["build_id"] == rpm["build_id"] and rpm["arch"] in archs:
+ pkg_md["rpms"].append(rpm)
+ tagged_rpms.remove(rpm)
+
+ if pkg_md["rpms"]:
+ pkgs.append(pkg_md)
+ print("Gathering done.")
+ return pkgs
+
+
+def add_rpm_urls(pkgs, config):
+ """
+ For each rpm from a package creates an download url and adds it to the package.
+
+ :param list pkgs: list of packages
+ :return pkgs: list of packages and their rpms
+ :rtype: list
+ :return rpm_num: number of rpms
+ :rtype: int
+ """
+ rpm_num = 0
+ for pkg in pkgs:
+ build_path = koji.pathinfo.build(pkg["package"]).replace(koji.pathinfo.topdir, "")
+ pkg["rpm_urls"] = []
+ for rpm in pkg["rpms"]:
+ rpm_num += 1
+ rpm_filename = "-".join([rpm["name"], rpm["version"],
+ rpm["release"]]) + "." + rpm["arch"] + ".rpm"
+ rpm_url = config.koji_storage_host + build_path + "/" + rpm["arch"] + "/" + rpm_filename
+ pkg["rpm_urls"].append(rpm_url)
+
+
+ return pkgs, rpm_num
+
+
+def download_file(url, target_pkg_dir, filename):
+ """
+ Wrapper function for downloading a file
+
+ :param str url: url to a file
+ :param str target_pkg_dir: the dir where the file should be downloaded
+ :param str filename: the name of the downloaded file
+ """
+ abs_file_path = "/".join([target_pkg_dir, filename])
+ try:
+ urllib.request.urlretrieve(url, abs_file_path)
+ except Exception as ex:
+ raise Exception("HTTP error for url: {url}\nError message: {msg}\nHTTP code: {code}".format(
+ url=ex.url, msg=ex.msg, code=ex.code))
+
+
+def rpm_bulk_download(pkgs, rpm_num, working_dir):
+ """
+ Downloads all the rpms from which belong to a package.
+
+ :param list pkgs: list of pkgs with their rpms and urls to those rpms
+ :param int rpm_num: number of all the rpms included in pkgs
+ :param str working_dir: the dir where the rpms will be downloaded
+ """
+ print("Starting bulk download of rpms...")
+ rpm_dwnlded = 0
+
+ for pkg in pkgs:
+ for url in pkg["rpm_urls"]:
+ # we print the status of the download
+ status = "[{done}/{total}]".format(done=rpm_dwnlded, total=rpm_num)
+ print(status, end="\r", flush=True)
+ # we store the rpm in a similar location as it is on the storage server
+ url_parts = url.split("/")
+ filename = url_parts[-1]
+ arch = url_parts[-2]
+ pkg_name = "-".join([url_parts[-5], url_parts[-4], url_parts[-3]])
+ target_pkg_dir = "/".join([working_dir, pkg_name, arch])
+ # we create the package dir if it is not created
+ if not os.path.exists(target_pkg_dir):
+ os.makedirs(target_pkg_dir)
+ else:
+ # if we downloaded the file already we skip
+ file_path = target_pkg_dir + "/" + filename
+ if os.path.exists(file_path):
+ rpm_dwnlded += 1
+ continue
+ download_file(url, target_pkg_dir, filename)
+ rpm_dwnlded += 1
+
+ # update the status last time to mark all of the rpms downloaded
+ status = "[{done}/{total}]".format(done=rpm_dwnlded, total=rpm_num)
+ print(status)
+ print("Download successful.")
+
+
+def create_repo(working_dir):
+ print("Calling createrepo_c...")
+ args = ["createrepo_c", working_dir]
+ subprocess.Popen(args, cwd=working_dir).communicate()
+ print("Repo created.")
+
diff --git a/bld2repo/bld2repo/cli.py b/bld2repo/bld2repo/cli.py
new file mode 100644
index 0000000..bdf7197
--- /dev/null
+++ b/bld2repo/bld2repo/cli.py
@@ -0,0 +1,58 @@
+import argparse
+import os
+
+from bld2repo import (get_buildrequire_pkgs_from_build, add_rpm_urls, rpm_bulk_download,
+ create_repo)
+from bld2repo.config import Config
+from bld2repo.utils import get_koji_session
+
+
+def get_arg_parser():
+ description = (
+ "When provided with a build id it will download all buildrequired RPMs"
+ "of a modular koji build into the provided directory and create a repository out of it."
+ )
+ parser = argparse.ArgumentParser("bld2repo", description=description,
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+ parser.add_argument("-b", "--build-id", required=True, type=int, help="ID of a koji build.")
+ parser.add_argument("-d", "--result-dir", help="Directory where the RPMs are downloaded.",
+ default=".", type=str)
+ parser.add_argument("-a", "--arch", help=("For which architecture the RPMs should be download"
+ "ed. The 'noarch' is included automatically."),
+ default="x86_64", type=str)
+ parser.add_argument("-k", "--koji-host", type=str,
+ default="https://koji.fedoraproject.org/kojihub",
+ help="Koji host base url")
+ parser.add_argument("-s", "--koji-storage-host", type=str,
+ default="https://kojipkgs.fedoraproject.org",
+ help=("Koji storage storage host base url. Server where the RPMs are "
+ "stored. Required to be used together with `--koji-host`."))
+ return parser
+
+
+def main():
+ parser = get_arg_parser()
+ args = parser.parse_args()
+
+ koji_host_dflt = parser.get_default("koji_host")
+
+ if args.koji_host != koji_host_dflt:
+ koji_storage_dflt = parser.get_default("koji_storage_host")
+ if args.koji_storage_host == koji_storage_dflt:
+ parser.error("--koji-host and --koji-storage-host need to be used to together.")
+
+ config = Config(args.koji_host, args.koji_storage_host, args.arch, args.result_dir)
+ session = get_koji_session(config)
+
+ pkgs = get_buildrequire_pkgs_from_build(args.build_id, session, config)
+
+ pkgs, rpm_num = add_rpm_urls(pkgs, config)
+
+ rpm_bulk_download(pkgs, rpm_num, config.result_dir)
+
+ create_repo(config.result_dir)
+
+
+if __name__ == "__main__":
+ main()
+
diff --git a/bld2repo/bld2repo/config.py b/bld2repo/bld2repo/config.py
new file mode 100644
index 0000000..6e53742
--- /dev/null
+++ b/bld2repo/bld2repo/config.py
@@ -0,0 +1,8 @@
+class Config():
+
+ def __init__(self, koji_host, koji_storage_host, arch, result_dir):
+ self.koji_host = koji_host
+ self.koji_storage_host = koji_storage_host
+ self.arch = arch
+ self.result_dir = result_dir
+
diff --git a/bld2repo/bld2repo/utils.py b/bld2repo/bld2repo/utils.py
new file mode 100644
index 0000000..9d3a2e1
--- /dev/null
+++ b/bld2repo/bld2repo/utils.py
@@ -0,0 +1,9 @@
+import koji
+
+
+def get_koji_session(config):
+
+ session = koji.ClientSession(config.koji_host)
+
+ return session
+
diff --git a/bld2repo/requirements.txt b/bld2repo/requirements.txt
new file mode 100644
index 0000000..5dd5f84
--- /dev/null
+++ b/bld2repo/requirements.txt
@@ -0,0 +1 @@
+koji
\ No newline at end of file
diff --git a/bld2repo/setup.py b/bld2repo/setup.py
new file mode 100644
index 0000000..5c6a6be
--- /dev/null
+++ b/bld2repo/setup.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+import os.path
+
+from setuptools import setup, find_packages
+
+dirname = os.path.dirname(os.path.realpath(__file__))
+
+with open(os.path.join(dirname, "README.md"), "r") as fh:
+ long_description = fh.read()
+
+with open(os.path.join(dirname, 'requirements.txt'), "r") as f:
+ requires = f.read().splitlines()
+
+setup(
+ name='bld2repo',
+ version='0.1',
+ packages=find_packages(exclude=("tests",)),
+ url='https://github.com/rpm-software-management/modulemd-tools',
+ license='MIT',
+ author='Martin Čurlej',
+ author_email='mcurlej@redhat.com',
+ description=('Tool to download modular build dependencies of '
+ 'a modular build from koji.'),
+ long_description=long_description,
+ long_description_content_type='text/markdown',
+ install_requires=requires,
+ entry_points={
+ 'console_scripts': [
+ 'bld2repo=bld2repo.cli:main'],
+ },
+ classifiers=[
+ "Programming Language :: Python :: 3",
+ "License :: OSI Approved :: MIT License",
+ "Operating System :: POSIX :: Linux",
+ ],
+ include_package_data=True,
+)
+
diff --git a/bld2repo/test-requirements.txt b/bld2repo/test-requirements.txt
new file mode 100644
index 0000000..55b033e
--- /dev/null
+++ b/bld2repo/test-requirements.txt
@@ -0,0 +1 @@
+pytest
\ No newline at end of file
diff --git a/bld2repo/tests/__init__.py b/bld2repo/tests/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/bld2repo/tests/test_bld2repo.py b/bld2repo/tests/test_bld2repo.py
new file mode 100644
index 0000000..9255014
--- /dev/null
+++ b/bld2repo/tests/test_bld2repo.py
@@ -0,0 +1,276 @@
+import os
+from unittest import mock
+import tempfile
+
+import pytest
+
+from bld2repo import (get_buildrequire_pkgs_from_build, add_rpm_urls, rpm_bulk_download,
+ create_repo)
+from bld2repo.config import Config
+from tests.utils import load_test_data
+
+
+def test_get_buildrequire_pkgs_from_build_default():
+ """ Test for gathering x86_64 build dependencies."""
+
+ config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+ build = load_test_data("pki_core_build")
+ tags = load_test_data("pki_core_tags")
+ build_tag_md = load_test_data("pki_core_build_tag")
+
+ mock_session = mock.Mock()
+
+ mock_session.getBuild.return_value = build
+ mock_session.listTags.return_value = tags
+ mock_session.listTaggedRPMS.return_value = build_tag_md
+
+ pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+
+ assert type(pkgs) == list
+ assert len(pkgs) == 50
+ for pkg in pkgs:
+ for rpm in pkg["rpms"]:
+ assert rpm["arch"] in ["x86_64", "noarch"]
+
+
+def test_get_buildrequire_pkgs_from_build_aarch64():
+ """ Test for gathering aarch64 build dependencies."""
+
+ config = Config("koji_fake_url", "koji_fake_storage", "aarch64", ".")
+ build = load_test_data("pki_core_build")
+ tags = load_test_data("pki_core_tags")
+ build_tag_md = load_test_data("pki_core_build_tag")
+
+ mock_session = mock.Mock()
+
+ mock_session.getBuild.return_value = build
+ mock_session.listTags.return_value = tags
+ mock_session.listTaggedRPMS.return_value = build_tag_md
+
+ pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+
+ assert type(pkgs) == list
+ assert len(pkgs) == 50
+ for pkg in pkgs:
+ for rpm in pkg["rpms"]:
+ assert rpm["arch"] in ["aarch64", "noarch"]
+
+
+
+def test_add_rpm_urls():
+ """ Test for adding rpm urls to the pkgs dict for each package """
+
+ config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+ build = load_test_data("pki_core_build")
+ tags = load_test_data("pki_core_tags")
+ build_tag_md = load_test_data("pki_core_build_tag")
+
+ mock_session = mock.Mock()
+
+ mock_session.getBuild.return_value = build
+ mock_session.listTags.return_value = tags
+ mock_session.listTaggedRPMS.return_value = build_tag_md
+
+ pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+ pkgs, rpm_num = add_rpm_urls(pkgs, config)
+
+ expected_rpm_num = 0
+ for pkg in pkgs:
+ assert len(pkg["rpms"]) == len(pkg["rpm_urls"])
+ expected_rpm_num += len(pkg["rpms"])
+ for rpm in pkg["rpms"]:
+ rpm_filename = ("-".join([rpm["name"], rpm["version"], rpm["release"]]) +
+ "." + rpm["arch"])
+ pkg_md = pkg["package"]
+ expected_url = (config.koji_storage_host + "/vol/" + pkg_md["volume_name"] +
+ "/packages/" + pkg_md["package_name"] + "/" + pkg_md["version"] + "/" +
+ pkg_md["release"] + "/" + rpm["arch"] + "/" + rpm_filename + ".rpm")
+ assert expected_url in pkg["rpm_urls"]
+
+ assert expected_rpm_num == rpm_num
+
+
+@mock.patch("bld2repo.download_file")
+def test_rpm_bulk_download(mock_download_file):
+ """ Test if the rpm files are downloaded. """
+
+ tmp_dir = tempfile.TemporaryDirectory()
+ config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+ build = load_test_data("pki_core_build")
+ tags = load_test_data("pki_core_tags")
+ build_tag_md = load_test_data("pki_core_build_tag")
+
+ mock_session = mock.Mock()
+
+ mock_session.getBuild.return_value = build
+ mock_session.listTags.return_value = tags
+ mock_session.listTaggedRPMS.return_value = build_tag_md
+
+
+ def download_file(url, target_pkg_dir, filename):
+ """ Mock function which fakes rpm downloads """
+ abs_file_path = "/".join([target_pkg_dir, filename])
+ open(abs_file_path, "w").close()
+
+ mock_download_file.side_effect = download_file
+
+ pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+ pkgs, rpm_num = add_rpm_urls(pkgs, config)
+ rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+ # we gather all the files created on disk
+ created_rpm_files = []
+ for _, _, f in os.walk(tmp_dir.name):
+ created_rpm_files += f
+
+ # test if the number of created files is the same as provided by the metadata
+ assert len(created_rpm_files) == rpm_num
+
+ # test if the filenames are the same as described in the metadata
+ for pkg in pkgs:
+ for rpm_url in pkg["rpm_urls"]:
+ rpm = rpm_url.split("/")[-1]
+ assert rpm in created_rpm_files
+
+
+
+@mock.patch("bld2repo.download_file")
+def test_rpm_bulk_download_pkg_exist(mock_download_file):
+ """ Test if we create each pkg dir only once. """
+
+ tmp_dir = tempfile.TemporaryDirectory()
+ config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+ build = load_test_data("pki_core_build")
+ tags = load_test_data("pki_core_tags")
+ build_tag_md = load_test_data("pki_core_build_tag")
+
+ mock_session = mock.Mock()
+
+ mock_session.getBuild.return_value = build
+ mock_session.listTags.return_value = tags
+ mock_session.listTaggedRPMS.return_value = build_tag_md
+
+
+ def download_file(url, target_pkg_dir, filename):
+ """ Mock function which fakes rpm downloads """
+ abs_file_path = "/".join([target_pkg_dir, filename])
+ open(abs_file_path, "w").close()
+
+ mock_download_file.side_effect = download_file
+
+ pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+ pkgs, rpm_num = add_rpm_urls(pkgs, config)
+ rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+ with mock.patch("bld2repo.os.makedirs") as mock_makedirs:
+ rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+ assert not mock_makedirs.call_count
+
+
+@mock.patch("bld2repo.download_file")
+def test_rpm_bulk_download_rpm_file_exists(mock_download_file):
+ """ Test if we download each rpm file only once. If the file exists we skip it. """
+
+ tmp_dir = tempfile.TemporaryDirectory()
+ config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+ build = load_test_data("pki_core_build")
+ tags = load_test_data("pki_core_tags")
+ build_tag_md = load_test_data("pki_core_build_tag")
+
+ mock_session = mock.Mock()
+
+ mock_session.getBuild.return_value = build
+ mock_session.listTags.return_value = tags
+ mock_session.listTaggedRPMS.return_value = build_tag_md
+
+
+ def download_file(url, target_pkg_dir, filename):
+ """ Mock function which fakes rpm downloads """
+ abs_file_path = "/".join([target_pkg_dir, filename])
+ open(abs_file_path, "w").close()
+
+ mock_download_file.side_effect = download_file
+
+ pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+ pkgs, rpm_num = add_rpm_urls(pkgs, config)
+ rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+ rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+
+ # the call_count should be the same as the number of rpms in the metadata.
+ # we called the rpm_bulk_download function twice, but the second time the download
+ # part should be skipped for the same dir.
+ assert mock_download_file.call_count == rpm_num
+
+
+@mock.patch("bld2repo.download_file")
+def test_create_repo(mock_download_file):
+ """ Test to create a rpm repository of out a dir. """
+ tmp_dir = tempfile.TemporaryDirectory()
+ config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+ build = load_test_data("pki_core_build")
+ tags = load_test_data("pki_core_tags")
+ build_tag_md = load_test_data("pki_core_build_tag")
+
+ mock_session = mock.Mock()
+
+ mock_session.getBuild.return_value = build
+ mock_session.listTags.return_value = tags
+ mock_session.listTaggedRPMS.return_value = build_tag_md
+
+
+ def download_file(url, target_pkg_dir, filename):
+ """ Mock function which fakes rpm downloads """
+ abs_file_path = "/".join([target_pkg_dir, filename])
+ open(abs_file_path, "w").close()
+
+ mock_download_file.side_effect = download_file
+
+ pkgs = get_buildrequire_pkgs_from_build("1234", mock_session, config)
+ pkgs, rpm_num = add_rpm_urls(pkgs, config)
+ rpm_bulk_download(pkgs, rpm_num, tmp_dir.name)
+ create_repo(tmp_dir.name)
+ assert os.path.exists(tmp_dir.name + "/repodata" )
+
+
+def test_no_build_found_exception():
+ """ Test raise when no build found """
+ mock_session = mock.Mock()
+ config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+ mock_session.getBuild.return_value = {}
+
+ with pytest.raises(Exception) as ex:
+ get_buildrequire_pkgs_from_build("1234", mock_session, config)
+
+ err_msg = ex.value.args[0]
+ assert "1234" in err_msg
+ assert "not been found" in err_msg
+
+
+def test_not_module_exception():
+ """ Test raise when the build does not contain a build tag and is not a module. """
+ mock_session = mock.Mock()
+ config = Config("koji_fake_url", "koji_fake_storage", "x86_64", ".")
+
+ build = load_test_data("pki_core_build")
+ tags = load_test_data("pki_core_tags")
+
+ mock_session.getBuild.return_value = build
+ # we remove the build tag from the tags list
+ tags.pop(1)
+ mock_session.listTags.return_value = tags
+
+ with pytest.raises(Exception) as ex:
+ get_buildrequire_pkgs_from_build("1234", mock_session, config)
+
+ err_msg = ex.value.args[0]
+ assert "1234" in err_msg
+ assert "not tagged" in err_msg
+ assert "'build' tag" in err_msg
+
diff --git a/bld2repo/tests/test_data/pki_core_build.json b/bld2repo/tests/test_data/pki_core_build.json
new file mode 100644
index 0000000..1b0aa1e
--- /dev/null
+++ b/bld2repo/tests/test_data/pki_core_build.json
@@ -0,0 +1,33 @@
+{
+ "build_id": 1557161,
+ "cg_id": null,
+ "completion_time": "2021-03-30 23:30:32.156112",
+ "completion_ts": 1617147032.15611,
+ "creation_event_id": 38240589,
+ "creation_time": "2021-03-30 23:15:00.109509",
+ "creation_ts": 1617146100.10951,
+ "epoch": null,
+ "extra": {
+ "source": {
+ "original_url": "git://pkgs.devel.redhat.com/rpms/pki-core?#026f2b900ad160e096ceec13f43d7bbce45a11ad"
+ }
+ },
+ "id": 1557161,
+ "name": "pki-core",
+ "nvr": "pki-core-10.8.3-6.module+el8.2.0+10554+cf83aa72",
+ "owner_id": 4066,
+ "owner_name": "mbs",
+ "package_id": 31009,
+ "package_name": "pki-core",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "source": "git://pkgs.devel.redhat.com/rpms/pki-core#026f2b900ad160e096ceec13f43d7bbce45a11ad",
+ "start_time": "2021-03-30 23:15:00.102532",
+ "start_ts": 1617146100.10253,
+ "state": 1,
+ "task_id": 35853377,
+ "version": "10.8.3",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "cg_name": null
+}
+
diff --git a/bld2repo/tests/test_data/pki_core_build_tag.json b/bld2repo/tests/test_data/pki_core_build_tag.json
new file mode 100644
index 0000000..9f71b4e
--- /dev/null
+++ b/bld2repo/tests/test_data/pki_core_build_tag.json
@@ -0,0 +1,6647 @@
+[
+ [
+ {
+ "arch": "src",
+ "build_id": 1557147,
+ "buildroot_id": 7226532,
+ "buildtime": 1617143722,
+ "epoch": null,
+ "extra": null,
+ "id": 9520081,
+ "metadata_only": false,
+ "name": "module-build-macros",
+ "payloadhash": "5386efe368f424c16cb2142b1ac4d8ec",
+ "release": "1.module+el8.2.0+10554+cf83aa72",
+ "size": 9095,
+ "version": "0.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1557147,
+ "buildroot_id": 7226532,
+ "buildtime": 1617143723,
+ "epoch": null,
+ "extra": null,
+ "id": 9520082,
+ "metadata_only": false,
+ "name": "module-build-macros",
+ "payloadhash": "b33936c7e1636e0ff7ddc455ea8463f8",
+ "release": "1.module+el8.2.0+10554+cf83aa72",
+ "size": 15695,
+ "version": "0.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 1557155,
+ "buildroot_id": 7226562,
+ "buildtime": 1617144387,
+ "epoch": null,
+ "extra": null,
+ "id": 9520101,
+ "metadata_only": false,
+ "name": "jss",
+ "payloadhash": "5ddd4bb035472c3a797a2f16bf50d922",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 902749,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557155,
+ "buildroot_id": 7226562,
+ "buildtime": 1617144583,
+ "epoch": null,
+ "extra": null,
+ "id": 9520102,
+ "metadata_only": false,
+ "name": "jss",
+ "payloadhash": "21df9049c1a406990a33f473b9e36cc7",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 1111887,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557155,
+ "buildroot_id": 7226562,
+ "buildtime": 1617144583,
+ "epoch": null,
+ "extra": null,
+ "id": 9520103,
+ "metadata_only": false,
+ "name": "jss-javadoc",
+ "payloadhash": "f3b9f8853e34402e05f12f7fa5e9cb6e",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 883271,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557155,
+ "buildroot_id": 7226562,
+ "buildtime": 1617144583,
+ "epoch": null,
+ "extra": null,
+ "id": 9520104,
+ "metadata_only": false,
+ "name": "jss-debugsource",
+ "payloadhash": "86714a8e4b9a304a9a45c2a1fc70f602",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 130171,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557155,
+ "buildroot_id": 7226562,
+ "buildtime": 1617144583,
+ "epoch": null,
+ "extra": null,
+ "id": 9520105,
+ "metadata_only": false,
+ "name": "jss-debuginfo",
+ "payloadhash": "6abefd43420061695119e9c1f4785285",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 244875,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557155,
+ "buildroot_id": 7226564,
+ "buildtime": 1617144536,
+ "epoch": null,
+ "extra": null,
+ "id": 9520106,
+ "metadata_only": false,
+ "name": "jss",
+ "payloadhash": "6246f16398c4edd43fb8526565c28c6a",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 1310315,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557155,
+ "buildroot_id": 7226564,
+ "buildtime": 1617144536,
+ "epoch": null,
+ "extra": null,
+ "id": 9520107,
+ "metadata_only": false,
+ "name": "jss-javadoc",
+ "payloadhash": "2cbd49ffc66a4ae5a4341cd13e1cb87e",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 883359,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557155,
+ "buildroot_id": 7226564,
+ "buildtime": 1617144536,
+ "epoch": null,
+ "extra": null,
+ "id": 9520108,
+ "metadata_only": false,
+ "name": "jss-debugsource",
+ "payloadhash": "e75d2ffd1bedbdcc3022b058ad2f5fc1",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 130191,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557155,
+ "buildroot_id": 7226564,
+ "buildtime": 1617144536,
+ "epoch": null,
+ "extra": null,
+ "id": 9520109,
+ "metadata_only": false,
+ "name": "jss-debuginfo",
+ "payloadhash": "dc9f53777d00419f58c20d6163bc929b",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 198527,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557155,
+ "buildroot_id": 7226561,
+ "buildtime": 1617144738,
+ "epoch": null,
+ "extra": null,
+ "id": 9520110,
+ "metadata_only": false,
+ "name": "jss-debuginfo",
+ "payloadhash": "3bd9cc4657802c82069691adf5d6595c",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 246931,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557155,
+ "buildroot_id": 7226561,
+ "buildtime": 1617144738,
+ "epoch": null,
+ "extra": null,
+ "id": 9520111,
+ "metadata_only": false,
+ "name": "jss",
+ "payloadhash": "40279a6010121f9cf5ce771f0e1b7739",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 1120635,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557155,
+ "buildroot_id": 7226561,
+ "buildtime": 1617144738,
+ "epoch": null,
+ "extra": null,
+ "id": 9520112,
+ "metadata_only": false,
+ "name": "jss-debugsource",
+ "payloadhash": "c66e3119de30bb26aa38077d2174ba0c",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 130187,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557155,
+ "buildroot_id": 7226561,
+ "buildtime": 1617144738,
+ "epoch": null,
+ "extra": null,
+ "id": 9520113,
+ "metadata_only": false,
+ "name": "jss-javadoc",
+ "payloadhash": "6a4f387cf416ec1bee360940e907d3eb",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 883299,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557155,
+ "buildroot_id": 7226563,
+ "buildtime": 1617144917,
+ "epoch": null,
+ "extra": null,
+ "id": 9520114,
+ "metadata_only": false,
+ "name": "jss",
+ "payloadhash": "203f83aadea0c3fb9204f53dc6ee2b10",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 1110355,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557155,
+ "buildroot_id": 7226563,
+ "buildtime": 1617144917,
+ "epoch": null,
+ "extra": null,
+ "id": 9520115,
+ "metadata_only": false,
+ "name": "jss-javadoc",
+ "payloadhash": "fad27d0913b3a3e4da6e09d1852f638a",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 883779,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557155,
+ "buildroot_id": 7226563,
+ "buildtime": 1617144917,
+ "epoch": null,
+ "extra": null,
+ "id": 9520116,
+ "metadata_only": false,
+ "name": "jss-debugsource",
+ "payloadhash": "8519332071e1848015e74376b05b81c2",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 130171,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557155,
+ "buildroot_id": 7226563,
+ "buildtime": 1617144917,
+ "epoch": null,
+ "extra": null,
+ "id": 9520117,
+ "metadata_only": false,
+ "name": "jss-debuginfo",
+ "payloadhash": "64d2feb693135b0ad0572d19e765daf2",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 238115,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557155,
+ "buildroot_id": 7226565,
+ "buildtime": 1617144496,
+ "epoch": null,
+ "extra": null,
+ "id": 9520118,
+ "metadata_only": false,
+ "name": "jss",
+ "payloadhash": "d9dc94b4ae3ccd59b281ea53ff1ed81f",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 1115767,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557155,
+ "buildroot_id": 7226565,
+ "buildtime": 1617144496,
+ "epoch": null,
+ "extra": null,
+ "id": 9520119,
+ "metadata_only": false,
+ "name": "jss-javadoc",
+ "payloadhash": "7b7081ca8e7e0b384d71ad8b6af3ca5c",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 883267,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557155,
+ "buildroot_id": 7226565,
+ "buildtime": 1617144496,
+ "epoch": null,
+ "extra": null,
+ "id": 9520120,
+ "metadata_only": false,
+ "name": "jss-debugsource",
+ "payloadhash": "4fabf8fad06aa6d6cf7a4cd1a85ee8b4",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 130187,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557155,
+ "buildroot_id": 7226565,
+ "buildtime": 1617144496,
+ "epoch": null,
+ "extra": null,
+ "id": 9520121,
+ "metadata_only": false,
+ "name": "jss-debuginfo",
+ "payloadhash": "3706129d68c1450431944459c5102954",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "size": 241983,
+ "version": "4.6.2"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1166093,
+ "buildroot_id": 5854560,
+ "buildtime": 1586891116,
+ "epoch": null,
+ "extra": null,
+ "id": 7968610,
+ "metadata_only": false,
+ "name": "ldapjdk-javadoc",
+ "payloadhash": "e9ee4b8d3729845fe2af81f857b0ab3b",
+ "release": "2.module+el8.2.0+6294+b7db4606",
+ "size": 50011,
+ "version": "4.21.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1166093,
+ "buildroot_id": 5854560,
+ "buildtime": 1586891116,
+ "epoch": null,
+ "extra": null,
+ "id": 7968608,
+ "metadata_only": false,
+ "name": "ldapjdk",
+ "payloadhash": "09639e0b6768d6afae48aceaf3dec167",
+ "release": "2.module+el8.2.0+6294+b7db4606",
+ "size": 329383,
+ "version": "4.21.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 1166093,
+ "buildroot_id": 5854560,
+ "buildtime": 1586891089,
+ "epoch": null,
+ "extra": null,
+ "id": 7968604,
+ "metadata_only": false,
+ "name": "ldapjdk",
+ "payloadhash": "41b57c082cbe2127e599c355e6d921a0",
+ "release": "2.module+el8.2.0+6294+b7db4606",
+ "size": 2968532,
+ "version": "4.21.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1166092,
+ "buildroot_id": 5854561,
+ "buildtime": 1586891113,
+ "epoch": null,
+ "extra": null,
+ "id": 7968606,
+ "metadata_only": false,
+ "name": "tomcatjss",
+ "payloadhash": "42fac238ac917e90f227d9df8e116104",
+ "release": "2.module+el8.2.0+6294+b7db4606",
+ "size": 44619,
+ "version": "7.4.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 1166092,
+ "buildroot_id": 5854561,
+ "buildtime": 1586891089,
+ "epoch": null,
+ "extra": null,
+ "id": 7968603,
+ "metadata_only": false,
+ "name": "tomcatjss",
+ "payloadhash": "200c66e596e8e075466c068814f7fe95",
+ "release": "2.module+el8.2.0+6294+b7db4606",
+ "size": 50428,
+ "version": "7.4.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146163,
+ "epoch": null,
+ "extra": null,
+ "id": 9520138,
+ "metadata_only": false,
+ "name": "pki-core",
+ "payloadhash": "056894c66286bb5df91a34c3b3211b42",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 7358838,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520139,
+ "metadata_only": false,
+ "name": "pki-symkey",
+ "payloadhash": "df6f7cfac55825244b742711d5ff821c",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 50259,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520140,
+ "metadata_only": false,
+ "name": "pki-base",
+ "payloadhash": "d374c978a701d1dbd86df50fc36ff766",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 296567,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520141,
+ "metadata_only": false,
+ "name": "python3-pki",
+ "payloadhash": "568bd0b566fd91604f8d68174c8ce772",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 162515,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520142,
+ "metadata_only": false,
+ "name": "pki-base-java",
+ "payloadhash": "d25a202dacb35eacbb85b24422998a81",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 719671,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520143,
+ "metadata_only": false,
+ "name": "pki-tools",
+ "payloadhash": "2d50fff207a49dcdecb82ec1336a52dd",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 721095,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520144,
+ "metadata_only": false,
+ "name": "pki-server",
+ "payloadhash": "0667da5b31adb35c9c11f66a2e9f5861",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 3128847,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520145,
+ "metadata_only": false,
+ "name": "pki-ca",
+ "payloadhash": "7a69786b9f40b1603d23b01eac350d4b",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 568935,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520146,
+ "metadata_only": false,
+ "name": "pki-kra",
+ "payloadhash": "18ba119caf4b402bb32b3d2e09aa49c3",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 199923,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520147,
+ "metadata_only": false,
+ "name": "pki-core-debugsource",
+ "payloadhash": "747c2604f77944b09dbe0e4efe67c147",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 369975,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520148,
+ "metadata_only": false,
+ "name": "pki-core-debuginfo",
+ "payloadhash": "94e493330d06df137d8783ec5d3399f6",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 50775,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520149,
+ "metadata_only": false,
+ "name": "pki-symkey-debuginfo",
+ "payloadhash": "f0ffbaf996a022f0381c2976a3572d55",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 130455,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1557161,
+ "buildroot_id": 7226589,
+ "buildtime": 1617146420,
+ "epoch": null,
+ "extra": null,
+ "id": 9520150,
+ "metadata_only": false,
+ "name": "pki-tools-debuginfo",
+ "payloadhash": "3bd96f423bb22a6b7bd542b697582641",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 340223,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557161,
+ "buildroot_id": 7226590,
+ "buildtime": 1617146323,
+ "epoch": null,
+ "extra": null,
+ "id": 9520151,
+ "metadata_only": false,
+ "name": "pki-symkey",
+ "payloadhash": "127573a0327fecfa7aa874159b8a6888",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 56731,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557161,
+ "buildroot_id": 7226590,
+ "buildtime": 1617146323,
+ "epoch": null,
+ "extra": null,
+ "id": 9520152,
+ "metadata_only": false,
+ "name": "pki-tools",
+ "payloadhash": "134310e107d937464fe860525844d5e8",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 730143,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557161,
+ "buildroot_id": 7226590,
+ "buildtime": 1617146323,
+ "epoch": null,
+ "extra": null,
+ "id": 9520153,
+ "metadata_only": false,
+ "name": "pki-core-debugsource",
+ "payloadhash": "6e9df82d147e7341f33b51ba8a475d4e",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 369839,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557161,
+ "buildroot_id": 7226590,
+ "buildtime": 1617146323,
+ "epoch": null,
+ "extra": null,
+ "id": 9520154,
+ "metadata_only": false,
+ "name": "pki-core-debuginfo",
+ "payloadhash": "c453f18850fa782c0b96cd23cd0f6b3c",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 51195,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557161,
+ "buildroot_id": 7226590,
+ "buildtime": 1617146323,
+ "epoch": null,
+ "extra": null,
+ "id": 9520155,
+ "metadata_only": false,
+ "name": "pki-symkey-debuginfo",
+ "payloadhash": "a0432de5c6d7c6c1edc75ef41c76c54f",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 120439,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1557161,
+ "buildroot_id": 7226590,
+ "buildtime": 1617146323,
+ "epoch": null,
+ "extra": null,
+ "id": 9520156,
+ "metadata_only": false,
+ "name": "pki-tools-debuginfo",
+ "payloadhash": "7980a783980e44d6ad6eff89f83b48c5",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 288851,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557161,
+ "buildroot_id": 7226593,
+ "buildtime": 1617146989,
+ "epoch": null,
+ "extra": null,
+ "id": 9520157,
+ "metadata_only": false,
+ "name": "pki-core-debuginfo",
+ "payloadhash": "d2e5ab71ee3ebece22d0e0b8a89909c5",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 50891,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557161,
+ "buildroot_id": 7226593,
+ "buildtime": 1617146989,
+ "epoch": null,
+ "extra": null,
+ "id": 9520158,
+ "metadata_only": false,
+ "name": "pki-tools",
+ "payloadhash": "e7fbd1f167b96c13db9a587f22ef270b",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 729307,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557161,
+ "buildroot_id": 7226593,
+ "buildtime": 1617146989,
+ "epoch": null,
+ "extra": null,
+ "id": 9520159,
+ "metadata_only": false,
+ "name": "pki-symkey",
+ "payloadhash": "d8621364f2b5b8a0322244f736ef77d6",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 55467,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557161,
+ "buildroot_id": 7226593,
+ "buildtime": 1617146989,
+ "epoch": null,
+ "extra": null,
+ "id": 9520160,
+ "metadata_only": false,
+ "name": "pki-tools-debuginfo",
+ "payloadhash": "74d3f563beb3a5ad487ac78f6692013d",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 336207,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557161,
+ "buildroot_id": 7226593,
+ "buildtime": 1617146989,
+ "epoch": null,
+ "extra": null,
+ "id": 9520161,
+ "metadata_only": false,
+ "name": "pki-symkey-debuginfo",
+ "payloadhash": "90664838b020243e992ef2f59dc81a1c",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 132579,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1557161,
+ "buildroot_id": 7226593,
+ "buildtime": 1617146989,
+ "epoch": null,
+ "extra": null,
+ "id": 9520162,
+ "metadata_only": false,
+ "name": "pki-core-debugsource",
+ "payloadhash": "e7ba64a58ccd74ff3e01bba22fac449e",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 369991,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557161,
+ "buildroot_id": 7226592,
+ "buildtime": 1617146745,
+ "epoch": null,
+ "extra": null,
+ "id": 9520163,
+ "metadata_only": false,
+ "name": "pki-symkey",
+ "payloadhash": "3c250fe1b110ab722280a6dfe26e1d6f",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 49887,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557161,
+ "buildroot_id": 7226592,
+ "buildtime": 1617146745,
+ "epoch": null,
+ "extra": null,
+ "id": 9520164,
+ "metadata_only": false,
+ "name": "pki-tools",
+ "payloadhash": "b11cbf59eea679e4561f1df50e198451",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 715175,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557161,
+ "buildroot_id": 7226592,
+ "buildtime": 1617146745,
+ "epoch": null,
+ "extra": null,
+ "id": 9520165,
+ "metadata_only": false,
+ "name": "pki-core-debugsource",
+ "payloadhash": "5f13330512e8c94edac04981f4af37cc",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 369851,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557161,
+ "buildroot_id": 7226592,
+ "buildtime": 1617146745,
+ "epoch": null,
+ "extra": null,
+ "id": 9520166,
+ "metadata_only": false,
+ "name": "pki-core-debuginfo",
+ "payloadhash": "e7b00a4eb0a8401a75cd5870d174a293",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 50923,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557161,
+ "buildroot_id": 7226592,
+ "buildtime": 1617146745,
+ "epoch": null,
+ "extra": null,
+ "id": 9520167,
+ "metadata_only": false,
+ "name": "pki-symkey-debuginfo",
+ "payloadhash": "c98a2155b37b49356690119b5e1bbd82",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 128055,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1557161,
+ "buildroot_id": 7226592,
+ "buildtime": 1617146745,
+ "epoch": null,
+ "extra": null,
+ "id": 9520168,
+ "metadata_only": false,
+ "name": "pki-tools-debuginfo",
+ "payloadhash": "7d9a9c18fb60295e3f0314dee0ce450c",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 323555,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557161,
+ "buildroot_id": 7226591,
+ "buildtime": 1617146303,
+ "epoch": null,
+ "extra": null,
+ "id": 9520169,
+ "metadata_only": false,
+ "name": "pki-symkey",
+ "payloadhash": "e4a3ffb739ab0ef25e48857593f7b2d9",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 53727,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557161,
+ "buildroot_id": 7226591,
+ "buildtime": 1617146303,
+ "epoch": null,
+ "extra": null,
+ "id": 9520170,
+ "metadata_only": false,
+ "name": "pki-tools",
+ "payloadhash": "280e699ed4ac01b8c0b58c4de94336da",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 724995,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557161,
+ "buildroot_id": 7226591,
+ "buildtime": 1617146303,
+ "epoch": null,
+ "extra": null,
+ "id": 9520171,
+ "metadata_only": false,
+ "name": "pki-core-debugsource",
+ "payloadhash": "e7e22f5e78358404db49ac6cfff2f105",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 369895,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557161,
+ "buildroot_id": 7226591,
+ "buildtime": 1617146303,
+ "epoch": null,
+ "extra": null,
+ "id": 9520172,
+ "metadata_only": false,
+ "name": "pki-core-debuginfo",
+ "payloadhash": "5f6c99b7d21696d15dbea05e98c72d2e",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 51339,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557161,
+ "buildroot_id": 7226591,
+ "buildtime": 1617146303,
+ "epoch": null,
+ "extra": null,
+ "id": 9520173,
+ "metadata_only": false,
+ "name": "pki-symkey-debuginfo",
+ "payloadhash": "4263e732a2f7b7081672faacdada98b4",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 133491,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1557161,
+ "buildroot_id": 7226591,
+ "buildtime": 1617146303,
+ "epoch": null,
+ "extra": null,
+ "id": 9520174,
+ "metadata_only": false,
+ "name": "pki-tools-debuginfo",
+ "payloadhash": "4a5896467f152a76cf510945e316a293",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "size": 333647,
+ "version": "10.8.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 959046,
+ "buildroot_id": 5142752,
+ "buildtime": 1567154385,
+ "epoch": null,
+ "extra": null,
+ "id": 7305843,
+ "metadata_only": false,
+ "name": "slapi-nis-debugsource",
+ "payloadhash": "f90093708da4100deedc0ca79da65c91",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 133736,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 959046,
+ "buildroot_id": 5142752,
+ "buildtime": 1567154385,
+ "epoch": null,
+ "extra": null,
+ "id": 7305842,
+ "metadata_only": false,
+ "name": "slapi-nis-debuginfo",
+ "payloadhash": "53b8b29332bda6b6fac755dc6abc909e",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 302496,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 959046,
+ "buildroot_id": 5142752,
+ "buildtime": 1567154385,
+ "epoch": null,
+ "extra": null,
+ "id": 7305841,
+ "metadata_only": false,
+ "name": "slapi-nis",
+ "payloadhash": "34aa9b0b8d85caeac3c03795482fd7fe",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 169488,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 959046,
+ "buildroot_id": 5142749,
+ "buildtime": 1567153770,
+ "epoch": null,
+ "extra": null,
+ "id": 7305840,
+ "metadata_only": false,
+ "name": "slapi-nis-debugsource",
+ "payloadhash": "2af51e16f744166094fa7d2d4d8cdc51",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 133752,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 959046,
+ "buildroot_id": 5142749,
+ "buildtime": 1567153770,
+ "epoch": null,
+ "extra": null,
+ "id": 7305839,
+ "metadata_only": false,
+ "name": "slapi-nis",
+ "payloadhash": "63cfeeadb8c3763d0d75ba2c32bedc9d",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 152636,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 959046,
+ "buildroot_id": 5142749,
+ "buildtime": 1567153770,
+ "epoch": null,
+ "extra": null,
+ "id": 7305838,
+ "metadata_only": false,
+ "name": "slapi-nis-debuginfo",
+ "payloadhash": "01d5582f04af40727d412b1b8738779e",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 281388,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 959046,
+ "buildroot_id": 5142757,
+ "buildtime": 1567153793,
+ "epoch": null,
+ "extra": null,
+ "id": 7305837,
+ "metadata_only": false,
+ "name": "slapi-nis",
+ "payloadhash": "6d7940d55ef75f0ea0f1c03d0fc3cd62",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 159844,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 959046,
+ "buildroot_id": 5142757,
+ "buildtime": 1567153793,
+ "epoch": null,
+ "extra": null,
+ "id": 7305836,
+ "metadata_only": false,
+ "name": "slapi-nis-debuginfo",
+ "payloadhash": "0507c68adb336fb4400383111bc3f184",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 290348,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 959046,
+ "buildroot_id": 5142757,
+ "buildtime": 1567153793,
+ "epoch": null,
+ "extra": null,
+ "id": 7305835,
+ "metadata_only": false,
+ "name": "slapi-nis-debugsource",
+ "payloadhash": "92f56dd06b90c9ff21fc8e56b0401705",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 133768,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 959046,
+ "buildroot_id": 5142761,
+ "buildtime": 1567153904,
+ "epoch": null,
+ "extra": null,
+ "id": 7305834,
+ "metadata_only": false,
+ "name": "slapi-nis-debuginfo",
+ "payloadhash": "5b7bbba2ee38d5c730fa0f29e5e8f19e",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 298284,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 959046,
+ "buildroot_id": 5142761,
+ "buildtime": 1567153904,
+ "epoch": null,
+ "extra": null,
+ "id": 7305833,
+ "metadata_only": false,
+ "name": "slapi-nis",
+ "payloadhash": "7468af2ec15374fcd9d277173b9d1bae",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 155404,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 959046,
+ "buildroot_id": 5142761,
+ "buildtime": 1567153904,
+ "epoch": null,
+ "extra": null,
+ "id": 7305832,
+ "metadata_only": false,
+ "name": "slapi-nis-debugsource",
+ "payloadhash": "ef43adb46bfa6e7f92a5243768ed3874",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 133720,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "src",
+ "build_id": 959046,
+ "buildroot_id": 5142761,
+ "buildtime": 1567153851,
+ "epoch": null,
+ "extra": null,
+ "id": 7305831,
+ "metadata_only": false,
+ "name": "slapi-nis",
+ "payloadhash": "bc20464aa5c058a86a5e9ef5998df07d",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "size": 647332,
+ "version": "0.56.3"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1022957,
+ "buildroot_id": 5374897,
+ "buildtime": 1574930685,
+ "epoch": null,
+ "extra": null,
+ "id": 7568333,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debuginfo",
+ "payloadhash": "fd6fe5cff8301f0a98bbb754de648110",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 249704,
+ "version": "11.2"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1022957,
+ "buildroot_id": 5374897,
+ "buildtime": 1574930685,
+ "epoch": null,
+ "extra": null,
+ "id": 7568332,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debugsource",
+ "payloadhash": "71c6010d9891c2ccc652a1c34b23c5d5",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 115964,
+ "version": "11.2"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1022957,
+ "buildroot_id": 5374897,
+ "buildtime": 1574930685,
+ "epoch": null,
+ "extra": null,
+ "id": 7568331,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap",
+ "payloadhash": "a1882d33f317d591e23c9181cd7c77d8",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 137312,
+ "version": "11.2"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1022957,
+ "buildroot_id": 5374888,
+ "buildtime": 1574930563,
+ "epoch": null,
+ "extra": null,
+ "id": 7568330,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap",
+ "payloadhash": "c767f27528e5e44152e862b40e3a6aea",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 142204,
+ "version": "11.2"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1022957,
+ "buildroot_id": 5374888,
+ "buildtime": 1574930563,
+ "epoch": null,
+ "extra": null,
+ "id": 7568329,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debuginfo",
+ "payloadhash": "0f6465da56c0792ea92007372fdd57fc",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 206524,
+ "version": "11.2"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1022957,
+ "buildroot_id": 5374888,
+ "buildtime": 1574930563,
+ "epoch": null,
+ "extra": null,
+ "id": 7568328,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debugsource",
+ "payloadhash": "91e8302402a95150d30b2ad2ac465bf7",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 116004,
+ "version": "11.2"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1022957,
+ "buildroot_id": 5374885,
+ "buildtime": 1574930522,
+ "epoch": null,
+ "extra": null,
+ "id": 7568327,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debugsource",
+ "payloadhash": "fc4468428bc66d73a44d468cca176a6e",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 115960,
+ "version": "11.2"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1022957,
+ "buildroot_id": 5374885,
+ "buildtime": 1574930522,
+ "epoch": null,
+ "extra": null,
+ "id": 7568326,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap",
+ "payloadhash": "f255964ac27cf19100f55b245ea37624",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 124464,
+ "version": "11.2"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1022957,
+ "buildroot_id": 5374885,
+ "buildtime": 1574930522,
+ "epoch": null,
+ "extra": null,
+ "id": 7568325,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debuginfo",
+ "payloadhash": "a6530da31160e009e41c3ba335212d86",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 247200,
+ "version": "11.2"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1022957,
+ "buildroot_id": 5374887,
+ "buildtime": 1574930544,
+ "epoch": null,
+ "extra": null,
+ "id": 7568324,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap",
+ "payloadhash": "acd1720fbc2fa05e19474fc78deb30c2",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 132000,
+ "version": "11.2"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1022957,
+ "buildroot_id": 5374887,
+ "buildtime": 1574930544,
+ "epoch": null,
+ "extra": null,
+ "id": 7568323,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debuginfo",
+ "payloadhash": "b443bff4b09e5edfc885774cbca3066c",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 249744,
+ "version": "11.2"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1022957,
+ "buildroot_id": 5374887,
+ "buildtime": 1574930544,
+ "epoch": null,
+ "extra": null,
+ "id": 7568322,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debugsource",
+ "payloadhash": "fc8a425c7793b78cd1034859a9b67de8",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 115972,
+ "version": "11.2"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1022957,
+ "buildroot_id": 5374884,
+ "buildtime": 1574930653,
+ "epoch": null,
+ "extra": null,
+ "id": 7568321,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap",
+ "payloadhash": "e04196439a7cc492d981a8862be0a894",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 126340,
+ "version": "11.2"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1022957,
+ "buildroot_id": 5374884,
+ "buildtime": 1574930653,
+ "epoch": null,
+ "extra": null,
+ "id": 7568320,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debugsource",
+ "payloadhash": "0170014497a75a7ab4ffbbe83bc59108",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 115948,
+ "version": "11.2"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1022957,
+ "buildroot_id": 5374884,
+ "buildtime": 1574930653,
+ "epoch": null,
+ "extra": null,
+ "id": 7568319,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap-debuginfo",
+ "payloadhash": "b39894204d96979bdcd8d83a8e52a180",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 249296,
+ "version": "11.2"
+ },
+ {
+ "arch": "src",
+ "build_id": 1022957,
+ "buildroot_id": 5374884,
+ "buildtime": 1574930583,
+ "epoch": null,
+ "extra": null,
+ "id": 7568318,
+ "metadata_only": false,
+ "name": "bind-dyndb-ldap",
+ "payloadhash": "d75641df0acdf646f168aff3e9766632",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "size": 375380,
+ "version": "11.2"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 959041,
+ "buildroot_id": 5142729,
+ "buildtime": 1567153609,
+ "epoch": null,
+ "extra": null,
+ "id": 7305712,
+ "metadata_only": false,
+ "name": "python3-qrcode-core",
+ "payloadhash": "92fa61bb05a69197fc9999b1ce35ec18",
+ "release": "12.module+el8.1.0+4107+4a66eb87",
+ "size": 45720,
+ "version": "5.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 959041,
+ "buildroot_id": 5142729,
+ "buildtime": 1567153609,
+ "epoch": null,
+ "extra": null,
+ "id": 7305711,
+ "metadata_only": false,
+ "name": "python3-qrcode",
+ "payloadhash": "b9703404d49f109eed30d2b17c4aadaf",
+ "release": "12.module+el8.1.0+4107+4a66eb87",
+ "size": 16852,
+ "version": "5.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 959041,
+ "buildroot_id": 5142729,
+ "buildtime": 1567153604,
+ "epoch": null,
+ "extra": null,
+ "id": 7305710,
+ "metadata_only": false,
+ "name": "python-qrcode",
+ "payloadhash": "ab5d369595b9410d6c5bf6a4e164119a",
+ "release": "12.module+el8.1.0+4107+4a66eb87",
+ "size": 34334,
+ "version": "5.1"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1093586,
+ "buildroot_id": 5628520,
+ "buildtime": 1581969008,
+ "epoch": null,
+ "extra": null,
+ "id": 7787870,
+ "metadata_only": false,
+ "name": "softhsm-debuginfo",
+ "payloadhash": "7eb77c8d379075bc2fc28911f14128df",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 3325296,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1093586,
+ "buildroot_id": 5628520,
+ "buildtime": 1581969008,
+ "epoch": null,
+ "extra": null,
+ "id": 7787869,
+ "metadata_only": false,
+ "name": "softhsm-debugsource",
+ "payloadhash": "5469a5e312d9bc0973c43bccfe27ac9c",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 198928,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1093586,
+ "buildroot_id": 5628520,
+ "buildtime": 1581969008,
+ "epoch": null,
+ "extra": null,
+ "id": 7787868,
+ "metadata_only": false,
+ "name": "softhsm-devel",
+ "payloadhash": "b4cedc2be7c6302f99723ffbeaaec397",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 20196,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1093586,
+ "buildroot_id": 5628520,
+ "buildtime": 1581969008,
+ "epoch": null,
+ "extra": null,
+ "id": 7787867,
+ "metadata_only": false,
+ "name": "softhsm",
+ "payloadhash": "2761cb844f9bde323472b5edfa2aa336",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 405032,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1093586,
+ "buildroot_id": 5628536,
+ "buildtime": 1581968754,
+ "epoch": null,
+ "extra": null,
+ "id": 7787866,
+ "metadata_only": false,
+ "name": "softhsm-devel",
+ "payloadhash": "fceec29eaf1600f611df16cabbb15cee",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 20248,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1093586,
+ "buildroot_id": 5628536,
+ "buildtime": 1581968754,
+ "epoch": null,
+ "extra": null,
+ "id": 7787865,
+ "metadata_only": false,
+ "name": "softhsm",
+ "payloadhash": "dc82dfbb54003c2b15470c728d802015",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 431392,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1093586,
+ "buildroot_id": 5628536,
+ "buildtime": 1581968754,
+ "epoch": null,
+ "extra": null,
+ "id": 7787864,
+ "metadata_only": false,
+ "name": "softhsm-debugsource",
+ "payloadhash": "0ea441edc957bda88246b9ada22223ea",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 198956,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1093586,
+ "buildroot_id": 5628536,
+ "buildtime": 1581968754,
+ "epoch": null,
+ "extra": null,
+ "id": 7787863,
+ "metadata_only": false,
+ "name": "softhsm-debuginfo",
+ "payloadhash": "f53348b69a34302d095cb606358d7f8f",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 3209084,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1093586,
+ "buildroot_id": 5628513,
+ "buildtime": 1581968643,
+ "epoch": null,
+ "extra": null,
+ "id": 7787862,
+ "metadata_only": false,
+ "name": "softhsm-debuginfo",
+ "payloadhash": "cfe22351236e92e7c36184b92745bcd7",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 3272644,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1093586,
+ "buildroot_id": 5628513,
+ "buildtime": 1581968643,
+ "epoch": null,
+ "extra": null,
+ "id": 7787861,
+ "metadata_only": false,
+ "name": "softhsm-devel",
+ "payloadhash": "a7a828be5a388bf64d2b018fb6bc6b84",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 20200,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1093586,
+ "buildroot_id": 5628513,
+ "buildtime": 1581968643,
+ "epoch": null,
+ "extra": null,
+ "id": 7787860,
+ "metadata_only": false,
+ "name": "softhsm-debugsource",
+ "payloadhash": "6b2884105b125d033d13105a56ef9d4a",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 198932,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1093586,
+ "buildroot_id": 5628513,
+ "buildtime": 1581968643,
+ "epoch": null,
+ "extra": null,
+ "id": 7787859,
+ "metadata_only": false,
+ "name": "softhsm",
+ "payloadhash": "1e118758f556fc86f4035c2d8032a640",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 364956,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1093586,
+ "buildroot_id": 5628529,
+ "buildtime": 1581968701,
+ "epoch": null,
+ "extra": null,
+ "id": 7787858,
+ "metadata_only": false,
+ "name": "softhsm-devel",
+ "payloadhash": "d24b5174ea695d912079cb79a8919d3b",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 20208,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1093586,
+ "buildroot_id": 5628529,
+ "buildtime": 1581968701,
+ "epoch": null,
+ "extra": null,
+ "id": 7787857,
+ "metadata_only": false,
+ "name": "softhsm-debugsource",
+ "payloadhash": "ff87f36d0e990470c5d9118ac717f465",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 198932,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1093586,
+ "buildroot_id": 5628529,
+ "buildtime": 1581968701,
+ "epoch": null,
+ "extra": null,
+ "id": 7787856,
+ "metadata_only": false,
+ "name": "softhsm-debuginfo",
+ "payloadhash": "b1978838c43926f7a971cf83aeeab5d4",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 3364692,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1093586,
+ "buildroot_id": 5628529,
+ "buildtime": 1581968701,
+ "epoch": null,
+ "extra": null,
+ "id": 7787855,
+ "metadata_only": false,
+ "name": "softhsm",
+ "payloadhash": "9085518ff71de3b7a67f135935338fdf",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 413364,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1093586,
+ "buildroot_id": 5628516,
+ "buildtime": 1581968817,
+ "epoch": null,
+ "extra": null,
+ "id": 7787854,
+ "metadata_only": false,
+ "name": "softhsm-devel",
+ "payloadhash": "b1e2cd70d4bfb40c2653efaff9c27259",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 20180,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1093586,
+ "buildroot_id": 5628516,
+ "buildtime": 1581968817,
+ "epoch": null,
+ "extra": null,
+ "id": 7787853,
+ "metadata_only": false,
+ "name": "softhsm-debuginfo",
+ "payloadhash": "ae9490c754a24edc183bedaf97ba2e57",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 3297608,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1093586,
+ "buildroot_id": 5628516,
+ "buildtime": 1581968817,
+ "epoch": null,
+ "extra": null,
+ "id": 7787852,
+ "metadata_only": false,
+ "name": "softhsm",
+ "payloadhash": "b4c0a9ec255ca5b140b7e60b59fb0097",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 374620,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1093586,
+ "buildroot_id": 5628516,
+ "buildtime": 1581968817,
+ "epoch": null,
+ "extra": null,
+ "id": 7787851,
+ "metadata_only": false,
+ "name": "softhsm-debugsource",
+ "payloadhash": "33f220a9dbae3b6cb5ec9b7822188599",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 198916,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 1093586,
+ "buildroot_id": 5628516,
+ "buildtime": 1581968677,
+ "epoch": null,
+ "extra": null,
+ "id": 7787850,
+ "metadata_only": false,
+ "name": "softhsm",
+ "payloadhash": "2d0425a55df2783036c91a0525ba468d",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "size": 1091743,
+ "version": "2.4.0"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1139326,
+ "buildroot_id": 5756014,
+ "buildtime": 1584549559,
+ "epoch": null,
+ "extra": null,
+ "id": 7865697,
+ "metadata_only": false,
+ "name": "ipa-server-debuginfo",
+ "payloadhash": "ffa0a51d2d6b756de03b11d366a72299",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 755296,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1139326,
+ "buildroot_id": 5756014,
+ "buildtime": 1584549559,
+ "epoch": null,
+ "extra": null,
+ "id": 7865696,
+ "metadata_only": false,
+ "name": "ipa-client-debuginfo",
+ "payloadhash": "0189b0c5e014128c0025046b1f9baf84",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 346480,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1139326,
+ "buildroot_id": 5756014,
+ "buildtime": 1584549559,
+ "epoch": null,
+ "extra": null,
+ "id": 7865695,
+ "metadata_only": false,
+ "name": "ipa-server-trust-ad",
+ "payloadhash": "503faf5bb51d6c2d227c03685e80b2e4",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 282836,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1139326,
+ "buildroot_id": 5756014,
+ "buildtime": 1584549559,
+ "epoch": null,
+ "extra": null,
+ "id": 7865694,
+ "metadata_only": false,
+ "name": "ipa-client-samba",
+ "payloadhash": "e0ee70e426f4287e9dfef0e7404ae493",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 172340,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1139326,
+ "buildroot_id": 5756014,
+ "buildtime": 1584549559,
+ "epoch": null,
+ "extra": null,
+ "id": 7865693,
+ "metadata_only": false,
+ "name": "ipa-debugsource",
+ "payloadhash": "401ab56f514b4ea72744f0224935d4dc",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 469800,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1139326,
+ "buildroot_id": 5756014,
+ "buildtime": 1584549559,
+ "epoch": null,
+ "extra": null,
+ "id": 7865692,
+ "metadata_only": false,
+ "name": "ipa-server-trust-ad-debuginfo",
+ "payloadhash": "b03bd63371af22712bb2d05e2143c337",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 390796,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1139326,
+ "buildroot_id": 5756014,
+ "buildtime": 1584549559,
+ "epoch": null,
+ "extra": null,
+ "id": 7865691,
+ "metadata_only": false,
+ "name": "ipa-client",
+ "payloadhash": "a527f474c30d180de856d80433818956",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 282516,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1139326,
+ "buildroot_id": 5756014,
+ "buildtime": 1584549559,
+ "epoch": null,
+ "extra": null,
+ "id": 7865690,
+ "metadata_only": false,
+ "name": "ipa-server",
+ "payloadhash": "928b0bbb2f8cace3496c0ab44073bb6d",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 543532,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 1139326,
+ "buildroot_id": 5756014,
+ "buildtime": 1584549559,
+ "epoch": null,
+ "extra": null,
+ "id": 7865689,
+ "metadata_only": false,
+ "name": "ipa-debuginfo",
+ "payloadhash": "568095cc6cb98b7fddd16139751f4cfb",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 188276,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1139326,
+ "buildroot_id": 5756020,
+ "buildtime": 1584549335,
+ "epoch": null,
+ "extra": null,
+ "id": 7865688,
+ "metadata_only": false,
+ "name": "ipa-client",
+ "payloadhash": "483d6c579511344ba43d81bb3fa142cb",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 277012,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1139326,
+ "buildroot_id": 5756020,
+ "buildtime": 1584549335,
+ "epoch": null,
+ "extra": null,
+ "id": 7865687,
+ "metadata_only": false,
+ "name": "ipa-client-debuginfo",
+ "payloadhash": "2ac7e7730583a7f1b1620c212da27d84",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 336900,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1139326,
+ "buildroot_id": 5756020,
+ "buildtime": 1584549335,
+ "epoch": null,
+ "extra": null,
+ "id": 7865686,
+ "metadata_only": false,
+ "name": "ipa-client-samba",
+ "payloadhash": "af2cb4b435a93c4933ad3ba744666d20",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 172388,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "i686",
+ "build_id": 1139326,
+ "buildroot_id": 5756020,
+ "buildtime": 1584549335,
+ "epoch": null,
+ "extra": null,
+ "id": 7865685,
+ "metadata_only": false,
+ "name": "ipa-debugsource",
+ "payloadhash": "813ef6772e79f527bc2566a1145dae80",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 256432,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1139326,
+ "buildroot_id": 5756012,
+ "buildtime": 1584549272,
+ "epoch": null,
+ "extra": null,
+ "id": 7865684,
+ "metadata_only": false,
+ "name": "ipa-server-trust-ad-debuginfo",
+ "payloadhash": "b5f4dd139cf792962dde2143dfde5458",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 381044,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1139326,
+ "buildroot_id": 5756012,
+ "buildtime": 1584549272,
+ "epoch": null,
+ "extra": null,
+ "id": 7865683,
+ "metadata_only": false,
+ "name": "ipa-debugsource",
+ "payloadhash": "7d0a241e815544da844d4b47c91776c6",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 469756,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1139326,
+ "buildroot_id": 5756012,
+ "buildtime": 1584549272,
+ "epoch": null,
+ "extra": null,
+ "id": 7865682,
+ "metadata_only": false,
+ "name": "ipa-server-debuginfo",
+ "payloadhash": "e899f4a208281ad821d37ae92532e81d",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 733524,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1139326,
+ "buildroot_id": 5756012,
+ "buildtime": 1584549272,
+ "epoch": null,
+ "extra": null,
+ "id": 7865681,
+ "metadata_only": false,
+ "name": "ipa-client",
+ "payloadhash": "6a2585ac0ab1c55faeebdbf1cf3c0d2d",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 269832,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1139326,
+ "buildroot_id": 5756012,
+ "buildtime": 1584549272,
+ "epoch": null,
+ "extra": null,
+ "id": 7865680,
+ "metadata_only": false,
+ "name": "ipa-server",
+ "payloadhash": "7b0df1f267286ed8f4128b38f330ca98",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 501712,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1139326,
+ "buildroot_id": 5756012,
+ "buildtime": 1584549272,
+ "epoch": null,
+ "extra": null,
+ "id": 7865679,
+ "metadata_only": false,
+ "name": "ipa-client-debuginfo",
+ "payloadhash": "2df7e3aa65ed623a2898e50645a4ad34",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 339832,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1139326,
+ "buildroot_id": 5756012,
+ "buildtime": 1584549272,
+ "epoch": null,
+ "extra": null,
+ "id": 7865678,
+ "metadata_only": false,
+ "name": "ipa-server-trust-ad",
+ "payloadhash": "7eb4f5790b1894e8d6b5496d7abbfe63",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 267288,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1139326,
+ "buildroot_id": 5756012,
+ "buildtime": 1584549272,
+ "epoch": null,
+ "extra": null,
+ "id": 7865677,
+ "metadata_only": false,
+ "name": "ipa-debuginfo",
+ "payloadhash": "b9bcdb1617a79578eb3abee3f42134d3",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 188248,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 1139326,
+ "buildroot_id": 5756012,
+ "buildtime": 1584549272,
+ "epoch": null,
+ "extra": null,
+ "id": 7865676,
+ "metadata_only": false,
+ "name": "ipa-client-samba",
+ "payloadhash": "4445685b226efc848e9296342475d522",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 172344,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1139326,
+ "buildroot_id": 5756019,
+ "buildtime": 1584549386,
+ "epoch": null,
+ "extra": null,
+ "id": 7865675,
+ "metadata_only": false,
+ "name": "ipa-server-trust-ad-debuginfo",
+ "payloadhash": "0bfa9eb57a4037a05d9ee05fbe9002d9",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 387380,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1139326,
+ "buildroot_id": 5756019,
+ "buildtime": 1584549386,
+ "epoch": null,
+ "extra": null,
+ "id": 7865674,
+ "metadata_only": false,
+ "name": "ipa-server-debuginfo",
+ "payloadhash": "6105a90ea6071dfc0945a35bcb59335a",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 750100,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1139326,
+ "buildroot_id": 5756019,
+ "buildtime": 1584549386,
+ "epoch": null,
+ "extra": null,
+ "id": 7865673,
+ "metadata_only": false,
+ "name": "ipa-client",
+ "payloadhash": "ebe5e3a21b2f7b6d6bcb2d15433ca0a4",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 273568,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1139326,
+ "buildroot_id": 5756019,
+ "buildtime": 1584549386,
+ "epoch": null,
+ "extra": null,
+ "id": 7865672,
+ "metadata_only": false,
+ "name": "ipa-server-trust-ad",
+ "payloadhash": "0c487a8eac01f79152e126b580310ab6",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 272392,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1139326,
+ "buildroot_id": 5756019,
+ "buildtime": 1584549386,
+ "epoch": null,
+ "extra": null,
+ "id": 7865671,
+ "metadata_only": false,
+ "name": "ipa-debugsource",
+ "payloadhash": "ef699165ba4a4d3faa26cf806855c365",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 469792,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1139326,
+ "buildroot_id": 5756019,
+ "buildtime": 1584549386,
+ "epoch": null,
+ "extra": null,
+ "id": 7865670,
+ "metadata_only": false,
+ "name": "ipa-debuginfo",
+ "payloadhash": "abdc2a1115c51be89dde150f5f374214",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 188312,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1139326,
+ "buildroot_id": 5756019,
+ "buildtime": 1584549386,
+ "epoch": null,
+ "extra": null,
+ "id": 7865669,
+ "metadata_only": false,
+ "name": "ipa-client-debuginfo",
+ "payloadhash": "e53dea82314fe6705300476bd8c2a415",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 343004,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1139326,
+ "buildroot_id": 5756019,
+ "buildtime": 1584549386,
+ "epoch": null,
+ "extra": null,
+ "id": 7865668,
+ "metadata_only": false,
+ "name": "ipa-server",
+ "payloadhash": "a09d47b83601f4673133d9e0422ef7f5",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 522808,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 1139326,
+ "buildroot_id": 5756019,
+ "buildtime": 1584549386,
+ "epoch": null,
+ "extra": null,
+ "id": 7865667,
+ "metadata_only": false,
+ "name": "ipa-client-samba",
+ "payloadhash": "af059e6571bb089540878e4baec1c5c1",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 172352,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865666,
+ "metadata_only": false,
+ "name": "ipa-common",
+ "payloadhash": "94e5ae60c287885f06c9ec389a85ebde",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 782752,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865665,
+ "metadata_only": false,
+ "name": "ipa-server-dns",
+ "payloadhash": "b6ad4b703aca9e6f2ed266395cd38989",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 186424,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865664,
+ "metadata_only": false,
+ "name": "ipa-server-common",
+ "payloadhash": "1a99072a08cfbd6ed4209befbc125296",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 609540,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865663,
+ "metadata_only": false,
+ "name": "ipa-debugsource",
+ "payloadhash": "3b4f3b209f0b710c16900984328ad490",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 469780,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865662,
+ "metadata_only": false,
+ "name": "ipa-client",
+ "payloadhash": "0ad619451775b0f60dc32cff0b754101",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 269380,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865661,
+ "metadata_only": false,
+ "name": "ipa-debuginfo",
+ "payloadhash": "c363e23c0ddb4be57073d5f42d2c2f10",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 188260,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865660,
+ "metadata_only": false,
+ "name": "python3-ipaserver",
+ "payloadhash": "678236bd9416147fb577f0422962ce4c",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 1577588,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865659,
+ "metadata_only": false,
+ "name": "python3-ipaclient",
+ "payloadhash": "b8e4efc498ff4863ccd6805d04153341",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 675988,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865658,
+ "metadata_only": false,
+ "name": "ipa-server",
+ "payloadhash": "f2c91d5db28001a228674f54c972b444",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 509864,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865657,
+ "metadata_only": false,
+ "name": "ipa-client-debuginfo",
+ "payloadhash": "808a47ed4c745312416317558f124c89",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 342140,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865656,
+ "metadata_only": false,
+ "name": "ipa-python-compat",
+ "payloadhash": "71180dc9c37e08c70d1db3d01a7f63db",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 170068,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865655,
+ "metadata_only": false,
+ "name": "ipa-client-samba",
+ "payloadhash": "70c37de6e79e9a60d041ad3f55340419",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 172320,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865654,
+ "metadata_only": false,
+ "name": "ipa-server-debuginfo",
+ "payloadhash": "2d48195b214e2137b81d88b31cefb79f",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 742960,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865653,
+ "metadata_only": false,
+ "name": "ipa-server-trust-ad",
+ "payloadhash": "a1e36114395ebb8273c84cb27748c124",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 267036,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865652,
+ "metadata_only": false,
+ "name": "python3-ipalib",
+ "payloadhash": "530ab32a650e82ffb0deb6c153d7656d",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 723300,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865651,
+ "metadata_only": false,
+ "name": "ipa-client-common",
+ "payloadhash": "b35b2c7abfd517872227d5adb9ee2c0f",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 177620,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549647,
+ "epoch": null,
+ "extra": null,
+ "id": 7865650,
+ "metadata_only": false,
+ "name": "ipa-server-trust-ad-debuginfo",
+ "payloadhash": "7aa1b58bce84fb6623143047f350ae24",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 384480,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "src",
+ "build_id": 1139326,
+ "buildroot_id": 5756013,
+ "buildtime": 1584549222,
+ "epoch": null,
+ "extra": null,
+ "id": 7865649,
+ "metadata_only": false,
+ "name": "ipa",
+ "payloadhash": "56740cbc1789552bacf1cad0086a1d47",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "size": 12755704,
+ "version": "4.8.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 959042,
+ "buildroot_id": 5142731,
+ "buildtime": 1567153754,
+ "epoch": null,
+ "extra": null,
+ "id": 7305744,
+ "metadata_only": false,
+ "name": "opendnssec",
+ "payloadhash": "cb60d0f892d87874597d48ee6dd0d2dd",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 502168,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 959042,
+ "buildroot_id": 5142731,
+ "buildtime": 1567153754,
+ "epoch": null,
+ "extra": null,
+ "id": 7305743,
+ "metadata_only": false,
+ "name": "opendnssec-debuginfo",
+ "payloadhash": "a849a2485fbc22c8008e8e1f989c871e",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 1366588,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 959042,
+ "buildroot_id": 5142731,
+ "buildtime": 1567153754,
+ "epoch": null,
+ "extra": null,
+ "id": 7305742,
+ "metadata_only": false,
+ "name": "opendnssec-debugsource",
+ "payloadhash": "f6087eb44c965076fd642e5e91ac01bb",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 356812,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "i686",
+ "build_id": 959042,
+ "buildroot_id": 5142733,
+ "buildtime": 1567153669,
+ "epoch": null,
+ "extra": null,
+ "id": 7305741,
+ "metadata_only": false,
+ "name": "opendnssec",
+ "payloadhash": "41f2ca6ad5b3eef882c0177fe9e88dab",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 513696,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "i686",
+ "build_id": 959042,
+ "buildroot_id": 5142733,
+ "buildtime": 1567153669,
+ "epoch": null,
+ "extra": null,
+ "id": 7305740,
+ "metadata_only": false,
+ "name": "opendnssec-debuginfo",
+ "payloadhash": "60078eebdfa0303e1caf8b566d3f156d",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 1153776,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "i686",
+ "build_id": 959042,
+ "buildroot_id": 5142733,
+ "buildtime": 1567153669,
+ "epoch": null,
+ "extra": null,
+ "id": 7305739,
+ "metadata_only": false,
+ "name": "opendnssec-debugsource",
+ "payloadhash": "fc1690426a858b02a21f1d6985265efc",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 356788,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 959042,
+ "buildroot_id": 5142730,
+ "buildtime": 1567153632,
+ "epoch": null,
+ "extra": null,
+ "id": 7305738,
+ "metadata_only": false,
+ "name": "opendnssec",
+ "payloadhash": "57681fde4f863cc2cad7fedfc24d5fab",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 440900,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 959042,
+ "buildroot_id": 5142730,
+ "buildtime": 1567153632,
+ "epoch": null,
+ "extra": null,
+ "id": 7305737,
+ "metadata_only": false,
+ "name": "opendnssec-debuginfo",
+ "payloadhash": "06e9084da0becd2f43a95f7a1fe03d0f",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 1294064,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 959042,
+ "buildroot_id": 5142730,
+ "buildtime": 1567153632,
+ "epoch": null,
+ "extra": null,
+ "id": 7305736,
+ "metadata_only": false,
+ "name": "opendnssec-debugsource",
+ "payloadhash": "ad9da763138f1561c3fee0c89a20525a",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 356768,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 959042,
+ "buildroot_id": 5142732,
+ "buildtime": 1567153667,
+ "epoch": null,
+ "extra": null,
+ "id": 7305735,
+ "metadata_only": false,
+ "name": "opendnssec",
+ "payloadhash": "e6b8057bcda539c2dfa78031dcbba7e5",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 481944,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 959042,
+ "buildroot_id": 5142732,
+ "buildtime": 1567153667,
+ "epoch": null,
+ "extra": null,
+ "id": 7305734,
+ "metadata_only": false,
+ "name": "opendnssec-debugsource",
+ "payloadhash": "d184fdad4733bc6db1eaca30e85ee1c9",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 356796,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 959042,
+ "buildroot_id": 5142732,
+ "buildtime": 1567153667,
+ "epoch": null,
+ "extra": null,
+ "id": 7305733,
+ "metadata_only": false,
+ "name": "opendnssec-debuginfo",
+ "payloadhash": "7d151707ef916094ff5a1455603d5021",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 1354072,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 959042,
+ "buildroot_id": 5142734,
+ "buildtime": 1567153822,
+ "epoch": null,
+ "extra": null,
+ "id": 7305732,
+ "metadata_only": false,
+ "name": "opendnssec",
+ "payloadhash": "bbb00958217861b62f061230e02372b3",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 475712,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 959042,
+ "buildroot_id": 5142734,
+ "buildtime": 1567153822,
+ "epoch": null,
+ "extra": null,
+ "id": 7305731,
+ "metadata_only": false,
+ "name": "opendnssec-debuginfo",
+ "payloadhash": "0234dacac54856c6e29e43ea2639105d",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 1376784,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 959042,
+ "buildroot_id": 5142734,
+ "buildtime": 1567153822,
+ "epoch": null,
+ "extra": null,
+ "id": 7305730,
+ "metadata_only": false,
+ "name": "opendnssec-debugsource",
+ "payloadhash": "a2675808d0394f4f435284cf316c605a",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 356788,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "src",
+ "build_id": 959042,
+ "buildroot_id": 5142734,
+ "buildtime": 1567153715,
+ "epoch": null,
+ "extra": null,
+ "id": 7305729,
+ "metadata_only": false,
+ "name": "opendnssec",
+ "payloadhash": "c673e008bd0eb5e6c0eee59279da1197",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 1055303,
+ "version": "1.4.14"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 959051,
+ "buildroot_id": 5142778,
+ "buildtime": 1567154689,
+ "epoch": null,
+ "extra": null,
+ "id": 7305863,
+ "metadata_only": false,
+ "name": "python3-pyusb",
+ "payloadhash": "2f06b1a6396b2deb1e3142ace9f29393",
+ "release": "9.module+el8.1.0+4107+4a66eb87",
+ "size": 89016,
+ "version": "1.0.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 959051,
+ "buildroot_id": 5142778,
+ "buildtime": 1567154678,
+ "epoch": null,
+ "extra": null,
+ "id": 7305862,
+ "metadata_only": false,
+ "name": "pyusb",
+ "payloadhash": "a3b6bf520787a1f0289cdb4fa594654c",
+ "release": "9.module+el8.1.0+4107+4a66eb87",
+ "size": 80859,
+ "version": "1.0.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 959052,
+ "buildroot_id": 5142779,
+ "buildtime": 1567154822,
+ "epoch": null,
+ "extra": null,
+ "id": 7305865,
+ "metadata_only": false,
+ "name": "python3-jwcrypto",
+ "payloadhash": "d7e3b67ac9a9fd7545fadb48ed7b46f3",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 66048,
+ "version": "0.5.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 959052,
+ "buildroot_id": 5142779,
+ "buildtime": 1567154802,
+ "epoch": null,
+ "extra": null,
+ "id": 7305864,
+ "metadata_only": false,
+ "name": "python-jwcrypto",
+ "payloadhash": "011fd8fccca627c86dfaf5f71698aa7a",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "size": 78370,
+ "version": "0.5.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 959056,
+ "buildroot_id": 5142788,
+ "buildtime": 1567155087,
+ "epoch": null,
+ "extra": null,
+ "id": 7305870,
+ "metadata_only": false,
+ "name": "custodia",
+ "payloadhash": "00ca09ffaf44d5bc9906c330e12b16b6",
+ "release": "3.module+el8.1.0+4107+4a66eb87",
+ "size": 33268,
+ "version": "0.6.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 959056,
+ "buildroot_id": 5142788,
+ "buildtime": 1567155087,
+ "epoch": null,
+ "extra": null,
+ "id": 7305869,
+ "metadata_only": false,
+ "name": "python3-custodia",
+ "payloadhash": "3abea9085628c4f7a662ce78ffce4c66",
+ "release": "3.module+el8.1.0+4107+4a66eb87",
+ "size": 123516,
+ "version": "0.6.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 959056,
+ "buildroot_id": 5142788,
+ "buildtime": 1567155069,
+ "epoch": null,
+ "extra": null,
+ "id": 7305867,
+ "metadata_only": false,
+ "name": "custodia",
+ "payloadhash": "1abe9ba3e5d3682a0ac9b580db94d9d3",
+ "release": "3.module+el8.1.0+4107+4a66eb87",
+ "size": 148309,
+ "version": "0.6.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 959057,
+ "buildroot_id": 5142792,
+ "buildtime": 1567155080,
+ "epoch": null,
+ "extra": null,
+ "id": 7305868,
+ "metadata_only": false,
+ "name": "python3-yubico",
+ "payloadhash": "a31ddc3b4209da765b7ed9e760569c8c",
+ "release": "9.module+el8.1.0+4107+4a66eb87",
+ "size": 63820,
+ "version": "1.3.2"
+ },
+ {
+ "arch": "src",
+ "build_id": 959057,
+ "buildroot_id": 5142792,
+ "buildtime": 1567155073,
+ "epoch": null,
+ "extra": null,
+ "id": 7305866,
+ "metadata_only": false,
+ "name": "python-yubico",
+ "payloadhash": "15a0d4d32df1932722723813ab8ae81b",
+ "release": "9.module+el8.1.0+4107+4a66eb87",
+ "size": 52063,
+ "version": "1.3.2"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1062086,
+ "buildroot_id": 5521032,
+ "buildtime": 1579344750,
+ "epoch": null,
+ "extra": null,
+ "id": 7699623,
+ "metadata_only": false,
+ "name": "ipa-healthcheck-core",
+ "payloadhash": "b39fbcaa3e1d36e9c5e93d782693015b",
+ "release": "4.module+el8.2.0+5496+53199ee7",
+ "size": 48820,
+ "version": "0.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1062086,
+ "buildroot_id": 5521032,
+ "buildtime": 1579344750,
+ "epoch": null,
+ "extra": null,
+ "id": 7699622,
+ "metadata_only": false,
+ "name": "ipa-healthcheck",
+ "payloadhash": "b42af8db410adc03dc71feb67ff4f42d",
+ "release": "4.module+el8.2.0+5496+53199ee7",
+ "size": 86016,
+ "version": "0.4"
+ },
+ {
+ "arch": "src",
+ "build_id": 1062086,
+ "buildroot_id": 5521032,
+ "buildtime": 1579344699,
+ "epoch": null,
+ "extra": null,
+ "id": 7699621,
+ "metadata_only": false,
+ "name": "ipa-healthcheck",
+ "payloadhash": "73d844ba7087621b02dfc0244b8522f9",
+ "release": "4.module+el8.2.0+5496+53199ee7",
+ "size": 93648,
+ "version": "0.4"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 909543,
+ "buildroot_id": 4970166,
+ "buildtime": 1560195826,
+ "epoch": null,
+ "extra": null,
+ "id": 7075152,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+ "payloadhash": "91222d6c1c3b2791c7c2800c940ff247",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 563566,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 909543,
+ "buildroot_id": 4970166,
+ "buildtime": 1560195826,
+ "epoch": null,
+ "extra": null,
+ "id": 7075151,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debugsource",
+ "payloadhash": "c79d2396ace24ba292e88e0d687fc3fa",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 45726,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 909543,
+ "buildroot_id": 4970166,
+ "buildtime": 1560195826,
+ "epoch": null,
+ "extra": null,
+ "id": 7075150,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man",
+ "payloadhash": "39a53b085cd2667b0a18e2df482efc9d",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 749426,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "i686",
+ "build_id": 909543,
+ "buildroot_id": 4970164,
+ "buildtime": 1560195759,
+ "epoch": null,
+ "extra": null,
+ "id": 7075149,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debugsource",
+ "payloadhash": "0ed7433635ce5ec37b03c36905b014ae",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 45738,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "i686",
+ "build_id": 909543,
+ "buildroot_id": 4970164,
+ "buildtime": 1560195759,
+ "epoch": null,
+ "extra": null,
+ "id": 7075148,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man",
+ "payloadhash": "32eb260a4218b7ebe1e2345341ea3923",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 789166,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "i686",
+ "build_id": 909543,
+ "buildroot_id": 4970164,
+ "buildtime": 1560195759,
+ "epoch": null,
+ "extra": null,
+ "id": 7075147,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+ "payloadhash": "92fb725a36de13541c74370c6d7b12df",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 584658,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 909543,
+ "buildroot_id": 4970162,
+ "buildtime": 1560195702,
+ "epoch": null,
+ "extra": null,
+ "id": 7075146,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man",
+ "payloadhash": "d03c85cae56c351a05a2d6c81d301230",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 801610,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 909543,
+ "buildroot_id": 4970162,
+ "buildtime": 1560195702,
+ "epoch": null,
+ "extra": null,
+ "id": 7075145,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+ "payloadhash": "22946480024dcece0f050d346a183c06",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 574938,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 909543,
+ "buildroot_id": 4970162,
+ "buildtime": 1560195702,
+ "epoch": null,
+ "extra": null,
+ "id": 7075144,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debugsource",
+ "payloadhash": "679dacf9c2fe06fedb087d4f36212601",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 45698,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 909543,
+ "buildroot_id": 4970163,
+ "buildtime": 1560195727,
+ "epoch": null,
+ "extra": null,
+ "id": 7075143,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+ "payloadhash": "5234b608d707d5d01a214778679b28ed",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 589922,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 909543,
+ "buildroot_id": 4970163,
+ "buildtime": 1560195727,
+ "epoch": null,
+ "extra": null,
+ "id": 7075142,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debugsource",
+ "payloadhash": "d4a98d17df99cbd009c3042ec2798500",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 45726,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 909543,
+ "buildroot_id": 4970163,
+ "buildtime": 1560195727,
+ "epoch": null,
+ "extra": null,
+ "id": 7075141,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man",
+ "payloadhash": "7f7bf097295708b27909c27f62d17028",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 823402,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 909543,
+ "buildroot_id": 4970165,
+ "buildtime": 1560195860,
+ "epoch": null,
+ "extra": null,
+ "id": 7075140,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man",
+ "payloadhash": "66c31b7b54b9edec7fb2f2b9620302bf",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 754750,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 909543,
+ "buildroot_id": 4970165,
+ "buildtime": 1560195860,
+ "epoch": null,
+ "extra": null,
+ "id": 7075139,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debugsource",
+ "payloadhash": "a14edba8b02e0b37ba2b944bee1d08a3",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 45706,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 909543,
+ "buildroot_id": 4970165,
+ "buildtime": 1560195860,
+ "epoch": null,
+ "extra": null,
+ "id": 7075138,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man-debuginfo",
+ "payloadhash": "d552b7b0fa82f2aaae31dca03c439513",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 561446,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "src",
+ "build_id": 909543,
+ "buildroot_id": 4970165,
+ "buildtime": 1560195765,
+ "epoch": null,
+ "extra": null,
+ "id": 7075137,
+ "metadata_only": false,
+ "name": "golang-github-cpuguy83-go-md2man",
+ "payloadhash": "27a42e4a8c996dce517f840d34d1d25b",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "size": 92364,
+ "version": "1.0.7"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910836,
+ "buildroot_id": 4975529,
+ "buildtime": 1560357356,
+ "epoch": null,
+ "extra": null,
+ "id": 7085414,
+ "metadata_only": false,
+ "name": "xsom",
+ "payloadhash": "6a11e1ee314c8ee9b7d80a5e8f4023a8",
+ "release": "19.20110809svn.module+el8.1.0+3366+6dfb954c",
+ "size": 406943,
+ "version": "0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910836,
+ "buildroot_id": 4975529,
+ "buildtime": 1560357356,
+ "epoch": null,
+ "extra": null,
+ "id": 7085413,
+ "metadata_only": false,
+ "name": "xsom-javadoc",
+ "payloadhash": "67a349a58ba9d3569eecdd73257f7322",
+ "release": "19.20110809svn.module+el8.1.0+3366+6dfb954c",
+ "size": 399079,
+ "version": "0"
+ },
+ {
+ "arch": "src",
+ "build_id": 910836,
+ "buildroot_id": 4975529,
+ "buildtime": 1560357318,
+ "epoch": null,
+ "extra": null,
+ "id": 7085412,
+ "metadata_only": false,
+ "name": "xsom",
+ "payloadhash": "2d9d0b08e0fbc7371faa476194062bed",
+ "release": "19.20110809svn.module+el8.1.0+3366+6dfb954c",
+ "size": 397446,
+ "version": "0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1144557,
+ "buildroot_id": 5775388,
+ "buildtime": 1584979939,
+ "epoch": null,
+ "extra": null,
+ "id": 7883876,
+ "metadata_only": false,
+ "name": "xmlstreambuffer-javadoc",
+ "payloadhash": "2f83bd13498529c23bdea22595a02093",
+ "release": "8.module+el8.2.0+5723+4574fbff",
+ "size": 103411,
+ "version": "1.5.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1144557,
+ "buildroot_id": 5775388,
+ "buildtime": 1584979939,
+ "epoch": null,
+ "extra": null,
+ "id": 7883875,
+ "metadata_only": false,
+ "name": "xmlstreambuffer",
+ "payloadhash": "c6b64f7c0024f06cdfa64ab7eabb206e",
+ "release": "8.module+el8.2.0+5723+4574fbff",
+ "size": 88115,
+ "version": "1.5.4"
+ },
+ {
+ "arch": "src",
+ "build_id": 1144557,
+ "buildroot_id": 5775388,
+ "buildtime": 1584979913,
+ "epoch": null,
+ "extra": null,
+ "id": 7883874,
+ "metadata_only": false,
+ "name": "xmlstreambuffer",
+ "payloadhash": "de61e444265fa6385aa350fd9a1879ac",
+ "release": "8.module+el8.2.0+5723+4574fbff",
+ "size": 66264,
+ "version": "1.5.4"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910842,
+ "buildroot_id": 4975556,
+ "buildtime": 1560358106,
+ "epoch": null,
+ "extra": null,
+ "id": 7085440,
+ "metadata_only": false,
+ "name": "glassfish-fastinfoset-javadoc",
+ "payloadhash": "615b4d655f99e3d9010bf8ac22705541",
+ "release": "9.module+el8.1.0+3366+6dfb954c",
+ "size": 384739,
+ "version": "1.2.13"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910842,
+ "buildroot_id": 4975556,
+ "buildtime": 1560358106,
+ "epoch": null,
+ "extra": null,
+ "id": 7085439,
+ "metadata_only": false,
+ "name": "glassfish-fastinfoset",
+ "payloadhash": "cdcf749901a178ba96f7d98ad2a1d311",
+ "release": "9.module+el8.1.0+3366+6dfb954c",
+ "size": 361139,
+ "version": "1.2.13"
+ },
+ {
+ "arch": "src",
+ "build_id": 910842,
+ "buildroot_id": 4975556,
+ "buildtime": 1560357958,
+ "epoch": null,
+ "extra": null,
+ "id": 7085438,
+ "metadata_only": false,
+ "name": "glassfish-fastinfoset",
+ "payloadhash": "ddfbcd3503fc63d43c1b5f061209dbcd",
+ "release": "9.module+el8.1.0+3366+6dfb954c",
+ "size": 1592961,
+ "version": "1.2.13"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085641,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-runtime-parent",
+ "payloadhash": "a2f20686a86a5868c26716897f7c6402",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 11815,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085640,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-runtime",
+ "payloadhash": "a05c4445ab49a3fbbd798b4ce288cad1",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 958491,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085639,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-codemodel-annotation-compiler",
+ "payloadhash": "9fda037b1302bb006ad3e6099f0cebd1",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 22867,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085638,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-bom",
+ "payloadhash": "2655b9eac43c31cfdafba471fe39ca4d",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 28863,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085637,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-core",
+ "payloadhash": "c47d960603ca915b7800bc098d6028a3",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 160731,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085636,
+ "metadata_only": false,
+ "name": "glassfish-jaxb",
+ "payloadhash": "a1496aed9865697178bf09d2fa73ae8a",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 27939,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085635,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-txw2",
+ "payloadhash": "595eccf2607a7567c63af9822a74003b",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 91323,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085634,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-parent",
+ "payloadhash": "67c9ab1a26e29c7e0d051d72cb982e5a",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 15459,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085633,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-codemodel",
+ "payloadhash": "1d8fe4f1cde6b176b0031450b61bb33e",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 165075,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085632,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-external-parent",
+ "payloadhash": "93754edadd2033cac9af893792b6b9c2",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 11795,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085631,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-txw-parent",
+ "payloadhash": "6409edc38dac620781a62e7641456be5",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 11783,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085630,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-bom-ext",
+ "payloadhash": "253717f64501dd65cea9baf8542e6ca1",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 12235,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085629,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-codemodel-parent",
+ "payloadhash": "f1c598b74b476b0ddbf84f05dcdd342c",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 11835,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358486,
+ "epoch": null,
+ "extra": null,
+ "id": 7085628,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-rngom",
+ "payloadhash": "c240f7020303cf1480cf9fda67f6acef",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 306671,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "src",
+ "build_id": 910844,
+ "buildroot_id": 4975564,
+ "buildtime": 1560358365,
+ "epoch": null,
+ "extra": null,
+ "id": 7085627,
+ "metadata_only": false,
+ "name": "glassfish-jaxb",
+ "payloadhash": "202cca1166598be94131a52f8d0a6459",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 4612273,
+ "version": "2.2.11"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1028063,
+ "buildroot_id": 5396389,
+ "buildtime": 1575497271,
+ "epoch": null,
+ "extra": null,
+ "id": 7595160,
+ "metadata_only": false,
+ "name": "jackson-parent",
+ "payloadhash": "3909120d61c10ea90fc37f04e58a4ee6",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 15643,
+ "version": "2.10"
+ },
+ {
+ "arch": "src",
+ "build_id": 1028063,
+ "buildroot_id": 5396389,
+ "buildtime": 1575497201,
+ "epoch": null,
+ "extra": null,
+ "id": 7595159,
+ "metadata_only": false,
+ "name": "jackson-parent",
+ "payloadhash": "24c7a7d9ce539c4ce0e482c73e17fac5",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 17851,
+ "version": "2.10"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1028067,
+ "buildroot_id": 5396424,
+ "buildtime": 1575497963,
+ "epoch": null,
+ "extra": null,
+ "id": 7595174,
+ "metadata_only": false,
+ "name": "jackson-bom",
+ "payloadhash": "050cd824d1f3348276b3d8ccdc3b280c",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 16043,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 1028067,
+ "buildroot_id": 5396424,
+ "buildtime": 1575497911,
+ "epoch": null,
+ "extra": null,
+ "id": 7595173,
+ "metadata_only": false,
+ "name": "jackson-bom",
+ "payloadhash": "1c0cccde10e18d945546011c409caebf",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 22590,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1028074,
+ "buildroot_id": 5396475,
+ "buildtime": 1575499212,
+ "epoch": null,
+ "extra": null,
+ "id": 7595204,
+ "metadata_only": false,
+ "name": "jackson-core-javadoc",
+ "payloadhash": "2d0ae6a265f8f5292885a915ed4f3fb4",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 495683,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1028074,
+ "buildroot_id": 5396475,
+ "buildtime": 1575499212,
+ "epoch": null,
+ "extra": null,
+ "id": 7595203,
+ "metadata_only": false,
+ "name": "jackson-core",
+ "payloadhash": "d59a579e076c0fc68efe780afc1a0d31",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 352427,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 1028074,
+ "buildroot_id": 5396475,
+ "buildtime": 1575499040,
+ "epoch": null,
+ "extra": null,
+ "id": 7595202,
+ "metadata_only": false,
+ "name": "jackson-core",
+ "payloadhash": "87ea48a3c747d142f14002d06ccd51fc",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 450226,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1028078,
+ "buildroot_id": 5396490,
+ "buildtime": 1575500030,
+ "epoch": null,
+ "extra": null,
+ "id": 7595219,
+ "metadata_only": false,
+ "name": "jackson-annotations-javadoc",
+ "payloadhash": "6fb351198e3657cbbf6640f06587755b",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 124103,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1028078,
+ "buildroot_id": 5396490,
+ "buildtime": 1575500030,
+ "epoch": null,
+ "extra": null,
+ "id": 7595218,
+ "metadata_only": false,
+ "name": "jackson-annotations",
+ "payloadhash": "acba186a90620ddff770027842531d58",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 71851,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 1028078,
+ "buildroot_id": 5396490,
+ "buildtime": 1575499891,
+ "epoch": null,
+ "extra": null,
+ "id": 7595217,
+ "metadata_only": false,
+ "name": "jackson-annotations",
+ "payloadhash": "6fa491fd6aa6ef37ae5d00c856dfbea6",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 69495,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1028087,
+ "buildroot_id": 5396523,
+ "buildtime": 1575500533,
+ "epoch": null,
+ "extra": null,
+ "id": 7595222,
+ "metadata_only": false,
+ "name": "jackson-databind-javadoc",
+ "payloadhash": "3b495e1d0fde58519fb666ba52d5ada6",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 1923207,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1028087,
+ "buildroot_id": 5396523,
+ "buildtime": 1575500533,
+ "epoch": null,
+ "extra": null,
+ "id": 7595221,
+ "metadata_only": false,
+ "name": "jackson-databind",
+ "payloadhash": "b738db5a6e462ecc5edfd478a3d42d86",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 1332163,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 1028087,
+ "buildroot_id": 5396523,
+ "buildtime": 1575500474,
+ "epoch": null,
+ "extra": null,
+ "id": 7595220,
+ "metadata_only": false,
+ "name": "jackson-databind",
+ "payloadhash": "198f466dddabd4cdb28cb189b23dc243",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "size": 1311643,
+ "version": "2.10.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910869,
+ "buildroot_id": 4975658,
+ "buildtime": 1560361371,
+ "epoch": null,
+ "extra": null,
+ "id": 7085805,
+ "metadata_only": false,
+ "name": "jackson-module-jaxb-annotations",
+ "payloadhash": "60a25e597045a87b9047cf228f551c47",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 45763,
+ "version": "2.7.6"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910869,
+ "buildroot_id": 4975658,
+ "buildtime": 1560361371,
+ "epoch": null,
+ "extra": null,
+ "id": 7085804,
+ "metadata_only": false,
+ "name": "jackson-module-jaxb-annotations-javadoc",
+ "payloadhash": "10aba002380ba58fb310eee0ffe9f58f",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 48471,
+ "version": "2.7.6"
+ },
+ {
+ "arch": "src",
+ "build_id": 910869,
+ "buildroot_id": 4975658,
+ "buildtime": 1560361336,
+ "epoch": null,
+ "extra": null,
+ "id": 7085803,
+ "metadata_only": false,
+ "name": "jackson-module-jaxb-annotations",
+ "payloadhash": "e74b2038fa5c73b59d1f2f79d438e746",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 55401,
+ "version": "2.7.6"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 941248,
+ "buildroot_id": 5077784,
+ "buildtime": 1564610159,
+ "epoch": null,
+ "extra": null,
+ "id": 7219347,
+ "metadata_only": false,
+ "name": "jackson-jaxrs-providers-javadoc",
+ "payloadhash": "2bbe26ea5dbaaa23089673430a73dba3",
+ "release": "1.module+el8.1.0+3832+9784644d",
+ "size": 86683,
+ "version": "2.9.9"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 941248,
+ "buildroot_id": 5077784,
+ "buildtime": 1564610159,
+ "epoch": null,
+ "extra": null,
+ "id": 7219346,
+ "metadata_only": false,
+ "name": "jackson-jaxrs-providers-parent",
+ "payloadhash": "d7f64f2381d61d7050e2b5c01ba5ea2b",
+ "release": "1.module+el8.1.0+3832+9784644d",
+ "size": 12323,
+ "version": "2.9.9"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 941248,
+ "buildroot_id": 5077784,
+ "buildtime": 1564610159,
+ "epoch": null,
+ "extra": null,
+ "id": 7219345,
+ "metadata_only": false,
+ "name": "jackson-jaxrs-providers-datatypes",
+ "payloadhash": "e5ad82651b7fafdafd835b2fd9700d29",
+ "release": "1.module+el8.1.0+3832+9784644d",
+ "size": 18059,
+ "version": "2.9.9"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 941248,
+ "buildroot_id": 5077784,
+ "buildtime": 1564610159,
+ "epoch": null,
+ "extra": null,
+ "id": 7219344,
+ "metadata_only": false,
+ "name": "jackson-jaxrs-json-provider",
+ "payloadhash": "d5f73c16799f01fe2accf178bda603f5",
+ "release": "1.module+el8.1.0+3832+9784644d",
+ "size": 23819,
+ "version": "2.9.9"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 941248,
+ "buildroot_id": 5077784,
+ "buildtime": 1564610159,
+ "epoch": null,
+ "extra": null,
+ "id": 7219343,
+ "metadata_only": false,
+ "name": "jackson-jaxrs-providers",
+ "payloadhash": "f9aef76f86248c2e5023c5e17024cd71",
+ "release": "1.module+el8.1.0+3832+9784644d",
+ "size": 44719,
+ "version": "2.9.9"
+ },
+ {
+ "arch": "src",
+ "build_id": 941248,
+ "buildroot_id": 5077784,
+ "buildtime": 1564610086,
+ "epoch": null,
+ "extra": null,
+ "id": 7219342,
+ "metadata_only": false,
+ "name": "jackson-jaxrs-providers",
+ "payloadhash": "964f649fb7d235760a767e2856d4b2f4",
+ "release": "1.module+el8.1.0+3832+9784644d",
+ "size": 1272470,
+ "version": "2.9.9"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1144584,
+ "buildroot_id": 5775496,
+ "buildtime": 1584982156,
+ "epoch": null,
+ "extra": null,
+ "id": 7883886,
+ "metadata_only": false,
+ "name": "resteasy-javadoc",
+ "payloadhash": "0be26935ed385e7df6305cbfbb80851c",
+ "release": "3.module+el8.2.0+5723+4574fbff",
+ "size": 1195355,
+ "version": "3.0.26"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1144584,
+ "buildroot_id": 5775496,
+ "buildtime": 1584982156,
+ "epoch": null,
+ "extra": null,
+ "id": 7883885,
+ "metadata_only": false,
+ "name": "resteasy",
+ "payloadhash": "d0cf77aad674eac9b5b07d26901f247d",
+ "release": "3.module+el8.2.0+5723+4574fbff",
+ "size": 1115667,
+ "version": "3.0.26"
+ },
+ {
+ "arch": "src",
+ "build_id": 1144584,
+ "buildroot_id": 5775496,
+ "buildtime": 1584982113,
+ "epoch": null,
+ "extra": null,
+ "id": 7883884,
+ "metadata_only": false,
+ "name": "resteasy",
+ "payloadhash": "87aefc17f4a504d3bf45c96e964ae677",
+ "release": "3.module+el8.2.0+5723+4574fbff",
+ "size": 7816178,
+ "version": "3.0.26"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910796,
+ "buildroot_id": 4975406,
+ "buildtime": 1560355813,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085264,
+ "metadata_only": false,
+ "name": "velocity-javadoc",
+ "payloadhash": "4d867d28d3403b1736dd4b09b0ffcd44",
+ "release": "24.module+el8.1.0+3366+6dfb954c",
+ "size": 496935,
+ "version": "1.7"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910796,
+ "buildroot_id": 4975406,
+ "buildtime": 1560355813,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085263,
+ "metadata_only": false,
+ "name": "velocity",
+ "payloadhash": "f539a3469f3d1e3dca26a55b90ec2d8b",
+ "release": "24.module+el8.1.0+3366+6dfb954c",
+ "size": 446091,
+ "version": "1.7"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910796,
+ "buildroot_id": 4975406,
+ "buildtime": 1560355813,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085262,
+ "metadata_only": false,
+ "name": "velocity-manual",
+ "payloadhash": "aafa87e7eb2fa2530931c79e4924f127",
+ "release": "24.module+el8.1.0+3366+6dfb954c",
+ "size": 643783,
+ "version": "1.7"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910796,
+ "buildroot_id": 4975406,
+ "buildtime": 1560355813,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085261,
+ "metadata_only": false,
+ "name": "velocity-demo",
+ "payloadhash": "f5a5d39f2a63061a898a7a6b8fc35c61",
+ "release": "24.module+el8.1.0+3366+6dfb954c",
+ "size": 111555,
+ "version": "1.7"
+ },
+ {
+ "arch": "src",
+ "build_id": 910796,
+ "buildroot_id": 4975406,
+ "buildtime": 1560355538,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085260,
+ "metadata_only": false,
+ "name": "velocity",
+ "payloadhash": "dae5a51991e342401248c4af0be520fd",
+ "release": "24.module+el8.1.0+3366+6dfb954c",
+ "size": 1584450,
+ "version": "1.7"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1144545,
+ "buildroot_id": 5775341,
+ "buildtime": 1584978871,
+ "epoch": null,
+ "extra": null,
+ "id": 7883860,
+ "metadata_only": false,
+ "name": "glassfish-jax-rs-api",
+ "payloadhash": "f38590be170d682a550d56fb95a60dd0",
+ "release": "6.module+el8.2.0+5723+4574fbff",
+ "size": 110203,
+ "version": "2.0.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1144545,
+ "buildroot_id": 5775341,
+ "buildtime": 1584978871,
+ "epoch": null,
+ "extra": null,
+ "id": 7883859,
+ "metadata_only": false,
+ "name": "glassfish-jax-rs-api-javadoc",
+ "payloadhash": "a7f5044c11b2daa311a4188d9a30b4fc",
+ "release": "6.module+el8.2.0+5723+4574fbff",
+ "size": 266903,
+ "version": "2.0.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 1144545,
+ "buildroot_id": 5775341,
+ "buildtime": 1584978836,
+ "epoch": null,
+ "extra": null,
+ "id": 7883858,
+ "metadata_only": false,
+ "name": "glassfish-jax-rs-api",
+ "payloadhash": "db548a69417c3aadb3bbe305cb272acd",
+ "release": "6.module+el8.2.0+5723+4574fbff",
+ "size": 235872,
+ "version": "2.0.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910805,
+ "buildroot_id": 4975413,
+ "buildtime": 1560355896,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085267,
+ "metadata_only": false,
+ "name": "pki-servlet-4.0-api",
+ "payloadhash": "5147afcccbdf4c9cb50e73222d3d3e42",
+ "release": "16.module+el8.1.0+3366+6dfb954c",
+ "size": 285547,
+ "version": "9.0.7"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910805,
+ "buildroot_id": 4975413,
+ "buildtime": 1560355896,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085266,
+ "metadata_only": false,
+ "name": "pki-servlet-engine",
+ "payloadhash": "4fef9158a717b83186a8000002e4d8c1",
+ "release": "16.module+el8.1.0+3366+6dfb954c",
+ "size": 4773691,
+ "version": "9.0.7"
+ },
+ {
+ "arch": "src",
+ "build_id": 910805,
+ "buildroot_id": 4975413,
+ "buildtime": 1560355541,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085265,
+ "metadata_only": false,
+ "name": "pki-servlet-engine",
+ "payloadhash": "dcfc7f1d5ccb07019e0e059511adc8bb",
+ "release": "16.module+el8.1.0+3366+6dfb954c",
+ "size": 12498686,
+ "version": "9.0.7"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085174,
+ "metadata_only": false,
+ "name": "slf4j-javadoc",
+ "payloadhash": "f937e120576044bf6cc3730b516872ed",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 268659,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085172,
+ "metadata_only": false,
+ "name": "jcl-over-slf4j",
+ "payloadhash": "9204a295309bd63cfd541aec271cfd82",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 31311,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085170,
+ "metadata_only": false,
+ "name": "slf4j-ext",
+ "payloadhash": "9f6af88b474c170ba4b458e07c648322",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 57279,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085169,
+ "metadata_only": false,
+ "name": "slf4j-jcl",
+ "payloadhash": "feb88a5268168663948a66a72f9ed1e2",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 22747,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085168,
+ "metadata_only": false,
+ "name": "slf4j-sources",
+ "payloadhash": "c66b2217ce8b28703d77a22a18f70511",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 345179,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085165,
+ "metadata_only": false,
+ "name": "slf4j-manual",
+ "payloadhash": "29080e4ee21afe086da026c594b75930",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 132975,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085164,
+ "metadata_only": false,
+ "name": "slf4j-log4j12",
+ "payloadhash": "e5ceb10298bbf99d13003bc6a23f121f",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 27971,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085162,
+ "metadata_only": false,
+ "name": "slf4j-jdk14",
+ "payloadhash": "32c537a296550d2ded0b7730c4f2494c",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 24319,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085161,
+ "metadata_only": false,
+ "name": "slf4j",
+ "payloadhash": "d489685b31fc888d1694d0a3a0f7a75d",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 77571,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085160,
+ "metadata_only": false,
+ "name": "log4j-over-slf4j",
+ "payloadhash": "355aedb072fdbbca61b45112b7368ea6",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 36559,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355448,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085159,
+ "metadata_only": false,
+ "name": "jul-to-slf4j",
+ "payloadhash": "976b36a458034e7fc9c395c695b9a996",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 20659,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "src",
+ "build_id": 910788,
+ "buildroot_id": 4975391,
+ "buildtime": 1560355333,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085158,
+ "metadata_only": false,
+ "name": "slf4j",
+ "payloadhash": "4f3d111f920da849d1068e313be814aa",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "size": 3449598,
+ "version": "1.7.25"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910800,
+ "buildroot_id": 4975407,
+ "buildtime": 1560355439,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085157,
+ "metadata_only": false,
+ "name": "xml-commons-resolver-javadoc",
+ "payloadhash": "6a18d36e900dc38e557040db366a720c",
+ "release": "26.module+el8.1.0+3366+6dfb954c",
+ "size": 99247,
+ "version": "1.2"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910800,
+ "buildroot_id": 4975407,
+ "buildtime": 1560355439,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085156,
+ "metadata_only": false,
+ "name": "xml-commons-resolver",
+ "payloadhash": "72db3815a2eb2808fd34d431b2561c8c",
+ "release": "26.module+el8.1.0+3366+6dfb954c",
+ "size": 117151,
+ "version": "1.2"
+ },
+ {
+ "arch": "src",
+ "build_id": 910800,
+ "buildroot_id": 4975407,
+ "buildtime": 1560355406,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085155,
+ "metadata_only": false,
+ "name": "xml-commons-resolver",
+ "payloadhash": "d96242687a4b625591fb5ce7629070bc",
+ "release": "26.module+el8.1.0+3366+6dfb954c",
+ "size": 280185,
+ "version": "1.2"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910803,
+ "buildroot_id": 4975410,
+ "buildtime": 1560356070,
+ "epoch": null,
+ "extra": null,
+ "id": 7085275,
+ "metadata_only": false,
+ "name": "xerces-j2-demo",
+ "payloadhash": "7035cf2ab5b8cd5b9f01df1b89e37ea7",
+ "release": "34.module+el8.1.0+3366+6dfb954c",
+ "size": 177959,
+ "version": "2.11.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910803,
+ "buildroot_id": 4975410,
+ "buildtime": 1560356070,
+ "epoch": null,
+ "extra": null,
+ "id": 7085274,
+ "metadata_only": false,
+ "name": "xerces-j2-javadoc",
+ "payloadhash": "f0c1a4c150a28151a21fbf93fcf3e6b3",
+ "release": "34.module+el8.1.0+3366+6dfb954c",
+ "size": 1129083,
+ "version": "2.11.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910803,
+ "buildroot_id": 4975410,
+ "buildtime": 1560356070,
+ "epoch": null,
+ "extra": null,
+ "id": 7085273,
+ "metadata_only": false,
+ "name": "xerces-j2",
+ "payloadhash": "d2541a2c973ad12c91b34e3c239e664a",
+ "release": "34.module+el8.1.0+3366+6dfb954c",
+ "size": 1214555,
+ "version": "2.11.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 910803,
+ "buildroot_id": 4975410,
+ "buildtime": 1560355730,
+ "epoch": null,
+ "extra": null,
+ "id": 7085272,
+ "metadata_only": false,
+ "name": "xerces-j2",
+ "payloadhash": "461fe024860e749fd2e6e6b0ee41f9ea",
+ "release": "34.module+el8.1.0+3366+6dfb954c",
+ "size": 1823348,
+ "version": "2.11.0"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 910789,
+ "buildroot_id": 4975396,
+ "buildtime": 1560355677,
+ "epoch": null,
+ "extra": null,
+ "id": 7085217,
+ "metadata_only": false,
+ "name": "python3-nss-debuginfo",
+ "payloadhash": "c7754f908877c4b7ca70b9a299c2ef79",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 494111,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 910789,
+ "buildroot_id": 4975396,
+ "buildtime": 1560355677,
+ "epoch": null,
+ "extra": null,
+ "id": 7085216,
+ "metadata_only": false,
+ "name": "python-nss-debugsource",
+ "payloadhash": "eadc3f26709c176852f14bd82de4ea3e",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 210255,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 910789,
+ "buildroot_id": 4975396,
+ "buildtime": 1560355677,
+ "epoch": null,
+ "extra": null,
+ "id": 7085215,
+ "metadata_only": false,
+ "name": "python-nss-doc",
+ "payloadhash": "c86d5ac6ae8f49f1c7409b77d4605ddc",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 323651,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "ppc64le",
+ "build_id": 910789,
+ "buildroot_id": 4975396,
+ "buildtime": 1560355677,
+ "epoch": null,
+ "extra": null,
+ "id": 7085214,
+ "metadata_only": false,
+ "name": "python3-nss",
+ "payloadhash": "5e2c4f53fec92e8010bb22c2dc056fd0",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 300583,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "i686",
+ "build_id": 910789,
+ "buildroot_id": 4975395,
+ "buildtime": 1560355398,
+ "epoch": null,
+ "extra": null,
+ "id": 7085213,
+ "metadata_only": false,
+ "name": "python-nss-doc",
+ "payloadhash": "4b4b46732aec4e344893505cbd97c6fe",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 323687,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "i686",
+ "build_id": 910789,
+ "buildroot_id": 4975395,
+ "buildtime": 1560355398,
+ "epoch": null,
+ "extra": null,
+ "id": 7085212,
+ "metadata_only": false,
+ "name": "python3-nss-debuginfo",
+ "payloadhash": "7dbe3b2fe595a0bbad060119c562f2ed",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 419939,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "i686",
+ "build_id": 910789,
+ "buildroot_id": 4975395,
+ "buildtime": 1560355398,
+ "epoch": null,
+ "extra": null,
+ "id": 7085211,
+ "metadata_only": false,
+ "name": "python3-nss",
+ "payloadhash": "67f3fb608106adbc0210a0a67c1c1185",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 295259,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "i686",
+ "build_id": 910789,
+ "buildroot_id": 4975395,
+ "buildtime": 1560355398,
+ "epoch": null,
+ "extra": null,
+ "id": 7085210,
+ "metadata_only": false,
+ "name": "python-nss-debugsource",
+ "payloadhash": "1efdfec3107233a2908f1bab04d1881e",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 210299,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 910789,
+ "buildroot_id": 4975393,
+ "buildtime": 1560355358,
+ "epoch": null,
+ "extra": null,
+ "id": 7085209,
+ "metadata_only": false,
+ "name": "python3-nss-debuginfo",
+ "payloadhash": "2d9cbf2427910da0be3684c4ba11c407",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 478795,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 910789,
+ "buildroot_id": 4975393,
+ "buildtime": 1560355358,
+ "epoch": null,
+ "extra": null,
+ "id": 7085208,
+ "metadata_only": false,
+ "name": "python3-nss",
+ "payloadhash": "0e876a14f6a56259d8154b07afe130c3",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 280295,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 910789,
+ "buildroot_id": 4975393,
+ "buildtime": 1560355358,
+ "epoch": null,
+ "extra": null,
+ "id": 7085207,
+ "metadata_only": false,
+ "name": "python-nss-doc",
+ "payloadhash": "15ebd7d68a04ff198b69806824cf5c41",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 323647,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "s390x",
+ "build_id": 910789,
+ "buildroot_id": 4975393,
+ "buildtime": 1560355358,
+ "epoch": null,
+ "extra": null,
+ "id": 7085206,
+ "metadata_only": false,
+ "name": "python-nss-debugsource",
+ "payloadhash": "f5177b64f4eb5b0e21327fd27bf4d8fa",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 210251,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 910789,
+ "buildroot_id": 4975394,
+ "buildtime": 1560355392,
+ "epoch": null,
+ "extra": null,
+ "id": 7085205,
+ "metadata_only": false,
+ "name": "python-nss-debugsource",
+ "payloadhash": "f705150882c1edd57a000f0070e54bb1",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 210267,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 910789,
+ "buildroot_id": 4975394,
+ "buildtime": 1560355392,
+ "epoch": null,
+ "extra": null,
+ "id": 7085204,
+ "metadata_only": false,
+ "name": "python-nss-doc",
+ "payloadhash": "154efb2d47a46ca592a248b3141e2cf4",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 323651,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 910789,
+ "buildroot_id": 4975394,
+ "buildtime": 1560355392,
+ "epoch": null,
+ "extra": null,
+ "id": 7085203,
+ "metadata_only": false,
+ "name": "python3-nss-debuginfo",
+ "payloadhash": "f8685725d1795bb4453f7fafb82c89a6",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 481967,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "x86_64",
+ "build_id": 910789,
+ "buildroot_id": 4975394,
+ "buildtime": 1560355392,
+ "epoch": null,
+ "extra": null,
+ "id": 7085202,
+ "metadata_only": false,
+ "name": "python3-nss",
+ "payloadhash": "c8926e322b42110b69ad8ded2059b0d3",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 292187,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 910789,
+ "buildroot_id": 4975399,
+ "buildtime": 1560355581,
+ "epoch": null,
+ "extra": null,
+ "id": 7085201,
+ "metadata_only": false,
+ "name": "python3-nss-debuginfo",
+ "payloadhash": "0ae5d8bbb40cd28c9e4dbb6aab53c94c",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 499579,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 910789,
+ "buildroot_id": 4975399,
+ "buildtime": 1560355581,
+ "epoch": null,
+ "extra": null,
+ "id": 7085200,
+ "metadata_only": false,
+ "name": "python-nss-debugsource",
+ "payloadhash": "b195be9d96317aeb9229bf4ea84375d9",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 210235,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 910789,
+ "buildroot_id": 4975399,
+ "buildtime": 1560355581,
+ "epoch": null,
+ "extra": null,
+ "id": 7085199,
+ "metadata_only": false,
+ "name": "python3-nss",
+ "payloadhash": "4f4c9a0bce27ad8cc8b21c39fc7b323e",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 287687,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "aarch64",
+ "build_id": 910789,
+ "buildroot_id": 4975399,
+ "buildtime": 1560355581,
+ "epoch": null,
+ "extra": null,
+ "id": 7085198,
+ "metadata_only": false,
+ "name": "python-nss-doc",
+ "payloadhash": "008e373b053d3c07e5bd8579406457f3",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 323619,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 910789,
+ "buildroot_id": 4975399,
+ "buildtime": 1560355475,
+ "epoch": null,
+ "extra": null,
+ "id": 7085197,
+ "metadata_only": false,
+ "name": "python-nss",
+ "payloadhash": "360d26e078f21b4a01ea59e0f8e0129d",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 283977,
+ "version": "1.0.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910790,
+ "buildroot_id": 4975392,
+ "buildtime": 1560355442,
+ "epoch": null,
+ "extra": null,
+ "id": 7085167,
+ "metadata_only": false,
+ "name": "javassist-javadoc",
+ "payloadhash": "ad6b45bb4192c6e9c16a47bf066dd36e",
+ "release": "8.module+el8.1.0+3366+6dfb954c",
+ "size": 799951,
+ "version": "3.18.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910790,
+ "buildroot_id": 4975392,
+ "buildtime": 1560355442,
+ "epoch": null,
+ "extra": null,
+ "id": 7085166,
+ "metadata_only": false,
+ "name": "javassist",
+ "payloadhash": "a9c1f2a18b412b517ea57a8ca447b343",
+ "release": "8.module+el8.1.0+3366+6dfb954c",
+ "size": 697527,
+ "version": "3.18.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 910790,
+ "buildroot_id": 4975392,
+ "buildtime": 1560355352,
+ "epoch": null,
+ "extra": null,
+ "id": 7085163,
+ "metadata_only": false,
+ "name": "javassist",
+ "payloadhash": "055564a9807be9471c080dd3f58f6497",
+ "release": "8.module+el8.1.0+3366+6dfb954c",
+ "size": 1188275,
+ "version": "3.18.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910809,
+ "buildroot_id": 4975421,
+ "buildtime": 1560355743,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085222,
+ "metadata_only": false,
+ "name": "jakarta-commons-httpclient-manual",
+ "payloadhash": "831a80c37ef2f7bf4883f5ad21af9060",
+ "release": "28.module+el8.1.0+3366+6dfb954c",
+ "size": 680263,
+ "version": "3.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910809,
+ "buildroot_id": 4975421,
+ "buildtime": 1560355743,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085221,
+ "metadata_only": false,
+ "name": "jakarta-commons-httpclient-javadoc",
+ "payloadhash": "4b735a863005a3f02d618631da94fa70",
+ "release": "28.module+el8.1.0+3366+6dfb954c",
+ "size": 317767,
+ "version": "3.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910809,
+ "buildroot_id": 4975421,
+ "buildtime": 1560355743,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085220,
+ "metadata_only": false,
+ "name": "jakarta-commons-httpclient-demo",
+ "payloadhash": "84d674cbb00b2292a1b5f56756118baa",
+ "release": "28.module+el8.1.0+3366+6dfb954c",
+ "size": 54911,
+ "version": "3.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910809,
+ "buildroot_id": 4975421,
+ "buildtime": 1560355743,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085219,
+ "metadata_only": false,
+ "name": "jakarta-commons-httpclient",
+ "payloadhash": "3d878099e7f5348fffb2594d0837d44d",
+ "release": "28.module+el8.1.0+3366+6dfb954c",
+ "size": 252711,
+ "version": "3.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 910809,
+ "buildroot_id": 4975421,
+ "buildtime": 1560355616,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085218,
+ "metadata_only": false,
+ "name": "jakarta-commons-httpclient",
+ "payloadhash": "4ff5dbaa4683ed023655f475c3aca324",
+ "release": "28.module+el8.1.0+3366+6dfb954c",
+ "size": 1899859,
+ "version": "3.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910799,
+ "buildroot_id": 4975405,
+ "buildtime": 1560355747,
+ "epoch": null,
+ "extra": null,
+ "id": 7085225,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-api-javadoc",
+ "payloadhash": "0970bc477a56e740aa733a9e76f3197f",
+ "release": "8.module+el8.1.0+3366+6dfb954c",
+ "size": 212867,
+ "version": "2.2.12"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910799,
+ "buildroot_id": 4975405,
+ "buildtime": 1560355747,
+ "epoch": null,
+ "extra": null,
+ "id": 7085224,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-api",
+ "payloadhash": "f3e189d5001d224ce51f86aae2df51ab",
+ "release": "8.module+el8.1.0+3366+6dfb954c",
+ "size": 102823,
+ "version": "2.2.12"
+ },
+ {
+ "arch": "src",
+ "build_id": 910799,
+ "buildroot_id": 4975405,
+ "buildtime": 1560355582,
+ "epoch": null,
+ "extra": null,
+ "id": 7085223,
+ "metadata_only": false,
+ "name": "glassfish-jaxb-api",
+ "payloadhash": "a229eb5c8c16046a7d531c081b323f26",
+ "release": "8.module+el8.1.0+3366+6dfb954c",
+ "size": 247856,
+ "version": "2.2.12"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910797,
+ "buildroot_id": 4975404,
+ "buildtime": 1560355487,
+ "epoch": null,
+ "extra": null,
+ "id": 7085182,
+ "metadata_only": false,
+ "name": "bea-stax-api",
+ "payloadhash": "031463ad022495097de4f49f08abc77d",
+ "release": "16.module+el8.1.0+3366+6dfb954c",
+ "size": 36543,
+ "version": "1.2.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910797,
+ "buildroot_id": 4975404,
+ "buildtime": 1560355487,
+ "epoch": null,
+ "extra": null,
+ "id": 7085181,
+ "metadata_only": false,
+ "name": "bea-stax",
+ "payloadhash": "71076d2a3b5335081d51289f34b82df8",
+ "release": "16.module+el8.1.0+3366+6dfb954c",
+ "size": 186679,
+ "version": "1.2.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910797,
+ "buildroot_id": 4975404,
+ "buildtime": 1560355487,
+ "epoch": null,
+ "extra": null,
+ "id": 7085180,
+ "metadata_only": false,
+ "name": "bea-stax-javadoc",
+ "payloadhash": "d4f7c66827294a371c2466a3a648cd18",
+ "release": "16.module+el8.1.0+3366+6dfb954c",
+ "size": 117415,
+ "version": "1.2.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 910797,
+ "buildroot_id": 4975404,
+ "buildtime": 1560355438,
+ "epoch": null,
+ "extra": null,
+ "id": 7085179,
+ "metadata_only": false,
+ "name": "bea-stax",
+ "payloadhash": "d2f3e218d099ecd91c6c89090f5da43b",
+ "release": "16.module+el8.1.0+3366+6dfb954c",
+ "size": 302260,
+ "version": "1.2.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910787,
+ "buildroot_id": 4975390,
+ "buildtime": 1560355352,
+ "epoch": null,
+ "extra": null,
+ "id": 7085154,
+ "metadata_only": false,
+ "name": "fasterxml-oss-parent",
+ "payloadhash": "3fdf1ae0babff5bf4fbbfcad26fed934",
+ "release": "6.module+el8.1.0+3366+6dfb954c",
+ "size": 19579,
+ "version": "26"
+ },
+ {
+ "arch": "src",
+ "build_id": 910787,
+ "buildroot_id": 4975390,
+ "buildtime": 1560355330,
+ "epoch": null,
+ "extra": null,
+ "id": 7085153,
+ "metadata_only": false,
+ "name": "fasterxml-oss-parent",
+ "payloadhash": "aa9f8dad383518ec4a0386dc9bdee8d8",
+ "release": "6.module+el8.1.0+3366+6dfb954c",
+ "size": 21378,
+ "version": "26"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910807,
+ "buildroot_id": 4975419,
+ "buildtime": 1560355650,
+ "epoch": null,
+ "extra": null,
+ "id": 7085195,
+ "metadata_only": false,
+ "name": "apache-commons-lang-javadoc",
+ "payloadhash": "b5ec483eb15d09255e3d0e563d40bfac",
+ "release": "21.module+el8.1.0+3366+6dfb954c",
+ "size": 440335,
+ "version": "2.6"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910807,
+ "buildroot_id": 4975419,
+ "buildtime": 1560355650,
+ "epoch": null,
+ "extra": null,
+ "id": 7085194,
+ "metadata_only": false,
+ "name": "apache-commons-lang",
+ "payloadhash": "9419b773aa18e62b0328fe3f631aa981",
+ "release": "21.module+el8.1.0+3366+6dfb954c",
+ "size": 288231,
+ "version": "2.6"
+ },
+ {
+ "arch": "src",
+ "build_id": 910807,
+ "buildroot_id": 4975419,
+ "buildtime": 1560355611,
+ "epoch": null,
+ "extra": null,
+ "id": 7085193,
+ "metadata_only": false,
+ "name": "apache-commons-lang",
+ "payloadhash": "0f1317e752e923f435c2404efc1ffc16",
+ "release": "21.module+el8.1.0+3366+6dfb954c",
+ "size": 577857,
+ "version": "2.6"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910820,
+ "buildroot_id": 4975468,
+ "buildtime": 1560356513,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085345,
+ "metadata_only": false,
+ "name": "msv-demo",
+ "payloadhash": "f6c242ea890a87c7a2511091ac593233",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 32487,
+ "version": "2013.6.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910820,
+ "buildroot_id": 4975468,
+ "buildtime": 1560356513,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085344,
+ "metadata_only": false,
+ "name": "msv-rngconv",
+ "payloadhash": "8996a507262b9ff1c10e0591d3cb0481",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 21779,
+ "version": "2013.6.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910820,
+ "buildroot_id": 4975468,
+ "buildtime": 1560356513,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085343,
+ "metadata_only": false,
+ "name": "msv-xsdlib",
+ "payloadhash": "055e01e039710739521c616d1418ee6b",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 237275,
+ "version": "2013.6.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910820,
+ "buildroot_id": 4975468,
+ "buildtime": 1560356513,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085342,
+ "metadata_only": false,
+ "name": "msv-msv",
+ "payloadhash": "ed6277b62bf5d8efe25f7236ba61c682",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 662083,
+ "version": "2013.6.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910820,
+ "buildroot_id": 4975468,
+ "buildtime": 1560356513,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085341,
+ "metadata_only": false,
+ "name": "msv-javadoc",
+ "payloadhash": "d6d5bd9dfc802f472caa7ab05ca7b568",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 1258703,
+ "version": "2013.6.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910820,
+ "buildroot_id": 4975468,
+ "buildtime": 1560356513,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085340,
+ "metadata_only": false,
+ "name": "msv-manual",
+ "payloadhash": "c91e911e8a5c26123375b2774d2dc7c9",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 56683,
+ "version": "2013.6.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910820,
+ "buildroot_id": 4975468,
+ "buildtime": 1560356513,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085339,
+ "metadata_only": false,
+ "name": "msv-xmlgen",
+ "payloadhash": "8f6359c6ccb635a56f92b88d458115b0",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 57003,
+ "version": "2013.6.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 910820,
+ "buildroot_id": 4975468,
+ "buildtime": 1560356399,
+ "epoch": 1,
+ "extra": null,
+ "id": 7085338,
+ "metadata_only": false,
+ "name": "msv",
+ "payloadhash": "71d384aac15a313c0e71ba1b3a57e142",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "size": 787060,
+ "version": "2013.6.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910811,
+ "buildroot_id": 4975434,
+ "buildtime": 1560355976,
+ "epoch": null,
+ "extra": null,
+ "id": 7085271,
+ "metadata_only": false,
+ "name": "apache-commons-collections",
+ "payloadhash": "1401c1d8bb40febccbffc110cc56a561",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 549339,
+ "version": "3.2.2"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910811,
+ "buildroot_id": 4975434,
+ "buildtime": 1560355976,
+ "epoch": null,
+ "extra": null,
+ "id": 7085270,
+ "metadata_only": false,
+ "name": "apache-commons-collections-javadoc",
+ "payloadhash": "6392a0b186e0e04382544831c3035be4",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 806803,
+ "version": "3.2.2"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910811,
+ "buildroot_id": 4975434,
+ "buildtime": 1560355976,
+ "epoch": null,
+ "extra": null,
+ "id": 7085269,
+ "metadata_only": false,
+ "name": "apache-commons-collections-testframework",
+ "payloadhash": "e1459253d926625c1a8591d2b3564048",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 112475,
+ "version": "3.2.2"
+ },
+ {
+ "arch": "src",
+ "build_id": 910811,
+ "buildroot_id": 4975434,
+ "buildtime": 1560355693,
+ "epoch": null,
+ "extra": null,
+ "id": 7085268,
+ "metadata_only": false,
+ "name": "apache-commons-collections",
+ "payloadhash": "ddd352323aae700c891b443b02a947ef",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "size": 646872,
+ "version": "3.2.2"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910798,
+ "buildroot_id": 4975403,
+ "buildtime": 1560355538,
+ "epoch": null,
+ "extra": null,
+ "id": 7085190,
+ "metadata_only": false,
+ "name": "xml-stylebook-demo",
+ "payloadhash": "f585b269f25ce8e5f11c7beb758d8e26",
+ "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+ "size": 68943,
+ "version": "1.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910798,
+ "buildroot_id": 4975403,
+ "buildtime": 1560355538,
+ "epoch": null,
+ "extra": null,
+ "id": 7085189,
+ "metadata_only": false,
+ "name": "xml-stylebook-javadoc",
+ "payloadhash": "aa50e9228e83a60ec287bd743fd34054",
+ "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+ "size": 70471,
+ "version": "1.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910798,
+ "buildroot_id": 4975403,
+ "buildtime": 1560355538,
+ "epoch": null,
+ "extra": null,
+ "id": 7085188,
+ "metadata_only": false,
+ "name": "xml-stylebook",
+ "payloadhash": "cf264265bd4e4a782ae7f225a4c69b1f",
+ "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+ "size": 58883,
+ "version": "1.0"
+ },
+ {
+ "arch": "src",
+ "build_id": 910798,
+ "buildroot_id": 4975403,
+ "buildtime": 1560355480,
+ "epoch": null,
+ "extra": null,
+ "id": 7085187,
+ "metadata_only": false,
+ "name": "xml-stylebook",
+ "payloadhash": "1d9ac9c5a61163da965e08608cf822cc",
+ "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+ "size": 1190166,
+ "version": "1.0"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910793,
+ "buildroot_id": 4975400,
+ "buildtime": 1560355507,
+ "epoch": null,
+ "extra": null,
+ "id": 7085186,
+ "metadata_only": false,
+ "name": "xml-commons-apis-javadoc",
+ "payloadhash": "11a62d09579e6424da93d4a05dabd5ff",
+ "release": "25.module+el8.1.0+3366+6dfb954c",
+ "size": 665219,
+ "version": "1.4.01"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910793,
+ "buildroot_id": 4975400,
+ "buildtime": 1560355507,
+ "epoch": null,
+ "extra": null,
+ "id": 7085185,
+ "metadata_only": false,
+ "name": "xml-commons-apis",
+ "payloadhash": "ede4ec6b775464946b6699aa6d1ed8d1",
+ "release": "25.module+el8.1.0+3366+6dfb954c",
+ "size": 239075,
+ "version": "1.4.01"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910793,
+ "buildroot_id": 4975400,
+ "buildtime": 1560355507,
+ "epoch": null,
+ "extra": null,
+ "id": 7085184,
+ "metadata_only": false,
+ "name": "xml-commons-apis-manual",
+ "payloadhash": "85a40348a4ff834a0f0ebd8cb2f75f40",
+ "release": "25.module+el8.1.0+3366+6dfb954c",
+ "size": 415895,
+ "version": "1.4.01"
+ },
+ {
+ "arch": "src",
+ "build_id": 910793,
+ "buildroot_id": 4975400,
+ "buildtime": 1560355370,
+ "epoch": null,
+ "extra": null,
+ "id": 7085183,
+ "metadata_only": false,
+ "name": "xml-commons-apis",
+ "payloadhash": "45e5483b26f6b8aeffab6192d446f6c0",
+ "release": "25.module+el8.1.0+3366+6dfb954c",
+ "size": 963846,
+ "version": "1.4.01"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910795,
+ "buildroot_id": 4975401,
+ "buildtime": 1560355460,
+ "epoch": null,
+ "extra": null,
+ "id": 7085178,
+ "metadata_only": false,
+ "name": "relaxngDatatype-javadoc",
+ "payloadhash": "367a0202ddea916b876d594e19c60a6b",
+ "release": "7.module+el8.1.0+3366+6dfb954c",
+ "size": 45343,
+ "version": "2011.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910795,
+ "buildroot_id": 4975401,
+ "buildtime": 1560355460,
+ "epoch": null,
+ "extra": null,
+ "id": 7085177,
+ "metadata_only": false,
+ "name": "relaxngDatatype",
+ "payloadhash": "5ab56fa7b0124fd8fd9b5a9815b0a532",
+ "release": "7.module+el8.1.0+3366+6dfb954c",
+ "size": 27039,
+ "version": "2011.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 910795,
+ "buildroot_id": 4975401,
+ "buildtime": 1560355430,
+ "epoch": null,
+ "extra": null,
+ "id": 7085175,
+ "metadata_only": false,
+ "name": "relaxngDatatype",
+ "payloadhash": "25d1dadb72b0a2deee892e992fc3a58b",
+ "release": "7.module+el8.1.0+3366+6dfb954c",
+ "size": 22882,
+ "version": "2011.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910821,
+ "buildroot_id": 4975469,
+ "buildtime": 1560356456,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085337,
+ "metadata_only": false,
+ "name": "xalan-j2-xsltc",
+ "payloadhash": "17c7ce492e4aa44a30bfab7953192ed1",
+ "release": "38.module+el8.1.0+3366+6dfb954c",
+ "size": 1312275,
+ "version": "2.7.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910821,
+ "buildroot_id": 4975469,
+ "buildtime": 1560356456,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085336,
+ "metadata_only": false,
+ "name": "xalan-j2-manual",
+ "payloadhash": "1394253c1b433897efee69cb75cc8ff3",
+ "release": "38.module+el8.1.0+3366+6dfb954c",
+ "size": 1843091,
+ "version": "2.7.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910821,
+ "buildroot_id": 4975469,
+ "buildtime": 1560356456,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085335,
+ "metadata_only": false,
+ "name": "xalan-j2-demo",
+ "payloadhash": "8f77f7793d76b6223910bab057bb66c3",
+ "release": "38.module+el8.1.0+3366+6dfb954c",
+ "size": 4130303,
+ "version": "2.7.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910821,
+ "buildroot_id": 4975469,
+ "buildtime": 1560356456,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085334,
+ "metadata_only": false,
+ "name": "xalan-j2",
+ "payloadhash": "8690dbfec4d1087dfe0286f19351d7a1",
+ "release": "38.module+el8.1.0+3366+6dfb954c",
+ "size": 1982295,
+ "version": "2.7.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910821,
+ "buildroot_id": 4975469,
+ "buildtime": 1560356456,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085333,
+ "metadata_only": false,
+ "name": "xalan-j2-javadoc",
+ "payloadhash": "897bbc711d12c2dcf7d3ead4433b5334",
+ "release": "38.module+el8.1.0+3366+6dfb954c",
+ "size": 1853923,
+ "version": "2.7.1"
+ },
+ {
+ "arch": "src",
+ "build_id": 910821,
+ "buildroot_id": 4975469,
+ "buildtime": 1560356384,
+ "epoch": 0,
+ "extra": null,
+ "id": 7085332,
+ "metadata_only": false,
+ "name": "xalan-j2",
+ "payloadhash": "4d365d5aabe0bdf50d0324a6f2c26f43",
+ "release": "38.module+el8.1.0+3366+6dfb954c",
+ "size": 3392377,
+ "version": "2.7.1"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910827,
+ "buildroot_id": 4975503,
+ "buildtime": 1560356894,
+ "epoch": null,
+ "extra": null,
+ "id": 7085402,
+ "metadata_only": false,
+ "name": "relaxngcc-javadoc",
+ "payloadhash": "0676a171c750f809c3838616dda56c64",
+ "release": "14.module+el8.1.0+3366+6dfb954c",
+ "size": 160235,
+ "version": "1.12"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 910827,
+ "buildroot_id": 4975503,
+ "buildtime": 1560356894,
+ "epoch": null,
+ "extra": null,
+ "id": 7085401,
+ "metadata_only": false,
+ "name": "relaxngcc",
+ "payloadhash": "67f7ec9c17ccb61dbbd97ebac2e846cc",
+ "release": "14.module+el8.1.0+3366+6dfb954c",
+ "size": 366155,
+ "version": "1.12"
+ },
+ {
+ "arch": "src",
+ "build_id": 910827,
+ "buildroot_id": 4975503,
+ "buildtime": 1560356832,
+ "epoch": null,
+ "extra": null,
+ "id": 7085400,
+ "metadata_only": false,
+ "name": "relaxngcc",
+ "payloadhash": "5efcba4df3b65845f5a2884cc07384a6",
+ "release": "14.module+el8.1.0+3366+6dfb954c",
+ "size": 2133931,
+ "version": "1.12"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1144552,
+ "buildroot_id": 5775376,
+ "buildtime": 1584979612,
+ "epoch": null,
+ "extra": null,
+ "id": 7883865,
+ "metadata_only": false,
+ "name": "stax-ex",
+ "payloadhash": "9b5656c8c4167f017817f65dcea2050f",
+ "release": "8.module+el8.2.0+5723+4574fbff",
+ "size": 55775,
+ "version": "1.7.7"
+ },
+ {
+ "arch": "noarch",
+ "build_id": 1144552,
+ "buildroot_id": 5775376,
+ "buildtime": 1584979612,
+ "epoch": null,
+ "extra": null,
+ "id": 7883864,
+ "metadata_only": false,
+ "name": "stax-ex-javadoc",
+ "payloadhash": "3059769a5368e04b6b279847de2b7d70",
+ "release": "8.module+el8.2.0+5723+4574fbff",
+ "size": 73323,
+ "version": "1.7.7"
+ },
+ {
+ "arch": "src",
+ "build_id": 1144552,
+ "buildroot_id": 5775376,
+ "buildtime": 1584979588,
+ "epoch": null,
+ "extra": null,
+ "id": 7883863,
+ "metadata_only": false,
+ "name": "stax-ex",
+ "payloadhash": "b42cad1ce475d57336c469a35d76c81d",
+ "release": "8.module+el8.2.0+5723+4574fbff",
+ "size": 50376,
+ "version": "1.7.7"
+ }
+ ],
+ [
+ {
+ "tag_id": 80063,
+ "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+ "id": 1557161,
+ "build_id": 1557161,
+ "version": "10.8.3",
+ "release": "6.module+el8.2.0+10554+cf83aa72",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2021-03-30 23:30:32.156112",
+ "start_time": "2021-03-30 23:15:00.102532",
+ "task_id": 35853377,
+ "creation_event_id": 38240589,
+ "creation_time": "2021-03-30 23:15:00.109509",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 31009,
+ "package_name": "pki-core",
+ "name": "pki-core",
+ "nvr": "pki-core-10.8.3-6.module+el8.2.0+10554+cf83aa72",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 80063,
+ "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+ "id": 1166092,
+ "build_id": 1166092,
+ "version": "7.4.1",
+ "release": "2.module+el8.2.0+6294+b7db4606",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2020-04-14 19:05:27.833927",
+ "start_time": "2020-04-14 19:03:09.327430",
+ "task_id": 27929461,
+ "creation_event_id": 30835934,
+ "creation_time": "2020-04-14 19:03:09.327430",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 3207,
+ "package_name": "tomcatjss",
+ "name": "tomcatjss",
+ "nvr": "tomcatjss-7.4.1-2.module+el8.2.0+6294+b7db4606",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 80063,
+ "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+ "id": 1166093,
+ "build_id": 1166093,
+ "version": "4.21.0",
+ "release": "2.module+el8.2.0+6294+b7db4606",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2020-04-14 19:05:27.838380",
+ "start_time": "2020-04-14 19:03:09.334948",
+ "task_id": 27929462,
+ "creation_event_id": 30835935,
+ "creation_time": "2020-04-14 19:03:09.334948",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 1827,
+ "package_name": "ldapjdk",
+ "name": "ldapjdk",
+ "nvr": "ldapjdk-4.21.0-2.module+el8.2.0+6294+b7db4606",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 80063,
+ "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+ "id": 1557155,
+ "build_id": 1557155,
+ "version": "4.6.2",
+ "release": "12.module+el8.2.0+10554+cf83aa72",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2021-03-30 22:55:43.295439",
+ "start_time": "2021-03-30 22:44:59.531892",
+ "task_id": 35852065,
+ "creation_event_id": 38240172,
+ "creation_time": "2021-03-30 22:44:59.539155",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 3766,
+ "package_name": "jss",
+ "name": "jss",
+ "nvr": "jss-4.6.2-12.module+el8.2.0+10554+cf83aa72",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 80063,
+ "tag_name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+ "id": 1557147,
+ "build_id": 1557147,
+ "version": "0.1",
+ "release": "1.module+el8.2.0+10554+cf83aa72",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2021-03-30 22:36:11.143167",
+ "start_time": "2021-03-30 22:34:38.783064",
+ "task_id": 35851170,
+ "creation_event_id": 38239974,
+ "creation_time": "2021-03-30 22:34:38.790361",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 63471,
+ "package_name": "module-build-macros",
+ "name": "module-build-macros",
+ "nvr": "module-build-macros-0.1-1.module+el8.2.0+10554+cf83aa72",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 1062086,
+ "build_id": 1062086,
+ "version": "0.4",
+ "release": "4.module+el8.2.0+5496+53199ee7",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2020-01-18 10:52:42.572941",
+ "start_time": "2020-01-18 10:45:17.842872",
+ "task_id": 25853543,
+ "creation_event_id": 28651716,
+ "creation_time": "2020-01-18 10:45:17.842872",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 71890,
+ "package_name": "ipa-healthcheck",
+ "name": "ipa-healthcheck",
+ "nvr": "ipa-healthcheck-0.4-4.module+el8.2.0+5496+53199ee7",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 959057,
+ "build_id": 959057,
+ "version": "1.3.2",
+ "release": "9.module+el8.1.0+4107+4a66eb87",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-08-30 08:52:00.858675",
+ "start_time": "2019-08-30 08:50:27.937792",
+ "task_id": 23245908,
+ "creation_event_id": 26065866,
+ "creation_time": "2019-08-30 08:50:27.937792",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 48014,
+ "package_name": "python-yubico",
+ "name": "python-yubico",
+ "nvr": "python-yubico-1.3.2-9.module+el8.1.0+4107+4a66eb87",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 959056,
+ "build_id": 959056,
+ "version": "0.6.0",
+ "release": "3.module+el8.1.0+4107+4a66eb87",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-08-30 08:52:00.901940",
+ "start_time": "2019-08-30 08:50:26.423040",
+ "task_id": 23245907,
+ "creation_event_id": 26065865,
+ "creation_time": "2019-08-30 08:50:26.423040",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 57745,
+ "package_name": "custodia",
+ "name": "custodia",
+ "nvr": "custodia-0.6.0-3.module+el8.1.0+4107+4a66eb87",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 959052,
+ "build_id": 959052,
+ "version": "0.5.0",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-08-30 08:47:21.842483",
+ "start_time": "2019-08-30 08:44:58.038593",
+ "task_id": 23245840,
+ "creation_event_id": 26065820,
+ "creation_time": "2019-08-30 08:44:58.038593",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 57746,
+ "package_name": "python-jwcrypto",
+ "name": "python-jwcrypto",
+ "nvr": "python-jwcrypto-0.5.0-1.module+el8.1.0+4107+4a66eb87",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 959051,
+ "build_id": 959051,
+ "version": "1.0.0",
+ "release": "9.module+el8.1.0+4107+4a66eb87",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-08-30 08:45:05.456528",
+ "start_time": "2019-08-30 08:43:31.570198",
+ "task_id": 23245841,
+ "creation_event_id": 26065814,
+ "creation_time": "2019-08-30 08:43:31.570198",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 16872,
+ "package_name": "pyusb",
+ "name": "pyusb",
+ "nvr": "pyusb-1.0.0-9.module+el8.1.0+4107+4a66eb87",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 959042,
+ "build_id": 959042,
+ "version": "1.4.14",
+ "release": "1.module+el8.1.0+4107+4a66eb87",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-08-30 08:30:44.929465",
+ "start_time": "2019-08-30 08:26:10.146887",
+ "task_id": 23245684,
+ "creation_event_id": 26065672,
+ "creation_time": "2019-08-30 08:26:10.146887",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 47997,
+ "package_name": "opendnssec",
+ "name": "opendnssec",
+ "nvr": "opendnssec-1.4.14-1.module+el8.1.0+4107+4a66eb87",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 1139326,
+ "build_id": 1139326,
+ "version": "4.8.4",
+ "release": "7.module+el8.2.0+6047+59605870",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2020-03-18 16:41:10.205454",
+ "start_time": "2020-03-18 16:31:40.883073",
+ "task_id": 27330869,
+ "creation_event_id": 30176561,
+ "creation_time": "2020-03-18 16:31:40.883073",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 4384,
+ "package_name": "ipa",
+ "name": "ipa",
+ "nvr": "ipa-4.8.4-7.module+el8.2.0+6047+59605870",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 1022957,
+ "build_id": 1022957,
+ "version": "11.2",
+ "release": "3.module+el8.2.0+4945+d8a939b5",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-11-28 08:45:15.174888",
+ "start_time": "2019-11-28 08:41:05.791483",
+ "task_id": 25009845,
+ "creation_event_id": 27592282,
+ "creation_time": "2019-11-28 08:41:05.791483",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 12568,
+ "package_name": "bind-dyndb-ldap",
+ "name": "bind-dyndb-ldap",
+ "nvr": "bind-dyndb-ldap-11.2-3.module+el8.2.0+4945+d8a939b5",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 1093586,
+ "build_id": 1093586,
+ "version": "2.4.0",
+ "release": "4.module+el8.2.0+5780+11c8542f",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2020-02-17 19:50:24.871320",
+ "start_time": "2020-02-17 19:42:31.001861",
+ "task_id": 26575317,
+ "creation_event_id": 29360880,
+ "creation_time": "2020-02-17 19:42:31.001861",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 48016,
+ "package_name": "softhsm",
+ "name": "softhsm",
+ "nvr": "softhsm-2.4.0-4.module+el8.2.0+5780+11c8542f",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 959041,
+ "build_id": 959041,
+ "version": "5.1",
+ "release": "12.module+el8.1.0+4107+4a66eb87",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-08-30 08:26:53.234912",
+ "start_time": "2019-08-30 08:26:07.970261",
+ "task_id": 23245686,
+ "creation_event_id": 26065671,
+ "creation_time": "2019-08-30 08:26:07.970261",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 48015,
+ "package_name": "python-qrcode",
+ "name": "python-qrcode",
+ "nvr": "python-qrcode-5.1-12.module+el8.1.0+4107+4a66eb87",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 61343,
+ "tag_name": "module-idm-client-8020020200318161700-8aefd78c",
+ "id": 959046,
+ "build_id": 959046,
+ "version": "0.56.3",
+ "release": "2.module+el8.1.0+4107+4a66eb87",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-08-30 08:39:58.938737",
+ "start_time": "2019-08-30 08:28:34.912162",
+ "task_id": 23245688,
+ "creation_event_id": 26065705,
+ "creation_time": "2019-08-30 08:28:34.912162",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 9749,
+ "package_name": "slapi-nis",
+ "name": "slapi-nis",
+ "nvr": "slapi-nis-0.56.3-2.module+el8.1.0+4107+4a66eb87",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 22929,
+ "tag_name": "module-golang-ecosystem-1.0-8010020190610193038-ccff3eb7",
+ "id": 909543,
+ "build_id": 909543,
+ "version": "1.0.7",
+ "release": "13.module+el8.1.0+3342+b2bcedec",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-10 19:44:24.912517",
+ "start_time": "2019-06-10 19:40:37.722776",
+ "task_id": 22093565,
+ "creation_event_id": 25060641,
+ "creation_time": "2019-06-10 19:40:37.722776",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 49920,
+ "package_name": "golang-github-cpuguy83-go-md2man",
+ "name": "golang-github-cpuguy83-go-md2man",
+ "nvr": "golang-github-cpuguy83-go-md2man-1.0.7-13.module+el8.1.0+3342+b2bcedec",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 1144584,
+ "build_id": 1144584,
+ "version": "3.0.26",
+ "release": "3.module+el8.2.0+5723+4574fbff",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2020-03-23 16:49:22.533970",
+ "start_time": "2020-03-23 16:47:47.187681",
+ "task_id": 27427014,
+ "creation_event_id": 30246146,
+ "creation_time": "2020-03-23 16:47:47.187681",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 13085,
+ "package_name": "resteasy",
+ "name": "resteasy",
+ "nvr": "resteasy-3.0.26-3.module+el8.2.0+5723+4574fbff",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 941248,
+ "build_id": 941248,
+ "version": "2.9.9",
+ "release": "1.module+el8.1.0+3832+9784644d",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-07-31 21:56:52.799032",
+ "start_time": "2019-07-31 21:52:57.339380",
+ "task_id": 22859408,
+ "creation_event_id": 25753876,
+ "creation_time": "2019-07-31 21:52:57.339380",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 45351,
+ "package_name": "jackson-jaxrs-providers",
+ "name": "jackson-jaxrs-providers",
+ "nvr": "jackson-jaxrs-providers-2.9.9-1.module+el8.1.0+3832+9784644d",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910869,
+ "build_id": 910869,
+ "version": "2.7.6",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 17:43:12.036872",
+ "start_time": "2019-06-12 17:41:41.564940",
+ "task_id": 22125211,
+ "creation_event_id": 25088144,
+ "creation_time": "2019-06-12 17:41:41.564940",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 45352,
+ "package_name": "jackson-module-jaxb-annotations",
+ "name": "jackson-module-jaxb-annotations",
+ "nvr": "jackson-module-jaxb-annotations-2.7.6-4.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 1028087,
+ "build_id": 1028087,
+ "version": "2.10.0",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-12-04 23:02:55.539209",
+ "start_time": "2019-12-04 22:59:50.165698",
+ "task_id": 25162114,
+ "creation_event_id": 27708627,
+ "creation_time": "2019-12-04 22:59:50.165698",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 43280,
+ "package_name": "jackson-databind",
+ "name": "jackson-databind",
+ "nvr": "jackson-databind-2.10.0-1.module+el8.2.0+5059+3eb3af25",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 1028078,
+ "build_id": 1028078,
+ "version": "2.10.0",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-12-04 22:54:09.385299",
+ "start_time": "2019-12-04 22:46:23.987102",
+ "task_id": 25162058,
+ "creation_event_id": 27708569,
+ "creation_time": "2019-12-04 22:46:23.987102",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 43278,
+ "package_name": "jackson-annotations",
+ "name": "jackson-annotations",
+ "nvr": "jackson-annotations-2.10.0-1.module+el8.2.0+5059+3eb3af25",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 1028074,
+ "build_id": 1028074,
+ "version": "2.10.0",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-12-04 22:40:36.462594",
+ "start_time": "2019-12-04 22:33:13.006789",
+ "task_id": 25161968,
+ "creation_event_id": 27708521,
+ "creation_time": "2019-12-04 22:33:13.006789",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 43279,
+ "package_name": "jackson-core",
+ "name": "jackson-core",
+ "nvr": "jackson-core-2.10.0-1.module+el8.2.0+5059+3eb3af25",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 1028067,
+ "build_id": 1028067,
+ "version": "2.10.0",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-12-04 22:19:26.978961",
+ "start_time": "2019-12-04 22:15:59.673943",
+ "task_id": 25161580,
+ "creation_event_id": 27708363,
+ "creation_time": "2019-12-04 22:15:59.673943",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 68020,
+ "package_name": "jackson-bom",
+ "name": "jackson-bom",
+ "nvr": "jackson-bom-2.10.0-1.module+el8.2.0+5059+3eb3af25",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 1028063,
+ "build_id": 1028063,
+ "version": "2.10",
+ "release": "1.module+el8.2.0+5059+3eb3af25",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-12-04 22:08:12.115745",
+ "start_time": "2019-12-04 22:04:11.784565",
+ "task_id": 25161418,
+ "creation_event_id": 27708221,
+ "creation_time": "2019-12-04 22:04:11.784565",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 50635,
+ "package_name": "jackson-parent",
+ "name": "jackson-parent",
+ "nvr": "jackson-parent-2.10-1.module+el8.2.0+5059+3eb3af25",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910844,
+ "build_id": 910844,
+ "version": "2.2.11",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:55:09.958186",
+ "start_time": "2019-06-12 16:52:08.783199",
+ "task_id": 22124769,
+ "creation_event_id": 25087838,
+ "creation_time": "2019-06-12 16:52:08.783199",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 9726,
+ "package_name": "glassfish-jaxb",
+ "name": "glassfish-jaxb",
+ "nvr": "glassfish-jaxb-2.2.11-11.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910842,
+ "build_id": 910842,
+ "version": "1.2.13",
+ "release": "9.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:48:58.888641",
+ "start_time": "2019-06-12 16:42:56.398154",
+ "task_id": 22124569,
+ "creation_event_id": 25087790,
+ "creation_time": "2019-06-12 16:42:56.398154",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 37969,
+ "package_name": "glassfish-fastinfoset",
+ "name": "glassfish-fastinfoset",
+ "nvr": "glassfish-fastinfoset-1.2.13-9.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 1144557,
+ "build_id": 1144557,
+ "version": "1.5.4",
+ "release": "8.module+el8.2.0+5723+4574fbff",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2020-03-23 16:12:46.524009",
+ "start_time": "2020-03-23 16:11:11.780927",
+ "task_id": 27426620,
+ "creation_event_id": 30245857,
+ "creation_time": "2020-03-23 16:11:11.780927",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 60048,
+ "package_name": "xmlstreambuffer",
+ "name": "xmlstreambuffer",
+ "nvr": "xmlstreambuffer-1.5.4-8.module+el8.2.0+5723+4574fbff",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910836,
+ "build_id": 910836,
+ "version": "0",
+ "release": "19.20110809svn.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:36:05.606122",
+ "start_time": "2019-06-12 16:34:29.942008",
+ "task_id": 22124434,
+ "creation_event_id": 25087679,
+ "creation_time": "2019-06-12 16:34:29.942008",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 37983,
+ "package_name": "xsom",
+ "name": "xsom",
+ "nvr": "xsom-0-19.20110809svn.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 1144552,
+ "build_id": 1144552,
+ "version": "1.7.7",
+ "release": "8.module+el8.2.0+5723+4574fbff",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2020-03-23 16:07:17.200775",
+ "start_time": "2020-03-23 16:05:41.101688",
+ "task_id": 27426549,
+ "creation_event_id": 30245800,
+ "creation_time": "2020-03-23 16:05:41.101688",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 12467,
+ "package_name": "stax-ex",
+ "name": "stax-ex",
+ "nvr": "stax-ex-1.7.7-8.module+el8.2.0+5723+4574fbff",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910827,
+ "build_id": 910827,
+ "version": "1.12",
+ "release": "14.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:28:53.545249",
+ "start_time": "2019-06-12 16:26:36.261882",
+ "task_id": 22124373,
+ "creation_event_id": 25087563,
+ "creation_time": "2019-06-12 16:26:36.261882",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 34342,
+ "package_name": "relaxngcc",
+ "name": "relaxngcc",
+ "nvr": "relaxngcc-1.12-14.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910821,
+ "build_id": 910821,
+ "version": "2.7.1",
+ "release": "38.module+el8.1.0+3366+6dfb954c",
+ "epoch": 0,
+ "state": 1,
+ "completion_time": "2019-06-12 16:21:24.143262",
+ "start_time": "2019-06-12 16:19:01.398195",
+ "task_id": 22124283,
+ "creation_event_id": 25087483,
+ "creation_time": "2019-06-12 16:19:01.398195",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 1100,
+ "package_name": "xalan-j2",
+ "name": "xalan-j2",
+ "nvr": "xalan-j2-2.7.1-38.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910820,
+ "build_id": 910820,
+ "version": "2013.6.1",
+ "release": "11.module+el8.1.0+3366+6dfb954c",
+ "epoch": 1,
+ "state": 1,
+ "completion_time": "2019-06-12 16:22:38.206178",
+ "start_time": "2019-06-12 16:18:51.956217",
+ "task_id": 22124282,
+ "creation_event_id": 25087478,
+ "creation_time": "2019-06-12 16:18:51.956217",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 2199,
+ "package_name": "msv",
+ "name": "msv",
+ "nvr": "msv-2013.6.1-11.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910795,
+ "build_id": 910795,
+ "version": "2011.1",
+ "release": "7.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:04:45.263988",
+ "start_time": "2019-06-12 16:02:22.213666",
+ "task_id": 22123719,
+ "creation_event_id": 25087217,
+ "creation_time": "2019-06-12 16:02:22.213666",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 2686,
+ "package_name": "relaxngDatatype",
+ "name": "relaxngDatatype",
+ "nvr": "relaxngDatatype-2011.1-7.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910793,
+ "build_id": 910793,
+ "version": "1.4.01",
+ "release": "25.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:05:54.069829",
+ "start_time": "2019-06-12 16:01:57.296925",
+ "task_id": 22123699,
+ "creation_event_id": 25087188,
+ "creation_time": "2019-06-12 16:01:57.296925",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 3720,
+ "package_name": "xml-commons-apis",
+ "name": "xml-commons-apis",
+ "nvr": "xml-commons-apis-1.4.01-25.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910800,
+ "build_id": 910800,
+ "version": "1.2",
+ "release": "26.module+el8.1.0+3366+6dfb954c",
+ "epoch": 0,
+ "state": 1,
+ "completion_time": "2019-06-12 16:04:14.369817",
+ "start_time": "2019-06-12 16:02:34.507234",
+ "task_id": 22123700,
+ "creation_event_id": 25087239,
+ "creation_time": "2019-06-12 16:02:34.507234",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 763,
+ "package_name": "xml-commons-resolver",
+ "name": "xml-commons-resolver",
+ "nvr": "xml-commons-resolver-1.2-26.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910798,
+ "build_id": 910798,
+ "version": "1.0",
+ "release": "0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:06:17.229810",
+ "start_time": "2019-06-12 16:02:22.601136",
+ "task_id": 22123701,
+ "creation_event_id": 25087220,
+ "creation_time": "2019-06-12 16:02:22.601136",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 759,
+ "package_name": "xml-stylebook",
+ "name": "xml-stylebook",
+ "nvr": "xml-stylebook-1.0-0.25.b3_xalan2.svn313293.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910811,
+ "build_id": 910811,
+ "version": "3.2.2",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:13:33.388340",
+ "start_time": "2019-06-12 16:07:24.210737",
+ "task_id": 22123703,
+ "creation_event_id": 25087331,
+ "creation_time": "2019-06-12 16:07:24.210737",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 33807,
+ "package_name": "apache-commons-collections",
+ "name": "apache-commons-collections",
+ "nvr": "apache-commons-collections-3.2.2-10.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910807,
+ "build_id": 910807,
+ "version": "2.6",
+ "release": "21.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:07:47.952306",
+ "start_time": "2019-06-12 16:06:10.260233",
+ "task_id": 22123704,
+ "creation_event_id": 25087303,
+ "creation_time": "2019-06-12 16:06:10.260233",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 33833,
+ "package_name": "apache-commons-lang",
+ "name": "apache-commons-lang",
+ "nvr": "apache-commons-lang-2.6-21.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910787,
+ "build_id": 910787,
+ "version": "26",
+ "release": "6.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:03:05.056755",
+ "start_time": "2019-06-12 16:01:31.536069",
+ "task_id": 22123706,
+ "creation_event_id": 25087166,
+ "creation_time": "2019-06-12 16:01:31.536069",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 43339,
+ "package_name": "fasterxml-oss-parent",
+ "name": "fasterxml-oss-parent",
+ "nvr": "fasterxml-oss-parent-26-6.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910797,
+ "build_id": 910797,
+ "version": "1.2.0",
+ "release": "16.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:05:31.235114",
+ "start_time": "2019-06-12 16:02:22.471697",
+ "task_id": 22123705,
+ "creation_event_id": 25087219,
+ "creation_time": "2019-06-12 16:02:22.471697",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 1468,
+ "package_name": "bea-stax",
+ "name": "bea-stax",
+ "nvr": "bea-stax-1.2.0-16.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910799,
+ "build_id": 910799,
+ "version": "2.2.12",
+ "release": "8.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:09:33.487726",
+ "start_time": "2019-06-12 16:02:24.543154",
+ "task_id": 22123708,
+ "creation_event_id": 25087223,
+ "creation_time": "2019-06-12 16:02:24.543154",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 37970,
+ "package_name": "glassfish-jaxb-api",
+ "name": "glassfish-jaxb-api",
+ "nvr": "glassfish-jaxb-api-2.2.12-8.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910809,
+ "build_id": 910809,
+ "version": "3.1",
+ "release": "28.module+el8.1.0+3366+6dfb954c",
+ "epoch": 1,
+ "state": 1,
+ "completion_time": "2019-06-12 16:09:21.928440",
+ "start_time": "2019-06-12 16:06:18.504802",
+ "task_id": 22123709,
+ "creation_event_id": 25087308,
+ "creation_time": "2019-06-12 16:06:18.504802",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 955,
+ "package_name": "jakarta-commons-httpclient",
+ "name": "jakarta-commons-httpclient",
+ "nvr": "jakarta-commons-httpclient-3.1-28.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910805,
+ "build_id": 910805,
+ "version": "9.0.7",
+ "release": "16.module+el8.1.0+3366+6dfb954c",
+ "epoch": 1,
+ "state": 1,
+ "completion_time": "2019-06-12 16:12:02.094701",
+ "start_time": "2019-06-12 16:05:03.209828",
+ "task_id": 22123713,
+ "creation_event_id": 25087291,
+ "creation_time": "2019-06-12 16:05:03.209828",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 71828,
+ "package_name": "pki-servlet-engine",
+ "name": "pki-servlet-engine",
+ "nvr": "pki-servlet-engine-9.0.7-16.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910790,
+ "build_id": 910790,
+ "version": "3.18.1",
+ "release": "8.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:04:40.971244",
+ "start_time": "2019-06-12 16:01:32.551323",
+ "task_id": 22123710,
+ "creation_event_id": 25087169,
+ "creation_time": "2019-06-12 16:01:32.551323",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 1717,
+ "package_name": "javassist",
+ "name": "javassist",
+ "nvr": "javassist-3.18.1-8.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910789,
+ "build_id": 910789,
+ "version": "1.0.1",
+ "release": "10.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:08:43.230692",
+ "start_time": "2019-06-12 16:01:32.429345",
+ "task_id": 22123716,
+ "creation_event_id": 25087168,
+ "creation_time": "2019-06-12 16:01:32.429345",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 12425,
+ "package_name": "python-nss",
+ "name": "python-nss",
+ "nvr": "python-nss-1.0.1-10.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910803,
+ "build_id": 910803,
+ "version": "2.11.0",
+ "release": "34.module+el8.1.0+3366+6dfb954c",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2019-06-12 16:14:39.929076",
+ "start_time": "2019-06-12 16:03:56.994817",
+ "task_id": 22123725,
+ "creation_event_id": 25087276,
+ "creation_time": "2019-06-12 16:03:56.994817",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 818,
+ "package_name": "xerces-j2",
+ "name": "xerces-j2",
+ "nvr": "xerces-j2-2.11.0-34.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910788,
+ "build_id": 910788,
+ "version": "1.7.25",
+ "release": "4.module+el8.1.0+3366+6dfb954c",
+ "epoch": 0,
+ "state": 1,
+ "completion_time": "2019-06-12 16:04:39.118435",
+ "start_time": "2019-06-12 16:01:32.421713",
+ "task_id": 22123721,
+ "creation_event_id": 25087167,
+ "creation_time": "2019-06-12 16:01:32.421713",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 3565,
+ "package_name": "slf4j",
+ "name": "slf4j",
+ "nvr": "slf4j-1.7.25-4.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 910796,
+ "build_id": 910796,
+ "version": "1.7",
+ "release": "24.module+el8.1.0+3366+6dfb954c",
+ "epoch": 0,
+ "state": 1,
+ "completion_time": "2019-06-12 16:10:57.401027",
+ "start_time": "2019-06-12 16:02:22.399510",
+ "task_id": 22123723,
+ "creation_event_id": 25087218,
+ "creation_time": "2019-06-12 16:02:22.399510",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 1190,
+ "package_name": "velocity",
+ "name": "velocity",
+ "nvr": "velocity-1.7-24.module+el8.1.0+3366+6dfb954c",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ },
+ {
+ "tag_id": 59718,
+ "tag_name": "module-pki-deps-10.6-8020020200213065606-6a468ee4",
+ "id": 1144545,
+ "build_id": 1144545,
+ "version": "2.0.1",
+ "release": "6.module+el8.2.0+5723+4574fbff",
+ "epoch": null,
+ "state": 1,
+ "completion_time": "2020-03-23 15:54:44.540349",
+ "start_time": "2020-03-23 15:52:22.479426",
+ "task_id": 27426349,
+ "creation_event_id": 30245667,
+ "creation_time": "2020-03-23 15:52:22.479426",
+ "volume_id": 9,
+ "volume_name": "rhel-8",
+ "package_id": 59554,
+ "package_name": "glassfish-jax-rs-api",
+ "name": "glassfish-jax-rs-api",
+ "nvr": "glassfish-jax-rs-api-2.0.1-6.module+el8.2.0+5723+4574fbff",
+ "owner_id": 4066,
+ "owner_name": "mbs"
+ }
+ ]
+]
+
diff --git a/bld2repo/tests/test_data/pki_core_tags.json b/bld2repo/tests/test_data/pki_core_tags.json
new file mode 100644
index 0000000..07e93fd
--- /dev/null
+++ b/bld2repo/tests/test_data/pki_core_tags.json
@@ -0,0 +1,33 @@
+[
+ {
+ "arches": "aarch64 i686 ppc64le s390x x86_64",
+ "id": 80062,
+ "locked": false,
+ "maven_include_all": false,
+ "maven_support": false,
+ "name": "module-pki-core-10.6-8020020210330222148-bbc64e6e",
+ "perm": "module-tagger",
+ "perm_id": 64
+ },
+ {
+ "arches": "aarch64 i686 ppc64le s390x x86_64",
+ "id": 80063,
+ "locked": false,
+ "maven_include_all": false,
+ "maven_support": false,
+ "name": "module-pki-core-10.6-8020020210330222148-bbc64e6e-build",
+ "perm": "module-tagger",
+ "perm_id": 64
+ },
+ {
+ "arches": "",
+ "id": 80123,
+ "locked": false,
+ "maven_include_all": false,
+ "maven_support": false,
+ "name": "RHSA-2021:69566-pending",
+ "perm": "trusted",
+ "perm_id": 6
+ }
+]
+
diff --git a/bld2repo/tests/utils.py b/bld2repo/tests/utils.py
new file mode 100644
index 0000000..3df45b0
--- /dev/null
+++ b/bld2repo/tests/utils.py
@@ -0,0 +1,13 @@
+import json
+import os
+
+
+def load_test_data(filename):
+ file_path = "test_data/{filename}.json".format(filename=filename)
+ dirname = os.path.dirname(os.path.abspath(__file__))
+ abs_file_path = os.path.join(dirname, file_path)
+ with open(abs_file_path, "r") as fp:
+ data = json.load(fp)
+
+ return data
+
diff --git a/createrepo_mod/createrepo_mod/__init__.py b/createrepo_mod/createrepo_mod/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/createrepo_mod/createrepo_mod.py b/createrepo_mod/createrepo_mod/createrepo_mod.py
similarity index 100%
rename from createrepo_mod/createrepo_mod.py
rename to createrepo_mod/createrepo_mod/createrepo_mod.py
diff --git a/createrepo_mod/requirements.txt b/createrepo_mod/requirements.txt
new file mode 100644
index 0000000..e69de29
diff --git a/createrepo_mod/setup.py b/createrepo_mod/setup.py
new file mode 100644
index 0000000..0f92990
--- /dev/null
+++ b/createrepo_mod/setup.py
@@ -0,0 +1,38 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+from setuptools import setup, find_packages
+
+with open("README.md", "r") as fh:
+ long_description = fh.read()
+
+with open('requirements.txt') as f:
+ requires = f.read().splitlines()
+
+setup(
+ name='createrepo_mod',
+ version='0.1',
+ packages=find_packages(),
+ url='https://github.com/rpm-software-management/modulemd-tools',
+ license='MIT',
+ author='Jakub Kadlcik',
+ author_email='frostyx@email.cz',
+ description=('A small wrapper around `createrepo_c` and `modifyrepo_c` '
+ 'to provide an easy tool for generating module repositories.'),
+ long_description=long_description,
+ long_description_content_type='text/markdown',
+ # createrepo_mod also requires libmodulemd not available on PyPI
+ # and must be installed separately.
+ # On Fedora, this is done with `dnf install python3-libmodulemd`
+ install_requires=requires,
+ entry_points={
+ 'console_scripts': [
+ 'createrepo_mod=createrepo_mod.createrepo_mod:main'],
+ },
+ classifiers=[
+ "Programming Language :: Python :: 3",
+ "License :: OSI Approved :: MIT License",
+ "Operating System :: POSIX :: Linux",
+ ],
+ include_package_data=True,
+)
diff --git a/createrepo_mod/test-requirements.txt b/createrepo_mod/test-requirements.txt
new file mode 100644
index 0000000..e079f8a
--- /dev/null
+++ b/createrepo_mod/test-requirements.txt
@@ -0,0 +1 @@
+pytest
diff --git a/createrepo_mod/tests/conftest.py b/createrepo_mod/tests/conftest.py
new file mode 100644
index 0000000..a5ba4c9
--- /dev/null
+++ b/createrepo_mod/tests/conftest.py
@@ -0,0 +1,7 @@
+import pytest
+
+
+@pytest.fixture(scope="session")
+def test_output_dir(tmpdir_factory):
+ test_output_dir = tmpdir_factory.mktemp("output")
+ return test_output_dir
diff --git a/createrepo_mod/tests/module_yamls/dummy.yaml b/createrepo_mod/tests/module_yamls/dummy.yaml
new file mode 100644
index 0000000..cf32ceb
--- /dev/null
+++ b/createrepo_mod/tests/module_yamls/dummy.yaml
@@ -0,0 +1,40 @@
+---
+document: modulemd-defaults
+version: 1
+data:
+ module: dummy
+ stream: rolling
+ profiles:
+ rolling: [everything]
+...
+---
+document: modulemd
+version: 2
+data:
+ name: dummy
+ stream: rolling
+ version: 1
+ context: abcdef12
+ summary: <auto-generated module summary>
+ description: >-
+ <auto-generated module description>
+ license:
+ module:
+ - MIT
+ content:
+ - <FILL THIS IN>
+ profiles:
+ everything:
+ rpms:
+ - python-django-bash-completion
+ api:
+ rpms:
+ - python-django-bash-completion
+ components:
+ rpms:
+ python-django:
+ rationale: Present in the repository
+ artifacts:
+ rpms:
+ - python-django-bash-completion-0:3.0.10-3.fc33.noarch
+...
diff --git a/createrepo_mod/tests/test_createrepo_mod.py b/createrepo_mod/tests/test_createrepo_mod.py
new file mode 100644
index 0000000..2cb1fc8
--- /dev/null
+++ b/createrepo_mod/tests/test_createrepo_mod.py
@@ -0,0 +1,49 @@
+import glob
+import logging
+import os.path
+import shutil
+
+import pytest
+
+from createrepo_mod.createrepo_mod import (
+ run_createrepo, run_modifyrepo, find_module_yamls, dump_modules_yaml)
+
+
+logger = logging.getLogger(__name__)
+
+dirname = os.path.dirname(os.path.realpath(__file__))
+test_packages_dir = os.path.join(dirname, "packages")
+test_module_yamls_dir = os.path.join(dirname, "module_yamls")
+
+
+def test_run_createrepo(test_output_dir):
+ # I'd rather use shutil.copytree with dirs_exist_ok=True, but it requires Python 3.8+
+ for package in glob.glob(os.path.join(test_packages_dir, "*.rpm")):
+ shutil.copy(package, test_output_dir)
+ retval = run_createrepo([test_output_dir])
+ assert os.path.isdir(os.path.join(test_output_dir, "repodata"))
+ assert os.path.isfile(os.path.join(test_output_dir, "repodata", "repomd.xml"))
+ assert retval == 0
+
+
+def test_find_module_yamls():
+ assert len(find_module_yamls(test_module_yamls_dir)) > 0
+
+
+@pytest.mark.skipif(shutil.which("modulemd-merge") is None, reason="requires modulemd-merge")
+def test_dump_modules_yaml(test_output_dir):
+ dump_modules_yaml(test_output_dir, find_module_yamls(test_module_yamls_dir))
+ assert os.path.isfile(os.path.join(test_output_dir, "modules.yaml"))
+
+
+def test_run_modifyrepo(test_output_dir):
+ if not os.path.isfile(os.path.join(test_output_dir, "modules.yaml")):
+ logger.info("Seems like test_dump_modules_yaml was skipped. "
+ "Creating modules.yaml from dummy.yaml.")
+ shutil.copy(os.path.join(test_module_yamls_dir, "dummy.yaml"),
+ os.path.join(test_output_dir, "modules.yaml"))
+
+ assert os.path.isfile(os.path.join(test_output_dir, "modules.yaml"))
+ retval = run_modifyrepo(test_output_dir)
+ assert glob.glob(os.path.join(test_output_dir, "repodata", "*-modules.yaml.gz"))
+ assert retval == 0
diff --git a/dir2module/dir2module/dir2module.py b/dir2module/dir2module/dir2module.py
index 9902aec..6643a83 100755
--- a/dir2module/dir2module/dir2module.py
+++ b/dir2module/dir2module/dir2module.py
@@ -20,13 +20,13 @@ gi.require_version("Modulemd", "2.0")
from gi.repository import Modulemd # noqa: E402
-class Module(object):
+class ModuleBase:
"""
- Provide a high-level interface for representing modules and yaml generation
- based on their values.
+ Base class for modulemd things
"""
+
def __init__(self, name, stream, version, context, arch, summary,
- description, module_license, licenses, package_nevras, requires):
+ description, module_license, licenses, packages, requires):
self.name = name
self.stream = stream
self.version = version
@@ -36,18 +36,69 @@ class Module(object):
self.description = description
self.module_license = module_license
self.licenses = licenses
- self.package_nevras = package_nevras
+ self.packages = packages
self.requires = requires
+ @property
+ def filename_format(self):
+ """
+ String format for the modulemd filename. It can contain the following
+ variables:
+ {N} - Module name
+ {S} - Module stream name
+ {V} - Module version
+ {C} - Module context
+ {A} - Module architecture
+ """
+ raise NotImplementedError
+
+ def dumps(self):
+ """
+ Generate YAML based on input parameters and return it as a string
+ """
+ raise NotImplementedError
+
@property
def filename(self):
"""
Generate filename for a module yaml
"""
- return "{N}:{S}:{V}:{C}:{A}.modulemd.yaml".format(
+ return self.filename_format.format(
N=self.name, S=self.stream, V=self.version,
C=self.context, A=self.arch)
+ def dump(self):
+ """
+ Generate modulemd yaml based on input parameters write it into file
+ """
+ with open(self.filename, "w") as moduleyaml:
+ moduleyaml.write(self.dumps())
+
+ @property
+ def package_names(self):
+ """
+ Return the list of unique package names within this module
+ """
+ return {package.header.name for package in self.packages}
+
+ @property
+ def package_nevras(self):
+ """
+ Return the list of unique package NEVRAs within this module
+ """
+ return {package.nevra for package in self.packages}
+
+
+class Module(ModuleBase):
+ """
+ Provide a high-level interface for representing modules and yaml generation
+ based on their values.
+ """
+
+ @property
+ def filename_format(self):
+ return "{N}:{S}:{V}:{C}:{A}.modulemd.yaml"
+
def dumps(self):
"""
Generate modulemd yaml based on input parameters and return it as a string
@@ -70,16 +121,37 @@ class Module(object):
dependencies.add_runtime_stream(depname, depstream)
mod_stream.add_dependencies(dependencies)
+ profile = Modulemd.Profile.new("common")
+ for pkgname in self.package_names:
+ profile.add_rpm(pkgname)
+ mod_stream.add_profile(profile)
+
index = Modulemd.ModuleIndex.new()
index.add_module_stream(mod_stream)
return index.dump_to_string()
- def dump(self):
+
+class ModuleDefaults(ModuleBase):
+ """
+ Provide a high-level interface for representing modulemd defaults files
+ """
+
+ @property
+ def filename_format(self):
+ return "{N}:{S}:{V}:{C}:{A}.modulemd-defaults.yaml"
+
+ def dumps(self):
"""
- Generate modulemd yaml based on input parameters write it into file
+ Generate modulemd_defaults yaml based on input parameters and return it
+ as a string
"""
- with open(self.filename, "w") as moduleyaml:
- moduleyaml.write(self.dumps())
+ mod_defaults = Modulemd.DefaultsV1.new(self.name)
+ mod_defaults.set_default_stream(self.stream)
+ mod_defaults.add_default_profile_for_stream(self.stream, "common")
+
+ index = Modulemd.ModuleIndex.new()
+ index.add_defaults(mod_defaults)
+ return index.dump_to_string()
class Package(object):
@@ -220,7 +292,6 @@ def main():
packages = [Package(package) for package in packages]
licenses = {package.license for package in packages}
- nevras = {package.nevra for package in packages}
requires = parse_dependencies(args.requires)
description = args.description \
@@ -238,8 +309,10 @@ def main():
raise RuntimeError("All packages need to contain the `modularitylabel` header. "
"To suppress this constraint, use `--force` parameter")
- module = Module(name, stream, version, context, arch, args.summary,
- description, args.license, licenses, nevras, requires)
+ modargs = [name, stream, version, context, arch, args.summary, description,
+ args.license, licenses, packages, requires]
+ module = Module(*modargs)
+ module_defaults = ModuleDefaults(*modargs)
if args.stdout:
print(module.dumps())
@@ -247,6 +320,9 @@ def main():
module.dump()
print("Created {0}".format(module.filename))
+ module_defaults.dump()
+ print("Created {0}".format(module_defaults.filename))
+
if __name__ == "__main__":
try:
diff --git a/dir2module/tests/conftest.py b/dir2module/tests/conftest.py
index 9309b44..c6956cb 100644
--- a/dir2module/tests/conftest.py
+++ b/dir2module/tests/conftest.py
@@ -15,7 +15,7 @@ def dummy_module():
'description': 'One dummy module for your tests',
'module_license': 'No License',
'licenses': [],
- 'package_nevras': [],
+ 'packages': [],
'requires': {}
}
diff --git a/man/bld2repo.1 b/man/bld2repo.1
new file mode 100644
index 0000000..ceb158b
--- /dev/null
+++ b/man/bld2repo.1
@@ -0,0 +1,41 @@
+.TH bld2repo "1" Manual
+.SH NAME
+bld2repo
+.SH SYNOPSIS
+.B bld2repo
+[-h] -b BUILD_ID [-d RESULT_DIR] [-a ARCH] [-k KOJI_HOST] [-s KOJI_STORAGE_HOST]
+.SH DESCRIPTION
+When provided with a build id it will download all buildrequired RPMsof a
+modular koji build into the provided directory and create a repository out of
+it.
+.SH OPTIONS
+
+.TP
+\fB\-b\fR \fI\,BUILD_ID\/\fR, \fB\-\-build\-id\fR \fI\,BUILD_ID\/\fR
+ID of a koji build.
+
+.TP
+\fB\-d\fR \fI\,RESULT_DIR\/\fR, \fB\-\-result\-dir\fR \fI\,RESULT_DIR\/\fR
+Directory where the RPMs are downloaded.
+
+.TP
+\fB\-a\fR \fI\,ARCH\/\fR, \fB\-\-arch\fR \fI\,ARCH\/\fR
+For which architecture the RPMs should be downloaded. The 'noarch' is included
+automatically.
+
+.TP
+\fB\-k\fR \fI\,KOJI_HOST\/\fR, \fB\-\-koji\-host\fR \fI\,KOJI_HOST\/\fR
+Koji host base url
+
+.TP
+\fB\-s\fR \fI\,KOJI_STORAGE_HOST\/\fR, \fB\-\-koji\-storage\-host\fR \fI\,KOJI_STORAGE_HOST\/\fR
+Koji storage storage host base url. Server where the RPMs are stored. Required
+to be used together with `\-\-koji\-host`.
+
+.SH AUTHORS
+.B bld2repo
+was written by Martin Čurlej <mcurlej@redhat.com>.
+.SH DISTRIBUTION
+The latest version of bld2repo may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/createrepo_mod.1 b/man/createrepo_mod.1
new file mode 100644
index 0000000..9acdd7d
--- /dev/null
+++ b/man/createrepo_mod.1
@@ -0,0 +1,21 @@
+.TH createrepo_mod "1" Manual
+.SH NAME
+createrepo_mod
+.SH SYNOPSIS
+.B createrepo_mod
+[-h] directory_to_index
+.SH DESCRIPTION
+A small wrapper around createrepo_c and modifyrepo_c toprovide an easy tool
+for generating module repositories
+.SH OPTIONS
+.TP
+\fBdirectory_to_index\fR
+Directory to index
+
+.SH AUTHORS
+.B createrepo_mod
+was written by Jakub Kadlčík <jkadlcik@redhat.com>.
+.SH DISTRIBUTION
+The latest version of createrepo_mod may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/dir2module.1 b/man/dir2module.1
new file mode 100644
index 0000000..728792e
--- /dev/null
+++ b/man/dir2module.1
@@ -0,0 +1,55 @@
+.TH dir2module "1" Manual
+.SH NAME
+dir2module
+.SH SYNOPSIS
+.B dir2module
+[-h] -m SUMMARY [-d DESCRIPTION] [-l LICENSE] [-r REQUIRES] [--force] [--stdout] (--dir DIR | --pkglist PKGLIST) nsvca
+.SH DESCRIPTION
+Recursively read RPMs from DIR or read them from specified pkglist.If any RPM
+is missing on unreadable, error out.Populate artifacts/rpms with RPM
+NEVRAs.Populate license/content with list of RPM licenses.Write
+N:S:V:C:A.modulemd.yaml in the current directory.Make sure the yaml is in
+modulemd v2 format.
+.SH OPTIONS
+.TP
+\fBnsvca\fR
+Module name, stream version, context and architecture in a N:S:V:C:A format
+
+.TP
+\fB\-m\fR \fI\,SUMMARY\/\fR, \fB\-\-summary\fR \fI\,SUMMARY\/\fR
+Module summary
+
+.TP
+\fB\-d\fR \fI\,DESCRIPTION\/\fR, \fB\-\-description\fR \fI\,DESCRIPTION\/\fR
+Module description
+
+.TP
+\fB\-l\fR \fI\,LICENSE\/\fR, \fB\-\-license\fR \fI\,LICENSE\/\fR
+Module license
+
+.TP
+\fB\-r\fR \fI\,REQUIRES\/\fR, \fB\-\-requires\fR \fI\,REQUIRES\/\fR
+Module runtime dependencies in a N:S format. For multiple dependencies, repeat
+this option
+
+.TP
+\fB\-\-force\fR
+Suppress all constraints and hope for the best
+
+.TP
+\fB\-\-stdout\fR
+By defult the output is saved in a file. Use this to suppress it and print to
+the STDOUT
+
+.TP
+\fB\-\-dir\fR \fI\,DIR\/\fR
+.TP
+\fB\-\-pkglist\fR \fI\,PKGLIST\/\fR
+
+.SH AUTHORS
+.B dir2module
+was written by Jakub Kadlčík <jkadlcik@redhat.com>.
+.SH DISTRIBUTION
+The latest version of dir2module may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/generate-manpages.sh b/man/generate-manpages.sh
index 73f38f8..abc0757 100755
--- a/man/generate-manpages.sh
+++ b/man/generate-manpages.sh
@@ -3,10 +3,14 @@
HOMEPAGE="https://github.com/rpm-software-management/modulemd-tools"
-python3 repo2module/setup.py \
- --command-packages=click_man.commands man_pages \
- --target ./man \
- &> /dev/null
+argparse-manpage \
+ --pyfile repo2module/repo2module/cli.py \
+ --function get_arg_parser \
+ --author "Stephen Gallagher" \
+ --author-email "sgallagh@redhat.com" \
+ --project-name "repo2module" \
+ --url HOMEPAGE \
+ > ./man/repo2module.1
argparse-manpage \
@@ -20,7 +24,7 @@ argparse-manpage \
argparse-manpage \
- --pyfile createrepo_mod/createrepo_mod.py \
+ --pyfile createrepo_mod/createrepo_mod/createrepo_mod.py \
--function get_arg_parser \
--author "Jakub Kadlčík" \
--author-email "jkadlcik@redhat.com" \
@@ -30,7 +34,7 @@ argparse-manpage \
argparse-manpage \
- --pyfile modulemd-merge/modulemd-merge.py \
+ --pyfile modulemd-merge/modulemd_merge/modulemd_merge.py \
--function get_arg_parser \
--author "Gerd v. Egidy" \
--author-email "gerd.von.egidy@intra2net.com" \
@@ -47,3 +51,13 @@ argparse-manpage \
--project-name "modulemd-generate-macros" \
--url HOMEPAGE \
> ./man/modulemd-generate-macros.1
+
+
+argparse-manpage \
+ --pyfile bld2repo/bld2repo/cli.py \
+ --function get_arg_parser \
+ --author "Martin Čurlej" \
+ --author-email "mcurlej@redhat.com" \
+ --project-name "bld2repo" \
+ --url HOMEPAGE \
+ > ./man/bld2repo.1
diff --git a/man/modulemd-generate-macros.1 b/man/modulemd-generate-macros.1
new file mode 100644
index 0000000..36a1e9a
--- /dev/null
+++ b/man/modulemd-generate-macros.1
@@ -0,0 +1,31 @@
+.TH modulemd-generate-macros "1" Manual
+.SH NAME
+modulemd-generate-macros
+.SH SYNOPSIS
+.B modulemd-generate-macros
+[-h] [--disttag DISTTAG] [--conflicts-from-file CONFLICTS_FROM_FILE] yaml
+.SH DESCRIPTION
+Generate `module\-build\-macros` SRPM package, which is a central piece for
+building modules. It should be present in the buildroot before any other
+module packages are submitted to be built.
+.SH OPTIONS
+.TP
+\fByaml\fR
+Path to modulemd YAML file
+
+.TP
+\fB\-\-disttag\fR \fI\,DISTTAG\/\fR
+Disttag
+
+.TP
+\fB\-\-conflicts\-from\-file\fR \fI\,CONFLICTS_FROM_FILE\/\fR
+Path to a file containing conflicts definitions and their reasoning. Content
+of this file gets simply pasted into the specfile
+
+.SH AUTHORS
+.B modulemd\-generate\-macros
+was written by Jakub Kadlčík <jkadlcik@redhat.com>.
+.SH DISTRIBUTION
+The latest version of modulemd\-generate\-macros may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/modulemd-merge.1 b/man/modulemd-merge.1
new file mode 100644
index 0000000..f2e89e3
--- /dev/null
+++ b/man/modulemd-merge.1
@@ -0,0 +1,43 @@
+.TH modulemd-merge "1" Manual
+.SH NAME
+modulemd-merge
+.SH SYNOPSIS
+.B modulemd-merge
+[-h] [-v] [-d] [-i] [-O] input [input ...] output
+.SH DESCRIPTION
+Merge several modules.yaml files (rpm modularity metadata) into one.
+.SH OPTIONS
+.TP
+\fBinput\fR
+input filename(s) or directories.
+repomd.xml files are parsed and modules hrefs contained are merged.
+If a directory is given, it is searched for repodata/repomd.xml
+and repomd.xml
+
+.TP
+\fBoutput\fR
+YAML output filename
+
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+increase output verbosity
+
+.TP
+\fB\-d\fR, \fB\-\-debug\fR
+debug output verbosity
+
+.TP
+\fB\-i\fR, \fB\-\-ignore\-no\-input\fR
+ignore non\-existing input files
+
+.TP
+\fB\-O\fR, \fB\-\-to\-stdout\fR
+print YAML output to stdout
+
+.SH AUTHORS
+.B modulemd\-merge
+was written by Gerd v. Egidy <gerd.von.egidy@intra2net.com>.
+.SH DISTRIBUTION
+The latest version of modulemd\-merge may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/man/repo2module.1 b/man/repo2module.1
new file mode 100644
index 0000000..2a5c1e4
--- /dev/null
+++ b/man/repo2module.1
@@ -0,0 +1,38 @@
+.TH repo2module "1" Manual
+.SH NAME
+repo2module
+.SH SYNOPSIS
+.B repo2module
+[-h] [--debug | --nodebug] [-n MODULE_NAME] [-s MODULE_STREAM] [-v MODULE_VERSION] [-c MODULE_CONTEXT] [-O] repo_path [modules_yaml]
+.SH DESCRIPTION
+Generates modules.yaml file with a module, that provides all RPM packages that
+are available within a repository.
+.SH OPTIONS
+.TP
+\fBrepo_path\fR
+.TP
+\fBmodules_yaml\fR
+.TP
+\fB\-\-debug\fR
+.TP
+\fB\-\-nodebug\fR
+.TP
+\fB\-n\fR \fI\,MODULE_NAME\/\fR, \fB\-\-module\-name\fR \fI\,MODULE_NAME\/\fR
+Default is the current directory name
+
+.TP
+\fB\-s\fR \fI\,MODULE_STREAM\/\fR, \fB\-\-module\-stream\fR \fI\,MODULE_STREAM\/\fR
+.TP
+\fB\-v\fR \fI\,MODULE_VERSION\/\fR, \fB\-\-module\-version\fR \fI\,MODULE_VERSION\/\fR
+.TP
+\fB\-c\fR \fI\,MODULE_CONTEXT\/\fR, \fB\-\-module\-context\fR \fI\,MODULE_CONTEXT\/\fR
+.TP
+\fB\-O\fR, \fB\-\-to\-stdout\fR
+
+.SH AUTHORS
+.B repo2module
+was written by Stephen Gallagher <sgallagh@redhat.com>.
+.SH DISTRIBUTION
+The latest version of repo2module may be downloaded from
+.UR HOMEPAGE
+.UE
diff --git a/modulemd-merge/modulemd_merge/__init__.py b/modulemd-merge/modulemd_merge/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/modulemd-merge/modulemd-merge.py b/modulemd-merge/modulemd_merge/modulemd_merge.py
similarity index 90%
rename from modulemd-merge/modulemd-merge.py
rename to modulemd-merge/modulemd_merge/modulemd_merge.py
index 65c5fad..89afb87 100755
--- a/modulemd-merge/modulemd-merge.py
+++ b/modulemd-merge/modulemd_merge/modulemd_merge.py
@@ -117,6 +117,8 @@ def get_arg_parser():
action="store_true")
parser.add_argument("-i", "--ignore-no-input", help="ignore non-existing input files",
action="store_true")
+ parser.add_argument("-O", "--to-stdout", help="print YAML output to stdout",
+ action="store_true")
# positional arguments
parser.add_argument("input", nargs="+", help="input filename(s) or directories.\n"
@@ -154,14 +156,21 @@ def main():
logging.info("merged result: {} modulemds and {} modulemd-defaults".format(len(modnames),
len(defstreams)))
- logging.debug("Writing YAML to {}".format(args.output))
- with open(args.output, 'w') as output:
- if len(modnames) == 0 and len(defstreams) == 0:
- # properly writing a completely empty yaml document
- logging.debug("Writing an empty YAML")
- output.write("")
- else:
- output.write(merged_index.dump_to_string())
+ if args.to_stdout:
+ output = sys.stdout
+ else:
+ logging.debug("Writing YAML to {}".format(args.output))
+ output = open(args.output, 'w')
+
+ if len(modnames) == 0 and len(defstreams) == 0:
+ # properly writing a completely empty yaml document
+ logging.debug("Writing an empty YAML")
+ output.write("")
+ else:
+ output.write(merged_index.dump_to_string())
+
+ if not args.to_stdout:
+ output.close()
if __name__ == "__main__":
diff --git a/modulemd-merge/requirements.txt b/modulemd-merge/requirements.txt
new file mode 100644
index 0000000..e69de29
diff --git a/modulemd-merge/setup.py b/modulemd-merge/setup.py
new file mode 100644
index 0000000..6d88209
--- /dev/null
+++ b/modulemd-merge/setup.py
@@ -0,0 +1,37 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+from setuptools import setup, find_packages
+
+with open("README.md", "r") as fh:
+ long_description = fh.read()
+
+with open('requirements.txt') as f:
+ requires = f.read().splitlines()
+
+setup(
+ name='modulemd-merge',
+ version='0.1',
+ packages=find_packages(),
+ url='https://github.com/rpm-software-management/modulemd-tools',
+ license='MIT',
+ author='Gerd v. Egidy',
+ author_email='gerd.von.egidy@intra2net.com',
+ description='Merge several modules.yaml files (rpm modularity metadata) into one',
+ long_description=long_description,
+ long_description_content_type='text/markdown',
+ # modulemd-merge also requires libmodulemd and createrepo_c which are
+ # not available on PyPI and must be installed separately.
+ # On Fedora, this is done with `dnf install python3-libmodulemd python3-createrepo_c`
+ install_requires=requires,
+ entry_points={
+ 'console_scripts': [
+ 'modulemd-merge=modulemd_merge.modulemd_merge:main'],
+ },
+ classifiers=[
+ "Programming Language :: Python :: 3",
+ "License :: OSI Approved :: MIT License",
+ "Operating System :: POSIX :: Linux",
+ ],
+ include_package_data=True,
+)
diff --git a/modulemd-merge/test-requirements.txt b/modulemd-merge/test-requirements.txt
new file mode 100644
index 0000000..3ea8172
--- /dev/null
+++ b/modulemd-merge/test-requirements.txt
@@ -0,0 +1,2 @@
+PyYAML
+pytest
diff --git a/modulemd-merge/tests/conftest.py b/modulemd-merge/tests/conftest.py
new file mode 100644
index 0000000..d79b4d0
--- /dev/null
+++ b/modulemd-merge/tests/conftest.py
@@ -0,0 +1,221 @@
+from textwrap import dedent
+
+import pytest
+
+
+@pytest.fixture
+def moduleB_yaml():
+ return dedent("""
+ ---
+ document: modulemd-defaults
+ version: 1
+ data:
+ module: bar
+ stream: stable
+ profiles:
+ stable: [everything]
+ ...
+ ---
+ document: modulemd
+ version: 2
+ data:
+ name: bar
+ stream: stable
+ version: 234
+ context: fc33
+ summary: Let's put some bar's summary here
+ description: >-
+ Let's put some bar's description here
+ license:
+ module:
+ - Bar License
+ content:
+ - A fresh bar license for your test suites
+ profiles:
+ everything:
+ rpms:
+ - bar-utils
+ api:
+ rpms:
+ - bar-utils
+ components:
+ rpms:
+ bar-utils:
+ rationale: Present in the repository
+ artifacts:
+ rpms:
+ - bar-utils-2:3-4.fc33.noarch
+ ...
+ """).lstrip()
+
+
+@pytest.fixture
+def two_modules_merged_yamls():
+ return dedent("""
+ ---
+ document: modulemd-defaults
+ version: 1
+ data:
+ module: bar
+ stream: stable
+ profiles:
+ stable: [everything]
+ ...
+ ---
+ document: modulemd
+ version: 2
+ data:
+ name: bar
+ stream: stable
+ version: 234
+ context: fc33
+ summary: Let's put some bar's summary here
+ description: >-
+ Let's put some bar's description here
+ license:
+ module:
+ - Bar License
+ content:
+ - A fresh bar license for your test suites
+ profiles:
+ everything:
+ rpms:
+ - bar-utils
+ api:
+ rpms:
+ - bar-utils
+ components:
+ rpms:
+ bar-utils:
+ rationale: Present in the repository
+ artifacts:
+ rpms:
+ - bar-utils-2:3-4.fc33.noarch
+ ...
+ ---
+ document: modulemd-defaults
+ version: 1
+ data:
+ module: foo
+ stream: devel
+ profiles:
+ devel: [everything]
+ ...
+ ---
+ document: modulemd
+ version: 2
+ data:
+ name: foo
+ stream: devel
+ version: 123
+ context: fc33
+ summary: Let's put some foo's summary here
+ description: >-
+ Let's put some foo's description here
+ license:
+ module:
+ - Foo License
+ content:
+ - A fresh foo license for your test suites
+ profiles:
+ everything:
+ rpms:
+ - foo-utils
+ api:
+ rpms:
+ - foo-utils
+ components:
+ rpms:
+ foo-utils:
+ rationale: Present in the repository
+ artifacts:
+ rpms:
+ - foo-utils-1:2-3.fc33.noarch
+ ...
+ """).lstrip()
+
+
+@pytest.fixture
+def module_with_repodata_dir():
+ return dedent("""
+ ---
+ document: modulemd-defaults
+ version: 1
+ data:
+ module: dummy
+ stream: rolling
+ profiles:
+ rolling: [everything]
+ ...
+ ---
+ document: modulemd
+ version: 2
+ data:
+ name: dummy
+ stream: rolling
+ version: 1
+ context: abcdef12
+ summary: <auto-generated module summary>
+ description: >-
+ <auto-generated module description>
+ license:
+ module:
+ - MIT
+ content:
+ - <FILL THIS IN>
+ profiles:
+ everything:
+ rpms:
+ - python-django-bash-completion
+ api:
+ rpms:
+ - python-django-bash-completion
+ components:
+ rpms:
+ python-django:
+ rationale: Present in the repository
+ artifacts:
+ rpms:
+ - python-django-bash-completion-0:3.0.10-3.fc33.noarch
+ ...
+ ---
+ document: modulemd-defaults
+ version: 1
+ data:
+ module: foo
+ stream: devel
+ profiles:
+ devel: [everything]
+ ...
+ ---
+ document: modulemd
+ version: 2
+ data:
+ name: foo
+ stream: devel
+ version: 123
+ context: fc33
+ summary: Let's put some foo's summary here
+ description: >-
+ Let's put some foo's description here
+ license:
+ module:
+ - Foo License
+ content:
+ - A fresh foo license for your test suites
+ profiles:
+ everything:
+ rpms:
+ - foo-utils
+ api:
+ rpms:
+ - foo-utils
+ components:
+ rpms:
+ foo-utils:
+ rationale: Present in the repository
+ artifacts:
+ rpms:
+ - foo-utils-1:2-3.fc33.noarch
+ ...
+ """).lstrip()
diff --git a/modulemd-merge/tests/test_modulemd_merge.py b/modulemd-merge/tests/test_modulemd_merge.py
new file mode 100644
index 0000000..25d7537
--- /dev/null
+++ b/modulemd-merge/tests/test_modulemd_merge.py
@@ -0,0 +1,86 @@
+import argparse
+import os.path
+from unittest.mock import patch
+
+import pytest
+import yaml
+
+from modulemd_merge import modulemd_merge
+
+dirname = os.path.dirname(os.path.realpath(__file__))
+test_data_dir = os.path.join(dirname, "testdata")
+test_repodata_dir = os.path.join(dirname, "testdata", "repodata")
+test_repomd_file = os.path.join(dirname, "testdata", "repodata", "repomd.xml")
+
+
+def _testrun_args(inputs, **kwargs):
+ args = {'verbose': True, 'debug': True, 'input': inputs, 'to_stdout': True,
+ 'ignore_no_input': False}
+ args.update(kwargs)
+ return argparse.Namespace(**args)
+
+
+def test_modulemd_merge_loading():
+ assert modulemd_merge
+
+
+def test_modulemd_merge_two_yamls(capsys, two_modules_merged_yamls):
+
+ inputs = (os.path.join(test_data_dir, "moduleA.yaml"),
+ os.path.join(test_data_dir, "moduleB.yaml"))
+ with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs)):
+ modulemd_merge.main()
+
+ captured = capsys.readouterr()
+ assert [d for d in yaml.load_all(captured.out, Loader=yaml.SafeLoader)] == [
+ d for d in yaml.load_all(two_modules_merged_yamls, Loader=yaml.SafeLoader)]
+
+
+def test_modulemd_merge_two_yamls_first_missing(capsys):
+
+ inputs = (os.path.join(test_data_dir, "missing-file.yaml"),
+ os.path.join(test_data_dir, "moduleB.yaml"))
+ with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs)):
+ with pytest.raises(ValueError) as excinfo:
+ modulemd_merge.main()
+
+ assert f"input file {test_data_dir}/missing-file.yaml does not exist" in str(excinfo.value)
+
+
+def test_modulemd_merge_two_yamls_first_missing_ignore_no_input(capsys, moduleB_yaml):
+
+ inputs = (os.path.join(test_data_dir, "missing-file.yaml"),
+ os.path.join(test_data_dir, "moduleB.yaml"))
+ kwargs = {"ignore_no_input": True}
+ with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs, **kwargs)):
+ modulemd_merge.main()
+
+ captured = capsys.readouterr()
+ assert [d for d in yaml.load_all(captured.out, Loader=yaml.SafeLoader)] == [
+ d for d in yaml.load_all(moduleB_yaml, Loader=yaml.SafeLoader)]
+
+
+@pytest.mark.skip(reason="Requires binary files in the repo")
+def test_modulemd_merge_module_with_repodata_dir(capsys, module_with_repodata_dir):
+
+ inputs = (os.path.join(test_data_dir, "moduleA.yaml"),
+ test_repodata_dir)
+ with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs)):
+ modulemd_merge.main()
+
+ captured = capsys.readouterr()
+ assert [d for d in yaml.load_all(captured.out, Loader=yaml.SafeLoader)] == [
+ d for d in yaml.load_all(module_with_repodata_dir, Loader=yaml.SafeLoader)]
+
+
+@pytest.mark.skip(reason="Requires binary files in the repo")
+def test_modulemd_merge_module_with_repomd_file(capsys, module_with_repodata_dir):
+
+ inputs = (os.path.join(test_data_dir, "moduleA.yaml"),
+ test_repomd_file)
+ with patch("argparse.ArgumentParser.parse_args", return_value=_testrun_args(inputs)):
+ modulemd_merge.main()
+
+ captured = capsys.readouterr()
+ assert [d for d in yaml.load_all(captured.out, Loader=yaml.SafeLoader)] == [
+ d for d in yaml.load_all(module_with_repodata_dir, Loader=yaml.SafeLoader)]
diff --git a/modulemd-merge/tests/testdata/moduleA.yaml b/modulemd-merge/tests/testdata/moduleA.yaml
new file mode 100644
index 0000000..97c3806
--- /dev/null
+++ b/modulemd-merge/tests/testdata/moduleA.yaml
@@ -0,0 +1,40 @@
+---
+document: modulemd-defaults
+version: 1
+data:
+ module: foo
+ stream: devel
+ profiles:
+ devel: [everything]
+...
+---
+document: modulemd
+version: 2
+data:
+ name: foo
+ stream: devel
+ version: 123
+ context: fc33
+ summary: Let's put some foo's summary here
+ description: >-
+ Let's put some foo's description here
+ license:
+ module:
+ - Foo License
+ content:
+ - A fresh foo license for your test suites
+ profiles:
+ everything:
+ rpms:
+ - foo-utils
+ api:
+ rpms:
+ - foo-utils
+ components:
+ rpms:
+ foo-utils:
+ rationale: Present in the repository
+ artifacts:
+ rpms:
+ - foo-utils-1:2-3.fc33.noarch
+...
diff --git a/modulemd-merge/tests/testdata/moduleB.yaml b/modulemd-merge/tests/testdata/moduleB.yaml
new file mode 100644
index 0000000..f922b5e
--- /dev/null
+++ b/modulemd-merge/tests/testdata/moduleB.yaml
@@ -0,0 +1,40 @@
+---
+document: modulemd-defaults
+version: 1
+data:
+ module: bar
+ stream: stable
+ profiles:
+ stable: [everything]
+...
+---
+document: modulemd
+version: 2
+data:
+ name: bar
+ stream: stable
+ version: 234
+ context: fc33
+ summary: Let's put some bar's summary here
+ description: >-
+ Let's put some bar's description here
+ license:
+ module:
+ - Bar License
+ content:
+ - A fresh bar license for your test suites
+ profiles:
+ everything:
+ rpms:
+ - bar-utils
+ api:
+ rpms:
+ - bar-utils
+ components:
+ rpms:
+ bar-utils:
+ rationale: Present in the repository
+ artifacts:
+ rpms:
+ - bar-utils-2:3-4.fc33.noarch
+...
diff --git a/modulemd-tools.spec b/modulemd-tools.spec
index 1bf1f59..d8b65f6 100644
--- a/modulemd-tools.spec
+++ b/modulemd-tools.spec
@@ -1,6 +1,6 @@
Name: modulemd-tools
Version: 0.7
-Release: 1%{?dist}
+Release: 6%{?dist}
Summary: Collection of tools for parsing and generating modulemd YAML files
License: MIT
BuildArch: noarch
@@ -9,21 +9,16 @@ URL: https://github.com/rpm-software-management/modulemd-tools
Source0: https://github.com/rpm-software-management/modulemd-tools/archive/%{version}/%{name}-%{version}.tar.gz
BuildRequires: createrepo_c
-BuildRequires: argparse-manpage
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-libmodulemd >= 2.9.3
-BuildRequires: python3-click
-BuildRequires: python3-click-man
BuildRequires: python3-dnf
BuildRequires: python3-hawkey
BuildRequires: python3-createrepo_c
BuildRequires: python3-pyyaml
-BuildRequires: python3-parameterized
BuildRequires: python3-pytest
Requires: createrepo_c
-Requires: python3-click
Requires: python3-dnf
Requires: python3-hawkey
Requires: python3-createrepo_c
@@ -52,6 +47,8 @@ modulemd-generate-macros - Generate module-build-macros SRPM package, which is
a central piece for building modules. It should be present in the buildroot
before any other module packages are submitted to be built.
+bld2repo - Simple tool for dowloading build required RPMs of a modular build from koji.
+
%prep
%setup -q
@@ -66,7 +63,17 @@ cd dir2module
%py3_build
cd ..
-PYTHONPATH=./modulemd_tools ./man/generate-manpages.sh
+cd createrepo_mod
+%py3_build
+cd ..
+
+cd modulemd-merge
+%py3_build
+cd ..
+
+cd modulemd_tools
+%py3_build
+cd ..
%install
@@ -78,24 +85,46 @@ cd dir2module
%py3_install
cd ..
-cp createrepo_mod/createrepo_mod.py %{buildroot}%{_bindir}/createrepo_mod
-cp modulemd-merge/modulemd-merge.py %{buildroot}%{_bindir}/modulemd-merge
+cd createrepo_mod
+%py3_install
+cd ..
+
+cd modulemd-merge
+%py3_install
+cd ..
+
+cd modulemd_tools
+%py3_install
+cd ..
+
cp modulemd-generate-macros/modulemd-generate-macros.py \
%{buildroot}%{_bindir}/modulemd-generate-macros
-cp -r modulemd_tools/modulemd_tools %{buildroot}%{python3_sitelib}/modulemd_tools
-
install -d %{buildroot}%{_mandir}/man1
cp man/*.1 %{buildroot}%{_mandir}/man1/
%check
+export PATH={buildroot}%{_bindir}:$PATH
+
cd repo2module
-%{python3} -m pytest
+%{python3} -m pytest -vv
cd ..
cd dir2module
-%{python3} -m pytest
+%{python3} -m pytest -vv
+cd ..
+
+cd createrepo_mod
+%{python3} -m pytest -vv
+cd ..
+
+cd modulemd-merge
+%{python3} -m pytest -vv -s
+cd ..
+
+cd modulemd_tools
+%{python3} -m pytest -vv
cd ..
@@ -106,21 +135,77 @@ cd ..
%{python3_sitelib}/repo2module-*.egg-info/
%{python3_sitelib}/dir2module
%{python3_sitelib}/dir2module-*.egg-info/
+%{python3_sitelib}/createrepo_mod
+%{python3_sitelib}/createrepo_mod-*.egg-info/
+%{python3_sitelib}/modulemd_merge
+%{python3_sitelib}/modulemd_merge-*.egg-info/
+%{python3_sitelib}/modulemd_tools
+%{python3_sitelib}/modulemd_tools-*.egg-info/
%{_bindir}/repo2module
%{_bindir}/dir2module
%{_bindir}/createrepo_mod
%{_bindir}/modulemd-merge
%{_bindir}/modulemd-generate-macros
-%{python3_sitelib}/modulemd_tools
%{_mandir}/man1/repo2module.1*
%{_mandir}/man1/dir2module.1*
%{_mandir}/man1/createrepo_mod.1*
%{_mandir}/man1/modulemd-merge.1*
%{_mandir}/man1/modulemd-generate-macros.1.*
+%{_mandir}/man1/bld2repo.1.*
%changelog
+* Fri Aug 27 2021 Jakub Kadlcik <jkadlcik@redhat.com> 0.7-6
+- Do not install bld2repo as RHEL8 doesn't have python3-koji
+ (jkadlcik@redhat.com)
+- Drop the Patch1 and make the change directly in this repository
+ (jkadlcik@redhat.com)
+- Use UpstreamBuilder instead of DistributionBuilder (jkadlcik@redhat.com)
+- Skip some tests because they require binary files (jkadlcik@redhat.com)
+
+* Thu Aug 26 2021 Jakub Kadlcik <jkadlcik@redhat.com> 0.7-5
+- Update to new upstream version
+
+* Mon Aug 23 2021 Jakub Kadlcik <frostyx@email.cz> 0.11-1
+- modulemd_tools: compatibility for upgrade_ext on EPEL8 (frostyx@email.cz)
+- modulemd_tools: compatibility for read_packager_string on EPEL8
+ (frostyx@email.cz)
+- dir2module: generate also profiles and modulemd-defaults file
+ (frostyx@email.cz)
+- modulemd_tools: use upgrade_ext instead of upgrade (frostyx@email.cz)
+- modulemd_tools: use read_packager_string instead of read_string
+ (frostyx@email.cz)
+- Add installation instructions (frostyx@email.cz)
+- bld2repo: do not create empty repos when --result-dir is used
+ (kdudka@redhat.com)
+- bld2repo: print status in a more intuitive format (kdudka@redhat.com)
+- tito: stop releasing for Fedora 32 (frostyx@email.cz)
+
+* Mon Jun 14 2021 Jakub Kadlcik <frostyx@email.cz> 0.10-1
+- Added bld2repo (mcurlej@redhat.com)
+
+* Fri Apr 09 2021 Jakub Kadlcik <frostyx@email.cz> 0.9-1
+- repo2module: drop python-click dependency (frostyx@email.cz)
+
+* Tue Apr 06 2021 Jakub Kadlcik <frostyx@email.cz> 0.8-1
+- modulemd_tools: drop python3-parameterized dependency (frostyx@email.cz)
+- Package modulemd_tools helper lib (fvalder@redhat.com)
+- Add modulemd-merge tests (fvalder@redhat.com)
+- Add createrepo_mod tests (fvalder@redhat.com)
+- Replace master in fedora releaser to rawhide (frostyx@email.cz)
+
+* Tue Mar 02 2021 Jakub Kadlčík <jkadlcik@redhat.com> - 0.7-4
+- Rebuild for 8.5.0
+
+* Thu Feb 11 2021 Jakub Kadlčík <jkadlcik@redhat.com> - 0.7-3
+- Bump spec to rebuild with gating enabled
+
+* Tue Feb 09 2021 Jakub Kadlčík <jkadlcik@redhat.com> - 0.7-2
+- Do not generate manpages on the fly
+- Drop python-parameterized dependency
+- Fix python3 macro for running tests
+
* Tue Feb 09 2021 Jakub Kadlcik <frostyx@email.cz> 0.7-1
- Generate manpages on the fly
- Automated test builds incl. Docker/Travis
@@ -129,7 +214,7 @@ cd ..
- Drop libmodulemd dependency in favor of python3-libmodulemd
* Sun Nov 22 2020 Jakub Kadlcik <frostyx@email.cz> 0.6-1
-- Generate manpages for all tools in this repository
+- Generate manpages for all tools in this repository
- modulemd-generate-macros: add a tool for generating module-build-macros
- modulemd_tools: add the first pieces of a python library (for internal usage only)
diff --git a/modulemd_tools/modulemd_tools/yaml.py b/modulemd_tools/modulemd_tools/yaml.py
index 43f314f..ec964f6 100644
--- a/modulemd_tools/modulemd_tools/yaml.py
+++ b/modulemd_tools/modulemd_tools/yaml.py
@@ -7,6 +7,7 @@ and all transformation functions are `str` -> `str`.
import os
import gi
import yaml
+from distutils.version import StrictVersion
gi.require_version("Modulemd", "2.0")
from gi.repository import Modulemd # noqa: E402
@@ -104,14 +105,9 @@ def update(mod_yaml, name=None, stream=None, version=None, context=None,
"""
mod_stream = _yaml2stream(mod_yaml)
-
- # AFAIK It is not possible to change name and stream of an existing module,
- # so we need to workaround it by creating a new module with desired N:S and
- # then update it from the previous yaml
name = name or mod_stream.get_module_name()
stream = stream or mod_stream.get_stream_name()
- mod_stream = Modulemd.ModuleStreamV2.new(name, stream)
- mod_stream = mod_stream.read_string(mod_yaml, True, name, stream)
+ mod_stream = _modulemd_read_packager_string(mod_yaml, name, stream)
if version:
mod_stream.set_version(version)
@@ -235,12 +231,12 @@ def upgrade(mod_yaml, version):
if parsed["version"] > version:
raise ValueError("Cannot downgrade modulemd version")
- mod_stream = Modulemd.ModuleStream.read_string(
+ mod_stream = _modulemd_read_packager_string(
mod_yaml,
- True,
parsed["data"].get("name", ""),
parsed["data"].get("stream", ""))
- mod_stream_upgraded = mod_stream.upgrade(version)
+
+ mod_stream_upgraded = _modulestream_upgrade_ext(mod_stream, version)
return _stream2yaml(mod_stream_upgraded)
@@ -295,7 +291,7 @@ def _generate_filename(mod_yaml):
def _yaml2stream(mod_yaml):
try:
- return Modulemd.ModuleStream.read_string(mod_yaml, True, None, None)
+ return _modulemd_read_packager_string(mod_yaml)
except gi.repository.GLib.GError as ex:
raise ValueError(ex.message)
@@ -307,3 +303,36 @@ def _stream2yaml(mod_stream):
return idx.dump_to_string()
except gi.repository.GLib.GError as ex:
raise RuntimeError(ex.message)
+
+
+def _modulemd_read_packager_string(mod_yaml, name=None, stream=None):
+ """
+ For the time being we happen to be in a transition state when
+ `Modulemd.ModuleStream.read_string` is deprecated and throws warnings on
+ Fedora but we still use old libmodulemd (2.9.4) on RHEL8, which doesn't
+ provide its replacement in the form of `Modulemd.read_packager_string`.
+ """
+ if StrictVersion(Modulemd.get_version()) < StrictVersion("2.11"):
+ mod_stream = Modulemd.ModuleStreamV2.new(name, stream)
+ mod_stream = mod_stream.read_string(mod_yaml, True, name, stream)
+ return mod_stream
+
+ return Modulemd.read_packager_string(mod_yaml, name, stream)
+
+
+def _modulestream_upgrade_ext(mod_stream, version):
+ """
+ For the time being we happen to be in a transition state when
+ `Modulemd.ModuleStream.upgrade` is deprecated and throws warnings on
+ Fedora but we still use old libmodulemd (2.9.4) on RHEL8, which doesn't
+ provide its replacement in the form of `Modulemd.ModuleStream.upgrade_ext`.
+ """
+ if StrictVersion(Modulemd.get_version()) < StrictVersion("2.10"):
+ return mod_stream.upgrade(version)
+
+ mod_upgraded = mod_stream.upgrade_ext(version)
+ return mod_upgraded.get_stream_by_NSVCA(
+ mod_stream.get_stream_name(),
+ mod_stream.get_version(),
+ mod_stream.get_context(),
+ mod_stream.get_arch())
diff --git a/modulemd_tools/setup.py b/modulemd_tools/setup.py
new file mode 100644
index 0000000..ac179b4
--- /dev/null
+++ b/modulemd_tools/setup.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+from setuptools import setup, find_packages
+
+with open("README.md", "r") as fh:
+ long_description = fh.read()
+
+with open('requirements.txt') as f:
+ requires = f.read().splitlines()
+
+setup(
+ name='modulemd_tools',
+ version='0.1',
+ packages=find_packages(exclude=("tests",)),
+ url='https://github.com/rpm-software-management/modulemd-tools',
+ license='MIT',
+ author='Jakub Kadlcik',
+ author_email='frostyx@email.cz',
+ description='Helper lib for working with modulemd YAML definitions',
+ long_description=long_description,
+ long_description_content_type='text/markdown',
+ # dir2module also requires libmodulemd and libdnf not available on PyPI
+ # and must be installed separately.
+ # On Fedora, this is done with `dnf install python3-libmodulemd python3-dnf`
+ install_requires=requires,
+ classifiers=[
+ "Programming Language :: Python :: 3",
+ "License :: OSI Approved :: MIT License",
+ "Operating System :: POSIX :: Linux",
+ ],
+ include_package_data=True,
+)
diff --git a/modulemd_tools/tests/test_yaml.py b/modulemd_tools/tests/test_yaml.py
index e33e390..8090a2b 100644
--- a/modulemd_tools/tests/test_yaml.py
+++ b/modulemd_tools/tests/test_yaml.py
@@ -1,7 +1,6 @@
import os
import unittest
from unittest import mock
-from parameterized import parameterized
import yaml
from distutils.version import LooseVersion
from modulemd_tools.yaml import (is_valid, validate, create, update, dump,
@@ -327,11 +326,11 @@ class TestYaml(unittest.TestCase):
self.assertIn("Cannot downgrade modulemd version",
str(context.exception))
- @parameterized.expand([[None], [""], ["foo: bar"]])
- def test_upgrade_empty_yaml(self, mod_yaml):
- with self.assertRaises(ValueError) as context:
- upgrade(mod_yaml, 2)
- self.assertIn("Missing modulemd version", str(context.exception))
+ def test_upgrade_empty_yaml(self):
+ for mod_yaml in [None, "", "foo: bar"]:
+ with self.assertRaises(ValueError) as context:
+ upgrade(mod_yaml, 2)
+ self.assertIn("Missing modulemd version", str(context.exception))
def test_upgrade_unexpected_version(self):
# Neither current modulemd version cannot be unexpected
diff --git a/repo2module/repo2module/cli.py b/repo2module/repo2module/cli.py
index c91e08f..1d4ce27 100644
--- a/repo2module/repo2module/cli.py
+++ b/repo2module/repo2module/cli.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-import click
+import argparse
import createrepo_c as cr
import gi
import logging
@@ -71,48 +71,49 @@ def get_source_packages(packages):
return source_packages
-
-@click.command(help=("Generates modules.yaml file with a module, "
- "that provides all RPM packages that are available "
- "within a repository."))
-@click.option('-d', '--debug/--nodebug', default=False)
-@click.option('-n', '--module-name',
- default=lambda: os.path.basename(os.environ.get('PWD')),
- show_default='Current directory name')
-@click.option('-s', '--module-stream',
- default='rolling',
- show_default=True)
-@click.option('-v', '--module-version',
- default=1,
- show_default=True)
-@click.option('-c', '--module-context',
- default='abcdef12',
- show_default=True)
-@click.option('-O', '--to-stdout', default=False, is_flag=True)
-@click.argument('repo_path', type=click.Path(exists=True))
-@click.argument('modules_yaml', default='modules.yaml')
-def cli(debug,
- module_name,
- module_stream,
- module_version,
- module_context,
- to_stdout,
- repo_path,
- modules_yaml):
-
- if debug:
+def get_arg_parser():
+ description = ("Generates modules.yaml file with a module, "
+ "that provides all RPM packages that are available "
+ "within a repository.")
+ parser = argparse.ArgumentParser("repo2module", description=description)
+
+ debug = parser.add_mutually_exclusive_group()
+ debug.add_argument("--debug", action="store_true", default=False)
+ debug.add_argument("--nodebug", action="store_false", dest="debug")
+
+ parser.add_argument("-n", "--module-name",
+ default=os.path.basename(os.environ.get("PWD")),
+ help="Default is the current directory name")
+ parser.add_argument("-s", "--module-stream", default="rolling")
+ parser.add_argument("-v", "--module-version", default=1, type=int)
+ parser.add_argument("-c", "--module-context", default="abcdef12")
+ parser.add_argument("-O", "--to-stdout", default=False, action="store_true")
+ parser.add_argument("repo_path")
+ parser.add_argument("modules_yaml", default="modules.yaml", nargs="?")
+ return parser
+
+
+def cli():
+ parser = get_arg_parser()
+ args = parser.parse_args()
+
+ if args.debug:
logging.basicConfig(level=logging.DEBUG)
- abs_repo_path = os.path.abspath(repo_path)
- if not to_stdout:
- abs_modules_yaml = os.path.abspath(modules_yaml)
+ if not os.path.isdir(args.repo_path):
+ logging.error("No such directory: {0}".format(args.repo_path))
+ exit(1)
+
+ abs_repo_path = os.path.abspath(args.repo_path)
+ if not args.to_stdout:
+ abs_modules_yaml = os.path.abspath(args.modules_yaml)
packages = parse_repodata(abs_repo_path)
# Create module stream framework
- stream = Modulemd.ModuleStreamV2.new(module_name, module_stream)
- stream.set_version(module_version)
- stream.set_context(module_context)
+ stream = Modulemd.ModuleStreamV2.new(args.module_name, args.module_stream)
+ stream.set_version(args.module_version)
+ stream.set_context(args.module_context)
stream.set_summary('<auto-generated module summary>')
stream.set_description('<auto-generated module description>')
stream.add_module_license("MIT")
@@ -135,15 +136,15 @@ def cli(debug,
stream.add_profile(common_profile)
# Add defaults for this module
- defaults = Modulemd.DefaultsV1.new(module_name)
- defaults.set_default_stream(module_stream)
- defaults.add_default_profile_for_stream(module_stream, DEFAULT_PROFILE)
+ defaults = Modulemd.DefaultsV1.new(args.module_name)
+ defaults.set_default_stream(args.module_stream)
+ defaults.add_default_profile_for_stream(args.module_stream, DEFAULT_PROFILE)
index = Modulemd.ModuleIndex.new()
index.add_module_stream(stream)
index.add_defaults(defaults)
- if to_stdout:
+ if args.to_stdout:
sys.stdout.write(index.dump_to_string())
return
diff --git a/repo2module/requirements.txt b/repo2module/requirements.txt
index dca9a90..e69de29 100644
--- a/repo2module/requirements.txt
+++ b/repo2module/requirements.txt
@@ -1 +0,0 @@
-click
diff --git a/repo2module/tests/test_repo2module.py b/repo2module/tests/test_repo2module.py
index 4e7fe26..21d8130 100644
--- a/repo2module/tests/test_repo2module.py
+++ b/repo2module/tests/test_repo2module.py
@@ -1,9 +1,6 @@
import unittest
import os.path
-
import createrepo_c
-from click.testing import CliRunner
-
import repo2module.cli
from repo2module.cli import parse_repodata, get_source_packages
@@ -31,8 +28,8 @@ def test_get_source_packages():
@unittest.skip("Does not work with the latest libmodulemd (2.12.0)")
def test_repo2module(module_yaml_output):
- runner = CliRunner()
- result = runner.invoke(repo2module.cli.cli, ['-n', 'dummy', '-O', test_repo_dir])
-
- assert result.exit_code == 0
- assert result.output == module_yaml_output
+ # runner = CliRunner()
+ # result = runner.invoke(repo2module.cli.cli, ['-n', 'dummy', '-O', test_repo_dir])
+ # assert result.exit_code == 0
+ # assert result.output == module_yaml_output
+ raise NotImplementedError
diff --git a/tox.ini b/tox.ini
index aea2b29..717b47c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -22,3 +22,7 @@ commands = - flake8 createrepo_mod dir2module modulemd-generate-macros modulemd-
[flake8]
max-line-length = 100
+
+[pytest]
+log_cli = true
+log_cli_level = DEBUG