Gentoo Archives: gentoo-commits

From: Magnus Granberg <zorry@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/tinderbox-cluster:master commit in: buildbot_gentoo_ci/db/, buildbot_gentoo_ci/steps/, buildbot_gentoo_ci/config/
Date: Sat, 25 Sep 2021 19:51:31
Message-Id: 1632599516.dfb70ebe084176e56f39b71545b9bd71196b1c93.zorry@gentoo
1 commit: dfb70ebe084176e56f39b71545b9bd71196b1c93
2 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
3 AuthorDate: Sat Sep 25 19:51:56 2021 +0000
4 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
5 CommitDate: Sat Sep 25 19:51:56 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=dfb70ebe
7
8 Add support for package.use and exclude package to build
9
10 Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
11
12 buildbot_gentoo_ci/config/buildfactorys.py | 10 +++------
13 buildbot_gentoo_ci/db/model.py | 10 ++++-----
14 buildbot_gentoo_ci/db/projects.py | 24 +++++++++++++++------
15 buildbot_gentoo_ci/steps/builders.py | 16 +++++++++++++-
16 buildbot_gentoo_ci/steps/portage.py | 34 ++++++++++++++++++------------
17 5 files changed, 62 insertions(+), 32 deletions(-)
18
19 diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
20 index d2e195c..41c3171 100644
21 --- a/buildbot_gentoo_ci/config/buildfactorys.py
22 +++ b/buildbot_gentoo_ci/config/buildfactorys.py
23 @@ -152,13 +152,9 @@ def run_build_request():
24 f.addStep(builders.RunEmerge(step='match'))
25 # Add the needed steps for build
26 f.addStep(builders.RunBuild())
27 - # clean up the worker
28 - # look at the log to see if we need to do stuff
29 - # run pre-depclean and depclean if set
30 - f.addStep(builders.RunEmerge(step='pre-depclean'))
31 - # run preserved-libs and depclean
32 - f.addStep(builders.RunEmerge(step='preserved-libs'))
33 - f.addStep(builders.RunEmerge(step='depclean'))
34 + # run eclean pkg and dist
35 + #f.addStep(builders.RunEclean(step='pkg')
36 + #f.addStep(builders.RunEclean(step='dist')
37 return f
38
39 def parse_build_log():
40
41 diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
42 index e2cbc8d..12d5ee9 100644
43 --- a/buildbot_gentoo_ci/db/model.py
44 +++ b/buildbot_gentoo_ci/db/model.py
45 @@ -178,15 +178,15 @@ class Model(base.DBConnectorComponent):
46 )
47
48 # projects etc/portage/package.* settings
49 - projects_portage_package = sautils.Table(
50 - "projects_portage_package", metadata,
51 + projects_portages_package = sautils.Table(
52 + "projects_portages_package", metadata,
53 sa.Column('id', sa.Integer, primary_key=True),
54 sa.Column('project_uuid', sa.String(36),
55 sa.ForeignKey('projects.uuid', ondelete='CASCADE'),
56 nullable=False),
57 - sa.Column('directorys', sa.Enum('use', 'accept_keywords', 'env'), nullable=False),
58 - sa.Column('value1', sa.String(255), nullable=False),
59 - sa.Column('value2', sa.String(255), nullable=True),
60 + sa.Column('directory', sa.Enum('use', 'accept_keywords', 'env', 'exclude'), nullable=False),
61 + sa.Column('package', sa.String(255), nullable=False),
62 + sa.Column('value', sa.String(255), nullable=True),
63 )
64
65 projects_emerge_options = sautils.Table(
66
67 diff --git a/buildbot_gentoo_ci/db/projects.py b/buildbot_gentoo_ci/db/projects.py
68 index 408450e..48d4288 100644
69 --- a/buildbot_gentoo_ci/db/projects.py
70 +++ b/buildbot_gentoo_ci/db/projects.py
71 @@ -152,6 +152,18 @@ class ProjectsConnectorComponent(base.DBConnectorComponent):
72 res = yield self.db.pool.do(thd)
73 return res
74
75 + @defer.inlineCallbacks
76 + def getProjectPortagePackageByUuidAndExclude(self, uuid):
77 + def thd(conn):
78 + tbl = self.db.model.projects_portages_package
79 + q = tbl.select()
80 + q = q.where(tbl.c.project_uuid == uuid)
81 + q = q.where(tbl.c.directory == 'exclude')
82 + return [self._row2dict_projects_portages_package(conn, row)
83 + for row in conn.execute(q).fetchall()]
84 + res = yield self.db.pool.do(thd)
85 + return res
86 +
87 @defer.inlineCallbacks
88 def getProjectEmergeOptionsByUuid(self, uuid):
89 def thd(conn):
90 @@ -263,16 +275,16 @@ class ProjectsConnectorComponent(base.DBConnectorComponent):
91 )
92
93 def _row2dict_projects_portages_package(self, conn, row):
94 - if row.value2 == '':
95 - value2 = None
96 + if row.value == '':
97 + value = None
98 else:
99 - value2 = row.value2
100 + value = row.value
101 return dict(
102 id=row.id,
103 project_uuid=row.project_uuid,
104 - directorys=row.directorys,
105 - value1=row.value1,
106 - value2=value2
107 + directory=row.directory,
108 + package=row.package,
109 + value=value
110 )
111
112 def _row2dict_projects_emerge_options(self, conn, row):
113
114 diff --git a/buildbot_gentoo_ci/steps/builders.py b/buildbot_gentoo_ci/steps/builders.py
115 index 7732f39..4f2b1b6 100644
116 --- a/buildbot_gentoo_ci/steps/builders.py
117 +++ b/buildbot_gentoo_ci/steps/builders.py
118 @@ -13,6 +13,7 @@ from twisted.python import log
119 from buildbot.process.buildstep import BuildStep
120 from buildbot.process.results import SUCCESS
121 from buildbot.process.results import FAILURE
122 +from buildbot.process.results import SKIPPED
123 from buildbot.plugins import steps
124
125 def PersOutputOfEmerge(rc, stdout, stderr):
126 @@ -451,9 +452,19 @@ class RunEmerge(BuildStep):
127 aftersteps_list.append(CheckDepcleanLogs('depclean'))
128
129 if self.step == 'match':
130 + packages_excludes = yield self.gentooci.db.projects.getProjectPortagePackageByUuidAndExclude(self.getProperty('project_data')['uuid'])
131 cpv = self.getProperty("cpv")
132 c = yield catpkgsplit(cpv)[0]
133 p = yield catpkgsplit(cpv)[1]
134 + # Check if package is on the exclude list
135 + if packages_excludes != []:
136 + for package_exclude in packages_excludes:
137 + if '/' not in package_exclude:
138 + if package_exclude == p:
139 + return SKIPPED
140 + else:
141 + if package_exclude == c + '/' + p:
142 + return SKIPPED
143 shell_commad_list.append('-pO')
144 # don't use bin for match
145 shell_commad_list.append('--usepkg=n')
146 @@ -900,11 +911,14 @@ class RunBuild(BuildStep):
147 if not self.getProperty('cpv_build'):
148 #FIXME:
149 # trigger pars_build_log if we have any logs to check
150 - return SUCCESS
151 + return SKIPPED
152 aftersteps_list = []
153 aftersteps_list.append(RunEmergeInfo())
154 aftersteps_list.append(RunEmerge(step='pre-build'))
155 aftersteps_list.append(RunEmerge(step='build'))
156 + aftersteps_list.append(RunEmerge(step='pre-depclean'))
157 + aftersteps_list.append(RunEmerge(step='preserved-libs'))
158 + aftersteps_list.append(RunEmerge(step='depclean'))
159 self.setProperty('depclean', False, 'depclean')
160 self.setProperty('preserved_libs', False, 'preserved-libs')
161 yield self.build.addStepsAfterCurrentStep(aftersteps_list)
162
163 diff --git a/buildbot_gentoo_ci/steps/portage.py b/buildbot_gentoo_ci/steps/portage.py
164 index 03552b6..94323ba 100644
165 --- a/buildbot_gentoo_ci/steps/portage.py
166 +++ b/buildbot_gentoo_ci/steps/portage.py
167 @@ -252,20 +252,28 @@ class SetPackageDefault(BuildStep):
168 @defer.inlineCallbacks
169 def run(self):
170 self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
171 - project_data = self.getProperty('project_data')
172 - aftersteps_list = []
173 - packagedir_list = []
174 - packagedir_list.append('env')
175 - packagedir_list.append('use')
176 - #FIXME:
177 - # get list what dir we need to make from db
178 - # create the dirs
179 - for packagedir in packagedir_list:
180 - aftersteps_list.append(steps.MakeDirectory(dir='package.' + packagedir,
181 - workdir='/etc/portage/'))
182 - #FIXME:
183 + separator1 = '\n'
184 + separator2 = ' '
185 + self.aftersteps_list = []
186 + #FIXME: accept_keywords, env
187 # add the needed package.* settings from db
188 - yield self.build.addStepsAfterCurrentStep(aftersteps_list)
189 + package_conf_use_list = []
190 + package_settings = yield self.gentooci.db.projects.getProjectPortagePackageByUuid(self.getProperty('project_data')['uuid'])
191 + for package_setting in package_settings:
192 + if package_setting['directory'] == 'use':
193 + package_conf_use_list.append(separator2.join(package_setting['package'],package_setting['value']))
194 + if package_conf_use_list != []:
195 + package_conf_use_string = separator1.join(package_conf_use_list)
196 + self.aftersteps_list.append(
197 + steps.StringDownload(package_conf_use_string + separator1,
198 + workerdest='default.conf',
199 + workdir='/etc/portage/package.use/'
200 + )
201 + )
202 + # create the dir
203 + aftersteps_list.append(steps.MakeDirectory(dir='package.use',
204 + workdir='/etc/portage/'))
205 + yield self.build.addStepsAfterCurrentStep(self.aftersteps_list)
206 return SUCCESS
207
208 class SetEnvDefault(BuildStep):