import os
import subprocess
import sys

directory = os.path.dirname(os.path.realpath(__file__))

BACKEND_DIR = "."
LIBS_DIR = "../autogpt_libs"
TARGET_DIRS = [BACKEND_DIR, LIBS_DIR]


def run(*command: str) -> None:
    print(f">>>>> Running poetry run {' '.join(command)}")
    try:
        subprocess.run(
            ["poetry", "run"] + list(command),
            cwd=directory,
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
        )
    except subprocess.CalledProcessError as e:
        print(e.output.decode("utf-8"), file=sys.stderr)


def lint():
    try:
        run("ruff", "check", *TARGET_DIRS, "--exit-zero")
        run("ruff", "format", "--diff", "--check", LIBS_DIR)
        run("isort", "--diff", "--check", "--profile", "black", BACKEND_DIR)
        run("black", "--diff", "--check", BACKEND_DIR)
        run("pyright", *TARGET_DIRS)
    except subprocess.CalledProcessError as e:
        print("Lint failed, try running `poetry run format` to fix the issues: ", e)
        raise e


def format():
    run("ruff", "check", "--fix", *TARGET_DIRS)
    run("ruff", "format", LIBS_DIR)
    run("isort", "--profile", "black", BACKEND_DIR)
    run("black", BACKEND_DIR)
    run("pyright", *TARGET_DIRS)

import os
import subprocess

directory = os.path.dirname(os.path.realpath(__file__))

BACKEND_DIR = "."
LIBS_DIR = "../autogpt_libs"
TARGET_DIRS = [BACKEND_DIR, LIBS_DIR]


def run(*command: str) -> None:
    print(f">>>>> Running poetry run {' '.join(command)}")
    subprocess.run(["poetry", "run"] + list(command), cwd=directory, check=True)


def lint():
    try:
        run("ruff", "check", *TARGET_DIRS, "--exit-zero")
        run("ruff", "format", "--diff", "--check", LIBS_DIR)
        run("isort", "--diff", "--check", "--profile", "black", BACKEND_DIR)
        run("black", "--diff", "--check", BACKEND_DIR)
        run("pyright", *TARGET_DIRS)
    except subprocess.CalledProcessError as e:
        print("Lint failed, try running `poetry run format` to fix the issues: ", e)
        raise e


def format():
    run("ruff", "check", "--fix", *TARGET_DIRS)
    run("ruff", "format", LIBS_DIR)
    run("isort", "--profile", "black", BACKEND_DIR)
    run("black", BACKEND_DIR)
    run("pyright", *TARGET_DIRS)
