Skip to content

Commit 8d4a837

Browse files
committed
Make bootstrap dynamic for rebuild_updated_recipes
1 parent e7c1117 commit 8d4a837

File tree

1 file changed

+47
-17
lines changed

1 file changed

+47
-17
lines changed

ci/rebuild_updated_recipes.py

Lines changed: 47 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def modified_recipes(branch='origin/master'):
4848
return recipes
4949

5050

51-
def build(target_python, requirements):
51+
def build(target_python, target_bootstrap, requirements):
5252
"""
5353
Builds an APK given a target Python and a set of requirements.
5454
"""
@@ -65,34 +65,64 @@ def build(target_python, requirements):
6565
with current_directory('testapps/'):
6666
# iterates to stream the output
6767
for line in sh.python(
68-
testapp, 'apk', '--sdk-dir', android_sdk_home,
69-
'--ndk-dir', android_ndk_home, '--bootstrap', 'sdl2', '--requirements',
70-
requirements, _err_to_out=True, _iter=True):
68+
testapp, 'apk',
69+
'--sdk-dir', android_sdk_home,
70+
'--ndk-dir', android_ndk_home,
71+
'--bootstrap', target_bootstrap,
72+
'--requirements', requirements,
73+
_err_to_out=True, _iter=True):
7174
print(line)
7275

7376

74-
def main():
75-
target_python = TargetPython.python3
76-
recipes = modified_recipes()
77-
logger.info('recipes modified: {}'.format(recipes))
78-
recipes -= CORE_RECIPES
79-
logger.info('recipes to build: {}'.format(recipes))
77+
def get_bootstrap(recipes_and_target):
78+
"""
79+
Finds the right bootstrap given a set of requirements with a defined
80+
target python recipe inside this set.
81+
"""
8082
context = Context()
81-
# forces the default target
82-
recipes_and_target = recipes | set([target_python.name])
83+
bootstrap = None
8384
try:
8485
build_order, python_modules, bs = get_recipe_order_and_bootstrap(
8586
context, recipes_and_target, None)
87+
bootstrap = bs.name
8688
except BuildInterruptingException:
87-
# fallback to python2 if default target is not compatible
88-
logger.info('incompatible with {}'.format(target_python.name))
89-
target_python = TargetPython.python2
90-
logger.info('falling back to {}'.format(target_python.name))
89+
pass
90+
return bootstrap
91+
92+
93+
def main():
94+
target_python_priorities = [
95+
TargetPython.python3,
96+
TargetPython.python2
97+
]
98+
99+
recipes = modified_recipes()
100+
logger.info('recipes modified: {}'.format(recipes))
101+
recipes -= CORE_RECIPES
102+
logger.info('recipes to build: {}'.format(recipes))
103+
104+
# iterate over `target_python_priorities` in order to find the
105+
# python version that is compatible with the modified recipes
106+
bootstrap = None
107+
target_python = None
108+
for target_python in target_python_priorities:
109+
logger.info('trying to get a bootstrap forcing target python: {}'.
110+
format(target_python.name))
111+
bootstrap = get_bootstrap(recipes | {target_python.name})
112+
if bootstrap:
113+
break
114+
if not bootstrap:
115+
logger.warning("we didn't find any valid combination of bootstrap and "
116+
"target python...rebuild updated recipes cancelled."
117+
"The recipes we couldn't rebuild are:\n\t-{}".format(
118+
"\n\t-".join(recipes)))
119+
exit(1)
120+
91121
# removing the known broken recipe for the given target
92122
broken_recipes = BROKEN_RECIPES[target_python]
93123
recipes -= broken_recipes
94124
logger.info('recipes to build (no broken): {}'.format(recipes))
95-
build(target_python, recipes)
125+
build(target_python, bootstrap, recipes)
96126

97127

98128
if __name__ == '__main__':

0 commit comments

Comments
 (0)