.PHONY: all start_services stop_services coverage coverage_agents test test_fast extended_tests test_watch test_watch_extended integration_tests check_imports check_version lint format type lint_diff format_diff lint_package lint_tests help # Default target executed when no arguments are given to make. all: help ###################### # TESTING AND COVERAGE ###################### start_services: docker compose -f tests/unit_tests/agents/compose-postgres.yml -f tests/unit_tests/agents/compose-redis.yml up -V --force-recreate --wait --remove-orphans stop_services: docker compose -f tests/unit_tests/agents/compose-postgres.yml -f tests/unit_tests/agents/compose-redis.yml down -v # Define a variable for the test file path. TEST_FILE ?= tests/unit_tests/ .EXPORT_ALL_VARIABLES: UV_FROZEN = true # Run unit tests and generate a coverage report. coverage: uv run --group test pytest --cov \ --cov-config=.coveragerc \ --cov-report xml \ --cov-report term-missing:skip-covered \ $(TEST_FILE) # Run middleware and agent tests with coverage report. coverage_agents: uv run --group test pytest \ tests/unit_tests/agents/middleware/ \ tests/unit_tests/agents/test_*.py \ --cov=langchain.agents \ --cov-report=term-missing \ --cov-report=html:htmlcov \ test: make start_services && LANGGRAPH_TEST_FAST=0 uv run --no-sync --active --group test pytest -n auto --disable-socket --allow-unix-socket $(TEST_FILE) --cov-report term-missing:skip-covered --snapshot-update; \ EXIT_CODE=$$?; \ make stop_services; \ exit $$EXIT_CODE test_fast: LANGGRAPH_TEST_FAST=1 uv run --group test pytest -n auto --disable-socket --allow-unix-socket $(TEST_FILE) extended_tests: make start_services && LANGGRAPH_TEST_FAST=0 uv run --group test pytest --disable-socket --allow-unix-socket --only-extended tests/unit_tests; \ EXIT_CODE=$$?; \ make stop_services; \ exit $$EXIT_CODE test_watch: make start_services && LANGGRAPH_TEST_FAST=0 uv run --group test ptw --snapshot-update --now . -- -x --disable-socket --allow-unix-socket --disable-warnings tests/unit_tests; \ EXIT_CODE=$$?; \ make stop_services; \ exit $$EXIT_CODE test_watch_extended: make start_services && LANGGRAPH_TEST_FAST=0 uv run --group test ptw --snapshot-update --now . -- -x --disable-socket --allow-unix-socket --only-extended tests/unit_tests; \ EXIT_CODE=$$?; \ make stop_services; \ exit $$EXIT_CODE integration_tests: uv run --group test --group test_integration pytest tests/integration_tests check_imports: $(shell find langchain -name '*.py') uv run python ./scripts/check_imports.py $^ check_version: uv run python ./scripts/check_version.py ###################### # LINTING AND FORMATTING ###################### # Define a variable for Python and notebook files. PYTHON_FILES=. MYPY_CACHE=.mypy_cache lint format: PYTHON_FILES=. lint_diff format_diff: PYTHON_FILES=$(shell git diff --relative=libs/langchain --name-only --diff-filter=d master | grep -E '\.py$$|\.ipynb$$') lint_package: PYTHON_FILES=langchain lint_tests: PYTHON_FILES=tests lint_tests: MYPY_CACHE=.mypy_cache_test lint lint_diff lint_package lint_tests: [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check $(PYTHON_FILES) [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff [ "$(PYTHON_FILES)" = "" ] || mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) type: mkdir -p $(MYPY_CACHE) && uv run --all-groups mypy $(PYTHON_FILES) --cache-dir $(MYPY_CACHE) format format_diff: [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff check --fix $(PYTHON_FILES) ###################### # HELP ###################### help: @echo '====================' @echo '-- LINTING --' @echo 'format - run code formatters' @echo 'lint - run linters' @echo 'type - run type checking' @echo 'check_version - validate version consistency' @echo '-- TESTS --' @echo 'coverage - run unit tests and generate coverage report' @echo 'coverage_agents - run middleware and agent tests with coverage report' @echo 'test - run unit tests with all services' @echo 'test_fast - run unit tests with in-memory services only' @echo 'tests - run unit tests (alias for "make test")' @echo 'test TEST_FILE= - run all tests in file' @echo 'extended_tests - run only extended unit tests' @echo 'test_watch - run unit tests in watch mode' @echo 'integration_tests - run integration tests' @echo '-- DOCUMENTATION tasks are from the top-level Makefile --'