diff options
author | Lars Wirzenius <liw@liw.fi> | 2018-01-13 11:10:22 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2018-01-14 22:23:44 +0200 |
commit | 2fb35dbf240323ba5391937bc6c4fba895750029 (patch) | |
tree | 37e328900c42d9ecf35ae39dca011285c2396f44 /ick2/workapi.py | |
parent | 769f03d7ff1709a43c0b82c131fae494f67cf08f (diff) | |
download | ick2-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.py | 38 |
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 |