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/steps/, buildbot_gentoo_ci/db/, buildbot_gentoo_ci/config/
Date: Sat, 27 Feb 2021 22:46:49
Message-Id: 1614465935.22ad0178cca549026ab51f9f26e3fb9ad28f6374.zorry@gentoo
1 commit: 22ad0178cca549026ab51f9f26e3fb9ad28f6374
2 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
3 AuthorDate: Sat Feb 27 22:45:35 2021 +0000
4 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
5 CommitDate: Sat Feb 27 22:45:35 2021 +0000
6 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=22ad0178
7
8 Add SetPackageDefault and SetEnvDefault to steps
9
10 Signed-off-by: Magnus Granberg <zorry <AT> gentoo.org>
11
12 buildbot_gentoo_ci/config/buildfactorys.py | 6 +-
13 buildbot_gentoo_ci/db/model.py | 27 ++++++++-
14 buildbot_gentoo_ci/db/portages.py | 14 +++++
15 buildbot_gentoo_ci/db/projects.py | 44 ++++++++++++++
16 buildbot_gentoo_ci/steps/portage.py | 97 ++++++++++++++++++++++++++++++
17 5 files changed, 185 insertions(+), 3 deletions(-)
18
19 diff --git a/buildbot_gentoo_ci/config/buildfactorys.py b/buildbot_gentoo_ci/config/buildfactorys.py
20 index ac8bac1..acafed8 100644
21 --- a/buildbot_gentoo_ci/config/buildfactorys.py
22 +++ b/buildbot_gentoo_ci/config/buildfactorys.py
23 @@ -9,6 +9,7 @@ from buildbot_gentoo_ci.steps import category
24 from buildbot_gentoo_ci.steps import package
25 from buildbot_gentoo_ci.steps import version
26 from buildbot_gentoo_ci.steps import builders
27 +from buildbot_gentoo_ci.steps import portage
28
29 def update_db_check():
30 f = util.BuildFactory()
31 @@ -114,9 +115,10 @@ def run_build_request():
32 f.addStep(builders.UpdateRepos())
33 # setup make.conf
34 f.addStep(builders.SetMakeConf())
35 - # setup package.*
36 - #f.addStep(portages.SetPackageUse())
37 # setup env
38 + f.addStep(portage.SetEnvDefault())
39 + # setup package.*
40 + #f.addStep(portage.SetPackageDefault())
41 # setup files in /etc if needed
42 # run --regen if needed on repo
43 # update packages before any tests
44
45 diff --git a/buildbot_gentoo_ci/db/model.py b/buildbot_gentoo_ci/db/model.py
46 index 2153b79..b91f158 100644
47 --- a/buildbot_gentoo_ci/db/model.py
48 +++ b/buildbot_gentoo_ci/db/model.py
49 @@ -139,7 +139,6 @@ class Model(base.DBConnectorComponent):
50 sa.Column('project_uuid', sa.String(36),
51 sa.ForeignKey('projects.uuid', ondelete='CASCADE'),
52 nullable=False),
53 - # FIXME: directorys should be moved to own table
54 sa.Column('directorys', sa.Enum('make.profile', 'repos.conf'), nullable=False),
55 sa.Column('value', sa.String(255), nullable=False),
56 )
57 @@ -162,6 +161,32 @@ class Model(base.DBConnectorComponent):
58 sa.Column('value', sa.String(255), nullable=False),
59 )
60
61 + # projects etc/portage/env settings
62 + projects_portages_env = sautils.Table(
63 + "projects_portages_env", metadata,
64 + sa.Column('id', sa.Integer, primary_key=True),
65 + sa.Column('project_uuid', sa.String(36),
66 + sa.ForeignKey('projects.uuid', ondelete='CASCADE'),
67 + nullable=False),
68 + sa.Column('makeconf_id', sa.String(255),
69 + sa.ForeignKey('portages_makeconf.id', ondelete='CASCADE'),
70 + nullable=False),
71 + sa.Column('name', sa.String(255), nullable=False),
72 + sa.Column('value', sa.String(255), nullable=False),
73 + )
74 +
75 + # projects etc/portage/package.* settings
76 + projects_portage_package = sautils.Table(
77 + "projects_portage_package", metadata,
78 + sa.Column('id', sa.Integer, primary_key=True),
79 + sa.Column('project_uuid', sa.String(36),
80 + sa.ForeignKey('projects.uuid', ondelete='CASCADE'),
81 + nullable=False),
82 + sa.Column('directorys', sa.Enum('use', 'accept_keywords', 'env'), nullable=False),
83 + sa.Column('value1', sa.String(255), nullable=False),
84 + sa.Column('value2', sa.String(255), nullable=True),
85 + )
86 +
87 projects_emerge_options = sautils.Table(
88 "projects_emerge_options", metadata,
89 sa.Column('id', sa.Integer, primary_key=True),
90
91 diff --git a/buildbot_gentoo_ci/db/portages.py b/buildbot_gentoo_ci/db/portages.py
92 index 428fb84..86321e3 100644
93 --- a/buildbot_gentoo_ci/db/portages.py
94 +++ b/buildbot_gentoo_ci/db/portages.py
95 @@ -36,6 +36,20 @@ class PortagesConnectorComponent(base.DBConnectorComponent):
96 res = yield self.db.pool.do(thd)
97 return res
98
99 + @defer.inlineCallbacks
100 + def getVariableById(self, id):
101 + def thd(conn):
102 + tbl = self.db.model.portages_makeconf
103 + q = tbl.select()
104 + q = q.where(tbl.c.id == id)
105 + res = conn.execute(q)
106 + row = res.fetchone()
107 + if not row:
108 + return None
109 + return self._row2dict(conn, row)
110 + res = yield self.db.pool.do(thd)
111 + return res
112 +
113 def _row2dict(self, conn, row):
114 return dict(
115 id=row.id,
116
117 diff --git a/buildbot_gentoo_ci/db/projects.py b/buildbot_gentoo_ci/db/projects.py
118 index 37d401c..37ae2f1 100644
119 --- a/buildbot_gentoo_ci/db/projects.py
120 +++ b/buildbot_gentoo_ci/db/projects.py
121 @@ -130,6 +130,28 @@ class ProjectsConnectorComponent(base.DBConnectorComponent):
122 res = yield self.db.pool.do(thd)
123 return res
124
125 + @defer.inlineCallbacks
126 + def getProjectPortageEnvByUuid(self, uuid):
127 + def thd(conn):
128 + tbl = self.db.model.projects_portages_env
129 + q = tbl.select()
130 + q = q.where(tbl.c.project_uuid == uuid)
131 + return [self._row2dict_projects_portages_env(conn, row)
132 + for row in conn.execute(q).fetchall()]
133 + res = yield self.db.pool.do(thd)
134 + return res
135 +
136 + @defer.inlineCallbacks
137 + def getProjectPortagePackageByUuid(self, uuid):
138 + def thd(conn):
139 + tbl = self.db.model.projects_portages_package
140 + q = tbl.select()
141 + q = q.where(tbl.c.project_uuid == uuid)
142 + return [self._row2dict_projects_portages_package(conn, row)
143 + for row in conn.execute(q).fetchall()]
144 + res = yield self.db.pool.do(thd)
145 + return res
146 +
147 @defer.inlineCallbacks
148 def getProjectEmergeOptionsByUuid(self, uuid):
149 def thd(conn):
150 @@ -190,6 +212,28 @@ class ProjectsConnectorComponent(base.DBConnectorComponent):
151 build_id=0
152 )
153
154 + def _row2dict_projects_portages_env(self, conn, row):
155 + return dict(
156 + id=row.id,
157 + project_uuid=row.project_uuid,
158 + makeconf_id=row.makeconf_id,
159 + name=row.name,
160 + value=row.value
161 + )
162 +
163 + def _row2dict_projects_portages_package(self, conn, row):
164 + if row.value2 == '':
165 + value2 = None
166 + else:
167 + value2 = row.value2
168 + return dict(
169 + id=row.id,
170 + project_uuid=row.project_uuid,
171 + directorys=row.directorys,
172 + value1=row.value1,
173 + value2=value2
174 + )
175 +
176 def _row2dict_projects_emerge_options(self, conn, row):
177 return dict(
178 id=row.id,
179
180 diff --git a/buildbot_gentoo_ci/steps/portage.py b/buildbot_gentoo_ci/steps/portage.py
181 new file mode 100644
182 index 0000000..52daf83
183 --- /dev/null
184 +++ b/buildbot_gentoo_ci/steps/portage.py
185 @@ -0,0 +1,97 @@
186 +# Copyright 2021 Gentoo Authors
187 +# Distributed under the terms of the GNU General Public License v2
188 +
189 +import os
190 +
191 +from twisted.internet import defer
192 +from twisted.python import log
193 +
194 +from buildbot.process.buildstep import BuildStep
195 +from buildbot.process.results import SUCCESS
196 +from buildbot.process.results import FAILURE
197 +from buildbot.plugins import steps
198 +
199 +class SetPackageDefault(BuildStep):
200 +
201 + name = 'SetPackageDefault'
202 + description = 'Running'
203 + descriptionDone = 'Ran'
204 + descriptionSuffix = None
205 + haltOnFailure = True
206 + flunkOnFailure = True
207 +
208 + def __init__(self, **kwargs):
209 + super().__init__(**kwargs)
210 +
211 + @defer.inlineCallbacks
212 + def run(self):
213 + self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
214 + project_data = self.getProperty('project_data')
215 + aftersteps_list = []
216 + packagedir_list = []
217 + packagedir_list.append('env')
218 + #FIXME:
219 + # get list what dir we need to make from db
220 + # create the dirs
221 + for packagedir in packagedir_list:
222 + aftersteps_list.append(steps.MakeDirectory(dir='package.' + packagedir,
223 + workdir='/etc/portage/'))
224 + #FIXME:
225 + # add the needed package.* settings from db
226 + yield self.build.addStepsAfterCurrentStep(aftersteps_list)
227 + return SUCCESS
228 +
229 +class SetEnvDefault(BuildStep):
230 +
231 + name = 'SetEnvDefault'
232 + description = 'Running'
233 + descriptionDone = 'Ran'
234 + descriptionSuffix = None
235 + haltOnFailure = True
236 + flunkOnFailure = True
237 +
238 + def __init__(self, **kwargs):
239 + super().__init__(**kwargs)
240 +
241 + def getPortageEnv(self, portage_env_data, portage_env_dict = {}):
242 + for project_portage_env in portage_env_data:
243 + if not project_portage_env['name'] in portage_env_dict:
244 + portage_env_dict[project_portage_env['name']] = {
245 + project_portage_env['makeconf_id'] : []
246 + }
247 + if not project_portage_env['makeconf_id'] in portage_env_dict[project_portage_env['name']]:
248 + portage_env_dict[project_portage_env['name']][project_portage_env['makeconf_id']] = []
249 + portage_env_dict[project_portage_env['name']][project_portage_env['makeconf_id']].append(project_portage_env['value'])
250 + return portage_env_dict
251 +
252 + @defer.inlineCallbacks
253 + def run(self):
254 + self.gentooci = self.master.namedServices['services'].namedServices['gentooci']
255 + project_data = self.getProperty('project_data')
256 + default_project_data = yield self.gentooci.db.projects.getProjectByName(self.gentooci.config.project['project'])
257 + aftersteps_list = []
258 + separator1 = '\n'
259 + separator2 = ' '
260 + # create the dir
261 + aftersteps_list.append(steps.MakeDirectory(dir='env',
262 + workdir='/etc/portage/'))
263 + #FIXME:
264 + # add env settings from the db
265 + default_project_portage_env_data = yield self.gentooci.db.projects.getProjectPortageEnvByUuid(default_project_data['uuid'])
266 + project_portage_env_data = yield self.gentooci.db.projects.getProjectPortageEnvByUuid(project_data['uuid'])
267 + project_portage_env_dict = yield self.getPortageEnv(default_project_portage_env_data, portage_env_dict = {})
268 + project_portage_env_dict = yield self.getPortageEnv(project_portage_env_data, portage_env_dict = project_portage_env_dict)
269 + print(project_portage_env_dict)
270 + for k, v in project_portage_env_dict.items():
271 + env_strings = []
272 + for a, b in v.items():
273 + variable_data = yield self.gentooci.db.portages.getVariableById(a)
274 + env_variable_string = variable_data['variable'] + '="' + separator2.join(b) + '"'
275 + env_strings.append(env_variable_string)
276 + yield self.build.addStepsAfterCurrentStep([
277 + steps.StringDownload(separator1.join(env_strings) + separator1,
278 + workerdest=k + '.conf',
279 + workdir='/etc/portage/env/')
280 + ])
281 + yield self.build.addStepsAfterCurrentStep(aftersteps_list)
282 + return SUCCESS