commit: aba0962b8f901301302a2fefacac14f8cd34a51b
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Wed Jul 27 19:32:09 2022 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Wed Jul 27 19:32:09 2022 +0000
URL:
https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=aba0962b
Move UpdateRepos to repos.py and support gitlab stage
Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
buildbot_gentoo_ci/config/buildfactorys.py | 4 +-
buildbot_gentoo_ci/db/model.py | 12 ++++-
buildbot_gentoo_ci/db/repositorys.py | 19 +++++++-
buildbot_gentoo_ci/steps/builders.py | 40 ----------------
buildbot_gentoo_ci/steps/repos.py | 73 +++++++++++++++++++++++++++++-
5 files changed, 102 insertions(+), 46 deletions(-)
diff --git a/buildbot_gentoo_ci/config/buildfactorys.py
b/buildbot_gentoo_ci/config/buildfactorys.py
index 67447aa..7f2dff9 100644
--- a/buildbot_gentoo_ci/config/buildfactorys.py
+++ b/buildbot_gentoo_ci/config/buildfactorys.py
@@ -46,7 +46,7 @@ def update_db_cpv():
# set needed Propertys
f.addStep(package.SetupPropertys())
# update the repositorys listed in project_repository
- f.addStep(builders.UpdateRepos())
+ f.addStep(repos.UpdateRepos())
# add repo.conf
#f.addStep(portage.SetReposConf())
# if categorys in db
@@ -99,7 +99,7 @@ def run_build_request():
# set needed Propertys
f.addStep(builders.SetupPropertys())
# update the repositorys listed in project_repository
- f.addStep(builders.UpdateRepos())
+ f.addStep(repos.UpdateRepos())
# Clean and add new /etc/portage
#NOTE: remove the symlink befor the dir
#f.addStep(buildbot_steps.ShellCommand(
diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
index 908ebb5..d6e9860 100644
--- a/buildbot_gentoo_ci/db/model.py
+++ b/buildbot_gentoo_ci/db/model.py
@@ -71,10 +71,18 @@ class Model(base.DBConnectorComponent):
# description of the repository
sa.Column('description', sa.Text, nullable=True),
sa.Column('url', sa.String(255), nullable=True),
- sa.Column('type', sa.Enum('gitpuller'), nullable=False,
default='gitpuller'),
+ sa.Column('branch', sa.String(255), nullable=True),
+ sa.Column('type', sa.Enum('git', 'gitlab'), nullable=False,
default='git'),
+ sa.Column('mode', sa.Enum('full', 'incremental'), nullable=False,
default='incremental'),
+ sa.Column('method', sa.Enum('clobber', 'fresh', 'clean', 'copy'),
nullable=False, default='fresh'),
+ sa.Column('alwaysuselatest', sa.Boolean, default=False),
sa.Column('auto', sa.Boolean, default=False),
sa.Column('enabled', sa.Boolean, default=False),
- sa.Column('ebuild', sa.Boolean, default=False),
+ sa.Column('ebuild', sa.Boolean, default=True),
+ sa.Column('merge', sa.Boolean, default=False),
+ # filenames for SecretInAFile
+ sa.Column('sshprivatekey', sa.String(50), nullable=True),
+ sa.Column('sshhostkey', sa.String(50), nullable=True),
)
# Use by GitPoller
diff --git a/buildbot_gentoo_ci/db/repositorys.py
b/buildbot_gentoo_ci/db/repositorys.py
index 8bac1a1..4d5d048 100644
--- a/buildbot_gentoo_ci/db/repositorys.py
+++ b/buildbot_gentoo_ci/db/repositorys.py
@@ -91,15 +91,32 @@ class
RepositorysConnectorComponent(base.DBConnectorComponent):
yield self.db.pool.do(thd)
def _row2dict(self, conn, row):
+ if row.branch == 'none':
+ branch = False
+ else:
+ branch = row.branch
+ if row.sshprivatekey == 'none':
+ sshprivatekey = False
+ sshhostkey = False
+ else:
+ sshprivatekey = row.sshprivatekey
+ sshhostkey = row.sshhostkey
return dict(
uuid=row.uuid,
name=row.name,
description=row.description,
url=row.url,
+ type=row.type,
+ branch=branch,
+ mode=row.mode,
+ method=row.method,
+ alwaysuselatest=row.alwaysuselatest,
auto=row.auto,
enabled=row.enabled,
ebuild=row.ebuild,
- type=row.type
+ merge=row.merge,
+ sshprivatekey=sshprivatekey,
+ sshhostkey=sshhostkey
)
def _row2dict_gitpuller(self, conn, row):
diff --git a/buildbot_gentoo_ci/steps/builders.py
b/buildbot_gentoo_ci/steps/builders.py
index 383ae60..a54c68c 100644
--- a/buildbot_gentoo_ci/steps/builders.py
+++ b/buildbot_gentoo_ci/steps/builders.py
@@ -343,46 +343,6 @@ class SetupPropertys(BuildStep):
self.descriptionDone = ' '.join([self.getProperty("cpv"), 'for
project', self.getProperty('project_data')['name']])
return SUCCESS
-# Should be moved to repos.py
-class UpdateRepos(BuildStep):
-
- name = 'UpdateRepos'
- 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')
- # update/add all repos that in project_repository for the project
- 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'])
- if self.getProperty('rootworkdir'):
- repository_path =
os.path.join(self.getProperty('rootworkdir'), portage_repos_path[1:],
repository_data['name'])
- else:
- repository_path = os.path.join(portage_repos_path,
repository_data['name'], '')
- yield self.build.addStepsAfterCurrentStep([
- steps.Git(repourl=repository_data['url'],
- name = 'Git pull ' + repository_data['name'],
- mode='full',
- submodules=True,
- alwaysUseLatest=True,
- workdir=repository_path,
- #FIXME: set filenames in repositorys db
- sshPrivateKey =
util.Secret("gitlab.gentoo.org_gentoo-ci.priv"),
- sshHostKey = util.Secret("gitlab.gentoo.org.host")
- )
- ])
- return SUCCESS
-
class RunEmerge(BuildStep):
description = 'Running'
diff --git a/buildbot_gentoo_ci/steps/repos.py
b/buildbot_gentoo_ci/steps/repos.py
index ae63c78..5b4b623 100644
--- a/buildbot_gentoo_ci/steps/repos.py
+++ b/buildbot_gentoo_ci/steps/repos.py
@@ -11,7 +11,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.plugins import steps
+from buildbot.plugins import steps, util
from buildbot.config import error as config_error
class CheckPathRepositoryLocal(BuildStep):
@@ -168,3 +168,74 @@ class CheckRepository(BuildStep):
return FAILURE
#yield
self.gentooci.db.repositorys.updateGitPollerTime(repository_uuid)
return SUCCESS
+
+class UpdateRepos(BuildStep):
+
+ name = 'UpdateRepos'
+ 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')
+ # update/add all repos that in project_repository for the project
+ 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'])
+ print(repository_data)
+ if repository_data['auto'] and repository_data['enabled']:
+ if self.getProperty('rootworkdir'):
+ repository_path =
os.path.join(self.getProperty('rootworkdir'), portage_repos_path[1:],
repository_data['name'])
+ else:
+ repository_path = os.path.join(portage_repos_path,
repository_data['name'], '')
+ if repository_data['branch']:
+ branch = repository_data['branch']
+ else:
+ branch = 'HEAD'
+ # filenames to use with Secret
+ if repository_data['sshprivatekey']:
+ sshprivatekey =
util.Secret(repository_data['sshprivatekey'])
+ sshhostkey = util.Secret(repository_data['sshhostkey'])
+ else:
+ sshprivatekey = None
+ sshhostkey = None
+ GitdescriptionDone = ' '.join([repository_data['type'],
'pull', repository_data['name'], branch])
+ if repository_data['type'] == 'git':
+ yield self.build.addStepsAfterCurrentStep([
+ steps.Git(repourl=repository_data['url'],
+ name = 'RunGit',
+ descriptionDone=GitdescriptionDone,
+ branch = branch,
+ mode=repository_data['mode'],
+ method=repository_data['method'],
+ submodules=True,
+ alwaysUseLatest=repository_data['alwaysuselatest'],
+ workdir=repository_path,
+ sshPrivateKey = sshprivatekey,
+ sshHostKey = sshhostkey
+ )
+ ])
+ if repository_data['type'] =='gitlab':
+ yield self.build.addStepsAfterCurrentStep([
+ steps.GitLab(repourl=repository_data['url'],
+ name = 'RunGit',
+ descriptionDone=GitdescriptionDone,
+ branch = branch,
+ mode=repository_data['mode'],
+ method=repository_data['method'],
+ submodules=True,
+ alwaysUseLatest=repository_data['alwaysuselatest'],
+ workdir=repository_path,
+ sshPrivateKey = sshprivatekey,
+ sshHostKey = sshhostkey
+ )
+ ])
+ return SUCCESS