diff options
Diffstat (limited to 'buildbot_gentoo_ci/steps')
-rw-r--r-- | buildbot_gentoo_ci/steps/clean.py | 97 | ||||
-rw-r--r-- | buildbot_gentoo_ci/steps/package.py | 45 |
2 files changed, 142 insertions, 0 deletions
diff --git a/buildbot_gentoo_ci/steps/clean.py b/buildbot_gentoo_ci/steps/clean.py new file mode 100644 index 0000000..73733f1 --- /dev/null +++ b/buildbot_gentoo_ci/steps/clean.py @@ -0,0 +1,97 @@ +# Copyright 2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +from twisted.internet import defer +from twisted.python import log + +from buildbot.process.buildstep import BuildStep +from buildbot.process.results import SUCCESS +from buildbot.process.results import FAILURE +from buildbot.process.results import SKIPPED +from buildbot.plugins import steps, util + +class SetupPropertys(BuildStep): + name = 'Setup propertys for clean db' + description = 'Running' + descriptionSuffix = None + haltOnFailure = True + flunkOnFailure = True + + def __init__(self, **kwargs): + super().__init__(**kwargs) + + @defer.inlineCallbacks + def run(self): + self.gentooci = self.master.namedServices['services'].namedServices['gentooci'] + aftersteps_list = [] + # Check on deleted ebuild on package + deleted_ebuilds_data = yield self.gentooci.db.versions.getEbuildsByPackage(self.getProperty("package_data")['uuid'], deleted=True) + # check if older then X days + #FIXME: set days in config and move the check to db side + days = 30 + days_in_s = 86400 * days + now = int(self.master.reactor.seconds()) + for ebuild_data in deleted_ebuilds_data: + no_bug = True + # check if older the days + if ebuild_data['deleted_at'] < (now - days_in_s): + print(f"Ebuild : {ebuild_data['uuid']} will be removed") + # get build_data for deleted_ebuild_data['uuid'] + build_data_list = yield self.gentooci.db.builds.getBuildsByVersionUuid(ebuild_data['uuid']) + print(build_data_list) + for build_data in build_data_list: + if build_data['bug_id'] == 0: + # get buildsets + print(f"Build : {build_data['id']} will be removed") + yield self.build.addStepsAfterCurrentStep([RemoveBuildFromDb(build_data)]) + else: + no_bug = False + if no_bug: + yield self.build. addStepsAfterLastStep([RemoveEbuildFromDb(ebuild_data)]) + return SUCCESS + +class RemoveEbuildFromDb(BuildStep): + name = 'Clean ebuild from db' + description = 'Running' + descriptionSuffix = None + haltOnFailure = True + flunkOnFailure = True + + def __init__(self, ebuild_data, **kwargs): + self.ebuild_data = ebuild_data + super().__init__(**kwargs) + + @defer.inlineCallbacks + def run(self): + self.gentooci = self.master.namedServices['services'].namedServices['gentooci'] + yield self.gentooci.db.versions.removeVersionKeyword(self.ebuild_data['uuid']) + yield self.gentooci.db.versions.removeVersionMetadata(self.ebuild_data['uuid']) + yield self.gentooci.db.versions.removeVersion(self.ebuild_data['uuid']) + self.descriptionDone = f"Ebuild : {self.ebuild_data['uuid']} will be removed" + return SUCCESS + +class RemoveBuildFromDb(BuildStep): + name = 'Clean builds from db' + description = 'Running' + descriptionSuffix = None + haltOnFailure = True + flunkOnFailure = True + + def __init__(self, build_data, **kwargs): + self.build_data = build_data + super().__init__(**kwargs) + + @defer.inlineCallbacks + def run(self): + self.gentooci = self.master.namedServices['services'].namedServices['gentooci'] + if self.build_data['buildbot_build_id'] != 0: + self.descriptionDone = f"BuildBot Build : {self.build_data['buildbot_build_id']} will be removed" + bb_build_data = yield self.master.db.builds.getBuild(self.build_data['buildbot_build_id']) + # remove buildbot data on db + # remove steps and logs + yield self.master.db.logs.deleteLogChunks(self.build_data['buildbot_build_id']) + # remove propertys + # get buildsets + # remove build_data + yield self.gentooci.db.builds.removeBuild(self.build_data['id']) + return SUCCESS diff --git a/buildbot_gentoo_ci/steps/package.py b/buildbot_gentoo_ci/steps/package.py index 13eafa2..847ba12 100644 --- a/buildbot_gentoo_ci/steps/package.py +++ b/buildbot_gentoo_ci/steps/package.py @@ -12,6 +12,7 @@ from twisted.python import log from buildbot.process.buildstep import BuildStep from buildbot.process.results import SUCCESS from buildbot.process.results import FAILURE +from buildbot.process.results import SKIPPED from buildbot.process import remotecommand from buildbot.plugins import steps @@ -282,3 +283,47 @@ class TriggerCheckForV(BuildStep): ) yield self.build.addStepsAfterCurrentStep(addStepUpdateVData) return SUCCESS + +class TriggerCleanPackageDb(BuildStep): + def __init__(self, **kwargs): + super().__init__(**kwargs) + + name = 'TriggerCleanPackageDb' + description = 'Running' + descriptionSuffix = None + haltOnFailure = True + flunkOnFailure = True + + @defer.inlineCallbacks + def run(self): + self.gentooci = self.master.namedServices['services'].namedServices['gentooci'] + aftersteps_list = [] + # Check on deleted ebuild on package + deleted_ebuilds_data = yield self.gentooci.db.versions.getEbuildsByPackage(self.getProperty("package_data")['uuid'], deleted=True) + # check if older then X days + #FIXME: set days in config and move the check to db side + days = 30 + days_in_s = 86400 * days + needcleaning = 0 + now = int(self.master.reactor.seconds()) + for deleted_ebuild_data in deleted_ebuilds_data: + # check if older the days + if deleted_ebuild_data['deleted_at'] < (now - days_in_s): + needcleaning = needcleaning + 1 + print(f"{str(needcleaning)} ebuilds need cleaning in db") + if needcleaning > 0: + aftersteps_list.append( + steps.Trigger( + schedulerNames=['run_clean_db_request'], + waitForFinish=False, + updateSourceStamp=False, + set_properties={ + 'package_data' : self.getProperty("package_data"), + } + ) + ) + yield self.build.addStepsAfterCurrentStep(aftersteps_list) + self.descriptionDone = f"Need DB Cleaning: Yes" + return SUCCESS + self.descriptionDone = f"Need DB Cleaning: No" + return SKIPPED |