public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [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