Merge pull request #28 from miska/master

Included check and better move
This commit is contained in:
Stephan Kulow 2014-02-14 21:34:51 +01:00
commit 0065b8ad6f
6 changed files with 197 additions and 16 deletions

View File

@ -434,7 +434,7 @@ def do_staging(self, subcmd, opts, *args):
self._staging_push(project, opts)
elif cmd in ['check']:
project = args[1]
return self._staging_check(project, opts.everything, opts)
return api.check_project_status(project)
elif cmd in ['remove', 'r']:
project = args[1]
self._staging_remove(project, opts)

View File

@ -78,25 +78,24 @@ class StagingAPI(object):
def move_between_project(self, source_project, package, destination_project):
"""
Move selected package from one staging to another
:param source_project: Source project
:param package: Source package
:param destination_project: Destination project
"""
# Get the relevant information from source
package_info = self.get_package_information('source_project', 'package')
# Get the relevant information about source
meta = get_prj_pseudometa(source_project)
req_id = -1
for req in meta['requests']:
if req['package'] == package:
req_id = req['id']
if req_id == -1:
raise oscerr.WrongArgs("Couldn't find request for package {0} in project {1}".format(package,source_project))
# Copy the package
#FIXME: add the data from orginal project yaml to the destination one
link_pac(package_info['project'],
package_info['package'],
destination_project,
package,
force=True,
rev=package_info['srcmd5'])
# Delete the first location
message = 'moved to {0}'.format(destination_project)
delete_package(self.apiurl, source_project, package, msg=message)
#FIXME: delete the data from YAML
sr_to_prj(req_id, destination_project)
# Delete the old one
rm_from_prj(package, source_project, 'Moved to {0}'.format(destination_project))
def get_staging_projects(self):
"""
@ -289,6 +288,16 @@ class StagingAPI(object):
self.set_prj_pseudometa(project, newdata)
# FIXME Add sr to group request as well
def rm_from_prj(self, package, project, msg = None):
"""
Delete request from the project
:param project: project to remove from
:param package: package we want to remove
:param msg: message for the log
"""
_remove_rq_from_prj_pseudometa(project, package)
delete_package(self.apiurl, project, package, force=True, msg=msg)
def create_package_container(self, project, package, disable_build = False):
"""
@ -307,6 +316,52 @@ class StagingAPI(object):
url = makeurl(self.apiurl, ['source', project, package, '_meta'] )
http_PUT(url, data=dst_meta)
def check_project_status(self, project):
"""
Checks whether everything is built in project
:param project: project to check
"""
# Get build results
query = {}
query['lastbuild'] = 1
u = makeurl(self.apiurl, ['build', project, '_result'], query=query)
f = http_GET(u)
root = ET.fromstring(''.join(f.readlines()))
# Check them
broken = []
working = []
# Iterate through repositories
for results in root.findall('result'):
if results.get("state") not in [ "published", "unpublished" ]:
working.append({"path": "{0}/{1}".format(results.get("repository"), results.get("arch")), "state": results.get("state")})
# Iterate through packages
for node in results:
result = node.get("code")
# Skip not built (yet)
if result in [ "blocked", "building", "disabled" "excluded", "finished", "unknown", "unpublished", "published" ]:
continue
# Find broken
if result in [ "broken", "failed", "unresolvable" ]:
broken.append({"pkg": node.get("package"), "state" : result, "path" : "{0}/{1}".format(results.get("repository"),results.get("arch"))})
# Print the results
if len(working) == 0 and len(broken) == 0:
print "Everything is green!"
else:
if len(working) != 0:
print "Following repositories are still building:"
for i in working:
print " {0}: {1}".format(i['path'], i['state'])
print
if len(broken) != 0:
print "Following packages are broken:"
for i in broken:
print " {0} ({1}): {2}".format(i['pkg'], i['path'], i['state'])
print
print "Found errors in staging project {0}!".format(project)
def rq_to_prj(self, request_id, project):
"""
Links request to project - delete or submit

View File

@ -236,6 +236,44 @@ class TestApiCalls(unittest.TestCase):
self.assertEqual(httpretty.last_request().body, '<package name="wine"><title /><description /><build><disable /></build></package>')
self.assertEqual(httpretty.last_request().path, '/source/openSUSE:Factory:Staging:B/wine/_meta')
@httpretty.activate
def test_check_project_status_green(self):
"""
Test checking project status
"""
# Initiate the pretty overrides
self._register_pretty_url_get('http://localhost/build/green/_result?lastbuild=1',
'build-results-green.xml')
# Initiate the api with mocked rings
with mock_generate_ring_packages():
api = oscs.StagingAPI('http://localhost')
# Check print output
api.check_project_status("green")
self.assertEqual(sys.stdout.getvalue().strip(), "Everything is green!")
@httpretty.activate
def test_check_project_status_red(self):
"""
Test checking project status
"""
# Initiate the pretty overrides
self._register_pretty_url_get('http://localhost/build/red/_result?lastbuild=1',
'build-results-red.xml')
# Initiate the api with mocked rings
with mock_generate_ring_packages():
api = oscs.StagingAPI('http://localhost')
# Check print output
api.check_project_status("red")
with open(self._get_fixtures_dir()+"/check_project_status_red.txt", "r") as f:
data = f.read().strip()
self.assertEqual(sys.stdout.getvalue().strip(), data)
# Here place all mockable functions
@contextlib.contextmanager

40
tests/fixtures/build-results-green.xml vendored Normal file
View File

@ -0,0 +1,40 @@
<resultlist state="c7856c90c70c53fae88aacec964b80c0">
<result project="green" repository="standard" arch="x86_64" code="published" state="published">
<status package="glibc" code="unknown" />
<status package="kiwi-image-livecd-gnome.i586" code="unknown" />
<status package="kiwi-image-livecd-gnome.x86_64" code="succeeded" />
<status package="kiwi-image-livecd-kde.i586" code="unknown" />
<status package="kiwi-image-livecd-kde.x86_64" code="succeeded" />
<status package="kiwi-image-livecd-x11" code="succeeded" />
<status package="openSUSE-images" code="succeeded" />
<status package="openSUSE-release" code="unknown" />
<status package="package-lists-gnome.i586" code="unknown" />
<status package="package-lists-gnome.x86_64" code="succeeded" />
<status package="package-lists-images.i586" code="unknown" />
<status package="package-lists-images.x86_64" code="succeeded" />
<status package="package-lists-kde.i586" code="unknown" />
<status package="package-lists-kde.x86_64" code="succeeded" />
<status package="package-lists-x11.i586" code="unknown" />
<status package="package-lists-x11.x86_64" code="succeeded" />
<status package="promo-dvd-parts" code="succeeded" />
</result>
<result project="green" repository="standard" arch="i586" code="unpublished" state="unpublished">
<status package="glibc" code="unknown" />
<status package="kiwi-image-livecd-gnome.i586" code="succeeded" />
<status package="kiwi-image-livecd-gnome.x86_64" code="unknown" />
<status package="kiwi-image-livecd-kde.i586" code="succeeded" />
<status package="kiwi-image-livecd-kde.x86_64" code="unknown" />
<status package="kiwi-image-livecd-x11" code="succeeded" />
<status package="openSUSE-images" code="succeeded" />
<status package="openSUSE-release" code="unknown" />
<status package="package-lists-gnome.i586" code="succeeded" />
<status package="package-lists-gnome.x86_64" code="unknown" />
<status package="package-lists-images.i586" code="succeeded" />
<status package="package-lists-images.x86_64" code="unknown" />
<status package="package-lists-kde.i586" code="succeeded" />
<status package="package-lists-kde.x86_64" code="unknown" />
<status package="package-lists-x11.i586" code="succeeded" />
<status package="package-lists-x11.x86_64" code="unknown" />
<status package="promo-dvd-parts" code="succeeded" />
</result>
</resultlist>

40
tests/fixtures/build-results-red.xml vendored Normal file
View File

@ -0,0 +1,40 @@
<resultlist state="c7856c90c70c53fae88aacec964b80c0">
<result project="green" repository="standard" arch="x86_64" code="building" state="building">
<status package="glibc" code="unknown" />
<status package="kiwi-image-livecd-gnome.i586" code="unknown" />
<status package="kiwi-image-livecd-gnome.x86_64" code="succeeded" />
<status package="kiwi-image-livecd-kde.i586" code="unknown" />
<status package="kiwi-image-livecd-kde.x86_64" code="succeeded" />
<status package="kiwi-image-livecd-x11" code="succeeded" />
<status package="openSUSE-images" code="succeeded" />
<status package="openSUSE-release" code="unknown" />
<status package="package-lists-gnome.i586" code="unknown" />
<status package="package-lists-gnome.x86_64" code="succeeded" />
<status package="package-lists-images.i586" code="unknown" />
<status package="package-lists-images.x86_64" code="succeeded" />
<status package="package-lists-kde.i586" code="unknown" />
<status package="package-lists-kde.x86_64" code="succeeded" />
<status package="package-lists-x11.i586" code="unknown" />
<status package="package-lists-x11.x86_64" code="succeeded" />
<status package="promo-dvd-parts" code="succeeded" />
</result>
<result project="green" repository="standard" arch="i586" code="unpublished" state="unpublished">
<status package="glibc" code="broken" />
<status package="kiwi-image-livecd-gnome.i586" code="succeeded" />
<status package="kiwi-image-livecd-gnome.x86_64" code="unknown" />
<status package="kiwi-image-livecd-kde.i586" code="succeeded" />
<status package="kiwi-image-livecd-kde.x86_64" code="unknown" />
<status package="kiwi-image-livecd-x11" code="succeeded" />
<status package="openSUSE-images" code="failed" />
<status package="openSUSE-release" code="unknown" />
<status package="package-lists-gnome.i586" code="succeeded" />
<status package="package-lists-gnome.x86_64" code="unknown" />
<status package="package-lists-images.i586" code="succeeded" />
<status package="package-lists-images.x86_64" code="unknown" />
<status package="package-lists-kde.i586" code="succeeded" />
<status package="package-lists-kde.x86_64" code="unknown" />
<status package="package-lists-x11.i586" code="succeeded" />
<status package="package-lists-x11.x86_64" code="unknown" />
<status package="promo-dvd-parts" code="succeeded" />
</result>
</resultlist>

View File

@ -0,0 +1,8 @@
Following repositories are still building:
standard/x86_64: building
Following packages are broken:
glibc (standard/i586): broken
openSUSE-images (standard/i586): failed
Found errors in staging project red!