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): |