From 6eb1e8059ed2041fa26fcd20b6c82e55c4cf2f46 Mon Sep 17 00:00:00 2001 From: Jer Miller Date: Tue, 21 Jul 2026 09:55:12 -0600 Subject: [PATCH] chore(release): remove stale models gate release_models_gate was an orphan: it was referenced only by its own test and one stale docstring mention, with no Makefile, release.sh, docs, or CI reference. It also carried a live PyPI urlopen network seam. Remove the module, its test, and the stale repack_cuda_runtime reference. No replacement network seam was introduced. Co-Authored-By: Claude Opus 4.8 (1M context) --- scripts/release_models_gate.py | 110 ------------------------------ scripts/repack_cuda_runtime.py | 5 +- tests/test_release_models_gate.py | 95 -------------------------- 3 files changed, 2 insertions(+), 208 deletions(-) delete mode 100644 scripts/release_models_gate.py delete mode 100644 tests/test_release_models_gate.py diff --git a/scripts/release_models_gate.py b/scripts/release_models_gate.py deleted file mode 100644 index 81cf36db3..000000000 --- a/scripts/release_models_gate.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python3 -# SPDX-License-Identifier: AGPL-3.0-only -# Copyright (c) 2026 sol pbc - -"""Decide whether the independently-versioned models artifacts should publish.""" - -from __future__ import annotations - -import argparse -import json -import sys -from dataclasses import dataclass -from typing import Literal -from urllib.error import HTTPError, URLError -from urllib.request import urlopen - -PROJECT = "solstone-journal-models" - - -@dataclass(frozen=True) -class ReleaseIndex: - kind: Literal["released", "not_found", "error"] - versions: frozenset[str] = frozenset() - detail: str = "" - - -class ReleaseIndexError(RuntimeError): - pass - - -def decide_models_publish(models_version: str, index: ReleaseIndex) -> bool: - if index.kind == "error": - raise ReleaseIndexError(index.detail) - if index.kind == "not_found": - return True - return models_version not in index.versions - - -def fetch_release_index(project: str, *, test: bool) -> ReleaseIndex: - base = "https://test.pypi.org" if test else "https://pypi.org" - url = f"{base}/pypi/{project}/json" - try: - with urlopen(url, timeout=10) as response: - status = getattr(response, "status", None) - if status is None: - status = response.getcode() - if status == 404: - return ReleaseIndex("not_found", detail=f"HTTP 404: {url}") - if status != 200: - return ReleaseIndex("error", detail=f"HTTP {status}: {url}") - data = json.loads(response.read().decode("utf-8")) - except HTTPError as exc: - if exc.code == 404: - return ReleaseIndex("not_found", detail=f"HTTP 404: {url}") - return ReleaseIndex("error", detail=f"HTTP {exc.code}: {url}") - except URLError as exc: - return ReleaseIndex("error", detail=f"URL error: {exc.reason}") - except json.JSONDecodeError as exc: - return ReleaseIndex("error", detail=f"invalid JSON: {exc}") - - try: - releases = data["releases"] - if not isinstance(releases, dict): - return ReleaseIndex( - "error", detail="invalid JSON: releases is not an object" - ) - return ReleaseIndex("released", versions=frozenset(releases)) - except KeyError as exc: - return ReleaseIndex("error", detail=f"invalid JSON: missing {exc.args[0]}") - - -def main(argv: list[str] | None = None) -> int: - parser = argparse.ArgumentParser() - parser.add_argument("--version", required=True) - parser.add_argument("--test", action="store_true") - args = parser.parse_args(argv) - - target = "TestPyPI" if args.test else "PyPI" - index = fetch_release_index(PROJECT, test=args.test) - try: - publish = decide_models_publish(args.version, index) - except ReleaseIndexError as exc: - print( - f"error: could not decide whether to publish {PROJECT} {args.version}: {exc}", - file=sys.stderr, - ) - return 1 - - print("publish" if publish else "skip") - if publish: - if index.kind == "not_found": - print( - f"{PROJECT} has no release index on {target}; publishing {args.version}.", - file=sys.stderr, - ) - else: - print( - f"{PROJECT} {args.version} is absent from {target}; publishing models artifacts.", - file=sys.stderr, - ) - else: - print( - f"{PROJECT} {args.version} already exists on {target}; skipping models artifacts.", - file=sys.stderr, - ) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/repack_cuda_runtime.py b/scripts/repack_cuda_runtime.py index 8e18a7a1f..998b6f377 100644 --- a/scripts/repack_cuda_runtime.py +++ b/scripts/repack_cuda_runtime.py @@ -27,9 +27,8 @@ byte-identity across different zlib builds is not promised. Imports of _-prefixed helpers from oci_image.py are deliberate: OCI layer, whiteout, traversal, blob, and digest semantics are single-sourced there. -CLI convention follows release_models_gate.py: the pin snippet is printed on -stdout; progress, warnings, and diagnostics go to stderr; this module does not -use logging. +CLI convention: the pin snippet is printed on stdout; progress, warnings, and +diagnostics go to stderr; this module does not use logging. """ from __future__ import annotations diff --git a/tests/test_release_models_gate.py b/tests/test_release_models_gate.py deleted file mode 100644 index 7d6a8a0f7..000000000 --- a/tests/test_release_models_gate.py +++ /dev/null @@ -1,95 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-only -# Copyright (c) 2026 sol pbc - -from __future__ import annotations - -from urllib.error import HTTPError, URLError - -import pytest - -from scripts import release_models_gate as gate - - -class FakeResponse: - def __init__(self, body: bytes, status: int = 200): - self.body = body - self.status = status - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc, traceback): - return False - - def read(self) -> bytes: - return self.body - - -def test_decide_models_publish_excludes_present_version(): - index = gate.ReleaseIndex("released", versions=frozenset({"1.0.0"})) - - assert gate.decide_models_publish("1.0.0", index) is False - - -def test_decide_models_publish_includes_absent_version(): - index = gate.ReleaseIndex("released", versions=frozenset({"0.0.0.dev0"})) - - assert gate.decide_models_publish("1.0.0", index) is True - - -def test_decide_models_publish_includes_not_found(): - index = gate.ReleaseIndex("not_found") - - assert gate.decide_models_publish("1.0.0", index) is True - - -def test_decide_models_publish_raises_on_error(): - index = gate.ReleaseIndex("error", detail="network unavailable") - - with pytest.raises(gate.ReleaseIndexError): - gate.decide_models_publish("1.0.0", index) - - -def test_fetch_release_index_normalizes_200(monkeypatch): - def fake_urlopen(url, timeout): - assert url == "https://pypi.org/pypi/solstone-journal-models/json" - assert timeout == 10 - return FakeResponse(b'{"releases": {"0.0.0.dev0": [], "1.0.0": []}}') - - monkeypatch.setattr(gate, "urlopen", fake_urlopen) - - index = gate.fetch_release_index("solstone-journal-models", test=False) - - assert index.kind == "released" - assert index.versions == frozenset({"0.0.0.dev0", "1.0.0"}) - - -def test_fetch_release_index_normalizes_404(monkeypatch): - def fake_urlopen(url, timeout): - raise HTTPError(url, 404, "Not Found", hdrs=None, fp=None) - - monkeypatch.setattr(gate, "urlopen", fake_urlopen) - - index = gate.fetch_release_index("solstone-journal-models", test=True) - - assert index.kind == "not_found" - - -@pytest.mark.parametrize( - "error", - [ - URLError("offline"), - None, - ], -) -def test_fetch_release_index_normalizes_errors(monkeypatch, error): - def fake_urlopen(url, timeout): - if error is not None: - raise error - return FakeResponse(b"{not-json") - - monkeypatch.setattr(gate, "urlopen", fake_urlopen) - - index = gate.fetch_release_index("solstone-journal-models", test=False) - - assert index.kind == "error" -- 2.51.2