"""
Called when this build has successfully finished
"""
+ builds = None
+
# Log this
if success:
log.info("Build %s has finished" % self)
# Create any test builds
if success:
- return await self.create_test_builds()
+ builds = await self.create_test_builds()
+
+ # Notify the group that build has finished
+ if self.group:
+ await self.group._build_finished(self)
+
+ return builds
def has_finished(self):
"""
def created_at(self):
return self.data.created_at
+ # Finished At
+
+ @property
+ def finished_at(self):
+ return self.data.finished_at
+
# Builds
@lazy_property
def has_failed(self):
"""
- Returns True if at least one job has failed
+ Returns True if at least one build has failed
"""
- return any((b.has_failed() for b in self.builds))
+ return self.failed is True
def is_successful(self):
"""
Returns True if all jobs have been successful
"""
- return all((b.is_successful() for b in self.builds))
+ return self.has_finished() and self.failed is False
def has_finished(self):
+ """
+ Returns True if all builds have finished
+ """
+ if self.data.finished_at:
+ return True
+
+ return False
+
+ def all_finished(self):
"""
Returns True if all builds have finished
"""
return all((b.has_finished() for b in self.builds))
+ def is_test(self):
+ """
+ Returns True if this is a test group (i.e. all builds are test builds)
+ """
+ return all((b.is_test() for b in self.builds))
+
+ async def _build_finished(self, build):
+ """
+ Called when a build has finished
+ """
+ # Fail this group if one build has failed
+ if build.has_failed():
+ await self.failed()
+
+ # Finished when all builds have finished
+ if self.all_finished():
+ await self.finished()
+
+ async def finished(self):
+ """
+ Called when all builds in this group have finished
+ """
+ # Only call once
+ if self.has_finished():
+ return
+
+ log.info("Build group %s has finished" % self)
+
+ # Mark as finished
+ self._set_attribute_now("finished_at")
+
+ # XXX call the build that that has created this group for test builds
+
+ async def failed(self):
+ """
+ Called when this group is considered failed
+ """
+ # Do nothing if already failed
+ if self.has_failed():
+ return
+
+ log.error("Build group %s has failed" % self)
+
+ # Mark as failed
+ self._set_attribute("failed", True)
+
class Comments(base.Object):
def _get_comments(self, query, *args):