Add ReviewBot to check for bugowner lines in requests for new packages
This commit is contained in:
parent
807b0f93a4
commit
a80184d44e
13
CONTENTS.md
13
CONTENTS.md
@ -322,11 +322,20 @@ packagers and creating SR from FactoryCandidates to the Leap project on successf
|
|||||||
#### issue-diff.py
|
#### issue-diff.py
|
||||||
|
|
||||||
Compares packages from a project against factory for differences in referenced issues and presents
|
Compares packages from a project against factory for differences in referenced issues and presents
|
||||||
changes to allow whitelisting before creating Bugzilla entries.
|
changes to allow whitelisting before creating Bugzilla entries. It's used to check Factory packages
|
||||||
|
have all the bug references fixed in SLE (i.e. if 'Factory First' policy was correctly applied).
|
||||||
|
|
||||||
* Sources: [issue-diff.py](issue-diff.py)
|
* Sources: [issue-diff.py](issue-diff.py)
|
||||||
* Documentation: --
|
* Documentation: --
|
||||||
* Package: openSUSE-release-tools
|
* Package: openSUSE-release-tools
|
||||||
* Usage: ???
|
* Usage: manually
|
||||||
|
|
||||||
|
### check_bugowner.py
|
||||||
|
|
||||||
|
Verifies requests for new packages have a bugowner line in the request description (used in SLE where we don't have
|
||||||
|
devel projects).
|
||||||
|
|
||||||
|
* Sources: [check_bugowner.py](check_bugowner.py)
|
||||||
|
* Documentation: --
|
||||||
|
* Package: openSUSE-release-tools
|
||||||
|
* Usage: gocd
|
@ -289,8 +289,10 @@ class ReviewBot(object):
|
|||||||
self.add_review(req, by_group=by_group, by_user=by_user, msg='Adding fallback reviewer')
|
self.add_review(req, by_group=by_group, by_user=by_user, msg='Adding fallback reviewer')
|
||||||
|
|
||||||
if doit:
|
if doit:
|
||||||
|
if self.dryrun:
|
||||||
|
self.logger.info("(dryrun) would set %s to %s with message %s" % (req.reqid, state, msg))
|
||||||
|
else:
|
||||||
self.logger.debug("setting %s to %s" % (req.reqid, state))
|
self.logger.debug("setting %s to %s" % (req.reqid, state))
|
||||||
if not self.dryrun:
|
|
||||||
try:
|
try:
|
||||||
osc.core.change_review_state(apiurl=self.apiurl,
|
osc.core.change_review_state(apiurl=self.apiurl,
|
||||||
reqid=req.reqid, newstate=newstate,
|
reqid=req.reqid, newstate=newstate,
|
||||||
|
82
check_bugowner.py
Executable file
82
check_bugowner.py
Executable file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
|
||||||
|
from urllib.error import HTTPError
|
||||||
|
|
||||||
|
import osc.conf
|
||||||
|
import osc.core
|
||||||
|
import ReviewBot
|
||||||
|
|
||||||
|
http_GET = osc.core.http_GET
|
||||||
|
|
||||||
|
|
||||||
|
class CheckerBugowner(ReviewBot.ReviewBot):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
ReviewBot.ReviewBot.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def check_source_submission(self, src_project, src_package, src_rev, target_project, target_package):
|
||||||
|
self.logger.info("%s/%s@%s -> %s/%s" % (src_project,
|
||||||
|
src_package, src_rev, target_project, target_package))
|
||||||
|
if src_package == 'patchinfo':
|
||||||
|
return True
|
||||||
|
if self.exists_in(target_project, target_package):
|
||||||
|
return True
|
||||||
|
for line in self.request.description.splitlines():
|
||||||
|
matched_package = None
|
||||||
|
matched_maintainer = None
|
||||||
|
m = re.match(r'bugowner:\s*(\S*)\s*$', line)
|
||||||
|
if m:
|
||||||
|
matched_maintainer = m.group(1)
|
||||||
|
m = re.match(r'bugowner:\s(\S*)\s(\S*)\s*$', line)
|
||||||
|
if m:
|
||||||
|
matched_maintainer = m.group(2)
|
||||||
|
matched_package = m.group(1)
|
||||||
|
if not matched_maintainer:
|
||||||
|
continue
|
||||||
|
if matched_package and matched_package != target_package:
|
||||||
|
continue
|
||||||
|
if not self.valid_maintainer(matched_maintainer):
|
||||||
|
self.review_messages['declined'] += f"\n{matched_maintainer} could not be found on this instance."
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
self.review_messages['declined'] += f"\n{target_package } appears to be a new package and " + \
|
||||||
|
"no 'bugowner' line could be found in the request description."
|
||||||
|
return False
|
||||||
|
|
||||||
|
def existing_url(self, url):
|
||||||
|
"Return False if url returns 404"
|
||||||
|
try:
|
||||||
|
osc.core.http_GET(url)
|
||||||
|
except HTTPError as e:
|
||||||
|
if e.code == 404:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def valid_maintainer(self, maintainer):
|
||||||
|
if maintainer.startswith('group:'):
|
||||||
|
maintainer = maintainer.replace('group:', '')
|
||||||
|
url = osc.core.makeurl(self.apiurl, ['group', maintainer])
|
||||||
|
return self.existing_url(url)
|
||||||
|
url = osc.core.makeurl(self.apiurl, ['person', maintainer])
|
||||||
|
return self.existing_url(url)
|
||||||
|
|
||||||
|
def exists_in(self, project, package):
|
||||||
|
url = osc.core.makeurl(self.apiurl, ['source', project, package])
|
||||||
|
return self.existing_url(url)
|
||||||
|
|
||||||
|
|
||||||
|
class CommandLineInterface(ReviewBot.CommandLineInterface):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
ReviewBot.CommandLineInterface.__init__(self, args, kwargs)
|
||||||
|
self.clazz = CheckerBugowner
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = CommandLineInterface()
|
||||||
|
sys.exit(app.main())
|
Loading…
x
Reference in New Issue
Block a user