openshift-eng / elliott

Apache License 2.0
15 stars 28 forks source link

Sort CVEs better #443

Closed joepvd closed 1 year ago

joepvd commented 1 year ago

This should follow the spec: Order by Impact, then order by int.

openshift-bot commented 1 year ago

Build #1

GLOB sdist-make: /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/setup.py
py38 create: /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38
py38 installdeps: -rrequirements-dev.txt
py38 inst: /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/.tmp/package/1/rh-elliott-2.0.14.dev155+g10bd266.zip
py38 installed: aiodns==3.0.0,aiohttp==3.8.3,aiosignal==1.2.0,astroid==2.12.10,async-timeout==4.0.2,attrs==22.1.0,Brotli==1.0.9,cchardet==2.1.7,certifi==2022.9.24,cffi==1.15.1,charset-normalizer==2.1.1,click==8.1.3,coverage==6.5.0,cryptography==38.0.1,decorator==5.1.1,defusedxml==0.7.1,dill==0.3.5.1,distlib==0.3.6,errata-tool @ git+http://github.com/thegreyd/errata-tool.git@bad2cb9c3321a1179f018cd9ddcf1d51d634290b,filelock==3.8.0,flake8==5.0.4,flexmock==0.11.3,frozenlist==1.3.1,future==0.18.2,gssapi==1.8.1,idna==3.4,iniconfig==1.1.1,isort==5.10.1,jira==3.4.1,jsonpath-rw==1.4.0,koji==1.30.0,krb5==0.4.0,lazy-object-proxy==1.7.1,mccabe==0.7.0,mock==4.0.3,multidict==6.0.2,mypy==0.982,mypy-extensions==0.4.3,oauthlib==3.2.1,packaging==21.3,platformdirs==2.5.2,pluggy==1.0.0,ply==3.11,py==1.11.0,pycares==4.2.2,pycodestyle==2.9.1,pycparser==2.21,pyflakes==2.5.0,pygit2==1.10.1,pylint==2.15.3,pyparsing==3.0.9,pyspnego==0.6.0,pytest==7.1.3,python-bugzilla==3.2.0,python-dateutil==2.8.2,PyYAML==6.0,requests==2.28.1,requests-gssapi==1.2.3,requests-kerberos==0.14.0,requests-oauthlib==1.3.1,requests-toolbelt==0.9.1,rh-elliott @ file:///mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/.tmp/package/1/rh-elliott-2.0.14.dev155%2Bg10bd266.zip,ruamel.yaml==0.17.21,ruamel.yaml.clib==0.2.6,semver==2.13.0,setuptools-scm==7.0.5,six==1.16.0,tenacity==8.1.0,tomli==2.0.1,tomlkit==0.11.5,tox==3.26.0,typing_extensions==4.3.0,urllib3==1.26.12,virtualenv==20.16.5,wrapt==1.14.1,yarl==1.8.1
py38 run-test-pre: PYTHONHASHSEED='1073528748'
py38 run-test: commands[0] | coverage run --branch --source elliottlib -m unittest discover -t . -s tests/
...............................................BZ 9 is ignored because its status was MODIFIED at the moment of sweep cutoff (2021-06-30 12:30:00), however its status changed back to ['ASSIGNED'] afterwards
...................No flaw bugs could be found for these trackers: {'OCPBUGS-2'}
...changed 123 from status1 to status2
.123 is already on status1
.changed 123 from status1 to status2
..changed 123 from status1 to status2
.123 is already on status1
.changed 123 from status1 to status2
................../mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38/lib64/python3.8/site-packages/aiohttp/connector.py:767: DeprecationWarning: The object should be created within an async function
  super().__init__(
/mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38/lib64/python3.8/site-packages/aiohttp/connector.py:778: DeprecationWarning: The object should be created within an async function
  resolver = DefaultResolver(loop=self._loop)
........./mnt/workspace/jenkins/working/art-tools_elliott_PR-443/elliottlib/errata_async.py:42: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
  resp.raise_for_status()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
......................................./usr/lib64/python3.8/multiprocessing/pool.py:265: ResourceWarning: unclosed running multiprocessing pool <multiprocessing.pool.ThreadPool state=RUN pool_size=10>
  _warn(f"unclosed running multiprocessing pool {self!r}",
ResourceWarning: Enable tracemalloc to get the object allocation traceback
.................../mnt/workspace/jenkins/working/art-tools_elliott_PR-443/elliottlib/errata_async.py:19: DeprecationWarning: The object should be created within an async function
  self._session = aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=32, force_close=True))
/mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38/lib64/python3.8/site-packages/aiohttp/cookiejar.py:67: DeprecationWarning: The object should be created within an async function
  super().__init__(loop=loop)
/mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38/lib64/python3.8/site-packages/aiohttp/client.py:342: ResourceWarning: Unclosed client session <aiohttp.client.ClientSession object at 0x7f541d26a5b0>
  _warnings.warn(
ResourceWarning: Enable tracemalloc to get the object allocation traceback
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7f541d26a5b0>
..F....
======================================================================
FAIL: test_verify_attached_bugs_cli_fail (tests.test_verify_attached_bugs_cli.VerifyAttachedBugs)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/mnt/workspace/jenkins/working/art-tools_elliott_PR-443/tests/test_verify_attached_bugs_cli.py", line 113, in test_verify_attached_bugs_cli_fail
    self.assertIn('Regression possible: ON_QA bug OCPBUGS-2 is a backport of bug OCPBUGS-3 which has status ON_QA',
AssertionError: 'Regression possible: ON_QA bug OCPBUGS-2 is a backport of bug OCPBUGS-3 which has status ON_QA' not found in 'WARNING: Cannot verify advisory bug sorting. To verify that bugs are attached to the correct release advisories, run with --assembly=<release>\n'

----------------------------------------------------------------------
Ran 166 tests in 0.742s

FAILED (failures=1)
ERROR: InvocationError for command /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38/bin/coverage run --branch --source elliottlib -m unittest discover -t . -s tests/ (exited with code 1)
___________________________________ summary ____________________________________
ERROR:   py38: commands failed
openshift-bot commented 1 year ago

Build #2

GLOB sdist-make: /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/setup.py
py38 recreate: /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38
py38 installdeps: -rrequirements-dev.txt
py38 inst: /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/.tmp/package/1/rh-elliott-2.0.14.dev155+g42b4864.zip
py38 installed: aiodns==3.0.0,aiohttp==3.8.3,aiosignal==1.2.0,astroid==2.12.10,async-timeout==4.0.2,attrs==22.1.0,Brotli==1.0.9,cchardet==2.1.7,certifi==2022.9.24,cffi==1.15.1,charset-normalizer==2.1.1,click==8.1.3,coverage==6.5.0,cryptography==38.0.1,decorator==5.1.1,defusedxml==0.7.1,dill==0.3.5.1,distlib==0.3.6,errata-tool @ git+http://github.com/thegreyd/errata-tool.git@bad2cb9c3321a1179f018cd9ddcf1d51d634290b,filelock==3.8.0,flake8==5.0.4,flexmock==0.11.3,frozenlist==1.3.1,future==0.18.2,gssapi==1.8.1,idna==3.4,iniconfig==1.1.1,isort==5.10.1,jira==3.4.1,jsonpath-rw==1.4.0,koji==1.30.0,krb5==0.4.0,lazy-object-proxy==1.7.1,mccabe==0.7.0,mock==4.0.3,multidict==6.0.2,mypy==0.982,mypy-extensions==0.4.3,oauthlib==3.2.1,packaging==21.3,platformdirs==2.5.2,pluggy==1.0.0,ply==3.11,py==1.11.0,pycares==4.2.2,pycodestyle==2.9.1,pycparser==2.21,pyflakes==2.5.0,pygit2==1.10.1,pylint==2.15.3,pyparsing==3.0.9,pyspnego==0.6.0,pytest==7.1.3,python-bugzilla==3.2.0,python-dateutil==2.8.2,PyYAML==6.0,requests==2.28.1,requests-gssapi==1.2.3,requests-kerberos==0.14.0,requests-oauthlib==1.3.1,requests-toolbelt==0.9.1,rh-elliott @ file:///mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/.tmp/package/1/rh-elliott-2.0.14.dev155%2Bg42b4864.zip,ruamel.yaml==0.17.21,ruamel.yaml.clib==0.2.6,semver==2.13.0,setuptools-scm==7.0.5,six==1.16.0,tenacity==8.1.0,tomli==2.0.1,tomlkit==0.11.5,tox==3.26.0,typing_extensions==4.3.0,urllib3==1.26.12,virtualenv==20.16.5,wrapt==1.14.1,yarl==1.8.1
py38 run-test-pre: PYTHONHASHSEED='3559634560'
py38 run-test: commands[0] | coverage run --branch --source elliottlib -m unittest discover -t . -s tests/
...............................................BZ 9 is ignored because its status was MODIFIED at the moment of sweep cutoff (2021-06-30 12:30:00), however its status changed back to ['ASSIGNED'] afterwards
...................No flaw bugs could be found for these trackers: {'OCPBUGS-2'}
...changed 123 from status1 to status2
.123 is already on status1
.changed 123 from status1 to status2
..changed 123 from status1 to status2
.123 is already on status1
.changed 123 from status1 to status2
................../mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38/lib64/python3.8/site-packages/aiohttp/connector.py:767: DeprecationWarning: The object should be created within an async function
  super().__init__(
/mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38/lib64/python3.8/site-packages/aiohttp/connector.py:778: DeprecationWarning: The object should be created within an async function
  resolver = DefaultResolver(loop=self._loop)
........./mnt/workspace/jenkins/working/art-tools_elliott_PR-443/elliottlib/errata_async.py:42: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
  resp.raise_for_status()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
......................................./usr/lib64/python3.8/multiprocessing/pool.py:265: ResourceWarning: unclosed running multiprocessing pool <multiprocessing.pool.ThreadPool state=RUN pool_size=10>
  _warn(f"unclosed running multiprocessing pool {self!r}",
ResourceWarning: Enable tracemalloc to get the object allocation traceback
.................../mnt/workspace/jenkins/working/art-tools_elliott_PR-443/elliottlib/errata_async.py:19: DeprecationWarning: The object should be created within an async function
  self._session = aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=32, force_close=True))
/mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38/lib64/python3.8/site-packages/aiohttp/cookiejar.py:67: DeprecationWarning: The object should be created within an async function
  super().__init__(loop=loop)
/mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38/lib64/python3.8/site-packages/aiohttp/client.py:342: ResourceWarning: Unclosed client session <aiohttp.client.ClientSession object at 0x7f912ea77580>
  _warnings.warn(
ResourceWarning: Enable tracemalloc to get the object allocation traceback
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x7f912ea77580>
......
----------------------------------------------------------------------
Ran 166 tests in 1.351s

OK
py38 run-test: commands[1] | coverage report
Name                                              Stmts   Miss Branch BrPart  Cover
-----------------------------------------------------------------------------------
elliottlib/__init__.py                                8      2      2      1    70%
elliottlib/assembly.py                               92      9     54      7    89%
elliottlib/assertion.py                              11      0      6      0   100%
elliottlib/brew.py                                  328    188    134      5    36%
elliottlib/bug/__init__.py                            0      0      0      0   100%
elliottlib/build_finder.py                          114     12     74     15    86%
elliottlib/bzutil.py                                733    289    310     16    57%
elliottlib/cincinnati.py                             21     21      4      0     0%
elliottlib/cli/__init__.py                            0      0      0      0   100%
elliottlib/cli/__main__.py                          272    272     72      0     0%
elliottlib/cli/add_metadata_cli.py                   33     33      4      0     0%
elliottlib/cli/advisory_commons_cli.py               90     90     38      0     0%
elliottlib/cli/advisory_drop_cli.py                  21     21      2      0     0%
elliottlib/cli/advisory_images_cli.py                14     14      2      0     0%
elliottlib/cli/advisory_impetus_cli.py               22     22      6      0     0%
elliottlib/cli/attach_bugs_cli.py                    37     37     18      0     0%
elliottlib/cli/attach_cve_flaws_cli.py              131     66     58      9    46%
elliottlib/cli/change_state_cli.py                   44     44     16      0     0%
elliottlib/cli/cli_opts.py                           15      0     17      0   100%
elliottlib/cli/common.py                             48     12      6      1    69%
elliottlib/cli/create_cli.py                         70     70     20      0     0%
elliottlib/cli/create_placeholder_cli.py             40     40     12      0     0%
elliottlib/cli/create_textonly_cli.py                51     51      8      0     0%
elliottlib/cli/find_bugs_blocker_cli.py              43      4     10      3    87%
elliottlib/cli/find_bugs_qe_cli.py                   36      4      6      0    90%
elliottlib/cli/find_bugs_sweep_cli.py               193     30    106     19    80%
elliottlib/cli/find_builds_cli.py                   255    188    169      2    20%
elliottlib/cli/get_golang_versions_cli.py            56     21     32      5    50%
elliottlib/cli/list_cli.py                           17     17      4      0     0%
elliottlib/cli/puddle_advisories_cli.py              37     37     10      0     0%
elliottlib/cli/remove_bugs_cli.py                    50      8     14      6    78%
elliottlib/cli/repair_bugs_cli.py                    61      5     26      6    87%
elliottlib/cli/rhcos_cli.py                          97     97     54      0     0%
elliottlib/cli/rpmdiff_cli.py                       102    102     34      0     0%
elliottlib/cli/tag_builds_cli.py                    128    128     62      0     0%
elliottlib/cli/tarball_sources_cli.py                83     83     26      0     0%
elliottlib/cli/validate_rhsa.py                      42     42     12      0     0%
elliottlib/cli/verify_attached_bugs_cli.py          242     82    153     17    59%
elliottlib/cli/verify_attached_operators_cli.py     120     86     55      0    19%
elliottlib/cli/verify_cvp_cli.py                    162    162     78      0     0%
elliottlib/constants.py                              52      0      0      0   100%
elliottlib/cvp.py                                   216    216    113      0     0%
elliottlib/dotconfig.py                              54     11     30      6    75%
elliottlib/errata.py                                323    208    146      4    32%
elliottlib/errata_async.py                          109      6     38      5    93%
elliottlib/exceptions.py                             12      0      0      0   100%
elliottlib/exectools.py                              84     13     24      3    83%
elliottlib/gitdata.py                               171    137     76      0    14%
elliottlib/imagecfg.py                               21      2      0      0    90%
elliottlib/logutil.py                                 9      1      2      1    82%
elliottlib/metadata.py                              154     43     76     18    67%
elliottlib/model.py                                 105     22     30      2    79%
elliottlib/openshiftclient.py                        34     34      8      0     0%
elliottlib/pushd.py                                  21      0      2      0   100%
elliottlib/resultsdb.py                              28     28      4      0     0%
elliottlib/rhcos.py                                  51     51     12      0     0%
elliottlib/rpm_utils.py                              30     14     16      5    46%
elliottlib/rpmcfg.py                                  5      2      0      0    60%
elliottlib/rpmdiff.py                                31      0      0      0   100%
elliottlib/runtime.py                               277    201    106      2    22%
elliottlib/tarball_sources.py                        90     61     34      0    30%
elliottlib/util.py                                  303    168    112      9    41%
-----------------------------------------------------------------------------------
TOTAL                                              6099   3607   2543    167    38%
py38 run-test: commands[2] | flake8
___________________________________ summary ____________________________________
  py38: commands succeeded
  congratulations :)
openshift-bot commented 1 year ago

Build #3

GLOB sdist-make: /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/setup.py
py38 recreate: /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/py38
py38 installdeps: -rrequirements-dev.txt
py38 inst: /mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/.tmp/package/1/rh-elliott-2.0.14.dev158+gd8b930f.zip
py38 installed: aiodns==3.0.0,aiohttp==3.8.3,aiosignal==1.2.0,astroid==2.12.10,async-timeout==4.0.2,attrs==22.1.0,Brotli==1.0.9,cchardet==2.1.7,certifi==2022.9.24,cffi==1.15.1,charset-normalizer==2.1.1,click==8.1.3,coverage==6.5.0,cryptography==38.0.1,decorator==5.1.1,defusedxml==0.7.1,dill==0.3.5.1,distlib==0.3.6,errata-tool @ git+http://github.com/thegreyd/errata-tool.git@bad2cb9c3321a1179f018cd9ddcf1d51d634290b,filelock==3.8.0,flake8==5.0.4,flexmock==0.11.3,frozenlist==1.3.1,future==0.18.2,gssapi==1.8.1,idna==3.4,iniconfig==1.1.1,isort==5.10.1,jira==3.4.1,jsonpath-rw==1.4.0,koji==1.30.0,krb5==0.4.0,lazy-object-proxy==1.7.1,mccabe==0.7.0,mock==4.0.3,multidict==6.0.2,mypy==0.982,mypy-extensions==0.4.3,oauthlib==3.2.1,packaging==21.3,platformdirs==2.5.2,pluggy==1.0.0,ply==3.11,py==1.11.0,pycares==4.2.2,pycodestyle==2.9.1,pycparser==2.21,pyflakes==2.5.0,pygit2==1.10.1,pylint==2.15.3,pyparsing==3.0.9,pyspnego==0.6.0,pytest==7.1.3,python-bugzilla==3.2.0,python-dateutil==2.8.2,PyYAML==6.0,requests==2.28.1,requests-gssapi==1.2.3,requests-kerberos==0.14.0,requests-oauthlib==1.3.1,requests-toolbelt==0.9.1,rh-elliott @ file:///mnt/workspace/jenkins/working/art-tools_elliott_PR-443/.tox/.tmp/package/1/rh-elliott-2.0.14.dev158%2Bgd8b930f.zip,ruamel.yaml==0.17.21,ruamel.yaml.clib==0.2.6,semver==2.13.0,setuptools-scm==7.0.5,six==1.16.0,tenacity==8.1.0,tomli==2.0.1,tomlkit==0.11.5,tox==3.26.0,typing_extensions==4.3.0,urllib3==1.26.12,virtualenv==20.16.5,wrapt==1.14.1,yarl==1.8.1
py38 run-test-pre: PYTHONHASHSEED='136880074'
py38 run-test: commands[0] | coverage run --branch --source elliottlib -m unittest discover -t . -s tests/
...............................................BZ 9 is ignored because its status was MODIFIED at the moment of sweep cutoff (2021-06-30 12:30:00), however its status changed back to ['ASSIGNED'] afterwards
...................No flaw bugs could be found for these trackers: {'OCPBUGS-2'}
...changed 123 from status1 to status2
.123 is already on status1
.changed 123 from status1 to status2
..changed 123 from status1 to status2
.123 is already on status1
.changed 123 from status1 to status2
..........................................................................................
----------------------------------------------------------------------
Ran 165 tests in 0.758s

OK
py38 run-test: commands[1] | coverage report
Name                                              Stmts   Miss Branch BrPart  Cover
-----------------------------------------------------------------------------------
elliottlib/__init__.py                                8      2      2      1    70%
elliottlib/assembly.py                               92      9     54      7    89%
elliottlib/assertion.py                              11      0      6      0   100%
elliottlib/brew.py                                  328    188    134      5    36%
elliottlib/bug/__init__.py                            0      0      0      0   100%
elliottlib/build_finder.py                          114     12     74     15    86%
elliottlib/bzutil.py                                733    289    310     16    57%
elliottlib/cincinnati.py                             21     21      4      0     0%
elliottlib/cli/__init__.py                            0      0      0      0   100%
elliottlib/cli/__main__.py                          272    272     72      0     0%
elliottlib/cli/add_metadata_cli.py                   33     33      4      0     0%
elliottlib/cli/advisory_commons_cli.py               90     90     38      0     0%
elliottlib/cli/advisory_drop_cli.py                  21     21      2      0     0%
elliottlib/cli/advisory_images_cli.py                14     14      2      0     0%
elliottlib/cli/advisory_impetus_cli.py               22     22      6      0     0%
elliottlib/cli/attach_bugs_cli.py                    37     37     18      0     0%
elliottlib/cli/attach_cve_flaws_cli.py              131     66     58      9    46%
elliottlib/cli/change_state_cli.py                   44     44     16      0     0%
elliottlib/cli/cli_opts.py                           15      0     17      0   100%
elliottlib/cli/common.py                             48     12      6      1    69%
elliottlib/cli/create_cli.py                         70     70     20      0     0%
elliottlib/cli/create_placeholder_cli.py             40     40     12      0     0%
elliottlib/cli/create_textonly_cli.py                51     51      8      0     0%
elliottlib/cli/find_bugs_blocker_cli.py              43      4     10      3    87%
elliottlib/cli/find_bugs_qe_cli.py                   36      4      6      0    90%
elliottlib/cli/find_bugs_sweep_cli.py               193     30    106     19    80%
elliottlib/cli/find_builds_cli.py                   255    188    169      2    20%
elliottlib/cli/get_golang_versions_cli.py            56     21     32      5    50%
elliottlib/cli/list_cli.py                           17     17      4      0     0%
elliottlib/cli/puddle_advisories_cli.py              37     37     10      0     0%
elliottlib/cli/remove_bugs_cli.py                    50      8     14      6    78%
elliottlib/cli/repair_bugs_cli.py                    61      5     26      6    87%
elliottlib/cli/rhcos_cli.py                          97     97     54      0     0%
elliottlib/cli/rpmdiff_cli.py                       102    102     34      0     0%
elliottlib/cli/tag_builds_cli.py                    128    128     62      0     0%
elliottlib/cli/tarball_sources_cli.py                83     83     26      0     0%
elliottlib/cli/validate_rhsa.py                      42     42     12      0     0%
elliottlib/cli/verify_attached_bugs_cli.py          237     82    153     17    58%
elliottlib/cli/verify_attached_operators_cli.py     120     86     55      0    19%
elliottlib/cli/verify_cvp_cli.py                    162    162     78      0     0%
elliottlib/constants.py                              52      0      0      0   100%
elliottlib/cvp.py                                   216    216    113      0     0%
elliottlib/dotconfig.py                              54     11     30      6    75%
elliottlib/errata.py                                323    208    146      4    32%
elliottlib/errata_async.py                          107      6     38      6    92%
elliottlib/exceptions.py                             12      0      0      0   100%
elliottlib/exectools.py                              84     13     24      3    83%
elliottlib/gitdata.py                               171    137     76      0    14%
elliottlib/imagecfg.py                               21      2      0      0    90%
elliottlib/logutil.py                                 9      1      2      1    82%
elliottlib/metadata.py                              154     43     76     18    67%
elliottlib/model.py                                 105     22     30      2    79%
elliottlib/openshiftclient.py                        34     34      8      0     0%
elliottlib/pushd.py                                  21      0      2      0   100%
elliottlib/resultsdb.py                              28     28      4      0     0%
elliottlib/rhcos.py                                  51     51     12      0     0%
elliottlib/rpm_utils.py                              30     14     16      5    46%
elliottlib/rpmcfg.py                                  5      2      0      0    60%
elliottlib/rpmdiff.py                                31      0      0      0   100%
elliottlib/runtime.py                               277    201    106      2    22%
elliottlib/tarball_sources.py                        90     61     34      0    30%
elliottlib/util.py                                  303    168    112      9    41%
-----------------------------------------------------------------------------------
TOTAL                                              6092   3607   2543    168    38%
py38 run-test: commands[2] | flake8
___________________________________ summary ____________________________________
  py38: commands succeeded
  congratulations :)