Skip to content

Commit b223a12

Browse files
committed
add linter command
Scan the patches, settings, and plugins for things that may be misnamed.
1 parent f8e2e97 commit b223a12

File tree

4 files changed

+70
-0
lines changed

4 files changed

+70
-0
lines changed

src/fromager/__main__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ def main(
202202
variant=variant,
203203
network_isolation=network_isolation,
204204
max_jobs=jobs,
205+
settings_dir=settings_dir,
205206
)
206207
wkctx.setup()
207208
ctx.obj = wkctx

src/fromager/commands/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
canonicalize,
66
download_sequence,
77
graph,
8+
lint,
89
list_overrides,
910
migrate_config,
1011
server,
@@ -17,6 +18,7 @@
1718
build.build_sequence,
1819
build_order.build_order,
1920
graph.graph,
21+
lint.lint,
2022
list_overrides.list_overrides,
2123
migrate_config.migrate_config,
2224
step.step,

src/fromager/commands/lint.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import logging
2+
3+
import click
4+
5+
from .. import context, overrides
6+
7+
logger = logging.getLogger(__name__)
8+
9+
10+
@click.command()
11+
@click.pass_obj
12+
def lint(
13+
wkctx: context.WorkContext,
14+
) -> None:
15+
"""Review existing settings and overrides for potential configuration errors."""
16+
errors = 0
17+
18+
logger.info(f"Checking patches in {wkctx.settings.patches_dir}...")
19+
for entry in wkctx.settings.patches_dir.glob("*"):
20+
logger.debug(entry)
21+
if "-" in entry.name:
22+
actual_package_name, _, version_str = entry.name.rpartition("-")
23+
expected_package_name = overrides.pkgname_to_override_module(
24+
actual_package_name
25+
)
26+
if actual_package_name != expected_package_name:
27+
errors += 1
28+
logger.error(
29+
f"ERROR: Patch directory {entry.name} should be {expected_package_name}-{version_str}"
30+
)
31+
else:
32+
expected_package_name = overrides.pkgname_to_override_module(entry.name)
33+
if actual_package_name != expected_package_name:
34+
errors += 1
35+
logger.error(
36+
f"ERROR: Patch directory {entry.name} should be {expected_package_name}"
37+
)
38+
39+
if wkctx.settings_dir is not None:
40+
logger.info(f"Checking settings files in {wkctx.settings_dir}...")
41+
for entry in wkctx.settings_dir.glob("*"):
42+
logger.debug(entry)
43+
if entry.suffix != ".yaml":
44+
errors += 1
45+
logger.error(
46+
f"ERROR: settings file {entry.name} should use extension '.yaml'"
47+
)
48+
expected_package_name = overrides.pkgname_to_override_module(entry.stem)
49+
if entry.stem != expected_package_name:
50+
errors += 1
51+
logger.error(
52+
f"ERROR: Settings file {entry.name} should be {expected_package_name}.yaml"
53+
)
54+
55+
logger.info("Checking entry points...")
56+
exts = overrides._get_extensions()
57+
for name in exts.names():
58+
logger.debug(name)
59+
expected_name = overrides.pkgname_to_override_module(name)
60+
if name != expected_name:
61+
errors += 1
62+
logger.error(f"ERROR: plugin name {name} should be {expected_name}")
63+
64+
if errors:
65+
raise SystemExit(f"Found {errors} errors")

src/fromager/context.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ def __init__(
3737
variant: str = "cpu",
3838
network_isolation: bool = False,
3939
max_jobs: int | None = None,
40+
settings_dir: pathlib.Path | None = None,
4041
):
4142
if active_settings is None:
4243
active_settings = packagesettings.Settings(
@@ -67,6 +68,7 @@ def __init__(
6768
self.cleanup = cleanup
6869
self.variant = variant
6970
self.network_isolation = network_isolation
71+
self.settings_dir = settings_dir
7072

7173
self._build_order_filename = self.work_dir / "build-order.json"
7274
self._constraints_filename = self.work_dir / "constraints.txt"

0 commit comments

Comments
 (0)