summaryrefslogtreecommitdiff
path: root/ick2/workapi.py
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-01-13 11:10:22 +0200
committerLars Wirzenius <liw@liw.fi>2018-01-14 22:23:44 +0200
commit2fb35dbf240323ba5391937bc6c4fba895750029 (patch)
tree37e328900c42d9ecf35ae39dca011285c2396f44 /ick2/workapi.py
parent769f03d7ff1709a43c0b82c131fae494f67cf08f (diff)
downloadick2-2fb35dbf240323ba5391937bc6c4fba895750029.tar.gz
Add: move actions for a build into build resource
This way the list is known later even if the pipeline spec is changed.
Diffstat (limited to 'ick2/workapi.py')
-rw-r--r--ick2/workapi.py38
1 files changed, 27 insertions, 11 deletions
diff --git a/ick2/workapi.py b/ick2/workapi.py
index f4c76a7..7edafe0 100644
--- a/ick2/workapi.py
+++ b/ick2/workapi.py
@@ -23,6 +23,7 @@ class WorkAPI(ick2.APIbase):
self._workers = ick2.Workers(state)
self._projects = ick2.Projects(state)
self._pinstances = ick2.PipelineInstances(state)
+ self._builds = ick2.Builds(state)
self._type_name = 'work'
def get_routes(self, path): # pragma: no cover
@@ -55,8 +56,10 @@ class WorkAPI(ick2.APIbase):
self._start_build(project, pipeline, worker, build_id)
self._start_log(build_id)
+ build = self._get_build(build_id)
+ actions = build['actions']
+ current_action = build['current_action']
- index = 0
doing = {
'build_id': build_id,
'worker': worker,
@@ -64,8 +67,7 @@ class WorkAPI(ick2.APIbase):
'pipeline': pipeline['name'],
'parameters': project.get('parameters', {}),
'fresh_workspace': True,
- 'step': pipeline['actions'][index],
- 'step_index': index,
+ 'step': actions[current_action],
'log': '/logs/{}'.format(build_id),
}
@@ -108,10 +110,15 @@ class WorkAPI(ick2.APIbase):
'pipeline': pipeline['name'],
'parameters': parameters,
'status': 'building',
+ 'actions': pipeline['actions'],
+ 'current_action': 0,
}
- self._state.add_resource('builds', str(build_id), build)
+ self._builds.add(build_id, build)
return build_id
+ def _get_build(self, build_id):
+ return self._builds.get(build_id)
+
def _start_log(self, build_id):
ick2.log.log('info', msg_text='Starting new log', build_id=build_id)
log = {
@@ -134,16 +141,20 @@ class WorkAPI(ick2.APIbase):
exit_code = update.get('exit_code')
if exit_code == 0:
- index = doing['step_index'] + 1
- actions = pipeline['actions']
- if index >= len(actions):
+ build_id = doing['build_id']
+ build = self._get_build(build_id)
+ actions = build['actions']
+ current_action = build['current_action']
+ if current_action + 1 >= len(actions):
pipeline['status'] = 'idle'
self._update_pipeline(project, pipeline)
doing = {}
self._finish_build(update)
else:
- doing['step_index'] = index
- doing['step'] = dict(actions[index])
+ index = current_action + 1
+ build['current_action'] = index
+ self._update_build(build)
+ doing['step'] = actions[index]
doing['fresh_workspace'] = False
worker_state = {
@@ -197,10 +208,15 @@ class WorkAPI(ick2.APIbase):
log['log'] += text
self._state.update_resource('log', str(build_id), log)
+ def _update_build(self, build):
+ self._builds.update_build(build)
+
def _finish_build(self, update):
- build = self._state.get_resource('builds', str(update['build_id']))
+ build_id = update['build_id']
+ build = self._get_build(build_id)
build['status'] = update['exit_code']
- self._state.update_resource('builds', str(update['build_id']), build)
+ build['current_action'] = None
+ self._update_build(build)
def create(self, body, **kwargs): # pragma: no cover
pass