* [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
@ 2021-02-27 23:00 Magnus Granberg
0 siblings, 0 replies; 9+ messages in thread
From: Magnus Granberg @ 2021-02-27 23:00 UTC (permalink / raw
To: gentoo-commits
commit: 0db09acc4ba75ea8343465083d8e16d897708b47
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 27 22:59:29 2021 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sat Feb 27 22:59:29 2021 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=0db09acc
Move the steps that have with portage to do to portage
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/buildfactorys.py | 6 +-
buildbot_gentoo_ci/steps/builders.py | 197 -----------------------------
buildbot_gentoo_ci/steps/portage.py | 197 +++++++++++++++++++++++++++++
3 files changed, 200 insertions(+), 200 deletions(-)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index acafed8..b592541 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -106,15 +106,15 @@ def run_build_request():
#NOTE: pkgcheck do not support it as a dir
#f.addStep(buildbot_steps.MakeDirectory(dir="make.profile",
# workdir='/etc/portage/'))
- f.addStep(builders.SetMakeProfile())
+ f.addStep(portage.SetMakeProfile())
# setup repos.conf dir
f.addStep(buildbot_steps.MakeDirectory(dir="repos.conf",
workdir='/etc/portage/'))
- f.addStep(builders.SetReposConf())
+ f.addStep(portage.SetReposConf())
# update the repositorys listed in project_repository
f.addStep(builders.UpdateRepos())
# setup make.conf
- f.addStep(builders.SetMakeConf())
+ f.addStep(portage.SetMakeConf())
# setup env
f.addStep(portage.SetEnvDefault())
# setup package.*
diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py
index 3c19345..81d6e95 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -196,106 +196,6 @@ class SetupPropertys(BuildStep):
self.setProperty('cpv_build', False, 'cpv_build')
return SUCCESS
-class SetMakeProfile(BuildStep):
-
- name = 'SetMakeProfile'
- description = 'Running'
- descriptionDone = 'Ran'
- 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']
- portage_repos_path = self.getProperty('portage_repos_path')
- project_data = self.getProperty('project_data')
- profile_repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(project_data['profile_repository_uuid'])
- makeprofiles_paths = []
- #NOTE: pkgcheck don't support make.profile as a dir
- # we only support one line in db
- makeprofiles_data = yield self.gentooci.db.projects.getAllProjectPortageByUuidAndDirectory(project_data['uuid'], 'make.profile')
- for makeprofile in makeprofiles_data:
- makeprofile_path = yield os.path.join(portage_repos_path, profile_repository_data['name'], 'profiles', makeprofile['value'], '')
- # makeprofiles_paths.append('../../..' + makeprofile_path)
- #separator = '\n'
- #makeprofile_path_string = separator.join(makeprofiles_paths)
- # yield self.build.addStepsAfterCurrentStep([
- # steps.StringDownload(makeprofile_path_string + separator,
- # workerdest="make.profile/parent",
- # workdir='/etc/portage/')
- # ])
- #NOTE: pkgcheck profile link
- shell_commad_list = [
- 'ln',
- '-s'
- ]
- shell_commad_list.append(makeprofile_path)
- shell_commad_list.append('/etc/portage/make.profile')
- yield self.build.addStepsAfterCurrentStep([
- steps.ShellCommandNewStyle(
- command=shell_commad_list,
- workdir='/'
- )
- ])
- return SUCCESS
-
-class SetReposConf(BuildStep):
-
- name = 'SetReposConf'
- description = 'Running'
- descriptionDone = 'Ran'
- 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']
- portage_repos_path = self.getProperty('portage_repos_path')
- project_data = self.getProperty('project_data')
- # setup the default.conf
- repos_conf_data = yield self.gentooci.db.projects.getProjectPortageByUuidAndDirectory(project_data['uuid'], 'repos.conf')
- if repos_conf_data is None:
- print('Default repo is not set in repos.conf')
- return FAILURE
- # check if repos_conf_data['value'] is vaild repo name
- separator = '\n'
- default_conf = []
- default_conf.append('[DEFAULT]')
- default_conf.append('main-repo = ' + repos_conf_data['value'])
- default_conf.append('auto-sync = no')
- default_conf_string = separator.join(default_conf)
- yield self.build.addStepsAfterCurrentStep([
- steps.StringDownload(default_conf_string + separator,
- workerdest="repos.conf/default.conf",
- workdir='/etc/portage/')
- ])
- # add all repos that project have in projects_repositorys to repos.conf/reponame.conf
- projects_repositorys_data = yield self.gentooci.db.projects.getRepositorysByProjectUuid(project_data['uuid'])
- for project_repository_data in projects_repositorys_data:
- repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(project_repository_data['repository_uuid'])
- repository_path = yield os.path.join(portage_repos_path, repository_data['name'])
- repository_conf = []
- repository_conf.append('[' + repository_data['name'] + ']')
- repository_conf.append('location = ' + repository_path)
- repository_conf.append('sync-uri = ' + repository_data['mirror_url'])
- repository_conf.append('sync-type = git')
- repository_conf.append('auto-sync = no')
- repository_conf_string = separator.join(repository_conf)
- yield self.build.addStepsAfterCurrentStep([
- steps.StringDownload(repository_conf_string + separator,
- workerdest='repos.conf/' + repository_data['name'] + '.conf',
- workdir='/etc/portage/')
- ])
- return SUCCESS
-
class UpdateRepos(BuildStep):
name = 'UpdateRepos'
@@ -326,103 +226,6 @@ class UpdateRepos(BuildStep):
])
return SUCCESS
-class SetMakeConf(BuildStep):
-
- name = 'SetMakeConf'
- description = 'Running'
- descriptionDone = 'Ran'
- descriptionSuffix = None
- haltOnFailure = True
- flunkOnFailure = True
-
- def __init__(self, **kwargs):
- super().__init__(**kwargs)
-
- @defer.inlineCallbacks
- def run(self):
- #FIXME: Make a dict before we pass it to the make.conf
- self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
- project_data = self.getProperty('project_data')
- makeconf_variables_data = yield self.gentooci.db.portages.getVariables()
- separator1 = '\n'
- separator2 = ' '
- makeconf_list = []
- for k in makeconf_variables_data:
- makeconf_variables_values_data = yield self.gentooci.db.projects.getProjectMakeConfById(project_data['uuid'], k['id'])
- makeconf_variable_list = []
- # we add some default values
- #FIXME:
- # we could set them in a config variables
- # FEATURES
- if k['variable'] == 'FEATURES':
- makeconf_variable_list.append('xattr')
- makeconf_variable_list.append('cgroup')
- makeconf_variable_list.append('-news')
- makeconf_variable_list.append('-collision-protect')
- # EMERGE_DEFAULT_OPTS
- if k['variable'] == 'EMERGE_DEFAULT_OPTS':
- makeconf_variable_list.append('--buildpkg=y')
- makeconf_variable_list.append('--rebuild-if-new-rev=y')
- makeconf_variable_list.append('--rebuilt-binaries=y')
- makeconf_variable_list.append('--usepkg=y')
- makeconf_variable_list.append('--binpkg-respect-use=y')
- makeconf_variable_list.append('--binpkg-changed-deps=y')
- makeconf_variable_list.append('--nospinner')
- makeconf_variable_list.append('--color=n')
- makeconf_variable_list.append('--ask=n')
- # CFLAGS
- if k['variable'] == 'CFLAGS' or k['variable'] == 'FCFLAGS':
- makeconf_variable_list.append('-O2')
- makeconf_variable_list.append('-pipe')
- makeconf_variable_list.append('-march=native')
- makeconf_variable_list.append('-fno-diagnostics-color')
- #FIXME:
- # Depend on worker we may have to add a diffrent march
- if k['variable'] == 'CXXFLAGS':
- makeconf_variable_list.append('${CFLAGS}')
- if k['variable'] == 'FFLAGS':
- makeconf_variable_list.append('${FCFLAGS}')
- if k['variable'] == 'ACCEPT_PROPERTIES':
- makeconf_variable_list.append('-interactive')
- if k['variable'] == 'ACCEPT_RESTRICT':
- makeconf_variable_list.append('-fetch')
- for v in makeconf_variables_values_data:
- if v['build_id'] == 0:
- makeconf_variable_list.append(v['value'])
- if k['variable'] == 'ACCEPT_LICENSE' and makeconf_variable_list != []:
- makeconf_variable_list.append('ACCEPT_LICENSE="*"')
- if makeconf_variable_list != []:
- makeconf_variable_string = k['variable'] + '="' + separator2.join(makeconf_variable_list) + '"'
- makeconf_list.append(makeconf_variable_string)
- # add hardcoded variables and values
- #FIXME:
- # we could set them in a config variables
- makeconf_list.append('LC_MESSAGES=C')
- makeconf_list.append('NOCOLOR="true"')
- makeconf_list.append('GCC_COLORS=""')
- makeconf_list.append('PORTAGE_TMPFS="/dev/shm"')
- makeconf_list.append('CLEAN_DELAY=0')
- makeconf_list.append('NOCOLOR=true')
- makeconf_list.append('PORT_LOGDIR="/var/cache/portage/logs"')
- makeconf_list.append('PKGDIR="/var/cache/portage/packages"')
- makeconf_list.append('PORTAGE_ELOG_CLASSES="qa"')
- makeconf_list.append('PORTAGE_ELOG_SYSTEM="save"')
- # add ACCEPT_KEYWORDS from the project_data info
- keyword_data = yield self.gentooci.db.keywords.getKeywordById(project_data['keyword_id'])
- if project_data['status'] == 'unstable':
- makeconf_keyword = '~' + keyword_data['name']
- else:
- makeconf_keyword = keyword_data['name']
- makeconf_list.append('ACCEPT_KEYWORDS="' + makeconf_keyword + '"')
- makeconf_string = separator1.join(makeconf_list)
- print(makeconf_string)
- yield self.build.addStepsAfterCurrentStep([
- steps.StringDownload(makeconf_string + separator1,
- workerdest="make.conf",
- workdir='/etc/portage/')
- ])
- return SUCCESS
-
class RunEmerge(BuildStep):
name = 'RunEmerge'
diff --git a/buildbot_gentoo_ci/steps/portage.py b/buildbot_gentoo_ci/steps/portage.py
index 52daf83..30361e6 100644
--- a/buildbot_gentoo_ci/steps/portage.py
+++ b/buildbot_gentoo_ci/steps/portage.py
@@ -11,6 +11,203 @@ from buildbot.process.results import SUCCESS
from buildbot.process.results import FAILURE
from buildbot.plugins import steps
+class SetMakeProfile(BuildStep):
+
+ name = 'SetMakeProfile'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ 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']
+ portage_repos_path = self.getProperty('portage_repos_path')
+ project_data = self.getProperty('project_data')
+ profile_repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(project_data['profile_repository_uuid'])
+ makeprofiles_paths = []
+ #NOTE: pkgcheck don't support make.profile as a dir
+ # we only support one line in db
+ makeprofiles_data = yield self.gentooci.db.projects.getAllProjectPortageByUuidAndDirectory(project_data['uuid'], 'make.profile')
+ for makeprofile in makeprofiles_data:
+ makeprofile_path = yield os.path.join(portage_repos_path, profile_repository_data['name'], 'profiles', makeprofile['value'], '')
+ # makeprofiles_paths.append('../../..' + makeprofile_path)
+ #separator = '\n'
+ #makeprofile_path_string = separator.join(makeprofiles_paths)
+ # yield self.build.addStepsAfterCurrentStep([
+ # steps.StringDownload(makeprofile_path_string + separator,
+ # workerdest="make.profile/parent",
+ # workdir='/etc/portage/')
+ # ])
+ #NOTE: pkgcheck profile link
+ shell_commad_list = [
+ 'ln',
+ '-s'
+ ]
+ shell_commad_list.append(makeprofile_path)
+ shell_commad_list.append('/etc/portage/make.profile')
+ yield self.build.addStepsAfterCurrentStep([
+ steps.ShellCommandNewStyle(
+ command=shell_commad_list,
+ workdir='/'
+ )
+ ])
+ return SUCCESS
+
+class SetReposConf(BuildStep):
+
+ name = 'SetReposConf'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ 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']
+ portage_repos_path = self.getProperty('portage_repos_path')
+ project_data = self.getProperty('project_data')
+ # setup the default.conf
+ repos_conf_data = yield self.gentooci.db.projects.getProjectPortageByUuidAndDirectory(project_data['uuid'], 'repos.conf')
+ if repos_conf_data is None:
+ print('Default repo is not set in repos.conf')
+ return FAILURE
+ # check if repos_conf_data['value'] is vaild repo name
+ separator = '\n'
+ default_conf = []
+ default_conf.append('[DEFAULT]')
+ default_conf.append('main-repo = ' + repos_conf_data['value'])
+ default_conf.append('auto-sync = no')
+ default_conf_string = separator.join(default_conf)
+ yield self.build.addStepsAfterCurrentStep([
+ steps.StringDownload(default_conf_string + separator,
+ workerdest="repos.conf/default.conf",
+ workdir='/etc/portage/')
+ ])
+ # add all repos that project have in projects_repositorys to repos.conf/reponame.conf
+ projects_repositorys_data = yield self.gentooci.db.projects.getRepositorysByProjectUuid(project_data['uuid'])
+ for project_repository_data in projects_repositorys_data:
+ repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(project_repository_data['repository_uuid'])
+ repository_path = yield os.path.join(portage_repos_path, repository_data['name'])
+ repository_conf = []
+ repository_conf.append('[' + repository_data['name'] + ']')
+ repository_conf.append('location = ' + repository_path)
+ repository_conf.append('sync-uri = ' + repository_data['mirror_url'])
+ repository_conf.append('sync-type = git')
+ repository_conf.append('auto-sync = no')
+ repository_conf_string = separator.join(repository_conf)
+ yield self.build.addStepsAfterCurrentStep([
+ steps.StringDownload(repository_conf_string + separator,
+ workerdest='repos.conf/' + repository_data['name'] + '.conf',
+ workdir='/etc/portage/')
+ ])
+ return SUCCESS
+
+class SetMakeConf(BuildStep):
+
+ name = 'SetMakeConf'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ descriptionSuffix = None
+ haltOnFailure = True
+ flunkOnFailure = True
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ @defer.inlineCallbacks
+ def run(self):
+ #FIXME: Make a dict before we pass it to the make.conf
+ self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ project_data = self.getProperty('project_data')
+ makeconf_variables_data = yield self.gentooci.db.portages.getVariables()
+ separator1 = '\n'
+ separator2 = ' '
+ makeconf_list = []
+ for k in makeconf_variables_data:
+ makeconf_variables_values_data = yield self.gentooci.db.projects.getProjectMakeConfById(project_data['uuid'], k['id'])
+ makeconf_variable_list = []
+ # we add some default values
+ #FIXME:
+ # we could set them in a config variables
+ # FEATURES
+ if k['variable'] == 'FEATURES':
+ makeconf_variable_list.append('xattr')
+ makeconf_variable_list.append('cgroup')
+ makeconf_variable_list.append('-news')
+ makeconf_variable_list.append('-collision-protect')
+ # EMERGE_DEFAULT_OPTS
+ if k['variable'] == 'EMERGE_DEFAULT_OPTS':
+ makeconf_variable_list.append('--buildpkg=y')
+ makeconf_variable_list.append('--rebuild-if-new-rev=y')
+ makeconf_variable_list.append('--rebuilt-binaries=y')
+ makeconf_variable_list.append('--usepkg=y')
+ makeconf_variable_list.append('--binpkg-respect-use=y')
+ makeconf_variable_list.append('--binpkg-changed-deps=y')
+ makeconf_variable_list.append('--nospinner')
+ makeconf_variable_list.append('--color=n')
+ makeconf_variable_list.append('--ask=n')
+ # CFLAGS
+ if k['variable'] == 'CFLAGS' or k['variable'] == 'FCFLAGS':
+ makeconf_variable_list.append('-O2')
+ makeconf_variable_list.append('-pipe')
+ makeconf_variable_list.append('-march=native')
+ makeconf_variable_list.append('-fno-diagnostics-color')
+ #FIXME:
+ # Depend on worker we may have to add a diffrent march
+ if k['variable'] == 'CXXFLAGS':
+ makeconf_variable_list.append('${CFLAGS}')
+ if k['variable'] == 'FFLAGS':
+ makeconf_variable_list.append('${FCFLAGS}')
+ if k['variable'] == 'ACCEPT_PROPERTIES':
+ makeconf_variable_list.append('-interactive')
+ if k['variable'] == 'ACCEPT_RESTRICT':
+ makeconf_variable_list.append('-fetch')
+ for v in makeconf_variables_values_data:
+ if v['build_id'] == 0:
+ makeconf_variable_list.append(v['value'])
+ if k['variable'] == 'ACCEPT_LICENSE' and makeconf_variable_list != []:
+ makeconf_variable_list.append('ACCEPT_LICENSE="*"')
+ if makeconf_variable_list != []:
+ makeconf_variable_string = k['variable'] + '="' + separator2.join(makeconf_variable_list) + '"'
+ makeconf_list.append(makeconf_variable_string)
+ # add hardcoded variables and values
+ #FIXME:
+ # we could set them in a config variables
+ makeconf_list.append('LC_MESSAGES=C')
+ makeconf_list.append('NOCOLOR="true"')
+ makeconf_list.append('GCC_COLORS=""')
+ makeconf_list.append('PORTAGE_TMPFS="/dev/shm"')
+ makeconf_list.append('CLEAN_DELAY=0')
+ makeconf_list.append('NOCOLOR=true')
+ makeconf_list.append('PORT_LOGDIR="/var/cache/portage/logs"')
+ makeconf_list.append('PKGDIR="/var/cache/portage/packages"')
+ makeconf_list.append('PORTAGE_ELOG_CLASSES="qa"')
+ makeconf_list.append('PORTAGE_ELOG_SYSTEM="save"')
+ # add ACCEPT_KEYWORDS from the project_data info
+ keyword_data = yield self.gentooci.db.keywords.getKeywordById(project_data['keyword_id'])
+ if project_data['status'] == 'unstable':
+ makeconf_keyword = '~' + keyword_data['name']
+ else:
+ makeconf_keyword = keyword_data['name']
+ makeconf_list.append('ACCEPT_KEYWORDS="' + makeconf_keyword + '"')
+ makeconf_string = separator1.join(makeconf_list)
+ print(makeconf_string)
+ yield self.build.addStepsAfterCurrentStep([
+ steps.StringDownload(makeconf_string + separator1,
+ workerdest="make.conf",
+ workdir='/etc/portage/')
+ ])
+ return SUCCESS
+
class SetPackageDefault(BuildStep):
name = 'SetPackageDefault'
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
@ 2021-03-18 23:18 Magnus Granberg
0 siblings, 0 replies; 9+ messages in thread
From: Magnus Granberg @ 2021-03-18 23:18 UTC (permalink / raw
To: gentoo-commits
commit: e940caa7779d5d0f0e3864670723e0ea3a0b3e1d
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 13 18:39:23 2021 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sat Mar 13 18:39:23 2021 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=e940caa7
Add support to use db for portage config insted of repo on local worker
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/builders.py | 3 +
buildbot_gentoo_ci/config/buildfactorys.py | 27 +++---
buildbot_gentoo_ci/steps/portage.py | 106 ++++++++++++++++++++++
buildbot_gentoo_ci/steps/update_db.py | 140 +++++++++++++++++++----------
4 files changed, 218 insertions(+), 58 deletions(-)
diff --git a/buildbot_gentoo_ci/config/builders.py b/buildbot_gentoo_ci/config/builders.py
index cba9fcc..c7b4469 100644
--- a/buildbot_gentoo_ci/config/builders.py
+++ b/buildbot_gentoo_ci/config/builders.py
@@ -9,6 +9,7 @@ def gentoo_builders(b=[]):
b.append(util.BuilderConfig(
name='update_db_check',
workername='updatedb_1',
+ workerbuilddir='builds',
factory=buildfactorys.update_db_check()
)
)
@@ -19,6 +20,7 @@ def gentoo_builders(b=[]):
b.append(util.BuilderConfig(
name='update_cpv_data',
workername='updatedb_1',
+ workerbuilddir='builds',
factory=buildfactorys.update_db_cp()
)
)
@@ -27,6 +29,7 @@ def gentoo_builders(b=[]):
b.append(util.BuilderConfig(
name='update_v_data',
workername='updatedb_1',
+ workerbuilddir='builds',
factory=buildfactorys.update_db_v()
)
)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index 31543f9..f5a3b35 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -15,20 +15,21 @@ def update_db_check():
f = util.BuildFactory()
# FIXME: 1
# Get base project data from db
- # return project_repository, profile_repository,
- # project
+ # return profile_repository, project
f.addStep(update_db.GetDataGentooCiProject())
- # Check if base project repo is cloned
- # Check if profile repo is cloned
- # check if the profile link is there
- # check if the repository is cloned
- f.addStep(update_db.CheckPathGentooCiProject())
- # check if etc/portage has no error
- # return config_root
- f.addStep(update_db.CheckProjectGentooCiProject())
- # Make a for loop and trigger new builders with cpv from cpv_changes
- # return cpv, repository, project_data, config_root
- f.addStep(update_db.CheckCPVGentooCiProject())
+ # Check if needed path is there
+ f.addStep(update_db.CheckPath())
+ # update the repos
+ f.addStep(update_db.UpdateRepos())
+ # setup the profile
+ f.addStep(portage.SetMakeProfileLocal())
+ # setup repos.conf dir
+ f.addStep(portage.SetReposConfLocal())
+ # setup make.conf
+ f.addStep(portage.SetMakeConfLocal())
+ # Make a for loop and trigger new builders with cpv from git_changes
+ # return cpv, repository, project_data
+ f.addStep(update_db.TriggerCheckForCPV())
return f
def update_db_cp():
diff --git a/buildbot_gentoo_ci/steps/portage.py b/buildbot_gentoo_ci/steps/portage.py
index 30361e6..4fbe141 100644
--- a/buildbot_gentoo_ci/steps/portage.py
+++ b/buildbot_gentoo_ci/steps/portage.py
@@ -11,6 +11,15 @@ from buildbot.process.results import SUCCESS
from buildbot.process.results import FAILURE
from buildbot.plugins import steps
+@defer.inlineCallbacks
+def WriteTextToFile(path, text_list):
+ separator = '\n'
+ text_string = separator.join(text_list)
+ with open(path, "a") as f:
+ yield f.write(text_string)
+ yield f.write(separator)
+ yield f.close
+
class SetMakeProfile(BuildStep):
name = 'SetMakeProfile'
@@ -292,3 +301,100 @@ class SetEnvDefault(BuildStep):
])
yield self.build.addStepsAfterCurrentStep(aftersteps_list)
return SUCCESS
+
+class SetMakeProfileLocal(BuildStep):
+
+ name = 'SetMakeProfileLocal'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ descriptionSuffix = None
+ haltOnFailure = True
+ flunkOnFailure = True
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ @defer.inlineCallbacks
+ def run(self):
+ parent_path = yield os.path.join('portage', 'make.profile', 'parent')
+ if os.path.isfile(parent_path):
+ return SUCCESS
+ self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ self.repository_basedir = self.gentooci.config.project['repository_basedir']
+ makeprofiles_paths = []
+ makeprofiles_data = yield self.gentooci.db.projects.getAllProjectPortageByUuidAndDirectory(self.getProperty('project_data')['uuid'], 'make.profile')
+ for makeprofile in makeprofiles_data:
+ makeprofile_path = yield os.path.join(self.repository_basedir, self.getProperty("profile_repository_data")['name'], 'profiles', makeprofile['value'], '')
+ makeprofiles_paths.append('../../' + makeprofile_path)
+ yield WriteTextToFile(parent_path, makeprofiles_paths)
+ return SUCCESS
+
+class SetReposConfLocal(BuildStep):
+
+ name = 'SetReposConfLocal'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ descriptionSuffix = None
+ haltOnFailure = True
+ flunkOnFailure = True
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ @defer.inlineCallbacks
+ def run(self):
+ repos_conf_path = yield os.path.join('portage', 'repos.conf')
+ repos_conf_default_path = yield os.path.join(repos_conf_path, 'default.conf')
+ self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ self.repository_basedir = self.gentooci.config.project['repository_basedir']
+ if not os.path.isfile(repos_conf_default_path):
+ # setup the default.conf
+ repos_conf_data = yield self.gentooci.db.projects.getProjectPortageByUuidAndDirectory(self.getProperty('project_data')['uuid'], 'repos.conf')
+ if repos_conf_data is None:
+ print('Default repo is not set in repos.conf')
+ return FAILURE
+ default_conf = []
+ default_conf.append('[DEFAULT]')
+ default_conf.append('main-repo = ' + repos_conf_data['value'])
+ default_conf.append('auto-sync = no')
+ yield WriteTextToFile(repos_conf_default_path, default_conf)
+ repos_conf_repository_path = yield os.path.join(repos_conf_path, self.getProperty("repository_data")['name'] + '.conf')
+ if not os.path.isfile(repos_conf_repository_path):
+ repository_path = yield os.path.join(self.repository_basedir, self.getProperty("repository_data")['name'])
+ repository_conf = []
+ repository_conf.append('[' + self.getProperty("repository_data")['name'] + ']')
+ repository_conf.append('location = ' + repository_path)
+ repository_conf.append('sync-uri = ' + self.getProperty("repository_data")['mirror_url'])
+ repository_conf.append('sync-type = git')
+ repository_conf.append('auto-sync = no')
+ yield WriteTextToFile(repos_conf_repository_path, repository_conf)
+ return SUCCESS
+
+class SetMakeConfLocal(BuildStep):
+
+ name = 'SetMakeConfLocal'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ descriptionSuffix = None
+ haltOnFailure = True
+ flunkOnFailure = True
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ @defer.inlineCallbacks
+ def run(self):
+ make_conf_path = yield os.path.join('portage', 'make.conf')
+ if os.path.isfile(make_conf_path):
+ return SUCCESS
+ makeconf_list = []
+ makeconf_list.append('CFLAGS=""')
+ makeconf_list.append('CXXFLAGS=""')
+ makeconf_list.append('ACCEPT_LICENSE="*"')
+ makeconf_list.append('USE=""')
+ makeconf_list.append('ACCEPT_KEYWORDS="~amd64 amd64"')
+ makeconf_list.append('EMERGE_DEFAULT_OPTS=""')
+ makeconf_list.append('ABI_X86="32 64"')
+ makeconf_list.append('FEATURES=""')
+ yield WriteTextToFile(make_conf_path, makeconf_list)
+ return SUCCESS
diff --git a/buildbot_gentoo_ci/steps/update_db.py b/buildbot_gentoo_ci/steps/update_db.py
index 94d0b4f..bfcd2ef 100644
--- a/buildbot_gentoo_ci/steps/update_db.py
+++ b/buildbot_gentoo_ci/steps/update_db.py
@@ -2,6 +2,7 @@
# Distributed under the terms of the GNU General Public License v2
import os
+import pygit2
from portage import config as portage_config
from portage.versions import catpkgsplit
@@ -15,8 +16,6 @@ from buildbot.process.results import SUCCESS
from buildbot.process.results import FAILURE
from buildbot.plugins import steps
-#from buildbot_gentoo_ci.steps.updatedb_functions import category
-
class GetDataGentooCiProject(BuildStep):
def __init__(self, **kwargs):
@@ -29,16 +28,11 @@ class GetDataGentooCiProject(BuildStep):
if self.project_data is None:
log.err('No data for project in the database')
return FAILURE
- self.project_repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(self.project_data['project_repository_uuid'])
- if self.project_repository_data is None:
- log.err('No data for repository in the database')
- return FAILURE
self.profile_repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(self.project_data['profile_repository_uuid'])
if self.profile_repository_data is None:
log.err('No data for repository in the database')
return FAILURE
print(self.project_data)
- print(self.project_repository_data)
print(self.profile_repository_data)
print(self.getProperty("git_changes"))
print(self.getProperty("repository"))
@@ -51,12 +45,18 @@ class GetDataGentooCiProject(BuildStep):
if repository:
self.repository_data = yield self.gentooci.db.repositorys.getRepositoryByName(repository)
self.setProperty("project_data", self.project_data, 'project_data')
- self.setProperty("project_repository_data", self.project_repository_data, 'project_repository_data')
self.setProperty("profile_repository_data", self.profile_repository_data, 'profile_repository_data')
self.setProperty("repository_data", self.repository_data, 'repository_data')
return SUCCESS
-class CheckPathGentooCiProject(BuildStep):
+class CheckPath(BuildStep):
+
+ name = 'CheckPath'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ descriptionSuffix = None
+ haltOnFailure = True
+ flunkOnFailure = True
def __init__(self, **kwargs):
super().__init__(**kwargs)
@@ -65,59 +65,110 @@ class CheckPathGentooCiProject(BuildStep):
def run(self):
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
self.repository_basedir = self.gentooci.config.project['repository_basedir']
- self.profile_repository_data = self.getProperty("profile_repository_data")
- self.project_repository_data = self.getProperty("project_repository_data")
- self.repository_data = self.getProperty("repository_data")
- self.project_data = self.getProperty("project_data")
- self.project_path = yield os.path.join(self.repository_basedir, self.project_repository_data['name'] + '.git')
- self.repository_path = yield os.path.join(self.repository_basedir, self.repository_data['name'] + '.git')
- self.portage_path = yield os.path.join(self.project_path, self.project_data['name'], 'etc/portage')
+ self.portage_path = 'portage'
+ self.profile_path = yield os.path.join(self.portage_path, 'make.profile')
+ self.repos_path = yield os.path.join(self.portage_path, 'repos.conf')
+ print(os.getcwd())
+ print(self.getProperty("builddir"))
+ yield os.chdir(self.getProperty("builddir"))
success = True
+ print(os.getcwd())
for x in [
- os.path.join(self.repository_basedir, self.profile_repository_data['name'] + '.git'),
- self.project_path,
- self.portage_path,
- os.path.join(self.portage_path, 'make.profile'),
- self.repository_path
- # check the path of make.profile is project_data['profile']
+ self.profile_path,
+ self.repos_path,
+ self.repository_basedir
]:
- is_dir = True
if not os.path.isdir(x):
- is_dir = False
- success = False
- print("isdir(%s): %s" %(x, is_dir))
- print(self.getProperty("builddir"))
- if not success:
- return FAILURE
+ os.makedirs(x)
return SUCCESS
-class CheckProjectGentooCiProject(BuildStep):
+class UpdateRepos(BuildStep):
+
+ name = 'UpdateRepos'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ descriptionSuffix = None
+ haltOnFailure = True
+ flunkOnFailure = True
+
def __init__(self, **kwargs):
super().__init__(**kwargs)
+ # Origin: https://github.com/MichaelBoselowitz/pygit2-examples/blob/master/examples.py#L54
+ # Modifyed by Gentoo Authors.
+ @defer.inlineCallbacks
+ def gitPull(self, repo, remote_name='origin', branch='master'):
+ for remote in repo.remotes:
+ if remote.name == remote_name:
+ yield remote.fetch()
+ remote_master_id = yield repo.lookup_reference('refs/remotes/origin/%s' % (branch)).target
+ merge_result, _ = yield repo.merge_analysis(remote_master_id)
+ # Up to date, do nothing
+ if merge_result & pygit2.GIT_MERGE_ANALYSIS_UP_TO_DATE:
+ return
+ # We can just fastforward
+ elif merge_result & pygit2.GIT_MERGE_ANALYSIS_FASTFORWARD:
+ yield repo.checkout_tree(repo.get(remote_master_id))
+ try:
+ master_ref = yield repo.lookup_reference('refs/heads/%s' % (branch))
+ yield master_ref.set_target(remote_master_id)
+ except KeyError:
+ yield repo.create_branch(branch, repo.get(remote_master_id))
+ yield repo.head.set_target(remote_master_id)
+ elif merge_result & pygit2.GIT_MERGE_ANALYSIS_NORMAL:
+ yield repo.merge(remote_master_id)
+
+ if repo.index.conflicts is not None:
+ for conflict in repo.index.conflicts:
+ print('Conflicts found in:', conflict[0].path)
+ raise AssertionError('Conflicts, ahhhhh!!')
+
+ user = yield repo.default_signature
+ tree = yield repo.index.write_tree()
+ commit = yield repo.create_commit('HEAD',
+ user,
+ user,
+ 'Merge!',
+ tree,
+ [repo.head.target, remote_master_id])
+ # We need to do this or git CLI will think we are still merging.
+ yield repo.state_cleanup()
+ else:
+ raise AssertionError('Unknown merge analysis result')
+
@defer.inlineCallbacks
def run(self):
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
self.repository_basedir = self.gentooci.config.project['repository_basedir']
- self.project_repository_data = self.getProperty("project_repository_data")
- self.project_data = self.getProperty("project_data")
- self.project_path = yield os.path.join(self.repository_basedir, self.project_repository_data['name'] + '.git')
- self.config_root = yield os.path.join(self.project_path, self.project_data['name'], '')
- self.make_conf_file = yield os.path.join(self.config_root, 'etc/portage', '') + 'make.conf'
- try:
- getconfig(self.make_conf_file, tolerant=0, allow_sourcing=True, expand=True)
- mysettings = portage_config(config_root = self.config_root)
- mysettings.validate()
- except ParseError as e:
- print("project portage conf has error %s" %(str(e)))
- return FAILURE
- self.setProperty("config_root", self.config_root, 'config_root')
+ self.profile_repository_path = yield os.path.join(self.repository_basedir, self.getProperty("profile_repository_data")['name'])
+ repo_path = yield pygit2.discover_repository(self.profile_repository_path)
+ print(repo_path)
+ if repo_path is None:
+ yield pygit2.clone_repository(self.getProperty("profile_repository_data")['mirror_url'], self.profile_repository_path)
+ else:
+ repo = yield pygit2.Repository(repo_path)
+ yield self.gitPull(repo)
+ if self.getProperty("profile_repository_data")['name'] != self.getProperty("repository_data")['name']:
+ self.repository_path = yield os.path.join(self.repository_basedir, self.getProperty("repository_data")['name'])
+ repo_path = yield pygit2.discover_repository(self.repository_path)
+ if repo_path is None:
+ yield pygit2.clone_repository(self.getProperty("profile_repository_data")['mirror_url'], self.repository_path)
+ else:
+ repo = yield pygit2.Repository(repo_path)
+ yield self.gitPull(repo)
return SUCCESS
-class CheckCPVGentooCiProject(BuildStep):
+class TriggerCheckForCPV(BuildStep):
def __init__(self, **kwargs):
super().__init__(**kwargs)
+ name = 'TriggerCheckForCPV'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ descriptionSuffix = None
+ haltOnFailure = True
+ flunkOnFailure = True
+
@defer.inlineCallbacks
def run(self):
self.git_changes = self.getProperty("git_changes")
@@ -152,7 +203,6 @@ class CheckCPVGentooCiProject(BuildStep):
updateSourceStamp=False,
set_properties={
'cpv' : cpv,
- 'config_root' : self.getProperty("config_root"),
'project_data' : self.getProperty("project_data"),
'repository_data' : self.getProperty("repository_data"),
'revision_data' : revision_data,
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
@ 2021-04-05 8:08 Magnus Granberg
0 siblings, 0 replies; 9+ messages in thread
From: Magnus Granberg @ 2021-04-05 8:08 UTC (permalink / raw
To: gentoo-commits
commit: 34d24bb7295a9b3102464e2744b6b807fe2c6c22
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 5 08:07:51 2021 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Mon Apr 5 08:07:51 2021 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=34d24bb7
Add support for --depclean
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/buildfactorys.py | 22 ++++------
buildbot_gentoo_ci/steps/builders.py | 70 +++++++++++++++++++++++++-----
2 files changed, 67 insertions(+), 25 deletions(-)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index fddfa2b..817b324 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -127,21 +127,15 @@ def run_build_request():
# run pretend on packages update on worker
f.addStep(builders.RunEmerge(step='pre-update'))
# look at the log to see if we need to do stuff
- # run update package on worker
+ # run update package on worker and check log
f.addStep(builders.RunEmerge(step='update'))
- # check log
- # run depclean if set
- # depclean pretend
+ # clean up the worker
+ # look at the log to see if we need to do stuff
+ # run pre-depclean and depclean if set
f.addStep(builders.RunEmerge(step='pre-depclean'))
- # look at the log to see if we need to do stuff
- # depclean
- f.addStep(builders.RunEmerge(step='depclean'))
- # run @preserved-rebuild if needed
+ # run preserved-libs and depclean
f.addStep(builders.RunEmerge(step='preserved-libs'))
- # check log
- # depclean
f.addStep(builders.RunEmerge(step='depclean'))
- # check log
# setup make.conf if build id has changes make.conf as dict from SetMakeConf
# setup package.* env if build id has changes
# setup pkgcheck.conf if needed
@@ -154,10 +148,10 @@ def run_build_request():
# Add the needed steps for build
f.addStep(builders.RunBuild())
# clean up the worker
+ # look at the log to see if we need to do stuff
+ # run pre-depclean and depclean if set
f.addStep(builders.RunEmerge(step='pre-depclean'))
- # look at the log to see if we need to do stuff
- # run depclean and preserved-libs
- f.addStep(builders.RunEmerge(step='depclean'))
+ # run preserved-libs and depclean
f.addStep(builders.RunEmerge(step='preserved-libs'))
f.addStep(builders.RunEmerge(step='depclean'))
return f
diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py
index 96572c0..af3be9d 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -18,7 +18,6 @@ def PersOutputOfEmerge(rc, stdout, stderr):
emerge_output = {}
emerge_output['rc'] = rc
emerge_output['preserved_libs'] = False
- emerge_output['depclean'] = False
emerge_output['change_use'] = False
package_dict = {}
log_path_list = []
@@ -121,6 +120,21 @@ def PersOutputOfPkgCheck(rc, stdout, stderr):
'pkgcheck_output' : pkgcheck_output
}
+def PersOutputOfDepclean(rc, stdout, stderr):
+ depclean_output = {}
+ depclean_output['rc'] = rc
+ print(stderr)
+ depclean_output['stderr'] = stderr
+ package_list = False
+ for line in stdout.split('\n'):
+ if line.startswith('All selected packages:'):
+ line_tmp = line.replace('All selected packages: ', '')
+ package_list = line_tmp.split(' ')
+ depclean_output['packages'] = package_list
+ return {
+ 'depclean_output' : depclean_output
+ }
+
class TriggerRunBuildRequest(BuildStep):
name = 'TriggerRunBuildRequest'
@@ -364,22 +378,26 @@ class RunEmerge(BuildStep):
steps.SetPropertyFromCommandNewStyle(
command=shell_commad_list,
strip=True,
- extract_fn=PersOutputOfEmerge,
+ extract_fn=PersOutputOfDepclean,
workdir='/'
))
- aftersteps_list.append(CheckEmergeLogs('depclean'))
+ aftersteps_list.append(CheckDepcleanLogs('pre-depclean'))
+ self.setProperty('depclean', False, 'depclean')
- if self.step == 'depclean' and self.getProperty('depclean'):
+ if self.step == 'depclean' and projects_emerge_options['depclean']:
shell_commad_list.append('-q')
shell_commad_list.append('--depclean')
+ # add exlude cpv if needed
+ if self.getProperty('depclean'):
+ pass
aftersteps_list.append(
steps.SetPropertyFromCommandNewStyle(
command=shell_commad_list,
strip=True,
- extract_fn=PersOutputOfEmerge,
+ extract_fn=PersOutputOfDepclean,
workdir='/'
))
- aftersteps_list.append(CheckEmergeLogs('depclean'))
+ aftersteps_list.append(CheckDepcleanLogs('depclean'))
if self.step == 'match':
cpv = self.getProperty("cpv")
@@ -456,7 +474,7 @@ class RunEmerge(BuildStep):
class CheckEmergeLogs(BuildStep):
- name = 'CheckLogs'
+ name = 'CheckEmergeLogs'
description = 'Running'
descriptionDone = 'Ran'
haltOnFailure = True
@@ -483,10 +501,6 @@ class CheckEmergeLogs(BuildStep):
# preserved-libs
if emerge_output['preserved_libs'] and projects_emerge_options['preserved_libs']:
self.setProperty('preserved_libs', True, 'preserved-libs')
- # depclean
- # FIXME: check if don't remove needed stuff.
- if emerge_output['depclean'] and projects_emerge_options['depclean']:
- self.setProperty('depclean', True, 'depclean')
# FIXME: check if cpv match
if self.step == 'match'and self.getProperty('projectrepository_data')['build']:
@@ -577,6 +591,40 @@ class CheckEmergeLogs(BuildStep):
yield self.build.addStepsAfterCurrentStep(aftersteps_list)
return SUCCESS
+class CheckDepcleanLogs(BuildStep):
+
+ name = 'CheckDepcleanLogs'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ haltOnFailure = True
+ flunkOnFailure = True
+
+ def __init__(self, step=None,**kwargs):
+ self.step = step
+ super().__init__(**kwargs)
+ self.descriptionSuffix = self.step
+
+ @defer.inlineCallbacks
+ def run(self):
+ self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ project_data = self.getProperty('project_data')
+ projects_emerge_options = yield self.gentooci.db.projects.getProjectEmergeOptionsByUuid(project_data['uuid'])
+ depclean_output = self.getProperty('depclean_output')
+ aftersteps_list = []
+ # run depclean if needed
+ if self.step == 'pre-depclean' and projects_emerge_options['depclean']:
+ # FIXME: check if we don't remove needed stuff.
+ # add it to Property depclean if needed
+ if depclean_output['packages']:
+ for cpv_tmp in depclean_output['packages']:
+ cpv = cpv_tmp.replace('=', '')
+ self.setProperty('depclean', False, 'depclean')
+ aftersteps_list.append(RunEmerge(step='depclean'))
+
+ if not self.step is None and aftersteps_list != []:
+ yield self.build.addStepsAfterCurrentStep(aftersteps_list)
+ return SUCCESS
+
class RunPkgCheck(BuildStep):
name = 'RunPkgCheck'
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
@ 2021-04-17 17:25 Magnus Granberg
0 siblings, 0 replies; 9+ messages in thread
From: Magnus Granberg @ 2021-04-17 17:25 UTC (permalink / raw
To: gentoo-commits
commit: bfa939daa5d6aad8f4a7b129bced7e9dba796828
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sat Apr 17 17:24:48 2021 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sat Apr 17 17:24:48 2021 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=bfa939da
Add support for more LocalWorkers
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/builders.py | 28 +++++++-------
buildbot_gentoo_ci/config/buildfactorys.py | 8 ----
buildbot_gentoo_ci/config/schedulers.py | 10 ++---
buildbot_gentoo_ci/config/workers.py | 3 ++
buildbot_gentoo_ci/steps/category.py | 2 +-
buildbot_gentoo_ci/steps/package.py | 32 +++++++--------
buildbot_gentoo_ci/steps/portage.py | 3 +-
buildbot_gentoo_ci/steps/update_db.py | 62 ++++++++++--------------------
buildbot_gentoo_ci/steps/version.py | 46 +++++++++++-----------
9 files changed, 85 insertions(+), 109 deletions(-)
diff --git a/buildbot_gentoo_ci/config/builders.py b/buildbot_gentoo_ci/config/builders.py
index d022ac7..56cdde1 100644
--- a/buildbot_gentoo_ci/config/builders.py
+++ b/buildbot_gentoo_ci/config/builders.py
@@ -4,8 +4,14 @@
from buildbot.plugins import util
from buildbot_gentoo_ci.config import buildfactorys
+# FIXME: get workers from db or file
+LocalWorkers = []
+LocalWorkers.append('updatedb_1')
+LocalWorkers.append('updatedb_2')
+LocalWorkers.append('updatedb_3')
+LocalWorkers.append('updatedb_4')
+
def gentoo_builders(b=[]):
- # FIXME: get workers from db
b.append(util.BuilderConfig(
name='update_db_check',
workername='updatedb_1',
@@ -14,47 +20,44 @@ def gentoo_builders(b=[]):
factory=buildfactorys.update_db_check()
)
)
- # FIXME: get workers from db
b.append(util.BuilderConfig(
name='update_repo_check',
- workername='updatedb_1',
+ workername='updatedb_2',
workerbuilddir='builds',
collapseRequests=True,
factory=buildfactorys.update_repo_check()
)
)
- # FIXME: get workers from db
- # Use multiplay workers depend on Property(cpv)
+ # Use multiplay workers depend on Property(cp)
# if cp do not match next one, use diffrent worker then
# or first cp have done its buildsteps.
+ # first LocalWorker need to be done before we can use mulitplay workers (git pull)
b.append(util.BuilderConfig(
name='update_cpv_data',
- workername='updatedb_1',
+ workernames=LocalWorkers,
workerbuilddir='builds',
collapseRequests=False,
factory=buildfactorys.update_db_cp()
)
)
- # FIXME: get workers from db
# Use multiplay workers
b.append(util.BuilderConfig(
name='update_v_data',
- workername='updatedb_1',
+ workernames=LocalWorkers,
workerbuilddir='builds',
collapseRequests=False,
factory=buildfactorys.update_db_v()
)
)
- # FIXME: get workers from db
# Use multiplay workers
b.append(util.BuilderConfig(
name='build_request_data',
- workername='updatedb_1',
+ workernames=LocalWorkers,
collapseRequests=False,
factory=buildfactorys.build_request_check()
)
)
- # FIXME: get workers from db
+ # FIXME: get workers from db or file
# Use multiplay workers
b.append(util.BuilderConfig(
name='run_build_request',
@@ -63,11 +66,10 @@ def gentoo_builders(b=[]):
factory=buildfactorys.run_build_request()
)
)
- # FIXME: get workers from db
# Use multiplay workers
b.append(util.BuilderConfig(
name='parse_build_log',
- workername='updatedb_1',
+ workernames=LocalWorkers,
collapseRequests=False,
factory=buildfactorys.parse_build_log()
)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index 962eeb0..e08127b 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -21,14 +21,6 @@ def update_db_check():
f.addStep(update_db.GetDataGentooCiProject())
# update the repos
f.addStep(update_db.TriggerUpdateRepositorys())
- # Check if needed path is there
- f.addStep(portage.CheckPathLocal())
- # setup the profile
- f.addStep(portage.SetMakeProfileLocal())
- # setup repos.conf dir
- f.addStep(portage.SetReposConfLocal())
- # setup make.conf
- f.addStep(portage.SetMakeConfLocal())
# Make a for loop and trigger new builders with cpv from git_changes
# return cpv, repository, project_data
f.addStep(update_db.TriggerCheckForCPV())
diff --git a/buildbot_gentoo_ci/config/schedulers.py b/buildbot_gentoo_ci/config/schedulers.py
index 107bb3c..e520076 100644
--- a/buildbot_gentoo_ci/config/schedulers.py
+++ b/buildbot_gentoo_ci/config/schedulers.py
@@ -12,7 +12,7 @@ def builderUpdateDbNames(props):
return list(builders)
@util.renderer
-def gitUpdateDb(props):
+def getGitChanges(props):
k = props.changes[0]
change_data = {}
print(k)
@@ -23,7 +23,6 @@ def gitUpdateDb(props):
p = v.split('/')[1]
pv = v.split('/')[2][:-7]
cpv = c + '/' + pv
- print(cpv)
change_data['cp'] = c + '/' + p
change_data['cpvs'].append(cpv)
if k['repository'].endswith('.git'):
@@ -35,16 +34,15 @@ def gitUpdateDb(props):
change_data['comments'] = k['comments']
change_data['revision'] = k['revision']
change_data['timestamp'] =k['when_timestamp']
- print(change_data)
return change_data
def gentoo_schedulers():
scheduler_update_db = schedulers.SingleBranchScheduler(
name='scheduler_update_db',
treeStableTimer=0,
- properties = {
- 'git_change' : gitUpdateDb,
- },
+ properties = dict(
+ change_data = getGitChanges
+ ),
builderNames = builderUpdateDbNames,
change_filter=util.ChangeFilter(branch='master'),
)
diff --git a/buildbot_gentoo_ci/config/workers.py b/buildbot_gentoo_ci/config/workers.py
index a566b79..6141d89 100644
--- a/buildbot_gentoo_ci/config/workers.py
+++ b/buildbot_gentoo_ci/config/workers.py
@@ -6,5 +6,8 @@ from buildbot.plugins import worker
def gentoo_workers(w=[]):
# FIXME: Get workers from db
w.append(worker.LocalWorker('updatedb_1'))
+ w.append(worker.LocalWorker('updatedb_2'))
+ w.append(worker.LocalWorker('updatedb_3'))
+ w.append(worker.LocalWorker('updatedb_4'))
w.append(worker.Worker('bot-test', 'test1234'))
return w
diff --git a/buildbot_gentoo_ci/steps/category.py b/buildbot_gentoo_ci/steps/category.py
index 81061e6..946dc63 100644
--- a/buildbot_gentoo_ci/steps/category.py
+++ b/buildbot_gentoo_ci/steps/category.py
@@ -49,7 +49,7 @@ class CheckC(BuildStep):
@defer.inlineCallbacks
def run(self):
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
- self.category = yield self.getProperty("cpv").split('/')[0]
+ self.category = self.getProperty("change_data")['cp'].split('/')[0]
print(self.category)
self.category_data = yield self.gentooci.db.categorys.getCategoryByName(self.category)
print(self.category_data)
diff --git a/buildbot_gentoo_ci/steps/package.py b/buildbot_gentoo_ci/steps/package.py
index b4e06b7..76c90cc 100644
--- a/buildbot_gentoo_ci/steps/package.py
+++ b/buildbot_gentoo_ci/steps/package.py
@@ -57,7 +57,7 @@ class CheckP(BuildStep):
@defer.inlineCallbacks
def run(self):
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
- self.package = yield catpkgsplit(self.getProperty("cpv"))[1]
+ self.package = self.getProperty("change_data")['cp'].split('/')[1]
print(self.package)
self.package_data = yield self.gentooci.db.packages.getPackageByName(self.package,
self.getProperty("category_data")['uuid'],
@@ -86,20 +86,22 @@ class TriggerCheckForV(BuildStep):
@defer.inlineCallbacks
def run(self):
addStepUpdateVData = []
- addStepUpdateVData.append(
- steps.Trigger(
- schedulerNames=['update_v_data'],
- waitForFinish=False,
- updateSourceStamp=False,
- set_properties={
- 'cpv' : self.getProperty("cpv"),
- 'package_data' : self.getProperty("package_data"),
- 'repository_data' : self.getProperty("repository_data"),
- 'category_data' : self.getProperty("category_data"),
- 'revision_data' : self.getProperty("revision_data"),
- 'project_data' : self.getProperty("project_data"),
- }
- )
+ for cpv in self.getProperty("change_data")['cpvs']:
+ print(cpv)
+ addStepUpdateVData.append(
+ steps.Trigger(
+ schedulerNames=['update_v_data'],
+ waitForFinish=False,
+ updateSourceStamp=False,
+ set_properties={
+ 'cpv' : cpv,
+ 'package_data' : self.getProperty("package_data"),
+ 'repository_data' : self.getProperty("repository_data"),
+ 'category_data' : self.getProperty("category_data"),
+ 'change_data' : self.getProperty("change_data"),
+ 'project_data' : self.getProperty("project_data"),
+ }
)
+ )
yield self.build.addStepsAfterCurrentStep(addStepUpdateVData)
return SUCCESS
diff --git a/buildbot_gentoo_ci/steps/portage.py b/buildbot_gentoo_ci/steps/portage.py
index c7e82ce..37f7342 100644
--- a/buildbot_gentoo_ci/steps/portage.py
+++ b/buildbot_gentoo_ci/steps/portage.py
@@ -407,11 +407,12 @@ class SetMakeProfileLocal(BuildStep):
if os.path.isfile(parent_path):
return SKIPPED
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ self.profile_repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(self.getProperty('project_data')['profile_repository_uuid'])
self.repository_basedir = self.gentooci.config.project['repository_basedir']
makeprofiles_paths = []
makeprofiles_data = yield self.gentooci.db.projects.getAllProjectPortageByUuidAndDirectory(self.getProperty('project_data')['uuid'], 'make.profile')
for makeprofile in makeprofiles_data:
- makeprofile_path = yield os.path.join(self.repository_basedir, self.getProperty("profile_repository_data")['name'], 'profiles', makeprofile['value'], '')
+ makeprofile_path = yield os.path.join(self.repository_basedir, self.profile_repository_data['name'], 'profiles', makeprofile['value'], '')
makeprofiles_paths.append('../../../' + makeprofile_path)
yield WriteTextToFile(parent_path, makeprofiles_paths)
return SUCCESS
diff --git a/buildbot_gentoo_ci/steps/update_db.py b/buildbot_gentoo_ci/steps/update_db.py
index b19d0e7..8e7f8ee 100644
--- a/buildbot_gentoo_ci/steps/update_db.py
+++ b/buildbot_gentoo_ci/steps/update_db.py
@@ -25,11 +25,13 @@ class GetDataGentooCiProject(BuildStep):
return FAILURE
self.profile_repository_data = yield self.gentooci.db.repositorys.getRepositoryByUuid(self.project_data['profile_repository_uuid'])
if self.profile_repository_data is None:
- log.err('No data for repository in the database')
+ log.err('No data for profile repository in the database')
+ return FAILURE
+ if not isinstance(self.getProperty("change_data"), dict):
return FAILURE
print(self.project_data)
print(self.profile_repository_data)
- print(self.getProperty("git_change"))
+ print(self.getProperty("change_data"))
print(self.getProperty("repository"))
repository = False
self.repository_data = False
@@ -39,6 +41,9 @@ class GetDataGentooCiProject(BuildStep):
repository = v[:-4]
if repository:
self.repository_data = yield self.gentooci.db.repositorys.getRepositoryByName(repository)
+ if self.getProperty("change_data")['repository'] != self.repository_data['name']:
+ log.msg("%s don't match" % self.getProperty("change_data")['repository'])
+ return FAILURE
self.setProperty("project_data", self.project_data, 'project_data')
self.setProperty("profile_repository_data", self.profile_repository_data, 'profile_repository_data')
self.setProperty("repository_data", self.repository_data, 'repository_data')
@@ -65,7 +70,7 @@ class TriggerUpdateRepositorys(BuildStep):
set_properties={
'profile_repository_uuid' : self.getProperty("profile_repository_data")['uuid'],
'repository_uuid' : self.getProperty("repository_data")['uuid'],
- 'commit_time' : self.getProperty("git_change")['timestamp'],
+ 'commit_time' : self.getProperty("change_data")['timestamp'],
}
)
])
@@ -84,43 +89,16 @@ class TriggerCheckForCPV(BuildStep):
@defer.inlineCallbacks
def run(self):
- change_data = self.getProperty("git_change")
- # check if git_change is a dict
- if not isinstance(change_data, dict):
- return FAILURE
- addStepUpdateCPVData = []
- # make a trigger for all cpv in the list
- for cpv in change_data['cpvs']:
- self.success = True
- if change_data['repository'] != self.getProperty("repository_data")['name']:
- log.msg("%s don't match" % change_data['repository'])
- self.success = False
- # Trigger cpv builds and update db if we are working with ebuilds
- # check that cpv is valied
- if catpkgsplit(cpv) is None:
- log.msg("%s is not vaild package name" % cpv)
- self.success = False
- if self.success:
- revision_data = {}
- revision_data['author'] = change_data['author']
- revision_data['committer'] = change_data['committer']
- revision_data['comments'] = change_data['comments']
- revision_data['revision'] = change_data['revision']
- addStepUpdateCPVData.append(
- steps.Trigger(
- schedulerNames=['update_cpv_data'],
- waitForFinish=False,
- updateSourceStamp=False,
- set_properties={
- 'cpv' : cpv,
- 'project_data' : self.getProperty("project_data"),
- 'repository_data' : self.getProperty("repository_data"),
- 'revision_data' : revision_data,
- }
- )
- )
- print(addStepUpdateCPVData)
- yield self.build.addStepsAfterCurrentStep(addStepUpdateCPVData)
- if self.success is False:
- return FAILURE
+ yield self.build.addStepsAfterCurrentStep([
+ steps.Trigger(
+ schedulerNames=['update_cpv_data'],
+ waitForFinish=False,
+ updateSourceStamp=False,
+ set_properties={
+ 'project_data' : self.getProperty("project_data"),
+ 'repository_data' : self.getProperty("repository_data"),
+ 'change_data' : self.getProperty("change_data"),
+ }
+ )
+ ])
return SUCCESS
diff --git a/buildbot_gentoo_ci/steps/version.py b/buildbot_gentoo_ci/steps/version.py
index e6a927a..df97536 100644
--- a/buildbot_gentoo_ci/steps/version.py
+++ b/buildbot_gentoo_ci/steps/version.py
@@ -15,6 +15,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 WARNINGS
from buildbot.plugins import steps
from buildbot_gentoo_ci.steps import portage as portage_steps
@@ -36,6 +37,7 @@ class GetVData(BuildStep):
# set cwd to builddir
yield os.chdir(self.getProperty("builddir"))
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ print(self.getProperty("cpv"))
self.version = yield cpv_getversion(self.getProperty("cpv"))
print(self.version)
self.old_version_data = yield self.gentooci.db.versions.getVersionByName(self.version, self.getProperty("package_data")['uuid'])
@@ -90,8 +92,8 @@ class GetCommitdata(BuildStep):
#@defer.inlineCallbacks
def run(self):
- print(self.getProperty("revision_data"))
- self.setProperty('commit_id', self.getProperty("revision_data")['revision'], 'commit_id')
+ print(self.getProperty("change_data"))
+ self.setProperty('commit_id', self.getProperty("change_data")['revision'], 'commit_id')
return SUCCESS
class AddVersionKeyword(BuildStep):
@@ -243,32 +245,30 @@ class CheckV(BuildStep):
@defer.inlineCallbacks
def run(self):
- self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
- self.old_version_data = self.getProperty("old_version_data")
- self.ebuild_file = self.getProperty("ebuild_file")
addStepVData = []
- print(self.ebuild_file)
- print(self.old_version_data)
+ print(self.getProperty("ebuild_file"))
+ print(self.getProperty("old_version_data"))
print(self.getProperty("ebuild_file_hash"))
- if self.getProperty("ebuild_file") is None and self.getProperty("old_version_data") is not None:
- addStepVData.append(TriggerBuildCheck())
- addStepVData.append(DeleteOldVersion())
- if self.getProperty("ebuild_file") is not None and self.getProperty("old_version_data") is not None:
- if self.getProperty("ebuild_file_hash") != self.getProperty("old_version_data")['file_hash']:
- addStepVData.append(GetCommitdata())
- #FIXME: use GetAuxMetadata insted of bugy SetEnvForEbuildSH
- #addStepVData.append(portage_steps.SetEnvForEbuildSH())
- addStepVData.append(portage_steps.GetAuxMetadata())
- addStepVData.append(AddVersion())
- addStepVData.append(AddVersionKeyword())
+ if self.getProperty("ebuild_file") is None:
+ if self.getProperty("old_version_data") is None:
+ return WARNINGS
+ else:
addStepVData.append(TriggerBuildCheck())
addStepVData.append(DeleteOldVersion())
- else:
- return SUCCESS
- if self.getProperty("ebuild_file") is not None and self.getProperty("old_version_data") is None:
+ else:
+ if self.getProperty("old_version_data") is not None:
+ if self.getProperty("ebuild_file_hash") == self.getProperty("old_version_data")['file_hash']:
+ return WARNINGS
+ else:
+ addStepVData.append(DeleteOldVersion())
+ # setup /etc/portage
+ addStepVData.append(portage_steps.CheckPathLocal())
+ addStepVData.append(portage_steps.SetMakeProfileLocal())
+ addStepVData.append(portage_steps.SetReposConfLocal())
+ addStepVData.append(portage_steps.SetMakeConfLocal())
+ # get commit data
addStepVData.append(GetCommitdata())
- #FIXME: use GetAuxMetadata insted of bugy SetEnvForEbuildSH
- #addStepVData.append(portage_steps.SetEnvForEbuildSH())
+ # get ebuild aux metadata
addStepVData.append(portage_steps.GetAuxMetadata())
addStepVData.append(AddVersion())
addStepVData.append(AddVersionKeyword())
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
@ 2021-05-18 9:14 Magnus Granberg
0 siblings, 0 replies; 9+ messages in thread
From: Magnus Granberg @ 2021-05-18 9:14 UTC (permalink / raw
To: gentoo-commits
commit: cdbe9295f945bd4f40db2333e016c075e2c64784
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Tue May 18 09:13:59 2021 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Tue May 18 09:13:59 2021 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=cdbe9295
Add support to push log to Minio
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/buildfactorys.py | 2 +-
buildbot_gentoo_ci/steps/logs.py | 28 ++++++++++++++
buildbot_gentoo_ci/steps/minio.py | 60 ++++++++++++++++++++++++++++++
3 files changed, 89 insertions(+), 1 deletion(-)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index 417e385..d2e195c 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -171,7 +171,7 @@ def parse_build_log():
# pers the log from pkg check
#f.addStep(logs.ParserPkgCheckLog())
# Upload the log to the cloud and remove the log
- #f.addStep(logs.Upload())
+ f.addStep(logs.Upload())
# check the sum log if we need to make a issue/bug/pr report
# set it SUCCESS/FAILURE/WARNINGS
f.addStep(logs.MakeIssue())
diff --git a/buildbot_gentoo_ci/steps/logs.py b/buildbot_gentoo_ci/steps/logs.py
index 3c0ef8d..d69c447 100644
--- a/buildbot_gentoo_ci/steps/logs.py
+++ b/buildbot_gentoo_ci/steps/logs.py
@@ -18,6 +18,8 @@ from buildbot.process.results import FAILURE
from buildbot.process.results import WARNINGS
from buildbot.plugins import steps
+from buildbot_gentoo_ci.steps import minio
+
class SetupPropertys(BuildStep):
name = 'SetupPropertys'
@@ -277,6 +279,32 @@ class setEmergeInfoLog(BuildStep):
yield log.addStdout(line + '\n')
return SUCCESS
+class Upload(BuildStep):
+
+ name = 'Upload'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ descriptionSuffix = None
+ haltOnFailure = False
+ flunkOnFailure = True
+ warnOnWarnings = True
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ @defer.inlineCallbacks
+ def run(self):
+ if self.getProperty('faild_cpv'):
+ log_cpv = self.getProperty('log_build_data')[self.getProperty('faild_cpv')]
+ else:
+ log_cpv = self.getProperty('log_build_data')[self.getProperty('cpv')]
+ bucket = self.getProperty('project_data')['uuid'] + '-' + 'logs'
+ file_path = yield os.path.join(self.master.basedir, 'cpv_logs', log_cpv['full_logname'])
+ aftersteps_list = []
+ aftersteps_list.append(minio.putFileToMinio(file_path, log_cpv['full_logname'], bucket))
+ yield self.build.addStepsAfterCurrentStep(aftersteps_list)
+ return SUCCESS
+
class setBuildStatus(BuildStep):
name = 'setBuildStatus'
diff --git a/buildbot_gentoo_ci/steps/minio.py b/buildbot_gentoo_ci/steps/minio.py
new file mode 100644
index 0000000..ac9ac3d
--- /dev/null
+++ b/buildbot_gentoo_ci/steps/minio.py
@@ -0,0 +1,60 @@
+# Copyright 2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+from minio import Minio
+from minio.error import ResponseError, BucketAlreadyOwnedByYou, BucketAlreadyExists
+
+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
+
+#FIXME:
+# get url, user from config
+# get password from secret
+url = ''
+user = ''
+password = ''
+
+class putFileToMinio(BuildStep):
+
+ name = 'putFileToMinio'
+ description = 'Running'
+ descriptionDone = 'Ran'
+ descriptionSuffix = None
+ haltOnFailure = False
+ flunkOnFailure = True
+ warnOnWarnings = True
+
+ def __init__(self, filename, target, bucket, **kwargs):
+ self.filename = filename
+ self.bucket = bucket
+ self.target = target
+ super().__init__(**kwargs)
+
+ def getMinioConnect(self, url, user, password):
+ minioclient = Minio(
+ url,
+ access_key = user,
+ secret_key = password,
+ secure = False
+ )
+ return minioclient
+
+ @defer.inlineCallbacks
+ def pushFileToMinio(self):
+ try:
+ yield self.minio_connect.fput_object(self.bucket, self.target, self.filename)
+ except ResponseError as err:
+ print(err)
+ return FAILURE
+ return True
+
+ @defer.inlineCallbacks
+ def run(self):
+ self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ self.minio_connect = yield self.getMinioConnect(url, user, password)
+ success = yield self.pushFileToMinio()
+ return SUCCESS
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
@ 2022-07-14 23:43 Magnus Granberg
0 siblings, 0 replies; 9+ messages in thread
From: Magnus Granberg @ 2022-07-14 23:43 UTC (permalink / raw
To: gentoo-commits
commit: dae4e75d90b65bc77a383c63cd0d6aa19d832531
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 14 23:43:18 2022 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Thu Jul 14 23:43:18 2022 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=dae4e75d
Reado the match stage
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/buildfactorys.py | 27 +----
buildbot_gentoo_ci/steps/builders.py | 166 ++++++++++++++++++++++-------
2 files changed, 132 insertions(+), 61 deletions(-)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index 426cee9..d07e31b 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -160,33 +160,10 @@ def run_build_request():
f.addStep(portage.SetPackageDefault())
# setup files in /etc if needed
# run --regen if needed on repo
- # update packages before any tests
- # run pretend on packages update on worker
- f.addStep(builders.RunEmerge(step='pre-update'))
- # look at the log to see if we need to do stuff
- # run update package on worker and check log
- f.addStep(builders.RunEmerge(step='update'))
- # clean up the worker
- # look at the log to see if we need to do stuff
- # run pre-depclean and depclean if set
- f.addStep(builders.RunEmerge(step='pre-depclean'))
- # run preserved-libs and depclean
- f.addStep(builders.RunEmerge(step='preserved-libs'))
- f.addStep(builders.RunEmerge(step='depclean'))
- # setup make.conf if build id has changes make.conf as dict from SetMakeConf
- # setup package.* env if build id has changes
- # setup pkgcheck.conf if needed
- #f.addStep(builders.SetPkgCheckConf())
- # run pkgcheck if wanted
- # check log
- f.addStep(builders.RunPkgCheck())
# check cpv match
f.addStep(builders.RunEmerge(step='match'))
- # Add the needed steps for build
- f.addStep(builders.RunBuild())
- # run eclean pkg and dist
- #f.addStep(builders.RunEclean(step='pkg')
- #f.addStep(builders.RunEclean(step='dist')
+ # Setup the needed stages for update, pkgcheck and build
+ f.addStep(builders.SetupStepts())
return f
def parse_build_log():
diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py
index dcd54c2..ccb28e1 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -15,6 +15,7 @@ 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.results import WARNINGS
from buildbot.plugins import steps
#FIXME: should be set in config
@@ -26,9 +27,11 @@ def PersOutputOfEmerge(rc, stdout, stderr):
emerge_output['preserved_libs'] = False
emerge_output['change_use'] = False
emerge_output['circular_deps'] = False
+ emerge_output['masked'] = False
emerge_output['failed'] = False
package_dict = {}
log_path_list = []
+ print('stderr')
print(stderr)
# split the lines
for line in stdout.split('\n'):
@@ -115,7 +118,6 @@ def PersOutputOfEmerge(rc, stdout, stderr):
if change_use_list:
change_use[cpv_split[0]] = change_use_list
emerge_output['change_use'] = change_use
- err_line_list = []
if line.startswith(' * '):
if line.endswith('.log.gz'):
log_path = line.split(' ')[3]
@@ -125,6 +127,10 @@ def PersOutputOfEmerge(rc, stdout, stderr):
if line.endswith('circular dependencies:'):
emerge_output['circular_deps'] = True
stderr_line_list.append(line)
+ if line.startswith('- '):
+ if re.search('masked', line):
+ stderr_line_list.append(line)
+ emerge_output['masked'] = True
emerge_output['stderr'] = stderr_line_list
emerge_output['log_paths'] = log_path_list
@@ -397,6 +403,9 @@ class RunEmerge(BuildStep):
'emerge',
'-v'
]
+ c = yield catpkgsplit(self.getProperty("cpv"))[0]
+ p = yield catpkgsplit(self.getProperty("cpv"))[1]
+ cp = c + '/' + p
aftersteps_list = []
#FIXME: Set build timeout in config
self.build_timeout = 6600
@@ -510,25 +519,10 @@ class RunEmerge(BuildStep):
aftersteps_list.append(CheckDepcleanLogs('depclean'))
if self.step == 'match':
- packages_excludes = yield self.gentooci.db.projects.getProjectPortagePackageByUuidAndExclude(self.getProperty('project_data')['uuid'])
- cpv = self.getProperty("cpv")
- c = yield catpkgsplit(cpv)[0]
- p = yield catpkgsplit(cpv)[1]
- # Check if package is on the exclude list
- if packages_excludes != []:
- print(packages_excludes)
- print(cpv)
- for package_exclude in packages_excludes:
- if '/' in package_exclude['package']:
- if package_exclude['package'] == c + '/' + p:
- return SKIPPED
- else:
- if package_exclude['package'] == p:
- return SKIPPED
shell_commad_list.append('-pO')
# don't use bin for match
shell_commad_list.append('--usepkg=n')
- shell_commad_list.append(c + '/' + p)
+ shell_commad_list.append(cp)
aftersteps_list.append(
steps.SetPropertyFromCommand(
name = self.stepname,
@@ -536,18 +530,19 @@ class RunEmerge(BuildStep):
strip=True,
extract_fn=PersOutputOfEmerge,
workdir='/',
- timeout=self.build_timeout
+ timeout=self.build_timeout,
+ warnOnWarnings = True,
+ warnOnFailure = True,
+ flunkOnFailure = False,
+ flunkOnWarnings = False
))
aftersteps_list.append(CheckEmergeLogs('match'))
if self.step == 'pre-build':
- cpv = self.getProperty("cpv")
- c = yield catpkgsplit(cpv)[0]
- p = yield catpkgsplit(cpv)[1]
shell_commad_list.append('=' + self.getProperty('cpv'))
# we don't use the bin for the requsted cpv
shell_commad_list.append('--usepkg-exclude')
- shell_commad_list.append(c + '/' + p)
+ shell_commad_list.append(cp)
# don't build bin for virtual and acct-*
shell_commad_list.append('--buildpkg-exclude')
shell_commad_list.append('virtual')
@@ -570,15 +565,12 @@ class RunEmerge(BuildStep):
aftersteps_list.append(CheckEmergeLogs('pre-build'))
if self.step == 'build':
- cpv = self.getProperty("cpv")
- c = yield catpkgsplit(cpv)[0]
- p = yield catpkgsplit(cpv)[1]
if projects_emerge_options['oneshot']:
shell_commad_list.append('-1')
shell_commad_list.append('=' + self.getProperty('cpv'))
# we don't use the bin for the requsted cpv
shell_commad_list.append('--usepkg-exclude')
- shell_commad_list.append(c + '/' + p)
+ shell_commad_list.append(cp)
# don't build bin for virtual and acct-*
shell_commad_list.append('--buildpkg-exclude')
shell_commad_list.append('virtual')
@@ -1050,7 +1042,6 @@ class RunPkgCheck(BuildStep):
name = 'Setup PkgCheck step'
description = 'Running'
- descriptionDone = 'Ran'
descriptionSuffix = None
haltOnFailure = True
flunkOnFailure = True
@@ -1060,10 +1051,9 @@ class RunPkgCheck(BuildStep):
@defer.inlineCallbacks
def run(self):
- projectrepository_data = self.getProperty('projectrepository_data')
- if not projectrepository_data['pkgcheck']:
- return SUCCESS
+ descriptionDone = 'Setting up steps for Pkgcheck on ' + self.getProperty('cpv')
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ projectrepository_data = self.getProperty('projectrepository_data')
project_data = self.getProperty('project_data')
portage_repos_path = self.getProperty('portage_repos_path')
repository_path = yield os.path.join(portage_repos_path, self.getProperty('repository_data')['name'])
@@ -1182,9 +1172,8 @@ class RunEmergeInfo(BuildStep):
class RunBuild(BuildStep):
- name = 'Setup steps for building package'
+ name = 'Setup steps for building'
description = 'Running'
- descriptionDone = 'Ran'
descriptionSuffix = None
haltOnFailure = True
flunkOnFailure = True
@@ -1194,10 +1183,7 @@ class RunBuild(BuildStep):
@defer.inlineCallbacks
def run(self):
- if not self.getProperty('cpv_build'):
- #FIXME:
- # trigger pars_build_log if we have any logs to check
- return SKIPPED
+ descriptionDone = 'Setting up steps for build ' + self.getProperty('cpv')
aftersteps_list = []
aftersteps_list.append(RunEmerge(step='pre-build'))
aftersteps_list.append(RunEmergeInfo())
@@ -1209,3 +1195,111 @@ class RunBuild(BuildStep):
self.setProperty('preserved_libs', False, 'preserved-libs')
yield self.build.addStepsAfterCurrentStep(aftersteps_list)
return SUCCESS
+
+class RunUpdate(BuildStep):
+
+ name = 'Setup steps for update'
+ description = 'Running'
+ descriptionSuffix = None
+ haltOnFailure = True
+ flunkOnFailure = True
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ @defer.inlineCallbacks
+ def run(self):
+ descriptionDone = 'Setting up steps for updating image'
+ aftersteps_list = []
+ # run pretend on packages update on worker
+ aftersteps_list.append(RunEmerge(step='pre-update'))
+ # look at the log to see if we need to do stuff
+ # run update package on worker and check log
+ aftersteps_list.append(RunEmerge(step='update'))
+ # clean up the worker
+ # look at the log to see if we need to do stuff
+ # run pre-depclean and depclean if set
+ aftersteps_list.append(RunEmerge(step='pre-depclean'))
+ # run preserved-libs and depclean
+ aftersteps_list.append(RunEmerge(step='preserved-libs'))
+ aftersteps_list.append(RunEmerge(step='depclean'))
+ yield self.build.addStepsAfterCurrentStep(aftersteps_list)
+ return SUCCESS
+
+class SetupStepts(BuildStep):
+
+ name = 'Setup steps for update, pkgcheck and build'
+ description = 'Running'
+ descriptionSuffix = None
+ haltOnFailure = True
+ flunkOnFailure = True
+
+ def __init__(self, **kwargs):
+ super().__init__(**kwargs)
+
+ @defer.inlineCallbacks
+ def run(self):
+ projectrepository_data = self.getProperty('projectrepository_data')
+ build = False
+ aftersteps_list = []
+ log = yield self.addLog('match')
+ package_dict = self.getProperty('emerge_output')['packages']
+ stderr = self.getProperty('emerge_output')['stderr']
+ print(self.getProperty('cpv_build'))
+ print(package_dict)
+ print(stderr)
+ c = yield catpkgsplit(self.getProperty("cpv"))[0]
+ p = yield catpkgsplit(self.getProperty("cpv"))[1]
+ cp = c + '/' + p
+ yield log.addStdout('Package to match: ' + self.getProperty('cpv') + '\n')
+ self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ packages_excludes = yield self.gentooci.db.projects.getProjectPortagePackageByUuidAndExclude(self.getProperty('project_data')['uuid'])
+ # Check if package is on the exclude list
+ if packages_excludes != []:
+ print(packages_excludes)
+ for package_exclude in packages_excludes:
+ if '/' in package_exclude['package']:
+ if package_exclude['package'] == c + '/' + p:
+ yield log.addStdout('Package ' + package_exclude['package'] + ' is in exclude list\n')
+ yield log.addStdout('Runing Update: NO\n')
+ yield log.addStdout('Runing Pkgcheck: NO\n')
+ yield log.addStdout('Runing Build: NO\n')
+ return SKIPPED
+ if not self.getProperty('cpv_build'):
+ # check what version
+ if package_dict == {}:
+ yield log.addStdout('No package to match\n')
+ else:
+ for cpv, v in package_dict.items():
+ if re.search(cp, cpv):
+ yield log.addStdout('Got' + cpv + '\n')
+ yield log.addStdout('Match: NO\n')
+ # check for error
+ if stderr != []:
+ yield log.addStdout('Error: YES\n')
+ for error in stderr:
+ yield log.addStdout(error + '\n')
+ return WARNINGS
+ else:
+ yield log.addStdout('Error: NO\n')
+ return SKIPPED
+ build = True
+ yield log.addStdout('Got' + self.getProperty("cpv") + '\n')
+ yield log.addStdout('Match: YES\n')
+ # update packages before any tests
+ if build:
+ yield log.addStdout('Runing Update: YES\n')
+ aftersteps_list.append(RunUpdate())
+ if projectrepository_data['pkgcheck']:
+ yield log.addStdout('Runing Pkgcheck: YES\n')
+ aftersteps_list.append(RunPkgCheck())
+ if build:
+ yield log.addStdout('Runing Build: YES\n')
+ aftersteps_list.append(RunBuild())
+ # run eclean pkg and dist
+ #if build:
+ #f.addStep(builders.RunEclean(step='pkg')
+ #f.addStep(builders.RunEclean(step='dist')
+ if aftersteps_list != []:
+ yield self.build.addStepsAfterCurrentStep(aftersteps_list)
+ return SUCCESS
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
@ 2023-06-26 21:52 Magnus Granberg
0 siblings, 0 replies; 9+ messages in thread
From: Magnus Granberg @ 2023-06-26 21:52 UTC (permalink / raw
To: gentoo-commits
commit: f95dce7cfc33e1d5a0e606c5562cac59c2dc0fdd
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Mon Jun 26 21:52:10 2023 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Mon Jun 26 21:52:10 2023 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=f95dce7c
Add run_clean_db_request to clean db
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/builders.py | 29 +++++++++
buildbot_gentoo_ci/config/buildfactorys.py | 9 +++
buildbot_gentoo_ci/config/schedulers.py | 3 +
buildbot_gentoo_ci/steps/clean.py | 97 ++++++++++++++++++++++++++++++
buildbot_gentoo_ci/steps/package.py | 45 ++++++++++++++
5 files changed, 183 insertions(+)
diff --git a/buildbot_gentoo_ci/config/builders.py b/buildbot_gentoo_ci/config/builders.py
index b3ddb16..584dfdf 100644
--- a/buildbot_gentoo_ci/config/builders.py
+++ b/buildbot_gentoo_ci/config/builders.py
@@ -20,6 +20,24 @@ def getWorkers(worker_type, workers):
worker_list.append(worker['uuid'])
return worker_list
+# check if we have same package_data
+@defer.inlineCallbacks
+def checkPackageData(master, builder, req1, req2):
+ canBeCollapsed = yield buildrequest.BuildRequest.canBeCollapsed(master, req1, req2)
+ selfBuildset , otherBuildset = yield defer.gatherResults([
+ master.data.get(('buildsets', req1['buildsetid'])),
+ master.data.get(('buildsets', req2['buildsetid']))
+ ])
+ print(f"TestCollapsed")
+ print(f"canBeCollapsed: {canBeCollapsed}")
+ print(f"selfBuildset: {selfBuildset}")
+ print(f"otherBuildset: {otherBuildset}")
+ if canBeCollapsed and selfBuildset['parent_buildid'] != None and \
+ otherBuildset['parent_buildid'] != None:
+ return True
+ else:
+ return False
+
@defer.inlineCallbacks
def CanWorkerBuildProject(builder, wfb, request):
gentooci = builder.master.namedServices['services'].namedServices['gentooci']
@@ -118,4 +136,15 @@ def gentoo_builders(worker_data):
factory=buildfactorys.run_build_images_request()
)
)
+ # Use multiplay workers
+ b.append(util.BuilderConfig(
+ name='run_clean_db_request',
+ workernames=getWorkersLocal('local', worker_data['local']),
+ # look builder so we only do one time
+ # look=
+ # if we allready runnin with same package_data properties then skip/collapse
+ #collapseRequests=checkPackageData,
+ factory=buildfactorys.run_clean_db_request()
+ )
+ )
return b
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index b47a209..6755308 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -14,6 +14,7 @@ from buildbot_gentoo_ci.steps import portage
from buildbot_gentoo_ci.steps import logs
from buildbot_gentoo_ci.steps import repos
from buildbot_gentoo_ci.steps import nodes
+from buildbot_gentoo_ci.steps import clean
def update_db_check():
f = util.BuildFactory()
@@ -66,6 +67,8 @@ def update_db_cpv():
f.addStep(package.TriggerCheckForV())
# update metadata if needed
f.addStep(package.CheckMetadataPackagePath())
+ # clean package db if needed (clean up ebuilds in db)
+ f.addStep(package.TriggerCleanPackageDb())
return f
def update_db_v():
@@ -201,3 +204,9 @@ def run_build_images_request():
# set the needed steps for making the image
f.addStep(nodes.SetupBuildTypeAndSteps())
return f
+
+def run_clean_db_request():
+ f = util.BuildFactory()
+ # set needed Propertys
+ f.addStep(clean.SetupPropertys())
+ return f
diff --git a/buildbot_gentoo_ci/config/schedulers.py b/buildbot_gentoo_ci/config/schedulers.py
index 7833233..c34d714 100644
--- a/buildbot_gentoo_ci/config/schedulers.py
+++ b/buildbot_gentoo_ci/config/schedulers.py
@@ -92,6 +92,8 @@ def gentoo_schedulers():
builderNames=["parse_build_log"])
run_build_images_request = schedulers.Triggerable(name="run_build_images_request",
builderNames=["run_build_images_request"])
+ run_clean_db_request = schedulers.Triggerable(name="run_clean_db_request",
+ builderNames=["run_clean_db_request"])
s = []
s.append(create_images)
s.append(scheduler_update_db)
@@ -101,4 +103,5 @@ def gentoo_schedulers():
s.append(build_request_data)
s.append(run_build_request)
s.append(parse_build_log)
+ s.append(run_clean_db_request)
return s
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
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
@ 2024-03-30 9:16 Magnus Granberg
0 siblings, 0 replies; 9+ messages in thread
From: Magnus Granberg @ 2024-03-30 9:16 UTC (permalink / raw
To: gentoo-commits
commit: 99dcb588c27184023d01ae6a55308e999ce25c20
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sat Mar 30 09:16:33 2024 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sat Mar 30 09:16:33 2024 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=99dcb588
Add build dep irc report
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/reporters.py | 3 ++-
buildbot_gentoo_ci/steps/builders.py | 5 ++++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/buildbot_gentoo_ci/config/reporters.py b/buildbot_gentoo_ci/config/reporters.py
index ede9178..c1f0aef 100644
--- a/buildbot_gentoo_ci/config/reporters.py
+++ b/buildbot_gentoo_ci/config/reporters.py
@@ -13,7 +13,8 @@ irc_template = '''{% set resultsList = ["\x0303SUCCESS", "\x0308WARNINGS", "\x03
{{ "\x02" }}{{ build['properties']['cpv'][0] }}{{ "\x02" }} {{ "\x0303" }}Repo:{{ projects }}:{{ build['properties']['branch'][0] }}{{ "\x03" }} \
{{ build['properties']['revision'][0]|truncate(10, True) }} {{ "\x0302" }}{{ build['properties']['owners'][0][0] }}{{ "\x03" }} \
{{ "\x0306" }}{{ build['properties']['event'][0] }}{{ "\x03" }} {{ projects }}:{{ build['properties']['project_data'][0]['name'] }} \
-{{ "\x02" }}{{ "Build: "}}{{ resultsList[build['results']] }}{{ "\x03" }}{{ "\x02" }} {{ "\x0312" }}{{ build_url }}{{ "\x03" }} \
+{{ "\x02" }}{{ "Build: "}}{{ resultsList[build['results']] }}{{ "\x03" }}{{ "\x02" }} Dep: {{ resultsList[build['properties']['faild_dep'][0]] }} \
+{{ "\x0312" }}{{ build_url }}{{ "\x03" }} \
{% if build['properties']['bgo'][0]['match'] is true %}{{ "\x0311" }}Bug: {{ "\x03" }}https://bugs.gentoo.org/{{build['properties']['bgo'][0]['id']}}{% endif %}\
'''
diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py
index 73e82f5..53f79ab 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -899,6 +899,7 @@ class CheckEmergeLogs(BuildStep):
self.setProperty('faild_cpv', emerge_output['failed'], 'faild_cpv')
self.faild_version_data = False
self.log_data = {}
+ self.faild_dep = 0
package_dict = emerge_output['packages']
#FIXME: Prosees the logs and do stuff
@@ -1060,6 +1061,7 @@ class CheckEmergeLogs(BuildStep):
self.faild_version_data = self.getProperty("version_data")
else:
repository = False
+ self.faild_dep = 2
for cpv, v in package_dict.items():
if cpv == emerge_output['failed']:
repository = v['repository']
@@ -1082,10 +1084,11 @@ class CheckEmergeLogs(BuildStep):
'pkg_check_log_data' : self.getProperty("pkg_check_log_data"),
'repository_data' : self.getProperty('repository_data'),
'faild_cpv' : emerge_output['failed'],
+ 'faild_dep' : self.faild_dep
'build_workername' : self.getProperty('workername')
}
))
- if rebuild:
+ if isinstance(rebuild, str):
#FIXME: Set build timeout in config
build_timeout = 6600
shell_commad_list = []
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/
@ 2024-10-30 21:44 Magnus Granberg
0 siblings, 0 replies; 9+ messages in thread
From: Magnus Granberg @ 2024-10-30 21:44 UTC (permalink / raw
To: gentoo-commits
commit: e985f2cf2dfd2ab17c7ea7185e82c25c60deb780
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Wed Oct 30 21:43:02 2024 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Wed Oct 30 21:43:02 2024 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=e985f2cf
Update steps to support Buildbot 4.1.0
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/buildfactorys.py | 2 +
buildbot_gentoo_ci/steps/bugs.py | 4 +-
buildbot_gentoo_ci/steps/clean.py | 16 +++-
buildbot_gentoo_ci/steps/logs.py | 136 ++++++++++++++++++++++++-----
buildbot_gentoo_ci/steps/package.py | 11 ++-
buildbot_gentoo_ci/steps/version.py | 9 +-
6 files changed, 148 insertions(+), 30 deletions(-)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
index ab80e19..fffa281 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -172,6 +172,8 @@ def parse_build_log():
f.addStep(logs.setEmergeInfoLog())
# add package info to log and db
f.addStep(logs.setPackageInfoLog())
+ # save build steps log to a file
+ f.addStep(logs.writeStepLogsToFile())
# make the bugreport
f.addStep(logs.SetupBugReportSteps())
# set BuildStatus
diff --git a/buildbot_gentoo_ci/steps/bugs.py b/buildbot_gentoo_ci/steps/bugs.py
index 52bd08d..efff7f5 100644
--- a/buildbot_gentoo_ci/steps/bugs.py
+++ b/buildbot_gentoo_ci/steps/bugs.py
@@ -18,7 +18,7 @@ from buildbot.plugins import util
from buildbot_gentoo_ci.utils.regex import stripQuotesAndMore, finishTitle
-from bugz.cli import check_bugz_token, login, list_bugs
+from bugz.cli import check_bugz_token, check_auth, list_bugs
from bugz.cli_argparser import make_arg_parser
from bugz.configfile import load_config
from bugz.settings import Settings
@@ -64,7 +64,7 @@ def search_bugz(args):
for key in params:
log_info(' {0:<20} = {1}'.format(key, params[key]))
- login(settings)
+ check_auth(settings)
result = settings.call_bz(settings.bz.Bug.search, params)['bugs']
diff --git a/buildbot_gentoo_ci/steps/clean.py b/buildbot_gentoo_ci/steps/clean.py
index e4d8573..fb28973 100644
--- a/buildbot_gentoo_ci/steps/clean.py
+++ b/buildbot_gentoo_ci/steps/clean.py
@@ -10,6 +10,7 @@ from buildbot.process.results import FAILURE
from buildbot.process.results import SKIPPED
from buildbot.plugins import steps, util
+from buildbot_gentoo_ci.db.builds import _db2data_ProjectsBuilds
class SetupPropertys(BuildStep):
name = 'Setup propertys for clean db'
description = 'Running'
@@ -40,7 +41,8 @@ class SetupPropertys(BuildStep):
# 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:
+ for build_data_model in build_data_list:
+ build_data = _db2data_ProjectsBuilds(build_data_model)
if build_data['bug_id'] == 0:
print(f"Build : {build_data['id']} will be removed")
if build_data['buildbot_build_id'] != 0:
@@ -72,6 +74,11 @@ class RemoveEbuildFromDb(BuildStep):
@defer.inlineCallbacks
def run(self):
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ build_data_list = yield self.gentooci.db.builds.getBuildsByVersionUuid(self.uuid)
+ print(build_data_list)
+ for build_data_model in build_data_list:
+ build_data = _db2data_ProjectsBuilds(build_data_model)
+ yield self.gentooci.db.builds.removeBuild(build_data['id'])
yield self.gentooci.db.versions.removeVersionKeyword(self.uuid)
yield self.gentooci.db.versions.removeVersionMetadata(self.uuid)
yield self.gentooci.db.versions.removeVersion(self.uuid)
@@ -112,7 +119,12 @@ class RemoveBuildFromDb(BuildStep):
self.descriptionDone = f"BuildBot Build : {self.build_id} will be removed"
bb_build_data = yield self.master.db.builds.getBuild(self.build_id)
# remove steps and logs
- yield self.master.db.logs.deleteLogChunks(self.build_id)
+ steps_data = yield self.master.db.steps.getSteps(self.build_id)
+ for step_data in steps_data:
+ yield self.master.db.logs.deleteLog(step_data['id'])
+ logs_data = yield self.master.db.logs.getLogs(step_data['id'])
+ for log_data in logs_data:
+ yield self.master.db.logs.deleteLogChunks(log_data['id'])
# remove propertys
yield self.master.db.builds.pruneBuildProperties(self.build_id)
# remove buildset_sourcestamps
diff --git a/buildbot_gentoo_ci/steps/logs.py b/buildbot_gentoo_ci/steps/logs.py
index 6b8eba5..fdd0f3e 100644
--- a/buildbot_gentoo_ci/steps/logs.py
+++ b/buildbot_gentoo_ci/steps/logs.py
@@ -1,6 +1,9 @@
-# Copyright 2023 Gentoo Authors
+# Copyright 2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
import os
import re
import gzip
@@ -27,6 +30,39 @@ from buildbot.plugins import util
from buildbot_gentoo_ci.steps import master as master_steps
from buildbot_gentoo_ci.steps import bugs
from buildbot_gentoo_ci.utils.regex import stripQuotesAndMore, finishTitle
+from buildbot_gentoo_ci.db.versions import _db2data_Version
+from buildbot_gentoo_ci.db.packages import _db2data_Package
+
+from buildbot.db.logs import LogModel
+from buildbot.db.steps import StepModel
+
+def _db2data_Log(model: LogModel):
+ if model is None:
+ return None
+ return {
+ 'logid': model.id,
+ 'name': model.name,
+ 'slug': model.slug,
+ 'stepid': model.stepid,
+ 'complete': model.complete,
+ 'num_lines': model.num_lines,
+ 'type': model.type,
+ }
+
+def _db2data_Step(model: StepModel):
+ return {
+ 'stepid': model.id,
+ 'number': model.number,
+ 'name': model.name,
+ 'buildid': model.buildid,
+ 'started_at': model.started_at,
+ 'locks_acquired_at': model.locks_acquired_at,
+ 'complete_at': model.complete_at,
+ 'state_string': model.state_string,
+ 'results': model.results,
+ 'urls': [{'name': item.name, 'url': item.url} for item in model.urls],
+ 'hidden': model.hidden,
+ }
def PersOutputOfLogParser(rc, stdout, stderr):
build_summery_output = {}
@@ -103,12 +139,14 @@ class SetupPropertys(BuildStep):
@defer.inlineCallbacks
def run(self):
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
+ print(f"Project_build_data:{self.getProperty('project_build_data')}")
project_data = yield self.gentooci.db.projects.getProjectByUuid(self.getProperty('project_build_data')['project_uuid'])
default_project_data = yield self.gentooci.db.projects.getProjectByName(self.gentooci.config.project['project']['update_db'])
version_data = yield self.gentooci.db.versions.getVersionByUuid(self.getProperty('project_build_data')['version_uuid'])
+ print(f"Version_data:{version_data}")
self.setProperty("project_data", project_data, 'project_data')
self.setProperty("default_project_data", default_project_data, 'default_project_data')
- self.setProperty("version_data", version_data, 'version_data')
+ self.setProperty("version_data", _db2data_Version(version_data), 'version_data')
self.setProperty("status", 'completed', 'status')
if isinstance(self.getProperty('faild_cpv'), str):
log_cpv = self.getProperty('faild_cpv')
@@ -119,21 +157,6 @@ class SetupPropertys(BuildStep):
self.descriptionDone = 'Runing log checker on ' + log_cpv
logsdir = yield os.path.join(self.master.basedir, 'workers', self.getProperty('build_workername'), str(self.getProperty("project_build_data")['buildnumber']))
self.setProperty("logsdir", logsdir, 'logsdir')
- # get steps/log id's from build
- build_log_steps_data = {}
- steps_data = yield self.master.db.steps.getSteps(self.getProperty("project_build_data")['buildbot_build_id'])
- for step in steps_data:
- log_data = None
- logs_data = yield self.master.db.logs.getLogs(step['id'])
- for log_info in logs_data:
- if log_info['name'] != 'property changes':
- log_data = log_info
- step_info = {}
- step_info['name'] = step['name']
- step_info['number'] = step['number']
- step_info['log_data'] = log_data
- build_log_steps_data[step['id']] = step_info
- self.setProperty("build_log_steps_data", build_log_steps_data, 'build_log_steps_data')
return SUCCESS
class SetupParserBuildLoger(BuildStep):
@@ -539,15 +562,32 @@ class writeStepLogsToFile(BuildStep):
@defer.inlineCallbacks
def run(self):
+ # get steps/log id's from build
+ build_log_steps_data = {}
+ steps_data = yield self.master.db.steps.getSteps(self.getProperty("project_build_data")['buildbot_build_id'])
+ for dbdict_step in steps_data:
+ step = _db2data_Step(dbdict_step)
+ logs_data = yield self.master.db.logs.getLogs(step['stepid'])
+ log_data = None
+ for dbdict_log_info in logs_data:
+ log_info = _db2data_Log(dbdict_log_info)
+ if log_info['name'] != 'property changes':
+ log_data = log_info
+ step_info = {}
+ step_info['name'] = step['name']
+ step_info['number'] = step['number']
+ step_info['log_data'] = log_data
+ build_log_steps_data[step['stepid']] = step_info
+ self.setProperty("build_log_steps_data", build_log_steps_data, 'build_log_steps_data')
buildsteplogfile_path = yield os.path.join(self.getProperty('logsdir'), 'buildsteps.log.xz')
stepstologlist = ['Run emerge step build', 'Run emerge step build_1']
logs_texts = []
- for k, v in self.getProperty('build_log_steps_data').items():
+ for k, v in build_log_steps_data.items():
if v['name'] in stepstologlist:
logs_texts.append(f">>> BEGINING OF STEP: {v['name']}")
logs_texts.append('')
log_data = v['log_data']
- log_text = yield self.master.db.logs.getLogLines(log_data['id'], 1, log_data['num_lines'])
+ log_text = yield self.master.db.logs.getLogLines(log_data['logid'], 1, log_data['num_lines'])
for line in log_text.split('\n'):
if line.startswith('h BUILDMASTER='):
line = 'h BUILDMASTER=XXX.XXX.XXX.XXX'
@@ -568,12 +608,57 @@ class SetupBugReportSteps(BuildStep):
def __init__(self, **kwargs):
super().__init__(**kwargs)
+ @defer.inlineCallbacks
+ def getCCAndAssigned_to(self):
+ emails_dict = self.getProperty('emails')
+ packages_emails = emails_dict['packages_emails']
+ change_emails = emails_dict['change']
+ if self.getProperty('failed_version_data'):
+ change_id = self.getProperty('failed_version_data')['change_id']
+ else:
+ change_id = self.getProperty('version_data')['change_id']
+ change = yield self.master.db.changes.getChange(change_id)
+ stab_key = False
+ bug_mails = []
+ for word in ['Stabilize', 'stabilize', 'Keyword', 'keyword']:
+ if word in change['comments']:
+ stab_key = True
+ change_author = change_emails['authors'].split(' <')[1][:-1]
+ if 'proxy-maint@gentoo.org' or 'maintainer-needed@gentoo.org' in packages_emails:
+ if not change_author.endswith('@gentoo.org') and not stab_key:
+ bug_mails.append(change_author)
+ for package_email in packages_emails:
+ if not package_email['email'].endswith('@gentoo.org') and package_email['email'] not in bug_mails:
+ bug_mails.append(package_email['email'])
+ for package_email in packages_emails:
+ if bug_mails == []:
+ if package_email['mail_type'] == 'project':
+ bug_mails.append(package_email['email'])
+ elif 'proxy-maint@gentoo.org' or 'maintainer-needed@gentoo.org' not in packages_emails:
+ if change_author in package_email:
+ bug_mails.append(change_author)
+ if not change_author.endswith('@gentoo.org') not in packages_emails:
+ bug_mails.append(change_author)
+ for package_email in packages_emails:
+ if bug_mails == []:
+ if package_email['mail_type'] == 'project':
+ bug_mails.append(package_email['email'])
+ if change_author not in bug_mails and not stab_key:
+ bug_mails.append(change_author)
+ for package_email in packages_emails:
+ if not package_email['email'] in bug_mails:
+ bug_mails.append(package_email['email'])
+ print(f"bug_mails: {bug_mails}")
+ self.setProperty("bug_mails", bug_mails, 'bug_mails')
+ return bug_mails
+
@defer.inlineCallbacks
def run(self):
self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
bug_config = self.gentooci.config.project['bug_config']
make_bugreport = False
print(bug_config)
+ bug_mails = self.getCCAndAssigned_to()
if bug_config['enable'] and self.getProperty('status') == 'failed' and self.getProperty('error_dict')['title_found'] and not self.getProperty('bgo'):
# add bug enable profile, repo and project
bug_settings_data = yield self.gentooci.db.projects.getBugsSettingsByProjectUuid(self.getProperty("project_data")['uuid'])
@@ -581,9 +666,12 @@ class SetupBugReportSteps(BuildStep):
version_data = self.getProperty('failed_version_data')
else:
version_data = self.getProperty("version_data")
- package_data = yield self.gentooci.db.packages.getPackageByUuid(version_data['package_uuid'])
- project_repository_settings = yield self.gentooci.db.projects.getRepositorySettingByProjUuidAndRepoUuid(self.getProperty("project_data")['uuid'], package_data['repository_uuid'])
- print(bug_settings_data)
+ print(version_data)
+ dbdict_package_data = yield self.gentooci.db.packages.getPackageByUuid(version_data['package_uuid'])
+ package_data = _db2data_Package(dbdict_package_data)
+ print(package_data)
+ project_repository_settings = yield self.gentooci.db.projects.getRepositorySettingByProjUuidAndRepoUuid(
+ self.getProperty("project_data")['uuid'], package_data['repository_uuid'])
print(project_repository_settings)
if bug_settings_data['enabled'] and project_repository_settings['bug']:
make_bugreport = True
@@ -643,6 +731,10 @@ class SetupBugReportSteps(BuildStep):
bug_params4['filename'] = yield os.path.join(self.getProperty('logsdir'), filename)
#bug_params4['comment'] = filename
aftersteps_list.append(bugs.Attach(bug_args, bug_params4))
+ bug_params5 = {}
+ #bug_params5['assigned_to'] = assigned_to
+ #bug_params5['cc'] = cc_list
+ #aftersteps_list.append(bugs.Modify(bug_args, bug_params5))
yield self.build.addStepsAfterCurrentStep(aftersteps_list)
return SUCCESS
return SKIPPED
diff --git a/buildbot_gentoo_ci/steps/package.py b/buildbot_gentoo_ci/steps/package.py
index 847ba12..bd42a48 100644
--- a/buildbot_gentoo_ci/steps/package.py
+++ b/buildbot_gentoo_ci/steps/package.py
@@ -1,6 +1,9 @@
-# Copyright 2021 Gentoo Authors
+# Copyright 2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
+from __future__ import annotations
+from typing import TYPE_CHECKING
+
import re
import os
@@ -16,6 +19,8 @@ from buildbot.process.results import SKIPPED
from buildbot.process import remotecommand
from buildbot.plugins import steps
+from buildbot_gentoo_ci.db.packages import _db2data_Package
+
class SetupPropertys(BuildStep):
name = 'Setup propertys for CPV check'
description = 'Running'
@@ -246,7 +251,7 @@ class CheckP(BuildStep):
self.setProperty("package", self.package, 'package')
yield self.build.addStepsAfterCurrentStep([AddPackage()])
else:
- self.setProperty("package_data", self.package_data, 'package_data')
+ self.setProperty("package_data", _db2data_Package(self.package_data), 'package_data')
return SUCCESS
class TriggerCheckForV(BuildStep):
@@ -306,8 +311,10 @@ class TriggerCleanPackageDb(BuildStep):
days_in_s = 86400 * days
needcleaning = 0
now = int(self.master.reactor.seconds())
+ print(f"Now: {now} Days: {days_in_s} Now - Days: {now - days_in_s} in s Old ebuilds: {len(deleted_ebuilds_data)}")
for deleted_ebuild_data in deleted_ebuilds_data:
# check if older the days
+ print(f"Ebuild deleted time in s: {deleted_ebuild_data['deleted_at']} Days old: {divmod(now - deleted_ebuild_data['deleted_at'], 86400)}")
if deleted_ebuild_data['deleted_at'] < (now - days_in_s):
needcleaning = needcleaning + 1
print(f"{str(needcleaning)} ebuilds need cleaning in db")
diff --git a/buildbot_gentoo_ci/steps/version.py b/buildbot_gentoo_ci/steps/version.py
index 5f252c7..56f107c 100644
--- a/buildbot_gentoo_ci/steps/version.py
+++ b/buildbot_gentoo_ci/steps/version.py
@@ -1,6 +1,9 @@
-# Copyright 2021 Gentoo Authors
+# Copyright 2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
+from __future__ import annotations
+
+from typing import TYPE_CHECKING
import os
from portage.versions import cpv_getversion, pkgsplit, catpkgsplit
@@ -17,6 +20,8 @@ from buildbot.process.results import SKIPPED
from buildbot.process import remotecommand
from buildbot.plugins import steps
+from buildbot_gentoo_ci.db.versions import _db2data_Version
+
def GetPythonVersion(pyprop):
py_list = pyprop.replace(' ', '').replace('\n ', '').split('.')
return '.'.join([py_list[0], py_list[1]]).lower()
@@ -402,7 +407,7 @@ class SetupPropertys(BuildStep):
print(self.version)
self.old_version_data = yield self.gentooci.db.versions.getVersionByName(self.version, self.getProperty("package_data")['uuid'])
print(self.old_version_data)
- self.setProperty("old_version_data", self.old_version_data, 'old_version_data')
+ self.setProperty("old_version_data", _db2data_Version(self.old_version_data), 'old_version_data')
self.setProperty("version", self.version, 'version')
return SUCCESS
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-10-30 21:44 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-04-05 8:08 [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/config/, buildbot_gentoo_ci/steps/ Magnus Granberg
-- strict thread matches above, loose matches on Subject: below --
2024-10-30 21:44 Magnus Granberg
2024-03-30 9:16 Magnus Granberg
2023-06-26 21:52 Magnus Granberg
2022-07-14 23:43 Magnus Granberg
2021-05-18 9:14 Magnus Granberg
2021-04-17 17:25 Magnus Granberg
2021-03-18 23:18 Magnus Granberg
2021-02-27 23:00 Magnus Granberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox