aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'buildbot_gentoo_ci/steps')
-rw-r--r--buildbot_gentoo_ci/steps/clean.py97
-rw-r--r--buildbot_gentoo_ci/steps/package.py45
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