From 1c3b406fde6aa936411da35e5696fdce3130c90d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kone=C4=8Dn=C3=BD?= Date: Wed, 27 Apr 2022 17:39:39 +0200 Subject: [PATCH] Move fedora messaging schema to separate repository MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fedora messaging schema for the-new-hotness is now at https://github.com/fedora-infra/the-new-hotness-messages Signed-off-by: Michal Konečný --- .coveragerc | 2 - docs/dev-guide.rst | 26 +- hotness_schema/LICENSE | 339 ------- hotness_schema/README.rst | 8 - hotness_schema/get_fixture_data.py | 52 - hotness_schema/hotness_schema/__init__.py | 18 - hotness_schema/hotness_schema/messages.py | 188 ---- .../hotness_schema/tests/__init__.py | 19 - ...aproject.prod.hotness.update.bug.file.json | 886 ------------------ ...edoraproject.prod.hotness.update.drop.json | 727 -------------- .../hotness_schema/tests/test_messages.py | 260 ----- .../hotness_schema/tests/test_schema.py | 44 - hotness_schema/setup.cfg | 2 - hotness_schema/setup.py | 60 -- news/PR447.dev | 1 + requirements.txt | 1 + tox.ini | 7 +- 17 files changed, 16 insertions(+), 2624 deletions(-) delete mode 100644 hotness_schema/LICENSE delete mode 100644 hotness_schema/README.rst delete mode 100644 hotness_schema/get_fixture_data.py delete mode 100644 hotness_schema/hotness_schema/__init__.py delete mode 100644 hotness_schema/hotness_schema/messages.py delete mode 100644 hotness_schema/hotness_schema/tests/__init__.py delete mode 100644 hotness_schema/hotness_schema/tests/fixtures/org.fedoraproject.prod.hotness.update.bug.file.json delete mode 100644 hotness_schema/hotness_schema/tests/fixtures/org.fedoraproject.prod.hotness.update.drop.json delete mode 100644 hotness_schema/hotness_schema/tests/test_messages.py delete mode 100644 hotness_schema/hotness_schema/tests/test_schema.py delete mode 100644 hotness_schema/setup.cfg delete mode 100644 hotness_schema/setup.py create mode 100644 news/PR447.dev diff --git a/.coveragerc b/.coveragerc index da7ba85..850b115 100644 --- a/.coveragerc +++ b/.coveragerc @@ -2,7 +2,6 @@ branch = True include = hotness/* - hotness_schema/hotness_schema/* [report] fail_under = 50 @@ -12,4 +11,3 @@ exclude_lines = if __name__ == .__main__.: omit = hotness/tests/* - hotness_schema/hotness_schema/tests/* diff --git a/docs/dev-guide.rst b/docs/dev-guide.rst index eef77e8..5ac3951 100644 --- a/docs/dev-guide.rst +++ b/docs/dev-guide.rst @@ -231,15 +231,13 @@ If you are a maintainer and wish to make a release, follow these steps: 1. Change the version in ``hotness.__init__.__version__``. This is used to set the version in the documentation project and the setup.py file. -2. (Optional) Update ``version`` in ``hotness_schema/setup.py`` script. - -3. Get authors of commits by ``python get-authors.py``. +2. Get authors of commits by ``python get-authors.py``. .. note:: This script must be executed in ``news`` folder, because it creates files in current working directory. -4. Generate the changelog by running ``towncrier``. +3. Generate the changelog by running ``towncrier``. .. note:: If you added any news fragment in the previous step, you might see ``towncrier`` @@ -247,29 +245,27 @@ If you are a maintainer and wish to make a release, follow these steps: Just ignore this and remove all of them manually; release notes will be generated anyway. -5. Remove every remaining news fragment from ``news`` folder. - -6. Commit your changes with message *the-new-hotness *. +4. Remove every remaining news fragment from ``news`` folder. -7. Tag a release with ``git tag -s ``. +5. Commit your changes with message *the-new-hotness *. -8. Don't forget to ``git push --tags``. +6. Tag a release with ``git tag -s ``. -9. Build the Python packages with ``python setup.py sdist bdist_wheel``. +7. Don't forget to ``git push --tags``. -10. Upload the packages with ``twine upload dist/``. +8. Build the Python packages with ``python setup.py sdist bdist_wheel``. -11. (Optional) Repeat steps 9 and 10 in ``hotness_schema`` folder. +9. Upload the packages with ``twine upload dist/``. -12. Create new release on `GitHub releases `_. +11. Create new release on `GitHub releases `_. -13. Deploy the new version in staging:: +12. Deploy the new version in staging:: $ git checkout staging $ git rebase master $ git push origin staging -14. When successfully tested in staging deploy to production:: +13. When successfully tested in staging deploy to production:: $ git checkout production $ git rebase staging diff --git a/hotness_schema/LICENSE b/hotness_schema/LICENSE deleted file mode 100644 index d159169..0000000 --- a/hotness_schema/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/hotness_schema/README.rst b/hotness_schema/README.rst deleted file mode 100644 index c1a98f3..0000000 --- a/hotness_schema/README.rst +++ /dev/null @@ -1,8 +0,0 @@ -the-new-hotness Message Schema -============================== - -JSON schema definitions for messages published by the-new-hotness. - -See http://json-schema.org/ for documentation on the schema format. See -https://fedora-messaging.readthedocs.io/en/latest/messages.html for -documentation on fedora-messaging. diff --git a/hotness_schema/get_fixture_data.py b/hotness_schema/get_fixture_data.py deleted file mode 100644 index 5c2e5c6..0000000 --- a/hotness_schema/get_fixture_data.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Generate fixture data for the tests. -The package and the development dependencies must be installed. -""" - -import os -import json - -from fedora_messaging import message -import requests -import click - -from hotness_schema.tests import FIXTURES_DIR - - -@click.command() -@click.option("--timeout", default=300, help="Timeout for datagrepper (seconds)") -def get_fixtures(timeout): - message.load_message_classes() - - for message_class, name in message._class_to_schema_name.items(): - if not message_class.topic or not name.startswith("hotness"): - print("Skipping {}".format(message_class)) - continue - - try: - resp = requests.get( - "https://apps.fedoraproject.org/datagrepper/raw", - params={ - "topic": message_class.topic, - "rows_per_page": 5, - "delta": 604800, - }, - timeout=timeout, - ) - except requests.exceptions.Timeout: - print("Datagrepper timed out, maybe there aren't any recent results") - continue - if resp.status_code != 200: - print( - "Failed to communicate with datagrepper ({})".format(resp.status_code) - ) - continue - - path = os.path.join(FIXTURES_DIR, message_class.topic + ".json") - messages = [msg["msg"] for msg in resp.json()["raw_messages"]] - with open(path, "w") as fp: - json.dump(messages, fp, sort_keys=True, indent=4) - - -if __name__ == "__main__": - get_fixtures() diff --git a/hotness_schema/hotness_schema/__init__.py b/hotness_schema/hotness_schema/__init__.py deleted file mode 100644 index db18ac8..0000000 --- a/hotness_schema/hotness_schema/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (C) 2018 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - - -from .messages import UpdateDrop, UpdateBugFile # noqa: F401 diff --git a/hotness_schema/hotness_schema/messages.py b/hotness_schema/hotness_schema/messages.py deleted file mode 100644 index e5b7a55..0000000 --- a/hotness_schema/hotness_schema/messages.py +++ /dev/null @@ -1,188 +0,0 @@ -# Copyright (C) 2018 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -"""The schema for the-new-hotness messages.""" - -from fedora_messaging import message - - -class UpdateDrop(message.Message): - """ - Message sent by the-new-hotness to "hotness.update.drop" topic when update - is dropped. - """ - - topic = "org.fedoraproject.prod.hotness.update.drop" - body_schema = { - "id": "https://fedoraproject.org/jsonschema/hotness.update.drop.json", - "$schema": "http://json-schema.org/draft-04/schema#", - "description": "Schema for the-new-hotness", - "type": "object", - "required": ["reason", "trigger"], - "properties": { - "reason": {"type": "string"}, - "trigger": { - "type": "object", - "properties": {"msg": {"type": "object"}, "topic": {"type": "string"}}, - "required": ["msg", "topic"], - }, - }, - } - - @property - def summary(self): - """ - Return a short summary of the message. - - Returns: - (str): Short description of the message. - """ - if self.reason == "anitya": - return ( - "the-new-hotness saw an update for '{}', ".format( - ", ".join(self.packages) - ) - + "but release-monitoring.org doesn't know what that project is called " - + "in Fedora land" - ) - elif self.reason == "rawhide": - return ( - "the-new-hotness saw an update for '{}', ".format( - ", ".join(self.packages) - ) - + "but no rawhide version of the package could be found yet" - ) - elif self.reason == "pkgdb": - return ( - "the-new-hotness saw an update for '{}', ".format( - ", ".join(self.packages) - ) - + "but pkgdb says the maintainers are not interested in bugs being filed" - ) - elif self.reason == "bugzilla": - return ( - "the-new-hotness saw an update for '{}', ".format( - ", ".join(self.packages) - ) - + "but the bugzilla issue couldn't be updated" - ) - else: - return "the-new-hotness saw an update for '{}', ".format( - ", ".join(self.packages) - ) + "but it got dropped for reason: '{}'".format(self.reason) - - @property - def packages(self): - """ - List of packages affected by the action that generated this message. - In this case we only return list with one item. - - Returns: - list(str): A list of affected package names or empty list. - """ - if self.reason == "anitya": - # Return name of the project instead of list of Fedora packages - # if we don't know how the package is called in Fedora land - original = self.body["trigger"]["msg"] - project_name = "" - if "project" in original: - project_name = original["project"]["name"] - - if "message" in original and "project" in original["message"]: - project_name = original["message"]["project"]["name"] - - return [project_name] - - if "package_listing" in self.body["trigger"]["msg"]: - original = self.body["trigger"]["msg"] - return [original["package_listing"]["package"]["name"]] - - if "buildsys.build" in self.body["trigger"]["topic"]: - return [self.body["trigger"]["msg"]["name"]] - - if "package" in self.body["trigger"]["msg"]: - original = self.body["trigger"]["msg"] - return [original["package"]["name"]] - - return [] - - @property - def reason(self): - """ - Return a reason for this drop. - - Returns: - (str): Reason for drop. - """ - return self.body["reason"] - - -class UpdateBugFile(message.Message): - """ - Message sent by the-new-hotness to "hotness.update.bug.file" topic when - bugzilla issue is filled. - """ - - topic = "org.fedoraproject.prod.hotness.update.bug.file" - body_schema = { - "id": "https://fedoraproject.org/jsonschema/hotness.update.bug.file.json", - "$schema": "http://json-schema.org/draft-04/schema#", - "description": "Schema for the-new-hotness", - "type": "object", - "required": ["bug", "trigger"], - "properties": { - "bug": { - "type": "object", - "required": ["bug_id"], - "properties": {"bug_id": {"type": "number"}}, - }, - "trigger": { - "type": "object", - "properties": {"msg": {"type": "object"}, "topic": {"type": "string"}}, - "required": ["msg", "topic"], - }, - "package": {"type": "string"}, - }, - } - - @property - def summary(self): - """ - Return a short summary of the message. - - Returns: - (str): Short description of the message. - """ - return "the-new-hotness filed a bug on '{}'".format(", ".join(self.packages)) - - @property - def packages(self): - """ - List of packages affected by the action that generated this message. - - Returns: - list(str): A list of affected package names. - """ - original = self.body["trigger"]["msg"] - if self.body["trigger"]["topic"].endswith(".project.map.new"): - packages = [original["message"]["new"]] - else: - packages = [ - pkg["package_name"] - for pkg in original["message"]["packages"] - if pkg["distro"] == "Fedora" - ] - - return packages diff --git a/hotness_schema/hotness_schema/tests/__init__.py b/hotness_schema/hotness_schema/tests/__init__.py deleted file mode 100644 index eb45b0c..0000000 --- a/hotness_schema/hotness_schema/tests/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (C) 2018 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -import os - -FIXTURES_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "fixtures/")) diff --git a/hotness_schema/hotness_schema/tests/fixtures/org.fedoraproject.prod.hotness.update.bug.file.json b/hotness_schema/hotness_schema/tests/fixtures/org.fedoraproject.prod.hotness.update.bug.file.json deleted file mode 100644 index 88bbd79..0000000 --- a/hotness_schema/hotness_schema/tests/fixtures/org.fedoraproject.prod.hotness.update.bug.file.json +++ /dev/null @@ -1,886 +0,0 @@ -[ - { - "bug": { - "bug_id": 1444479 - }, - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 1, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "pypi", - "odd_change": false, - "old_version": "1.2.2", - "packages": [ - { - "distro": "Fedora", - "package_name": "python-ripe-atlas-sagan" - } - ], - "project": { - "backend": "PyPI", - "created_on": 1464971855.0, - "ecosystem": "pypi", - "homepage": "https://pypi.python.org/pypi/ripe.atlas.sagan", - "id": 10804, - "name": "ripe.atlas.sagan", - "regex": null, - "updated_on": 1548345952.0, - "version": "1.3.0", - "version_url": null, - "versions": [ - "1.3.0", - "1.2.2", - "1.2.1", - "1.2", - "1.1.11", - "1.1.10", - "1.1.8", - "1.1.7", - "1.1.6", - "1.1.5", - "1.1.4", - "1.1.3", - "1.1.1", - "1.1.0", - "1.0.0", - "0.8.2", - "0.8.1", - "0.8.0", - "0.7.1", - "0.7", - "0.6.3", - "0.6.2", - "0.6.1", - "0.6.0", - "0.5", - "0.4", - "0.3", - "0.2.8", - "0.2.7", - "0.2.6", - "0.2.5", - "0.2.4", - "0.2.3", - "0.2.2", - "0.2.1", - "0.2.0", - "0.1.15", - "0.1.14", - "0.1.13", - "0.1.12", - "0.1.11", - "0.1.9", - "0.1.8", - "0.1.7", - "0.1.6", - "0.1.5", - "0.1.4", - "0.1.3", - "0.1.1", - "0.1" - ] - }, - "upstream_version": "1.3.0", - "versions": [ - "1.3.0", - "1.2.2", - "1.2.1", - "1.2", - "1.1.11", - "1.1.10", - "1.1.8", - "1.1.7", - "1.1.6", - "1.1.5", - "1.1.4", - "1.1.3", - "1.1.1", - "1.1.0", - "1.0.0", - "0.8.2", - "0.8.1", - "0.8.0", - "0.7.1", - "0.7", - "0.6.3", - "0.6.2", - "0.6.1", - "0.6.0", - "0.5", - "0.4", - "0.3", - "0.2.8", - "0.2.7", - "0.2.6", - "0.2.5", - "0.2.4", - "0.2.3", - "0.2.2", - "0.2.1", - "0.2.0", - "0.1.15", - "0.1.14", - "0.1.13", - "0.1.12", - "0.1.11", - "0.1.9", - "0.1.8", - "0.1.7", - "0.1.6", - "0.1.5", - "0.1.4", - "0.1.3", - "0.1.1", - "0.1" - ] - }, - "project": { - "backend": "PyPI", - "created_on": 1464971855.0, - "ecosystem": "pypi", - "homepage": "https://pypi.python.org/pypi/ripe.atlas.sagan", - "id": 10804, - "name": "ripe.atlas.sagan", - "regex": null, - "updated_on": 1548345952.0, - "version": "1.3.0", - "version_url": null, - "versions": [ - "1.3.0", - "1.2.2", - "1.2.1", - "1.2", - "1.1.11", - "1.1.10", - "1.1.8", - "1.1.7", - "1.1.6", - "1.1.5", - "1.1.4", - "1.1.3", - "1.1.1", - "1.1.0", - "1.0.0", - "0.8.2", - "0.8.1", - "0.8.0", - "0.7.1", - "0.7", - "0.6.3", - "0.6.2", - "0.6.1", - "0.6.0", - "0.5", - "0.4", - "0.3", - "0.2.8", - "0.2.7", - "0.2.6", - "0.2.5", - "0.2.4", - "0.2.3", - "0.2.2", - "0.2.1", - "0.2.0", - "0.1.15", - "0.1.14", - "0.1.13", - "0.1.12", - "0.1.11", - "0.1.9", - "0.1.8", - "0.1.7", - "0.1.6", - "0.1.5", - "0.1.4", - "0.1.3", - "0.1.1", - "0.1" - ] - } - }, - "msg_id": "2019-08bf6a92-5616-49fa-84e9-9626a16aa997", - "signature": "CTvQrNada+VUSo3tEizTQuIOsgS+SbkKb0akaUtJeRtT22Kq7o6hb8k+cKsP4wq0SOm49uW9pZ2n\ntU6dOeWy0I0f4ek6rvYGa9rfTSYOuessn+Ect+D8wpwivm4s3QaDMm3aWhKqAP123l5gb6Jnkhug\n8cwtj82Phg7oU4X8Sth4TIjOAjYQtXQofKPhaUclzZw5XLUAoT9ZwQmcR1uDZvdhRNbSCqV//u2J\nBdFCWhulZZteZNL7/S/FVeazaXZKx8dtJ7lMmUErcwAagrHuZ9C6013PcsjcH3VRJ3/xiTi1fV2Y\nWYmVHEhtMF0Ydc9CNzIZv7mDa129WWR9un1DnA==\n", - "timestamp": 1548345953, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - }, - { - "bug": { - "bug_id": 1667929 - }, - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 1, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "https://powerdns.com", - "odd_change": false, - "old_version": "4.1.9", - "packages": [ - { - "distro": "Fedora", - "package_name": "pdns-recursor" - }, - { - "distro": "Alpine", - "package_name": "pdns-recursor" - } - ], - "project": { - "backend": "folder", - "created_on": 1452374817.0, - "ecosystem": "https://powerdns.com", - "homepage": "https://powerdns.com", - "id": 8753, - "name": "pdns-recursor", - "regex": "", - "updated_on": 1548345755.0, - "version": "4.1.10", - "version_url": "https://downloads.powerdns.com/releases/", - "versions": [ - "4.1.10", - "4.1.9", - "4.1.8", - "4.1.7", - "4.1.6", - "4.1.5", - "4.1.4", - "4.1.3", - "4.1.2", - "4.1.1", - "4.1.0", - "4.0.9", - "4.0.8", - "4.0.7", - "4.0.6", - "4.0.5", - "4.0.4", - "4.0.3", - "4.0.2", - "4.0.1", - "4.0.0", - "3.7.4", - "3.7.3", - "3.7.2", - "3.7.1", - "3.6.4", - "3.6.3", - "3.6.2", - "3.6.1", - "3.6.0", - "3.5.3", - "3.5.2", - "3.5.1", - "3.5", - "3.3", - "3.2", - "3.1.7.2", - "3.1.7.1", - "3.1.7", - "3.1.6", - "3.1.5", - "3.1.4", - "3.1.3", - "3.1.2", - "3.1.1", - "3.1", - "3.0.1", - "3.0" - ] - }, - "upstream_version": "4.1.10", - "versions": [ - "4.1.10", - "4.1.9", - "4.1.8", - "4.1.7", - "4.1.6", - "4.1.5", - "4.1.4", - "4.1.3", - "4.1.2", - "4.1.1", - "4.1.0", - "4.0.9", - "4.0.8", - "4.0.7", - "4.0.6", - "4.0.5", - "4.0.4", - "4.0.3", - "4.0.2", - "4.0.1", - "4.0.0", - "3.7.4", - "3.7.3", - "3.7.2", - "3.7.1", - "3.6.4", - "3.6.3", - "3.6.2", - "3.6.1", - "3.6.0", - "3.5.3", - "3.5.2", - "3.5.1", - "3.5", - "3.3", - "3.2", - "3.1.7.2", - "3.1.7.1", - "3.1.7", - "3.1.6", - "3.1.5", - "3.1.4", - "3.1.3", - "3.1.2", - "3.1.1", - "3.1", - "3.0.1", - "3.0" - ] - }, - "project": { - "backend": "folder", - "created_on": 1452374817.0, - "ecosystem": "https://powerdns.com", - "homepage": "https://powerdns.com", - "id": 8753, - "name": "pdns-recursor", - "regex": "", - "updated_on": 1548345755.0, - "version": "4.1.10", - "version_url": "https://downloads.powerdns.com/releases/", - "versions": [ - "4.1.10", - "4.1.9", - "4.1.8", - "4.1.7", - "4.1.6", - "4.1.5", - "4.1.4", - "4.1.3", - "4.1.2", - "4.1.1", - "4.1.0", - "4.0.9", - "4.0.8", - "4.0.7", - "4.0.6", - "4.0.5", - "4.0.4", - "4.0.3", - "4.0.2", - "4.0.1", - "4.0.0", - "3.7.4", - "3.7.3", - "3.7.2", - "3.7.1", - "3.6.4", - "3.6.3", - "3.6.2", - "3.6.1", - "3.6.0", - "3.5.3", - "3.5.2", - "3.5.1", - "3.5", - "3.3", - "3.2", - "3.1.7.2", - "3.1.7.1", - "3.1.7", - "3.1.6", - "3.1.5", - "3.1.4", - "3.1.3", - "3.1.2", - "3.1.1", - "3.1", - "3.0.1", - "3.0" - ] - } - }, - "msg_id": "2019-9bc30ffc-27ca-4ec9-a2b1-ed3bad296c85", - "signature": "MfwSQpAKtsGZQzhnHzFtw0yUJy/7euAIjZe0K6uRUHJ+uw2k0eUajcZI+mnLyzFVu31T4pM4cerY\nrcSdCKjTjipAb27oTTD788V5xl7tu9ZnoNUSil3dUJYsbjyXKDXU0Oas8kiWh7VKJz+BanWVRdsa\nkHSi30ch/VH8GbuLnvypvXNiTNTCHIIppR5pfdjJMjlY2NpcSLyQrtarewIwQceYSQdqG/Q1YrUf\n0bgd7F6RfBdRTH1j/mE3OG0iBGMxOYojGZTY97MBN7xOd0IXY8A+cGtpP5kqi6cj8Sz+DfqBUX4y\ncqH/E82M5jEPqt8/suTc6rDgeGXijVd6z0P1ew==\n", - "timestamp": 1548345755, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - }, - { - "bug": { - "bug_id": 1669193 - }, - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 2, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "npm", - "odd_change": false, - "old_version": "1.0.0", - "packages": [ - { - "distro": "Fedora", - "package_name": "nodejs-tweetnacl" - } - ], - "project": { - "backend": "npmjs", - "created_on": 1537889022.0, - "ecosystem": "npm", - "homepage": "https://www.npmjs.com/package/tweetnacl", - "id": 17884, - "name": "tweetnacl", - "regex": null, - "updated_on": 1548342588.0, - "version": "1.0.1", - "version_url": null, - "versions": [ - "1.0.1", - "1.0.0", - "1.0.0-rc.1", - "0.14.5", - "0.14.4", - "0.14.3", - "0.14.2", - "0.14.1", - "0.14.0", - "0.13.3", - "0.13.2", - "0.13.1", - "0.13.0", - "0.12.2", - "0.12.1", - "0.12.0", - "0.11.2", - "0.11.1", - "0.11.0", - "0.10.1", - "0.10.0", - "0.9.2", - "0.9.1" - ] - }, - "upstream_version": "1.0.1", - "versions": [ - "1.0.1", - "1.0.0", - "1.0.0-rc.1", - "0.14.5", - "0.14.4", - "0.14.3", - "0.14.2", - "0.14.1", - "0.14.0", - "0.13.3", - "0.13.2", - "0.13.1", - "0.13.0", - "0.12.2", - "0.12.1", - "0.12.0", - "0.11.2", - "0.11.1", - "0.11.0", - "0.10.1", - "0.10.0", - "0.9.2", - "0.9.1" - ] - }, - "project": { - "backend": "npmjs", - "created_on": 1537889022.0, - "ecosystem": "npm", - "homepage": "https://www.npmjs.com/package/tweetnacl", - "id": 17884, - "name": "tweetnacl", - "regex": null, - "updated_on": 1548342588.0, - "version": "1.0.1", - "version_url": null, - "versions": [ - "1.0.1", - "1.0.0", - "1.0.0-rc.1", - "0.14.5", - "0.14.4", - "0.14.3", - "0.14.2", - "0.14.1", - "0.14.0", - "0.13.3", - "0.13.2", - "0.13.1", - "0.13.0", - "0.12.2", - "0.12.1", - "0.12.0", - "0.11.2", - "0.11.1", - "0.11.0", - "0.10.1", - "0.10.0", - "0.9.2", - "0.9.1" - ] - } - }, - "msg_id": "2019-c46a9d68-4c3c-4a4f-9044-daf70cb4ce7c", - "signature": "f/VGEYl/iMYKjKWCJAl3jvCxqyCMpa6MbowR01mKDx2Nep6fpYC30LrVwBG9b+x81HhHs2DPt+Hf\n61ZbobtB48xl0WpsFSxhGFoK3mo04sZK61S2P9TOq3asAEtMYZnzCgs5WT9118YC8fshJQVgCpgJ\nVxHk+xIbd+dnluKLcI7gz7wPcUKVDcwqZTGcj5Jqu1z1gLzpn4FhCQDxSTFz4BzhmqerP0H48Qj6\n2WbKZ9GIe2oBnFh8mjz6IWWilrx5DEGB+seKgF/5b6l+yu9Rj3XLf6Arn3XYWO1w7JFqGZ1/z6kF\nNF69PyhNFIk7bcMIW/Q/z2pvhgvnwOeurIoVmA==\n", - "timestamp": 1548342588, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - }, - { - "bug": { - "bug_id": 1419523 - }, - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 1, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "http://www.eclemma.org/jacoco/", - "odd_change": false, - "old_version": "0.8.2", - "packages": [ - { - "distro": "Fedora", - "package_name": "jacoco" - } - ], - "project": { - "backend": "custom", - "created_on": 1412174991.0, - "ecosystem": "http://www.eclemma.org/jacoco/", - "homepage": "http://www.eclemma.org/jacoco/", - "id": 1411, - "name": "jacoco", - "regex": null, - "updated_on": 1548342318.0, - "version": "0.8.3", - "version_url": "http://www.eclemma.org/jacoco/", - "versions": [ - "0.8.3", - "0.8.2", - "0.8.1", - "0.8.0", - "0.7.9", - "0.7.8", - "0.7.7.201606060606", - "0.7.6.201602180812", - "0.7.5.201505241946", - "0.7.4.201502262128", - "0.7.3.201502191951", - "0.7.2.201409121644", - "0.7.1.201405082137", - "0.7.0.201403182114", - "0.6.5.201403032054", - "0.6.4.201312101107", - "0.6.3.201306030806", - "0.6.2.201302030002", - "0.6.1.201212231917", - "0.6.0.201210061924", - "0.5.10.201208310627", - "0.5.9.201207300726", - "0.5.8.201207111220", - "0.5.7.201204190339", - "0.5.6.201201232323", - "0.5.5.201112152213", - "0.5.4.201111111111", - "0.5.3.201107060350", - "0.5.2.20110519202509", - "0.5.1.20110321224001", - "0.5.0.20110119215959", - "0.4.1.20101007204400", - "0.4.0.20100604151516", - "0.3.3.20100419191644", - "0.3.2.20100401180959", - "0.3.1.20100209212101", - "0.3.0.20100202223831", - "0.2.0.20100108061321", - "0.1.0.20091028042923" - ] - }, - "upstream_version": "0.8.3", - "versions": [ - "0.8.3", - "0.8.2", - "0.8.1", - "0.8.0", - "0.7.9", - "0.7.8", - "0.7.7.201606060606", - "0.7.6.201602180812", - "0.7.5.201505241946", - "0.7.4.201502262128", - "0.7.3.201502191951", - "0.7.2.201409121644", - "0.7.1.201405082137", - "0.7.0.201403182114", - "0.6.5.201403032054", - "0.6.4.201312101107", - "0.6.3.201306030806", - "0.6.2.201302030002", - "0.6.1.201212231917", - "0.6.0.201210061924", - "0.5.10.201208310627", - "0.5.9.201207300726", - "0.5.8.201207111220", - "0.5.7.201204190339", - "0.5.6.201201232323", - "0.5.5.201112152213", - "0.5.4.201111111111", - "0.5.3.201107060350", - "0.5.2.20110519202509", - "0.5.1.20110321224001", - "0.5.0.20110119215959", - "0.4.1.20101007204400", - "0.4.0.20100604151516", - "0.3.3.20100419191644", - "0.3.2.20100401180959", - "0.3.1.20100209212101", - "0.3.0.20100202223831", - "0.2.0.20100108061321", - "0.1.0.20091028042923" - ] - }, - "project": { - "backend": "custom", - "created_on": 1412174991.0, - "ecosystem": "http://www.eclemma.org/jacoco/", - "homepage": "http://www.eclemma.org/jacoco/", - "id": 1411, - "name": "jacoco", - "regex": null, - "updated_on": 1548342318.0, - "version": "0.8.3", - "version_url": "http://www.eclemma.org/jacoco/", - "versions": [ - "0.8.3", - "0.8.2", - "0.8.1", - "0.8.0", - "0.7.9", - "0.7.8", - "0.7.7.201606060606", - "0.7.6.201602180812", - "0.7.5.201505241946", - "0.7.4.201502262128", - "0.7.3.201502191951", - "0.7.2.201409121644", - "0.7.1.201405082137", - "0.7.0.201403182114", - "0.6.5.201403032054", - "0.6.4.201312101107", - "0.6.3.201306030806", - "0.6.2.201302030002", - "0.6.1.201212231917", - "0.6.0.201210061924", - "0.5.10.201208310627", - "0.5.9.201207300726", - "0.5.8.201207111220", - "0.5.7.201204190339", - "0.5.6.201201232323", - "0.5.5.201112152213", - "0.5.4.201111111111", - "0.5.3.201107060350", - "0.5.2.20110519202509", - "0.5.1.20110321224001", - "0.5.0.20110119215959", - "0.4.1.20101007204400", - "0.4.0.20100604151516", - "0.3.3.20100419191644", - "0.3.2.20100401180959", - "0.3.1.20100209212101", - "0.3.0.20100202223831", - "0.2.0.20100108061321", - "0.1.0.20091028042923" - ] - } - }, - "msg_id": "2019-1416f22c-d49b-4a90-b3fa-ffd795f9c7e6", - "signature": "l/nMtoARaTA7VKctxCQdWnUACe5uB9hpVgsMdgkvM4y4H3q/xX2D6J/TXX62Lq3Fl+odc+dlyoYf\nC33v11GE0lvmifzsRYwgkDcgq3hYA5vTRxi0/U2aWZoNwz7ZNVSfBxAuK3yyEICcuRc8tmODQ+DB\nt2/Oq0J/YloDrmg5j2Mj7nSD8wHSSvfLOd4YJfZqPRvAlXTeVpes/W+UWB0yhoVFs8E4DDYXj6cn\nbdQQB1EFxyUUwrVG0rRS+bhU/KVuH11IzDukMpY+dTU+MEV23/V2zlJhA1zZC9lKEL8S5jKpdDXN\nYR15FGdPblZD6HBVRA1wPRXrs/AuHmqUI7pzdQ==\n", - "timestamp": 1548342318, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - }, - { - "bug": { - "bug_id": 1669189 - }, - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 1, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "pypi", - "odd_change": false, - "old_version": "4.3.0", - "packages": [ - { - "distro": "Fedora", - "package_name": "python-decorator" - }, - { - "distro": "Alpine", - "package_name": "py-decorator" - }, - { - "distro": "Mageia", - "package_name": "python-decorator" - }, - { - "distro": "Fedora", - "package_name": "python3-decorator" - }, - { - "distro": "Cygwin", - "package_name": "python-decorator" - }, - { - "distro": "Arch Linux", - "package_name": "python-decorator" - } - ], - "project": { - "backend": "PyPI", - "created_on": 1412175078.0, - "ecosystem": "pypi", - "homepage": "https://github.com/micheles/decorator", - "id": 3819, - "name": "decorator", - "regex": null, - "updated_on": 1548342117.0, - "version": "4.3.2", - "version_url": null, - "versions": [ - "4.3.2", - "4.3.1", - "4.3.0", - "4.2.1", - "4.1.2", - "4.1.1", - "4.1.0", - "4.0.11", - "4.0.10", - "4.0.9", - "4.0.8", - "4.0.7", - "4.0.6", - "4.0.5", - "4.0.4", - "4.0.3", - "4.0.2", - "4.0.1", - "4.0.0", - "3.4.2", - "3.4.1", - "3.4.0", - "3.3.3", - "3.3.2", - "3.3.1" - ] - }, - "upstream_version": "4.3.2", - "versions": [ - "4.3.2", - "4.3.1", - "4.3.0", - "4.2.1", - "4.1.2", - "4.1.1", - "4.1.0", - "4.0.11", - "4.0.10", - "4.0.9", - "4.0.8", - "4.0.7", - "4.0.6", - "4.0.5", - "4.0.4", - "4.0.3", - "4.0.2", - "4.0.1", - "4.0.0", - "3.4.2", - "3.4.1", - "3.4.0", - "3.3.3", - "3.3.2", - "3.3.1" - ] - }, - "project": { - "backend": "PyPI", - "created_on": 1412175078.0, - "ecosystem": "pypi", - "homepage": "https://github.com/micheles/decorator", - "id": 3819, - "name": "decorator", - "regex": null, - "updated_on": 1548342117.0, - "version": "4.3.2", - "version_url": null, - "versions": [ - "4.3.2", - "4.3.1", - "4.3.0", - "4.2.1", - "4.1.2", - "4.1.1", - "4.1.0", - "4.0.11", - "4.0.10", - "4.0.9", - "4.0.8", - "4.0.7", - "4.0.6", - "4.0.5", - "4.0.4", - "4.0.3", - "4.0.2", - "4.0.1", - "4.0.0", - "3.4.2", - "3.4.1", - "3.4.0", - "3.3.3", - "3.3.2", - "3.3.1" - ] - } - }, - "msg_id": "2019-d8d3582f-a8e9-4323-9928-85b049778e35", - "signature": "ENtnelHHwIECHy6Fy2OAjc7vNtDAs5BtiZy67KKTMM+3hQkKG/PyYhugZ/rpGFSzPyLkfEpK3HuB\nvRciE3RCIM+MyeMGp3dRfbzb5fH/GocPjw1N/uZIxtS6JR8FD7/lDHYVo6mnMqhJj06BC+jNRVWE\n+OAY5ZYTkST9GY+/ZI0FBXFCDleqE9ae8pNgkwbOU+Ah3mu7H6DxDwy1mWEhM9fH6gKXllbRGnxJ\nSnXcLNe5t5bf283ePDDPOiUfY9yuR8J7MTwQYo/cZEFL0QSHrNqGZrzxw918hAut8Chh5Qc+7PY+\n66WkpqYlg4MEMMiE8GM1Cs7j4UJinnzntXs8RQ==\n", - "timestamp": 1548342118, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - } -] \ No newline at end of file diff --git a/hotness_schema/hotness_schema/tests/fixtures/org.fedoraproject.prod.hotness.update.drop.json b/hotness_schema/hotness_schema/tests/fixtures/org.fedoraproject.prod.hotness.update.drop.json deleted file mode 100644 index 87e5ced..0000000 --- a/hotness_schema/hotness_schema/tests/fixtures/org.fedoraproject.prod.hotness.update.drop.json +++ /dev/null @@ -1,727 +0,0 @@ -[ - { - "reason": "pkgdb", - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 1, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "pypi", - "odd_change": false, - "old_version": "0.4", - "packages": [ - { - "distro": "Fedora", - "package_name": "pintail" - } - ], - "project": { - "backend": "PyPI", - "created_on": 1472129938.0, - "ecosystem": "pypi", - "homepage": "https://pypi.python.org/pypi/pintail", - "id": 11516, - "name": "pintail", - "regex": null, - "updated_on": 1548345874.0, - "version": "0.5", - "version_url": null, - "versions": [ - "0.5", - "0.4", - "0.3", - "0.2", - "0.1" - ] - }, - "upstream_version": "0.5", - "versions": [ - "0.5", - "0.4", - "0.3", - "0.2", - "0.1" - ] - }, - "project": { - "backend": "PyPI", - "created_on": 1472129938.0, - "ecosystem": "pypi", - "homepage": "https://pypi.python.org/pypi/pintail", - "id": 11516, - "name": "pintail", - "regex": null, - "updated_on": 1548345874.0, - "version": "0.5", - "version_url": null, - "versions": [ - "0.5", - "0.4", - "0.3", - "0.2", - "0.1" - ] - } - }, - "msg_id": "2019-b2b618d8-a45d-4e9d-bece-1b7d584c61cc", - "signature": "IWEGevNKxp+oOBCtpA19qA/PAl6MExxbmNTiEZQfIUiLd8OEzZSNqwbdXJe/js9SYc1gmc1f48GU\nw4tGzB9KwSGF8gZl/gO1iBDWdMUuyIJQqPlkm0HL0gScDKjElB9vInbOnvBHJzKyK/BawWZ8vkwQ\nioOG6awfBmKAY/d17LBpi70ymlA79DkTnsgGjV2bGHDZ2YiSASrODRKATKcbEjURx+ayujzwCskH\nsbMcCxbpkcnqyKxuywCLgvSLmaSaN3+i352DY1SvRjQHCZ3uuWwVmjHgUsJhDq7hmjCmGuNBAAhU\nqptJnHKA4/bjhDYioyTjtdS2HWONh5p8Uf0lnA==\n", - "timestamp": 1548345875, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - }, - { - "reason": "pkgdb", - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 1, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "https://github.com/jangernert/FeedReader", - "odd_change": false, - "old_version": "2.6.1", - "packages": [ - { - "distro": "Fedora", - "package_name": "feedreader" - } - ], - "project": { - "backend": "GitHub", - "created_on": 1449709424.0, - "ecosystem": "https://github.com/jangernert/FeedReader", - "homepage": "https://github.com/jangernert/FeedReader", - "id": 8339, - "name": "Feed Reader", - "regex": "", - "updated_on": 1548345684.0, - "version": "2.6.2", - "version_url": "jangernert/FeedReader", - "versions": [ - "2.6.2", - "2.6.1", - "2.6.0", - "2.5.1", - "2.5.0", - "2.4.1", - "2.4.0", - "2.3.0", - "2.2.1", - "2.2", - "2.0.2", - "2.0.1", - "2.0", - "2.0-beta-1", - "1.6.2", - "1.6.1", - "1.6.0", - "1.6-beta-1" - ] - }, - "upstream_version": "2.6.2", - "versions": [ - "2.6.2", - "2.6.1", - "2.6.0", - "2.5.1", - "2.5.0", - "2.4.1", - "2.4.0", - "2.3.0", - "2.2.1", - "2.2", - "2.0.2", - "2.0.1", - "2.0", - "2.0-beta-1", - "1.6.2", - "1.6.1", - "1.6.0", - "1.6-beta-1" - ] - }, - "project": { - "backend": "GitHub", - "created_on": 1449709424.0, - "ecosystem": "https://github.com/jangernert/FeedReader", - "homepage": "https://github.com/jangernert/FeedReader", - "id": 8339, - "name": "Feed Reader", - "regex": "", - "updated_on": 1548345684.0, - "version": "2.6.2", - "version_url": "jangernert/FeedReader", - "versions": [ - "2.6.2", - "2.6.1", - "2.6.0", - "2.5.1", - "2.5.0", - "2.4.1", - "2.4.0", - "2.3.0", - "2.2.1", - "2.2", - "2.0.2", - "2.0.1", - "2.0", - "2.0-beta-1", - "1.6.2", - "1.6.1", - "1.6.0", - "1.6-beta-1" - ] - } - }, - "msg_id": "2019-59ac0747-fa75-4e5d-951f-399a2e9f7981", - "signature": "c/+sIexxntbZ4aVmweW49W1+fhJztqXIRbqlKpw50oJ184hJYTGLFNvFfS8FX+gBxmErPQiJauLc\n4IY6LRCQlcGPEyqt7faIenA4a/gDJ8mkcNKT7/YSXNVaqRuDESKw+iE5tynYM4fiM1MLz7QorOMZ\n5dkmYpRiky+TRbhpy8D2wixrLmUhl5Mt22QCzVuGy6FUaaQqGDKARXewM7kRcgXj5Qv+tR/7CMhV\nPZyPOi2uw0GA7B1AxBeVbL25ia9KvqGDaDkMgXOcQTxt3GhG5g6gTYWtQChEm8AXOCfuSaQ/tI4C\nA6L+WbOpWb/oz27gNIyLilSPIvSeBi9hjLanEQ==\n", - "timestamp": 1548345685, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - }, - { - "reason": "pkgdb", - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 1, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "https://github3py.readthedocs.org", - "odd_change": false, - "old_version": "1.2.0", - "packages": [ - { - "distro": "Fedora", - "package_name": "python-github3py" - } - ], - "project": { - "backend": "GitHub", - "created_on": 1467642371.0, - "ecosystem": "https://github3py.readthedocs.org", - "homepage": "https://github3py.readthedocs.org", - "id": 11040, - "name": "github3.py", - "regex": null, - "updated_on": 1548345671.0, - "version": "1.3.0", - "version_url": "sigmavirus24/github3.py", - "versions": [ - "1.3.0", - "1.2.0", - "1.1.0", - "1.0.2", - "1.0.1", - "1.0.0a4", - "1.0.0a3", - "1.0.0a2", - "1.0.0a1", - "1.0.0", - "0.9.6", - "0.9.5", - "0.9.3", - "0.9.2", - "0.9.1", - "0.9.0", - "0.8.2", - "0.8.1", - "0.8.0", - "0.8.0.pre", - "0.7.1", - "0.7.0", - "0.6.1", - "0.6.0", - "0.5.3", - "0.5.2", - "0.5.1", - "0.5", - "0.4", - "0.3", - "0.2", - "0.1b1", - "0.1b0", - "0.1a8", - "0.1a7", - "0.1a6", - "0.1a5", - "0.1a4", - "0.1a", - "0.1", - "0.1alpha", - "test_annotated_tag", - "test" - ] - }, - "upstream_version": "1.3.0", - "versions": [ - "1.3.0", - "1.2.0", - "1.1.0", - "1.0.2", - "1.0.1", - "1.0.0a4", - "1.0.0a3", - "1.0.0a2", - "1.0.0a1", - "1.0.0", - "0.9.6", - "0.9.5", - "0.9.3", - "0.9.2", - "0.9.1", - "0.9.0", - "0.8.2", - "0.8.1", - "0.8.0", - "0.8.0.pre", - "0.7.1", - "0.7.0", - "0.6.1", - "0.6.0", - "0.5.3", - "0.5.2", - "0.5.1", - "0.5", - "0.4", - "0.3", - "0.2", - "0.1b1", - "0.1b0", - "0.1a8", - "0.1a7", - "0.1a6", - "0.1a5", - "0.1a4", - "0.1a", - "0.1", - "0.1alpha", - "test_annotated_tag", - "test" - ] - }, - "project": { - "backend": "GitHub", - "created_on": 1467642371.0, - "ecosystem": "https://github3py.readthedocs.org", - "homepage": "https://github3py.readthedocs.org", - "id": 11040, - "name": "github3.py", - "regex": null, - "updated_on": 1548345671.0, - "version": "1.3.0", - "version_url": "sigmavirus24/github3.py", - "versions": [ - "1.3.0", - "1.2.0", - "1.1.0", - "1.0.2", - "1.0.1", - "1.0.0a4", - "1.0.0a3", - "1.0.0a2", - "1.0.0a1", - "1.0.0", - "0.9.6", - "0.9.5", - "0.9.3", - "0.9.2", - "0.9.1", - "0.9.0", - "0.8.2", - "0.8.1", - "0.8.0", - "0.8.0.pre", - "0.7.1", - "0.7.0", - "0.6.1", - "0.6.0", - "0.5.3", - "0.5.2", - "0.5.1", - "0.5", - "0.4", - "0.3", - "0.2", - "0.1b1", - "0.1b0", - "0.1a8", - "0.1a7", - "0.1a6", - "0.1a5", - "0.1a4", - "0.1a", - "0.1", - "0.1alpha", - "test_annotated_tag", - "test" - ] - } - }, - "msg_id": "2019-0d77d6c7-3781-45c3-933e-81a343e615f0", - "signature": "GC1ERVCHhrPWdxeQuYCNwhI8Y5ESnNBokdD5uzzNysH52OMt+8HkOUO0DRSFy9oILj/5O4TEuJ3i\n5t8fTSAtCaRi+6YyrJGys2tNfRNmKohm9qSDotHIFklIZzAMAPvRbC0EjUTeMDQkZ8qLbcveJciE\nwKT81Jc+RyKHbk9FCOSHb+O1oFglWT1kIdlWDTHieQNUuUxvjEnmLFFO+Oem441MUpTZrlPkqOjY\nDlUWUM+PggbmaKo/Gu7afEmTAFrF09gefRv7z3c6/krZLBdXFkfwep5hLLcFCvYSDa54Ll/OLCJE\nZZPMwhKtO26v4GW1fmEnQnmyNWXcr293juzBgA==\n", - "timestamp": 1548345672, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - }, - { - "reason": "anitya", - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 1, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "https://www.adminer.org/", - "odd_change": false, - "old_version": "4.7.0", - "packages": [], - "project": { - "backend": "GitHub", - "created_on": 1528134559.0, - "ecosystem": "https://www.adminer.org/", - "homepage": "https://www.adminer.org/", - "id": 17297, - "name": "adminer", - "regex": null, - "updated_on": 1548345630.0, - "version": "4.7.1", - "version_url": "vrana/adminer", - "versions": [ - "4.7.1", - "4.7.0", - "4.6.3", - "4.6.2", - "4.6.1", - "4.6.0", - "4.5.0", - "4.4.0", - "4.3.1", - "4.3.0", - "4.2.5", - "4.2.4", - "4.2.3", - "4.2.2", - "4.2.1", - "4.2.0", - "4.1.0", - "4.0.3", - "4.0.2", - "4.0.1", - "4.0.0", - "3.7.1", - "3.7.0", - "3.6.4", - "3.6.3", - "3.6.2", - "3.6.1", - "3.6.0", - "3.5.1", - "3.5.0", - "3.4.0", - "3.3.4", - "3.3.3", - "3.3.2", - "3.3.1", - "3.3.0", - "3.2.2", - "3.2.1", - "3.2.0", - "3.1.0", - "3.0.1", - "3.0.0" - ] - }, - "upstream_version": "4.7.1", - "versions": [ - "4.7.1", - "4.7.0", - "4.6.3", - "4.6.2", - "4.6.1", - "4.6.0", - "4.5.0", - "4.4.0", - "4.3.1", - "4.3.0", - "4.2.5", - "4.2.4", - "4.2.3", - "4.2.2", - "4.2.1", - "4.2.0", - "4.1.0", - "4.0.3", - "4.0.2", - "4.0.1", - "4.0.0", - "3.7.1", - "3.7.0", - "3.6.4", - "3.6.3", - "3.6.2", - "3.6.1", - "3.6.0", - "3.5.1", - "3.5.0", - "3.4.0", - "3.3.4", - "3.3.3", - "3.3.2", - "3.3.1", - "3.3.0", - "3.2.2", - "3.2.1", - "3.2.0", - "3.1.0", - "3.0.1", - "3.0.0" - ] - }, - "project": { - "backend": "GitHub", - "created_on": 1528134559.0, - "ecosystem": "https://www.adminer.org/", - "homepage": "https://www.adminer.org/", - "id": 17297, - "name": "adminer", - "regex": null, - "updated_on": 1548345630.0, - "version": "4.7.1", - "version_url": "vrana/adminer", - "versions": [ - "4.7.1", - "4.7.0", - "4.6.3", - "4.6.2", - "4.6.1", - "4.6.0", - "4.5.0", - "4.4.0", - "4.3.1", - "4.3.0", - "4.2.5", - "4.2.4", - "4.2.3", - "4.2.2", - "4.2.1", - "4.2.0", - "4.1.0", - "4.0.3", - "4.0.2", - "4.0.1", - "4.0.0", - "3.7.1", - "3.7.0", - "3.6.4", - "3.6.3", - "3.6.2", - "3.6.1", - "3.6.0", - "3.5.1", - "3.5.0", - "3.4.0", - "3.3.4", - "3.3.3", - "3.3.2", - "3.3.1", - "3.3.0", - "3.2.2", - "3.2.1", - "3.2.0", - "3.1.0", - "3.0.1", - "3.0.0" - ] - } - }, - "msg_id": "2019-8aaf6d77-5f3d-4ca9-8a65-d040ed3c78e5", - "signature": "RSoO0fe3xFiAdJAjBoF6SBW48old89TlllyveMNSm2p1jHtmx6iFAWSTqPOMzYDHeLDEhF36ArIL\nng7NKOdMuPVDgIFsKkUG6Eq2S5EdpB3ls+BVYuVFqnJp4q0dUcBWA3+VheTEAa5y0CgrU+AkBdzB\nAYyQUtVmoSwdcsans1POkeDVh7hwmHfUmAyUwOlSF44LrfUmBp4Ejy6EBCvzzlm0UKCh3FhBKtr8\nGbFMalxQ/itd5PDoRIUiM5/5QOtyy1E7CLA/yrq3gN6OkWs3C/hkZWYaMClTbcQXTrF5c1O72ok6\n9MYMCeXhHJbIxO5yfhgWtpISQZyGVkyDGSnubQ==\n", - "timestamp": 1548345631, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - }, - { - "reason": "pkgdb", - "trigger": { - "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUUzRENDQkVXZ0F3SUJBZ0lDQXBvd0RRWUpL\nb1pJaHZjTkFRRUxCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEU0TURreU5URTRNakV3TVZvWERUSTRNRGt5TWpFNE1qRXdNVm93Z2VZeEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRXlNREFHQTFVRUF4TXBjbVZzWldGelpTMXQKYjI1cGRHOXlhVzVuTFhKbGJHVmhjMlV0Ylc5dWFY\nUnZjbWx1Wnk1dmNtY3hNakF3QmdOVkJDa1RLWEpsYkdWaApjMlV0Ylc5dWFYUnZjbWx1WnkxeVpX\neGxZWE5sTFcxdmJtbDBiM0pwYm1jdWIzSm5NU1l3SkFZSktvWklodmNOCkFRa0JGaGRoWkcxcGJr\nQm1aV1J2Y21Gd2NtOXFaV04wTG05eVp6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFE\nQ0NBUW9DZ2dFQkFLbkE5TkUvNEprcDVWZTM3SC8vWGRmZDVLeHBzQUtVamZpT1RTY2ZwRHVmM04x\nRApJL1BOK3F1dXFJaWhpaFc0NGJlei9IZGlja1FnNEkxZklxYWpiZkV2WEplcTJUOXJ4RFkvcUFO\nRGxCalRnQlF6Cmd5WG1wclMrUjFiSWhiZ3ZMamNBN0g4bDVhYWhQQnI5aWE0N1M4Y25hVXB1d2FE\nbUl1cjYvV2ZsVlk1b2pmMGwKNzFPSGVmY1RueURpVGZlYzVGaCsxRWRUaVRIR0NaaDV5czB1bUta\nc1IxUHB3TDdaUW1va0NaV2V2NEU3aVBRaAo3NDNPaWRhWGdxVm5yak54bmZveDNkOUZwU2FaOXVu\nd0RHUjJVS3VUbkxLM21CRUpTNTBvZ0dNVmp5M09xL2hDCjJvejBzcisrRk9XM0FxamZkUGtvWmdi\neXRhQ0ZSM3ZuK0VmZ25BRUNBd0VBQWFPQ0FWY3dnZ0ZUTUFrR0ExVWQKRXdRQ01BQXdMUVlKWUla\nSUFZYjRRZ0VOQkNBV0hrVmhjM2t0VWxOQklFZGxibVZ5WVhSbFpDQkRaWEowYVdacApZMkYwWlRB\nZEJnTlZIUTRFRmdRVVloOEk0Y29MRDk2Z2lmOUxXRDZPTHpSSnlWVXdnZFVHQTFVZEl3U0J6VENC\nCnlvQVVhMEJhK1JJSWlWbm5XZVVGOVFJZENrNS9GQUNoZ2Fha2dhTXdnYUF4Q3pBSkJnTlZCQVlU\nQWxWVE1Rc3cKQ1FZRFZRUUlFd0pPUXpFUU1BNEdBMVVFQnhNSFVtRnNaV2xuYURFWE1CVUdBMVVF\nQ2hNT1JtVmtiM0poSUZCeQpiMnBsWTNReER6QU5CZ05WQkFzVEJtWmxaRzF6WnpFUE1BMEdBMVVF\nQXhNR1ptVmtiWE5uTVE4d0RRWURWUVFwCkV3Wm1aV1J0YzJjeEpqQWtCZ2txaGtpRzl3MEJDUUVX\nRjJGa2JXbHVRR1psWkc5eVlYQnliMnBsWTNRdWIzSm4KZ2drQTQxQWVSMDhYSGtVd0V3WURWUjBs\nQkF3d0NnWUlLd1lCQlFVSEF3SXdDd1lEVlIwUEJBUURBZ2VBTUEwRwpDU3FHU0liM0RRRUJDd1VB\nQTRHQkFMQXNYS1JXMVBEUHNXYTd6dEdQejdiRzBkQnF3eHJFa0NoL2tIMkd2dGtPCjNyQWJCNnZt\nRUtFU2o1VHNnVVZKMGsyY2FLRCsxWEdwdUoxQXZRTWF1VTZxaDVOM29JajNDbS9XN0c3b0NRSnEK\nLzhEeTMvYW9DdFBEWE1KYkVtUnp0Rll3RXMyOWdHenpOMHFicFVOVExodzdqL2k0ZUV6QnRzbEVQ\nNUg2L2RiSAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n", - "crypto": "x509", - "i": 1, - "msg": { - "distro": null, - "message": { - "agent": "anitya", - "ecosystem": "https://github.com/hierynomus/sshj", - "odd_change": false, - "old_version": "0.26.0", - "packages": [ - { - "distro": "Fedora", - "package_name": "sshj" - } - ], - "project": { - "backend": "GitHub", - "created_on": 1455211593.0, - "ecosystem": "https://github.com/hierynomus/sshj", - "homepage": "https://github.com/hierynomus/sshj", - "id": 9507, - "name": "sshj", - "regex": null, - "updated_on": 1548338777.0, - "version": "0.27.0", - "version_url": "hierynomus/sshj", - "versions": [ - "0.27.0", - "0.26.0", - "0.26.0", - "0.25.0", - "0.24.0", - "0.23.0", - "0.22.0", - "0.21.1", - "0.21.0", - "0.20.0", - "0.19.1", - "0.19.0", - "0.18.0", - "0.17.2", - "0.17.1", - "0.17.0", - "0.16.0", - "0.15.0", - "0.14.0", - "0.13.0", - "0.12.0", - "0.11.0", - "0.9.0", - "0.8.1", - "0.8.0", - "0.7.0", - "0.6.1", - "0.6.0", - "0.5.0", - "0.4.1", - "0.4.0", - "0.3.1", - "0.3.0", - "0.2.3", - "0.2.0", - "0.1.1", - "0.1.0" - ] - }, - "upstream_version": "0.27.0", - "versions": [ - "0.27.0", - "0.26.0", - "0.26.0", - "0.25.0", - "0.24.0", - "0.23.0", - "0.22.0", - "0.21.1", - "0.21.0", - "0.20.0", - "0.19.1", - "0.19.0", - "0.18.0", - "0.17.2", - "0.17.1", - "0.17.0", - "0.16.0", - "0.15.0", - "0.14.0", - "0.13.0", - "0.12.0", - "0.11.0", - "0.9.0", - "0.8.1", - "0.8.0", - "0.7.0", - "0.6.1", - "0.6.0", - "0.5.0", - "0.4.1", - "0.4.0", - "0.3.1", - "0.3.0", - "0.2.3", - "0.2.0", - "0.1.1", - "0.1.0" - ] - }, - "project": { - "backend": "GitHub", - "created_on": 1455211593.0, - "ecosystem": "https://github.com/hierynomus/sshj", - "homepage": "https://github.com/hierynomus/sshj", - "id": 9507, - "name": "sshj", - "regex": null, - "updated_on": 1548338777.0, - "version": "0.27.0", - "version_url": "hierynomus/sshj", - "versions": [ - "0.27.0", - "0.26.0", - "0.26.0", - "0.25.0", - "0.24.0", - "0.23.0", - "0.22.0", - "0.21.1", - "0.21.0", - "0.20.0", - "0.19.1", - "0.19.0", - "0.18.0", - "0.17.2", - "0.17.1", - "0.17.0", - "0.16.0", - "0.15.0", - "0.14.0", - "0.13.0", - "0.12.0", - "0.11.0", - "0.9.0", - "0.8.1", - "0.8.0", - "0.7.0", - "0.6.1", - "0.6.0", - "0.5.0", - "0.4.1", - "0.4.0", - "0.3.1", - "0.3.0", - "0.2.3", - "0.2.0", - "0.1.1", - "0.1.0" - ] - } - }, - "msg_id": "2019-1ad8c008-49fa-4132-962e-26f2d1b6e958", - "signature": "e2qD/4DN9REKpHTeA01vvWo937ECB70jlrZI0TlHvsilr3iMcFbVaCWsMGYUQcaQMZHZYzngHSDp\n70XzwCKiTtNCr5X7G0njZXdqIqiEMbyDcqqAVFGjJiL5SK/dD2KcU1yivBBtP+yYALcsSwRd5okv\nUWX8ZpTLMBuV8VavURXSHyCCM28pAr3htbfPVritgTRlXHwrGdzQrWYEy1gSLuSFn5UFYVR6Zfw8\noQcB9WqCZ5c4GeT3bg1kqklReWGxJKG2norwrgtL3rnicAedUo4mVqzuyVVNjcSmYlS9o8CHrUXc\nPZuej6qOyGMCwlw7pOyixixaettZN7GIOZeFWw==\n", - "timestamp": 1548338779, - "topic": "org.release-monitoring.prod.anitya.project.version.update", - "username": "anitya" - } - } -] \ No newline at end of file diff --git a/hotness_schema/hotness_schema/tests/test_messages.py b/hotness_schema/hotness_schema/tests/test_messages.py deleted file mode 100644 index 68f43f8..0000000 --- a/hotness_schema/hotness_schema/tests/test_messages.py +++ /dev/null @@ -1,260 +0,0 @@ -# Copyright (C) 2018 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -"""Unit tests for the message classes.""" - -import unittest -import mock - -from hotness_schema import UpdateDrop, UpdateBugFile - - -class TestUpdateDrop(unittest.TestCase): - """Tests for `hotness_schema.messages.UpdateDrop` class.""" - - def setUp(self): - """Set up the test environment.""" - message_body = { - "reason": "anitya", - "trigger": { - "msg": {"message": {"new": "Dummy"}}, - "topic": "anitya.project.map.new", - }, - } - self.message = UpdateDrop(body=message_body) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.packages", new_callable=mock.PropertyMock - ) - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_summary_anitya(self, mock_reason, mock_packages): - """Assert correct summary is returned.""" - mock_packages.return_value = ["Dummy"] - mock_reason.return_value = "anitya" - print(self.message.reason) - exp = ( - "the-new-hotness saw an update for 'Dummy', " - "but release-monitoring.org doesn't know what " - "that project is called in Fedora land" - ) - self.assertEqual(self.message.summary, exp) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.packages", new_callable=mock.PropertyMock - ) - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_summary_rawhide(self, mock_reason, mock_packages): - """Assert correct summary is returned.""" - mock_packages.return_value = ["Dummy"] - mock_reason.return_value = "rawhide" - print(self.message.reason) - exp = ( - "the-new-hotness saw an update for 'Dummy', " - "but no rawhide version of the package could be found yet" - ) - self.assertEqual(self.message.summary, exp) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.packages", new_callable=mock.PropertyMock - ) - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_summary_pkgdb(self, mock_reason, mock_packages): - """Assert correct summary is returned.""" - mock_packages.return_value = ["Dummy"] - mock_reason.return_value = "pkgdb" - print(self.message.reason) - exp = ( - "the-new-hotness saw an update for 'Dummy', " - "but pkgdb says the maintainers are not interested " - "in bugs being filed" - ) - self.assertEqual(self.message.summary, exp) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.packages", new_callable=mock.PropertyMock - ) - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_summary_bugzilla(self, mock_reason, mock_packages): - """Assert correct summary is returned.""" - mock_packages.return_value = ["Dummy"] - mock_reason.return_value = "bugzilla" - print(self.message.reason) - exp = ( - "the-new-hotness saw an update for 'Dummy', " - "but the bugzilla issue couldn't be updated" - ) - self.assertEqual(self.message.summary, exp) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.packages", new_callable=mock.PropertyMock - ) - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_summary_dummy(self, mock_reason, mock_packages): - """Assert correct summary is returned.""" - mock_packages.return_value = ["Dummy"] - mock_reason.return_value = "Dummy" - print(self.message.reason) - exp = ( - "the-new-hotness saw an update for 'Dummy', " - "but it got dropped for reason: 'Dummy'" - ) - self.assertEqual(self.message.summary, exp) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_package_reason_anitya(self, mock_reason): - """ - Assert correct package is returned, when reason is anitya. - """ - mock_reason.return_value = "anitya" - message_body = {"trigger": {"msg": {"project": {"name": "Dummy"}}}} - with mock.patch.dict(self.message.body, message_body): - self.assertEqual(self.message.packages, ["Dummy"]) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_package_reason_anitya_no_project(self, mock_reason): - """ - Assert empty list is returned, when reason is anitya and there is no project - in message. - """ - mock_reason.return_value = "anitya" - message_body = {"trigger": {"msg": {}}} - with mock.patch.dict(self.message.body, message_body): - self.assertEqual(self.message.packages, [""]) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_package_reason_anitya_message(self, mock_reason): - """ - Assert correct package is returned, when reason is anitya and body contains - message key. - """ - mock_reason.return_value = "anitya" - message_body = {"trigger": {"msg": {"message": {"project": {"name": "Dummy"}}}}} - with mock.patch.dict(self.message.body, message_body): - self.assertEqual(self.message.packages, ["Dummy"]) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_package_package_listing(self, mock_reason): - """Assert correct package is returned, when package_listing key is available.""" - mock_reason.return_value = "Dummy" - message_body = { - "trigger": {"msg": {"package_listing": {"package": {"name": "Dummy"}}}} - } - with mock.patch.dict(self.message.body, message_body): - self.assertEqual(self.message.packages, ["Dummy"]) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_package_buildsys(self, mock_reason): - """Assert correct package is returned, when topic contains buildsys.build.""" - mock_reason.return_value = "Dummy" - message_body = { - "trigger": {"msg": {"name": "Dummy"}, "topic": "buildsys.build.task.change"} - } - with mock.patch.dict(self.message.body, message_body): - self.assertEqual(self.message.packages, ["Dummy"]) - - @mock.patch( - "hotness_schema.messages.UpdateDrop.reason", new_callable=mock.PropertyMock - ) - def test_package_package(self, mock_reason): - """Assert correct package is returned, when package key is available.""" - mock_reason.return_value = "Dummy" - message_body = { - "trigger": { - "msg": {"package": {"name": "Dummy"}}, - "topic": "anitya.project.version.update", - } - } - with mock.patch.dict(self.message.body, message_body): - self.assertEqual(self.message.packages, ["Dummy"]) - - def test_reason(self): - """Assert correct reason is returned.""" - message_body = {"reason": "Dummy"} - with mock.patch.dict(self.message.body, message_body): - self.assertEqual(self.message.reason, "Dummy") - - -class TestUpdateBugFile(unittest.TestCase): - """Tests for `hotness_schema.messages.UpdateBugFile` class.""" - - def setUp(self): - """Set up the test environment.""" - message_body = { - "trigger": { - "msg": {"message": {"new": "dummy"}}, - "topic": "anitya.project.map.new", - } - } - self.message = UpdateBugFile(body=message_body) - - @mock.patch( - "hotness_schema.messages.UpdateBugFile.packages", new_callable=mock.PropertyMock - ) - def test_summary(self, mock_property): - """Assert correct summary is returned.""" - mock_property.return_value = ["Dummy"] - exp = "the-new-hotness filed a bug on 'Dummy'" - self.assertEqual(self.message.summary, exp) - - def test_packages_trigger_map_new(self): - """Assert correct package is returned.""" - message_body = { - "trigger": { - "msg": {"message": {"new": "Dummy"}}, - "topic": "anitya.project.map.new", - } - } - - with mock.patch.dict(self.message.body, message_body): - self.assertEqual(self.message.packages, ["Dummy"]) - - def test_packages_trigger_else(self): - """Assert correct packages are returned.""" - message_body = { - "trigger": { - "msg": { - "message": { - "packages": [ - {"distro": "Fedora", "package_name": "Dummy"}, - {"distro": "Fedora", "package_name": "Ordo Hereticus"}, - ] - } - }, - "topic": "anitya.project.version.update", - } - } - - with mock.patch.dict(self.message.body, message_body): - self.assertEqual(self.message.packages, ["Dummy", "Ordo Hereticus"]) diff --git a/hotness_schema/hotness_schema/tests/test_schema.py b/hotness_schema/hotness_schema/tests/test_schema.py deleted file mode 100644 index fe18dca..0000000 --- a/hotness_schema/hotness_schema/tests/test_schema.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright (C) 2018 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -"""Unit tests for the message schema.""" -import json -import os -import unittest - -from fedora_messaging import message - -from . import FIXTURES_DIR - - -class ExistingMessagesTests(unittest.TestCase): - """ - Assert schema successfully handle legacy fedmsg messages. - The fixtures are generated by downloading messages from datagrepper. - """ - - def test_valid(self): - message.load_message_classes() - for message_class, name in message._class_to_schema_name.items(): - if not message_class.topic or not name.startswith("hotness"): - continue - - fixture = os.path.join(FIXTURES_DIR, message_class.topic + ".json") - with self.subTest(msg="Validating {} with {} failed".format(name, fixture)): - with open(fixture, "r") as fp: - messages = json.load(fp) - - for m in messages: - message_class(body=m).validate() diff --git a/hotness_schema/setup.cfg b/hotness_schema/setup.cfg deleted file mode 100644 index 7c2b287..0000000 --- a/hotness_schema/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[bdist_wheel] -universal = 1 \ No newline at end of file diff --git a/hotness_schema/setup.py b/hotness_schema/setup.py deleted file mode 100644 index ddaa579..0000000 --- a/hotness_schema/setup.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (C) 2018 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -import os - -from setuptools import setup, find_packages - - -here = os.path.abspath(os.path.dirname(__file__)) -with open(os.path.join(here, "README.rst")) as fd: - README = fd.read() - - -setup( - name="fedora_messaging_the_new_hotness_schema", - version="1.1.1", - description="JSON schema definitions for messages published by the-new-hotness", - long_description=README, - url="https://github.com/fedora-infra/the-new-hotness", - # Possible options are at https://pypi.python.org/pypi?%3Aaction=list_classifiers - classifiers=[ - "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", - "Operating System :: POSIX :: Linux", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.5", - "Programming Language :: Python :: 3.6", - ], - license="GPLv2+", - maintainer="Fedora Infrastructure Team", - maintainer_email="infrastructure@lists.fedoraproject.org", - platforms=["Fedora", "GNU/Linux"], - keywords="fedora", - packages=find_packages(exclude=("hotness_schema.tests", "hotness_schema.tests.*")), - include_package_data=True, - zip_safe=False, - install_requires=["fedora_messaging"], - test_suite="hotness_schema.tests", - entry_points={ - "fedora.messages": [ - "hotness.update.drop=hotness_schema:UpdateDrop", - "hotness.update.bug.file=hotness_schema:UpdateBugFile", - ] - }, -) diff --git a/news/PR447.dev b/news/PR447.dev new file mode 100644 index 0000000..3e06132 --- /dev/null +++ b/news/PR447.dev @@ -0,0 +1 @@ +Move fedora messaging schema to https://github.com/fedora-infra/the-new-hotness-messages diff --git a/requirements.txt b/requirements.txt index 7de1b48..5018ed6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ anitya-schema>=1.1.0, <3.0.0 fedora-messaging>=2.0.1, <4.0.0 +fedora_messaging_the_new_hotness_schema>=1.0.1, <2.0.0 koji>=1.21.0, <2.0.0 python-bugzilla>=3.2.0, <4.0.0 requests>=2.22.0, <3.0.0 diff --git a/tox.ini b/tox.ini index 1dba7bf..e5d359e 100644 --- a/tox.ini +++ b/tox.ini @@ -5,12 +5,11 @@ envlist = mypy,py38,py39,py310,lint,format,diff-cover,docs,bandit deps = -rdev-requirements.txt -rrequirements.txt - -e ./hotness_schema whitelist_externals = rm commands = rm -rf htmlcov coverage.xml - py.test -vv --cov-config .coveragerc --cov=hotness --cov=hotness_schema/hotness_schema \ + py.test -vv --cov-config .coveragerc --cov=hotness \ --cov-report term --cov-report xml --cov-report html {posargs} setenv = PYCURL_SSL_LIBRARY = openssl @@ -41,7 +40,7 @@ commands= deps = -rdev-requirements.txt commands = - python -m flake8 hotness/ hotness_schema/ tests/ {posargs} + python -m flake8 hotness/ tests/ {posargs} [testenv:format] @@ -61,7 +60,7 @@ commands = deps = -rdev-requirements.txt commands = - bandit -r hotness/ hotness_schema/ -x hotness/tests,hotness_schema/hotness_schema/tests -ll + bandit -r hotness/ -x hotness/tests -ll [flake8]