#!/usr/bin/env python3 """Install checkmake if it is not already present. Tries to install via Go if available, otherwise downloads the latest pre-built Linux binary from the official GitHub releases. """ from __future__ import annotations import platform import shutil import subprocess # nosec B404 import urllib.request from pathlib import Path import click CHECKMAKE_VERSION = "0.3.2" RELEASE_URL_TEMPLATE = ( "https://github.com/checkmake/checkmake/releases/download/" f"v{CHECKMAKE_VERSION}/checkmake-v{CHECKMAKE_VERSION}.linux.{{arch}}" ) TARGET_PATH = Path("/usr/local/bin/checkmake") def _arch() -> str: """Return the architecture string used by checkmake releases.""" machine = platform.machine().lower() if machine in {"x86_64", "amd64"}: return "amd64" if machine in {"aarch64", "arm64"}: return "arm64" raise click.ClickException( f"Unsupported architecture: {machine}" ) def _install_with_go() -> bool: """Install checkmake using go install if Go is available.""" go_bin = shutil.which("go") if go_bin is None: return False subprocess.run( # nosec B603 [ go_bin, "install", "github.com/checkmake/checkmake/cmd/checkmake@latest", ], check=True, ) return True def _download_binary() -> None: """Download the prebuilt checkmake binary for the current architecture.""" url = RELEASE_URL_TEMPLATE.format(arch=_arch()) urllib.request.urlretrieve(url, TARGET_PATH) # nosec B310 TARGET_PATH.chmod(0o755) def main() -> None: """Install checkmake if not already present.""" if shutil.which("checkmake") is not None: return if not _install_with_go(): _download_binary() if __name__ == "__main__": # pragma: no cover main() # pragma: no cover