Skip to content

Commit 167c420

Browse files
committed
refactor: pass version to more hooks
Pass the resolved version to more methods and hooks. This gives `packagesettings.get_extra_environ` access to version information in most cases. `dependencies.get_build_*_dependencies` hooks now have access to version in most cases. Nightly builds from VCS don't have the version. Nightly builds have to prepare an environment, then request package metadata to get the version from metadata. The improvement will enable us to add the version as a template variable, so `env` in package settings can use something like `${__version__}` in the future. Signed-off-by: Christian Heimes <cheimes@redhat.com>
1 parent 8ec6e4e commit 167c420

7 files changed

Lines changed: 44 additions & 7 deletions

File tree

src/fromager/bootstrapper.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -554,13 +554,15 @@ def _build_wheel(
554554
def _prepare_build_dependencies(
555555
self,
556556
req: Requirement,
557+
resolved_version: Version | None,
557558
sdist_root_dir: pathlib.Path,
558559
build_env: build_environment.BuildEnvironment,
559560
) -> set[Requirement]:
560561
# build system
561562
build_system_dependencies = dependencies.get_build_system_dependencies(
562563
ctx=self.ctx,
563564
req=req,
565+
version=resolved_version,
564566
sdist_root_dir=sdist_root_dir,
565567
)
566568
self._handle_build_requirements(
@@ -575,6 +577,7 @@ def _prepare_build_dependencies(
575577
build_backend_dependencies = dependencies.get_build_backend_dependencies(
576578
ctx=self.ctx,
577579
req=req,
580+
version=resolved_version,
578581
sdist_root_dir=sdist_root_dir,
579582
build_env=build_env,
580583
)
@@ -588,6 +591,7 @@ def _prepare_build_dependencies(
588591
build_sdist_dependencies = dependencies.get_build_sdist_dependencies(
589592
ctx=self.ctx,
590593
req=req,
594+
version=resolved_version,
591595
sdist_root_dir=sdist_root_dir,
592596
build_env=build_env,
593597
)
@@ -851,7 +855,12 @@ def _build_from_source(
851855
# Prepare build dependencies (always needed)
852856
# Note: This may recursively call bootstrap() for build deps,
853857
# which has its own error handling.
854-
self._prepare_build_dependencies(req, sdist_root_dir, build_env)
858+
self._prepare_build_dependencies(
859+
req=req,
860+
resolved_version=resolved_version,
861+
sdist_root_dir=sdist_root_dir,
862+
build_env=build_env,
863+
)
855864

856865
# Build wheel or sdist
857866
wheel_filename, sdist_filename = self._do_build(
@@ -1214,7 +1223,10 @@ def _get_version_from_package_metadata(
12141223
parent_dir=source_dir.parent,
12151224
)
12161225
build_dependencies = self._prepare_build_dependencies(
1217-
req, source_dir, build_env=build_env
1226+
req=req,
1227+
resolved_version=None,
1228+
sdist_root_dir=source_dir,
1229+
build_env=build_env,
12181230
)
12191231
build_env.install(build_dependencies)
12201232

src/fromager/build_environment.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ def prepare_build_environment(
249249
*,
250250
ctx: context.WorkContext,
251251
req: Requirement,
252+
version: Version | None = None,
252253
sdist_root_dir: pathlib.Path,
253254
) -> BuildEnvironment:
254255
logger.info("preparing build environment")
@@ -261,6 +262,7 @@ def prepare_build_environment(
261262
build_system_dependencies = dependencies.get_build_system_dependencies(
262263
ctx=ctx,
263264
req=req,
265+
version=version,
264266
sdist_root_dir=sdist_root_dir,
265267
)
266268
_safe_install(
@@ -274,6 +276,7 @@ def prepare_build_environment(
274276
build_backend_dependencies = dependencies.get_build_backend_dependencies(
275277
ctx=ctx,
276278
req=req,
279+
version=version,
277280
sdist_root_dir=sdist_root_dir,
278281
build_env=build_env,
279282
)
@@ -288,6 +291,7 @@ def prepare_build_environment(
288291
build_sdist_dependencies = dependencies.get_build_sdist_dependencies(
289292
ctx=ctx,
290293
req=req,
294+
version=version,
291295
sdist_root_dir=sdist_root_dir,
292296
build_env=build_env,
293297
)

src/fromager/commands/build.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,10 @@ def _build(
420420

421421
# Build environment
422422
build_env = build_environment.prepare_build_environment(
423-
ctx=wkctx, req=req, sdist_root_dir=source_root_dir
423+
ctx=wkctx,
424+
req=req,
425+
version=resolved_version,
426+
sdist_root_dir=source_root_dir,
424427
)
425428

426429
# Make a new source distribution, in case we patched the code.

src/fromager/commands/step.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,10 @@ def prepare_build(
180180
token = requirement_ctxvar.set(req)
181181
source_root_dir = _find_source_root_dir(wkctx, wkctx.work_dir, req, dist_version)
182182
build_environment.prepare_build_environment(
183-
ctx=wkctx, req=req, sdist_root_dir=source_root_dir
183+
ctx=wkctx,
184+
req=req,
185+
version=dist_version,
186+
sdist_root_dir=source_root_dir,
184187
)
185188
requirement_ctxvar.reset(token)
186189

src/fromager/dependencies.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ def get_build_system_dependencies(
4141
*,
4242
ctx: context.WorkContext,
4343
req: Requirement,
44+
version: Version | None = None,
4445
sdist_root_dir: pathlib.Path,
4546
) -> set[Requirement]:
4647
logger.info(f"getting build system dependencies for {req} in {sdist_root_dir}")
@@ -107,6 +108,7 @@ def get_build_backend_dependencies(
107108
*,
108109
ctx: context.WorkContext,
109110
req: Requirement,
111+
version: Version | None = None,
110112
sdist_root_dir: pathlib.Path,
111113
build_env: build_environment.BuildEnvironment,
112114
) -> set[Requirement]:
@@ -124,7 +126,7 @@ def get_build_backend_dependencies(
124126
extra_environ = packagesettings.get_extra_environ(
125127
ctx=ctx,
126128
req=req,
127-
version=None,
129+
version=version,
128130
sdist_root_dir=sdist_root_dir,
129131
build_env=build_env,
130132
)
@@ -178,6 +180,7 @@ def get_build_sdist_dependencies(
178180
*,
179181
ctx: context.WorkContext,
180182
req: Requirement,
183+
version: Version | None = None,
181184
sdist_root_dir: pathlib.Path,
182185
build_env: build_environment.BuildEnvironment,
183186
) -> set[Requirement]:
@@ -195,7 +198,7 @@ def get_build_sdist_dependencies(
195198
extra_environ = packagesettings.get_extra_environ(
196199
ctx=ctx,
197200
req=req,
198-
version=None,
201+
version=version,
199202
sdist_root_dir=sdist_root_dir,
200203
build_env=build_env,
201204
)

src/fromager/packagesettings.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,7 @@ def get_extra_environ(
883883
*,
884884
template_env: dict[str, str] | None = None,
885885
build_env: build_environment.BuildEnvironment | None = None,
886+
version: Version | None = None,
886887
) -> dict[str, str]:
887888
"""Get extra environment variables for a variant
888889
@@ -1226,7 +1227,10 @@ def get_extra_environ(
12261227
) -> dict[str, str]:
12271228
"""Get extra environment variables from settings and update hook"""
12281229
pbi = ctx.package_build_info(req)
1229-
extra_environ = pbi.get_extra_environ(build_env=build_env)
1230+
extra_environ = pbi.get_extra_environ(
1231+
build_env=build_env,
1232+
version=version,
1233+
)
12301234
overrides.find_and_invoke(
12311235
req.name,
12321236
"update_extra_environ",

tests/test_dependencies.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ def test_get_build_system_dependencies(
155155
results = dependencies.get_build_system_dependencies(
156156
ctx=tmp_context,
157157
req=Requirement("fromager"),
158+
version=Version("1.0.0"),
158159
sdist_root_dir=tmp_path,
159160
)
160161
names = set(r.name for r in results)
@@ -172,6 +173,7 @@ def test_get_build_system_dependencies_cached(
172173
results = dependencies.get_build_system_dependencies(
173174
ctx=tmp_context,
174175
req=Requirement("fromager"),
176+
version=Version("1.0.0"),
175177
sdist_root_dir=sdist_root_dir,
176178
)
177179
assert results == set([Requirement("foo==1.0")])
@@ -195,13 +197,15 @@ def test_get_build_backend_dependencies(
195197
build_system_dependencies = dependencies.get_build_system_dependencies(
196198
ctx=tmp_context,
197199
req=req,
200+
version=Version("1.0.0"),
198201
sdist_root_dir=_fromager_root,
199202
)
200203
build_env.install(build_system_dependencies)
201204

202205
results = dependencies.get_build_backend_dependencies(
203206
ctx=tmp_context,
204207
req=req,
208+
version=Version("1.0.0"),
205209
sdist_root_dir=_fromager_root,
206210
build_env=build_env,
207211
)
@@ -225,6 +229,7 @@ def test_get_build_backend_dependencies_cached(
225229
results = dependencies.get_build_backend_dependencies(
226230
ctx=tmp_context,
227231
req=Requirement("fromager"),
232+
version=Version("1.0.0"),
228233
sdist_root_dir=sdist_root_dir,
229234
build_env=build_env,
230235
)
@@ -249,13 +254,15 @@ def test_get_build_sdist_dependencies(
249254
build_system_dependencies = dependencies.get_build_system_dependencies(
250255
ctx=tmp_context,
251256
req=req,
257+
version=Version("1.0.0"),
252258
sdist_root_dir=_fromager_root,
253259
)
254260
build_env.install(build_system_dependencies)
255261

256262
results = dependencies.get_build_sdist_dependencies(
257263
ctx=tmp_context,
258264
req=req,
265+
version=Version("1.0.0"),
259266
sdist_root_dir=_fromager_root,
260267
build_env=build_env,
261268
)
@@ -280,6 +287,7 @@ def test_get_build_sdist_dependencies_cached(
280287
results = dependencies.get_build_sdist_dependencies(
281288
ctx=tmp_context,
282289
req=req,
290+
version=Version("1.0.0"),
283291
sdist_root_dir=sdist_root_dir,
284292
build_env=build_env,
285293
)

0 commit comments

Comments
 (0)