diff options
author | Lars Wirzenius <liw@liw.fi> | 2016-03-06 22:16:14 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2016-03-06 22:16:14 +0200 |
commit | cdf8374246ac6b9ed91ef79b46a4aac99f104d52 (patch) | |
tree | 51b390cfb978ca04536bccd623b6fe69173cd334 | |
parent | b0ab0be773938324d74c56d060ae191a28b808dd (diff) | |
download | ick-cdf8374246ac6b9ed91ef79b46a4aac99f104d52.tar.gz |
Move {Create,Finish}BuildInfo to a separate module
-rw-r--r-- | icklib/__init__.py | 1 | ||||
-rw-r--r-- | icklib/project.py | 88 | ||||
-rw-r--r-- | icklib/step_build_info.py | 94 | ||||
-rw-r--r-- | without-tests | 1 |
4 files changed, 104 insertions, 80 deletions
diff --git a/icklib/__init__.py b/icklib/__init__.py index 6a153f1..9cc5e62 100644 --- a/icklib/__init__.py +++ b/icklib/__init__.py @@ -23,6 +23,7 @@ from .build_step import BuildStep from .run_state import RunState from .pipeline import BuildPipeline from .os_release import parse_os_release, OsRelease, NoOsReleaseInformation +from .step_build_info import CreateBuildInfo, FinishBuildInfo from .step_project_info import LoadProjectInfo, SaveProjectInfo from .project import create_projects_from_ick from .git import GitClone diff --git a/icklib/project.py b/icklib/project.py index d8f6570..3e4b609 100644 --- a/icklib/project.py +++ b/icklib/project.py @@ -356,78 +356,6 @@ class FindTagsToBuildForDebianRelease(icklib.BuildStep): return re.match(pattern, tag[len(prefix):]) -class CreateBuildInfo(icklib.BuildStep): - - def build(self): - # Only store a build info if we're doing a build. - if not self.going_to_build(self.run_state): - return - - build_infos = self.statedir.get_build_infos(self.project.name) - - build_number = self.get_next_build_number(self.run_state) - self.run_state.project_info.save() # Don't want to lose this if crash. - self.run_state.build_info = self.statedir.create_new_build( - self.project.name, build_number) - self.run_state.build_info.status = 'RUNNING' - - self.pivot_to_real_build_log_file(self.run_state) - - # Fill in some fields from previous build, if any. - if build_infos: - for field in ['commit']: - if hasattr(build_infos[-1], field): - value = getattr(build_infos[-1], field) - setattr(self.run_state.build_info, field, value) - - # Copy in new values from run_state. - for field in ['commits']: - if hasattr(self.run_state, field): - value = getattr(self.run_state, field) - if value is not None: - setattr(self.run_state.build_info, field, value) - - self.run_state.build_info.pipeline = self.pipeline.name - - self.run_state.build_info.save() - - def going_to_build(self, run_state): - names = [ - 'build_using_shell', - 'build_using_local_shell', - 'build_using_debian_ci', - 'build_tags_using_debian_release', - ] - return any(getattr(run_state, x, False) for x in names) - - def get_next_build_number(self, run_state): - pi = run_state.project_info - if pi.next_build_number is None: - pi.next_build_number = 1 - result = pi.next_build_number - pi.next_build_number += 1 - return result - - def pivot_to_real_build_log_file(self, run_state): - filename = run_state.build_info.get_build_log_filename() - fileurl = urlparse.urljoin('file://', filename) - run_state.logger.important('Build log at {location}', location=fileurl) - f = open(filename, 'w') - f.write(run_state.log_catcher.getvalue()) - run_state.logger.drop_output_file(run_state.log_catcher) - run_state.logger.add_output_file(f, False) - - -class FinishBuildInfo(icklib.BuildStep): - - def build(self): - if self.run_state.build_info is not None: - self.run_state.build_info.status = 'SUCCESS' - self.run_state.build_info.duration = ( - time.time() - self.run_state.started) - self.run_state.build_info.save() - - class RunShellCommandsOnEachTarget(icklib.BuildStep): def build(self): @@ -1085,9 +1013,9 @@ def create_projects_from_ick(ick, wanted_names): CloneGits, FindCurrentGitCommits, FindNewCommitToBuildForShell, - CreateBuildInfo, + icklib.CreateBuildInfo, RunShellCommandsOnEachTarget, - FinishBuildInfo, + icklib.FinishBuildInfo, icklib.SaveProjectInfo, ], 'local-shell': [ @@ -1095,9 +1023,9 @@ def create_projects_from_ick(ick, wanted_names): CloneGits, FindCurrentGitCommits, FindNewCommitToBuildForLocalShell, - CreateBuildInfo, + icklib.CreateBuildInfo, RunLocalShellCommands, - FinishBuildInfo, + icklib.FinishBuildInfo, icklib.SaveProjectInfo, ], 'debian-ci': [ @@ -1105,7 +1033,7 @@ def create_projects_from_ick(ick, wanted_names): CloneGits, FindCurrentGitCommits, FindNewCommitToBuildForDebianCI, - CreateBuildInfo, + icklib.CreateBuildInfo, CollectDebianInfoAboutTargets, CreateCITarball, CreateDebianSourcePackagesForCI, @@ -1113,7 +1041,7 @@ def create_projects_from_ick(ick, wanted_names): FindDebianChangesFiles, SetupAPTRepository, UploadDebianPackagesToCIRepo, - FinishBuildInfo, + icklib.FinishBuildInfo, icklib.SaveProjectInfo, ], 'debian-release': [ @@ -1121,7 +1049,7 @@ def create_projects_from_ick(ick, wanted_names): CloneGits, FindCurrentGitCommits, FindTagsToBuildForDebianRelease, - CreateBuildInfo, + icklib.CreateBuildInfo, CollectDebianInfoAboutTargets, CreateReleaseTarballs, CreateDebianSourcePackagesForRelease, @@ -1130,7 +1058,7 @@ def create_projects_from_ick(ick, wanted_names): SetupAPTRepository, UploadDebianPackagesToCIRepo, PublishDebianPackages, - FinishBuildInfo, + icklib.FinishBuildInfo, icklib.SaveProjectInfo, ], } diff --git a/icklib/step_build_info.py b/icklib/step_build_info.py new file mode 100644 index 0000000..ccc3b59 --- /dev/null +++ b/icklib/step_build_info.py @@ -0,0 +1,94 @@ +# Copyright 2016 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# =*= License: GPL-3+ =*= + + +import time +import urlparse + +import icklib + + +class CreateBuildInfo(icklib.BuildStep): + + def build(self): + # Only store a build info if we're doing a build. + if not self.going_to_build(self.run_state): + return + + build_infos = self.statedir.get_build_infos(self.project.name) + + build_number = self.get_next_build_number(self.run_state) + self.run_state.project_info.save() # Don't want to lose this if crash. + self.run_state.build_info = self.statedir.create_new_build( + self.project.name, build_number) + self.run_state.build_info.status = 'RUNNING' + + self.pivot_to_real_build_log_file(self.run_state) + + # Fill in some fields from previous build, if any. + if build_infos: + for field in ['commit']: + if hasattr(build_infos[-1], field): + value = getattr(build_infos[-1], field) + setattr(self.run_state.build_info, field, value) + + # Copy in new values from run_state. + for field in ['commits']: + if hasattr(self.run_state, field): + value = getattr(self.run_state, field) + if value is not None: + setattr(self.run_state.build_info, field, value) + + self.run_state.build_info.pipeline = self.pipeline.name + + self.run_state.build_info.save() + + def going_to_build(self, run_state): + names = [ + 'build_using_shell', + 'build_using_local_shell', + 'build_using_debian_ci', + 'build_tags_using_debian_release', + ] + return any(getattr(run_state, x, False) for x in names) + + def get_next_build_number(self, run_state): + pi = run_state.project_info + if pi.next_build_number is None: + pi.next_build_number = 1 + result = pi.next_build_number + pi.next_build_number += 1 + return result + + def pivot_to_real_build_log_file(self, run_state): + filename = run_state.build_info.get_build_log_filename() + fileurl = urlparse.urljoin('file://', filename) + run_state.logger.important('Build log at {location}', location=fileurl) + f = open(filename, 'w') + f.write(run_state.log_catcher.getvalue()) + run_state.logger.drop_output_file(run_state.log_catcher) + run_state.logger.add_output_file(f, False) + + +class FinishBuildInfo(icklib.BuildStep): + + def build(self): + if self.run_state.build_info is not None: + self.run_state.build_info.status = 'SUCCESS' + self.run_state.build_info.duration = ( + time.time() - self.run_state.started) + self.run_state.build_info.save() diff --git a/without-tests b/without-tests index bff94bf..4765ff4 100644 --- a/without-tests +++ b/without-tests @@ -4,4 +4,5 @@ icklib/project.py icklib/info.py icklib/version.py icklib/progress.py +icklib/step_build_info.py icklib/step_project_info.py |