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 |