Skip to content

Commit 976deff

Browse files
committed
feat: source resolver configuration
Introduce new configuration for source resolver and downloads. The new system uses profiles for common tasks: - `pypi-sdist`: resolve versions of sdists from PyPI, download sdist - `pypi-prebuilt`: resolve versions of platform wheels from PyPI, download pre-built wheel from PyPI. - `pypi-download`: resolve versions of any package from PyPI, download from external URL (with `{version}` variable) - `pypi-git`: resolve versions for any package from PyPI, git clone (with `{version}` variable) - `versionmap-git`: resolve with a version map, git clone - `github-tag-download`: resolve from GitHub tag, download tarball - `github-tag-git`: resolve from GitHub tag, git clone - `gitlab-tag-download`: resolve from GitLab tag, download tarball - `gitlab-tag-git`: resolve from GitLab tag, git clone - `not-available`: block resolving - `hook`: call Fromager hooks The new settings will eventually replace `download_source`, `resolver_dist`, and `git_options` top-level options as well as `wheel_server_url` and `pre_built` flags for variants. Signed-off-by: Christian Heimes <cheimes@redhat.com>
1 parent b8f4441 commit 976deff

14 files changed

Lines changed: 771 additions & 3 deletions

docs/reference/config-reference.rst

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
Configuration Reference
22
=======================
33

4+
.. currentmodule:: fromager.packagesettings
5+
46
Per-package Settings
57
--------------------
68

@@ -22,6 +24,41 @@ For example `flash_attn.yaml`.
2224

2325
.. autopydantic_model:: fromager.packagesettings.SbomSettings
2426

27+
Source Resolver
28+
^^^^^^^^^^^^^^^
29+
30+
.. autopydantic_model:: fromager.packagesettings.PyPISDistResolver
31+
32+
.. autopydantic_model:: fromager.packagesettings.PyPIPrebuiltResolver
33+
34+
.. autopydantic_model:: fromager.packagesettings.PyPIDownloadResolver
35+
36+
.. autopydantic_model:: fromager.packagesettings.PyPIGitResolver
37+
38+
.. autopydantic_model:: fromager.packagesettings.VersionMapResolver
39+
40+
.. autopydantic_model:: fromager.packagesettings.GitHubTagDownloadResolver
41+
:inherited-members: AbstractGitSourceResolver
42+
43+
.. autopydantic_model:: fromager.packagesettings.GitHubTagCloneResolver
44+
:inherited-members: AbstractGitSourceResolver
45+
46+
.. autopydantic_model:: fromager.packagesettings.GitLabTagDownloadResolver
47+
:inherited-members: AbstractGitSourceResolver
48+
49+
.. autopydantic_model:: fromager.packagesettings.GitLabTagCloneResolver
50+
:inherited-members: AbstractGitSourceResolver
51+
52+
.. autopydantic_model:: fromager.packagesettings.NotAvailableResolver
53+
54+
.. autopydantic_model:: fromager.packagesettings.HookResolver
55+
56+
.. autoclass:: fromager.packagesettings.BuildSDist
57+
58+
.. autoattribute:: pep517
59+
.. autoattribute:: tarball
60+
61+
2562
Global Settings
2663
---------------
2764

src/fromager/packagesettings/__init__.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,21 @@
1212
VariantInfo,
1313
)
1414
from ._pbi import PackageBuildInfo
15+
from ._resolver import (
16+
DEFAULT_TAG_MATCHER,
17+
BuildSDist,
18+
GitHubTagCloneResolver,
19+
GitHubTagDownloadResolver,
20+
GitLabTagCloneResolver,
21+
GitLabTagDownloadResolver,
22+
HookResolver,
23+
NotAvailableResolver,
24+
PyPIDownloadResolver,
25+
PyPIGitResolver,
26+
PyPIPrebuiltResolver,
27+
PyPISDistResolver,
28+
VersionMapResolver,
29+
)
1530
from ._settings import Settings, SettingsFile
1631
from ._templates import substitute_template
1732
from ._typedefs import (
@@ -31,21 +46,33 @@
3146
)
3247

3348
__all__ = (
49+
"DEFAULT_TAG_MATCHER",
3450
"MODEL_CONFIG",
3551
"Annotations",
3652
"BuildDirectory",
3753
"BuildOptions",
54+
"BuildSDist",
3855
"DownloadSource",
3956
"EnvKey",
4057
"EnvVars",
58+
"GitHubTagCloneResolver",
59+
"GitHubTagDownloadResolver",
60+
"GitLabTagCloneResolver",
61+
"GitLabTagDownloadResolver",
4162
"GitOptions",
4263
"GlobalChangelog",
64+
"HookResolver",
65+
"NotAvailableResolver",
4366
"Package",
4467
"PackageBuildInfo",
4568
"PackageSettings",
4669
"PackageVersion",
4770
"PatchMap",
4871
"ProjectOverride",
72+
"PyPIDownloadResolver",
73+
"PyPIGitResolver",
74+
"PyPIPrebuiltResolver",
75+
"PyPISDistResolver",
4976
"RawAnnotations",
5077
"ResolverDist",
5178
"SbomSettings",
@@ -55,6 +82,7 @@
5582
"Variant",
5683
"VariantChangelog",
5784
"VariantInfo",
85+
"VersionMapResolver",
5886
"default_update_extra_environ",
5987
"get_extra_environ",
6088
"substitute_template",

src/fromager/packagesettings/_models.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from pydantic import Field
1616
from pydantic_core import core_schema
1717

18+
from ._resolver import SourceResolver
1819
from ._typedefs import (
1920
MODEL_CONFIG,
2021
BuildDirectory,
@@ -228,7 +229,7 @@ class VariantInfo(pydantic.BaseModel):
228229
VAR1: "value 1"
229230
VAR2: "2.0
230231
wheel_server_url: https://pypi.org/simple/
231-
pre_build: False
232+
pre_built: False
232233
"""
233234

234235
model_config = MODEL_CONFIG
@@ -249,6 +250,12 @@ class VariantInfo(pydantic.BaseModel):
249250
pre_built: bool = False
250251
"""Use pre-built wheel from index server?"""
251252

253+
source: typing.Annotated[
254+
SourceResolver | None,
255+
pydantic.Field(default=None, discriminator="provider"),
256+
]
257+
"""Source resolver and downloader"""
258+
252259

253260
class GitOptions(pydantic.BaseModel):
254261
"""Git repository cloning options
@@ -371,6 +378,12 @@ class PackageSettings(pydantic.BaseModel):
371378
project_override: ProjectOverride = Field(default_factory=ProjectOverride)
372379
"""Patch project settings"""
373380

381+
source: typing.Annotated[
382+
SourceResolver | None,
383+
pydantic.Field(default=None, discriminator="provider"),
384+
]
385+
"""Source resolver and downloader"""
386+
374387
variants: Mapping[Variant, VariantInfo] = Field(default_factory=dict)
375388
"""Variant configuration"""
376389

src/fromager/packagesettings/_pbi.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
ProjectOverride,
2121
VariantInfo,
2222
)
23+
from ._resolver import SourceResolver
2324
from ._templates import _resolve_template, substitute_template
2425
from ._typedefs import Annotations, PackageVersion, PatchMap, Template, Variant
2526

@@ -175,6 +176,14 @@ def pre_built(self) -> bool:
175176
return vi.pre_built
176177
return False
177178

179+
@property
180+
def source_resolver(self) -> SourceResolver | None:
181+
"""Get source resolver settings (variant or global)"""
182+
vi = self._ps.variants.get(self.variant)
183+
if vi is not None and vi.source is not None:
184+
return vi.source
185+
return self._ps.source
186+
178187
@property
179188
def wheel_server_url(self) -> str | None:
180189
"""Alternative package index for pre-build wheel"""

0 commit comments

Comments
 (0)