diff --git a/scripts/build_image.py b/scripts/build_image.py index 5057a46..93aa1f8 100755 --- a/scripts/build_image.py +++ b/scripts/build_image.py @@ -31,6 +31,8 @@ def main(argv: list[str] | None = None) -> int: data = builds.load() rust_digest = args.rust_image_digest try: + if args.tag: + common.reject_option_like(args.tag, "--tag") builds.assert_pair_declared( data, args.stellar_cli_version, f"{args.rust_version}@{rust_digest}" ) diff --git a/scripts/lib/builds.py b/scripts/lib/builds.py index 3d169a6..05d4697 100644 --- a/scripts/lib/builds.py +++ b/scripts/lib/builds.py @@ -20,7 +20,15 @@ def load(path: Path | None = None) -> dict[str, Any]: target = path or DEFAULT_PATH - return json.loads(target.read_text()) + data = json.loads(target.read_text()) + if not isinstance(data, dict): + # Every caller treats the result as a mapping (data.get(...)); a JSON + # scalar/array would otherwise surface as an opaque AttributeError deep + # in an unrelated call. Fail here with a message naming the file. + raise ValueError( + f"{target} must contain a JSON object at the top level, got {type(data).__name__}" + ) + return data def dump(data: dict[str, Any], path: Path | None = None) -> None: @@ -59,6 +67,10 @@ def split_entry(pin: str) -> tuple[str, str]: `rust: