def supported_arches(self):
return self.pkg.supported_arches
+ # Jobs
+
def _get_jobs(self, query, *args):
ret = []
for job in self.backend.jobs._get_jobs(query, *args):
return self._get_jobs("SELECT * FROM jobs \
WHERE build_id = %s AND test IS TRUE", self.id)
- @property
- def all_jobs_finished(self):
- ret = True
-
- for job in self.jobs:
- if not job.state == "finished":
- ret = False
- break
-
- return ret
-
def _create_jobs(self):
"""
Called after a build has been created and creates all jobs
for arch in arches:
self.backend.jobs.create(self, arch)
+ async def _job_finished(self, job):
+ """
+ Called when a job finished.
+
+ This function will determine the status of the build and run and actions.
+ """
+ # Nothing to do, if this build has already finished
+ if self.has_finished():
+ return
+
+ # If all jobs have finished, the build has finished
+ elif all((j.has_finished() for j in self.jobs)):
+ return await self.finished()
+
+ # If there are any failed jobs, the build has failed
+ elif any((j.has_failed() for j in self.jobs)):
+ return await self.failed()
+
## Comment stuff
def comment(self, *args, **kwargs):
# XXX add any permanent watchers
+ # Actions
+
+ async def finished(self):
+ """
+ Called when this build has successfully finished
+ """
+ pass # XXX TODO
+
+ def has_finished(self):
+ """
+ Returns True if this build has finished
+ """
+ if self.finished_at:
+ return True
+
+ return False
+
+ async def failed(self):
+ """
+ Called when the build has failed
+ """
+ pass # XXX TODO
+
@property
def message_recipients(self):
ret = []