Commit 64b85950

Morgante Pell <morgante@grit.io>
2024-08-14 19:33:15
fix(cli/migrate): change grit binaries download source (#1649)
1 parent 40f4cdb
Changed files (1)
src
openai
cli
_tools
src/openai/cli/_tools/migrate.py
@@ -2,7 +2,6 @@ from __future__ import annotations
 
 import os
 import sys
-import json
 import shutil
 import tarfile
 import platform
@@ -85,7 +84,9 @@ def install() -> Path:
     if sys.platform == "win32":
         raise CLIError("Windows is not supported yet in the migration CLI")
 
-    platform = "macos" if sys.platform == "darwin" else "linux"
+    _debug("Using Grit installer from GitHub")
+
+    platform = "apple-darwin" if sys.platform == "darwin" else "unknown-linux-gnu"
 
     dir_name = _cache_dir() / "openai-python"
     install_dir = dir_name / ".install"
@@ -109,27 +110,14 @@ def install() -> Path:
     arch = _get_arch()
     _debug(f"Using architecture {arch}")
 
-    file_name = f"marzano-{platform}-{arch}"
-    meta_url = f"https://api.keygen.sh/v1/accounts/{KEYGEN_ACCOUNT}/artifacts/{file_name}"
+    file_name = f"marzano-{arch}-{platform}"
+    download_url = f"https://github.com/getgrit/gritql/releases/latest/download/{file_name}.tar.gz"
 
-    sys.stdout.write(f"Retrieving Grit CLI metadata from {meta_url}\n")
+    sys.stdout.write(f"Downloading Grit CLI from {download_url}\n")
     with httpx.Client() as client:
-        response = client.get(meta_url)  # pyright: ignore[reportUnknownMemberType]
-
-        data = response.json()
-        errors = data.get("errors")
-        if errors:
-            for error in errors:
-                sys.stdout.write(f"{error}\n")
-
-            raise CLIError("Could not locate Grit CLI binary - see above errors")
-
-        write_manifest(install_dir, data["data"]["relationships"]["release"]["data"]["id"])
-
-        link = data["data"]["links"]["redirect"]
-        _debug(f"Redirect URL {link}")
-
-        download_response = client.get(link)  # pyright: ignore[reportUnknownMemberType]
+        download_response = client.get(download_url, follow_redirects=True)
+        if download_response.status_code != 200:
+            raise CLIError(f"Failed to download Grit CLI from {download_url}")
         with open(temp_file, "wb") as file:
             for chunk in download_response.iter_bytes():
                 file.write(chunk)
@@ -143,8 +131,7 @@ def install() -> Path:
         else:
             archive.extractall(unpacked_dir)
 
-    for item in unpacked_dir.iterdir():
-        item.rename(target_dir / item.name)
+    _move_files_recursively(unpacked_dir, target_dir)
 
     shutil.rmtree(unpacked_dir)
     os.remove(temp_file)
@@ -155,30 +142,23 @@ def install() -> Path:
     return target_path
 
 
+def _move_files_recursively(source_dir: Path, target_dir: Path) -> None:
+    for item in source_dir.iterdir():
+        if item.is_file():
+            item.rename(target_dir / item.name)
+        elif item.is_dir():
+            _move_files_recursively(item, target_dir)
+
+
 def _get_arch() -> str:
     architecture = platform.machine().lower()
 
-    # Map the architecture names to Node.js equivalents
+    # Map the architecture names to Grit equivalents
     arch_map = {
-        "x86_64": "x64",
-        "amd64": "x64",
-        "armv7l": "arm",
-        "aarch64": "arm64",
+        "x86_64": "x86_64",
+        "amd64": "x86_64",
+        "armv7l": "aarch64",
+        "arm64": "aarch64",
     }
 
     return arch_map.get(architecture, architecture)
-
-
-def write_manifest(install_path: Path, release: str) -> None:
-    manifest = {
-        "installPath": str(install_path),
-        "binaries": {
-            "marzano": {
-                "name": "marzano",
-                "release": release,
-            },
-        },
-    }
-    manifest_path = Path(install_path) / "manifests.json"
-    with open(manifest_path, "w") as f:
-        json.dump(manifest, f, indent=2)