blob: c0f5b929246c917a11c67f8b56073828ba0bce4f [file] [log] [blame] [view]
# Gerrit MCP Server Development Guide
## Overview
This document serves as the comprehensive guide for developing, testing, and
maintaining the `gerrit-mcp-server`. It provides practical instructions for all
stages of the development lifecycle.
## Development Environment
### Prerequisites
- Python 3.12+
- `pip`
- `virtualenv` (recommended)
### Setup
The project includes a build script that handles the creation of the virtual
environment and installation of dependencies using `uv`.
1. **Run the build script:**
```bash
./build-gerrit.sh
```
This will create a virtual environment in `.venv` and install all necessary dependencies.
2. **Activate the virtual environment:**
```bash
source .venv/bin/activate
```
> [!IMPORTANT]
> **ALWAYS** use the virtual environment's Python. Never use the system Python.
## Testing Standards
We use **pytest** as our testing framework.
### Structure
- **Files:** `test_*.py`
- **Functions:** Descriptive names like `test_query_changes_returns_results`.
- **Pattern:** Arrange, Act, Assert.
### Fixtures
- Use `pytest` fixtures for setup and dependency injection.
- Place shared fixtures in `conftest.py`.
- Use `unittest.mock.patch` as a context manager or fixture.
### Running Tests
Ensure your virtual environment is activated, then run:
```bash
./test.sh
```
## Runtime & Configuration
### Configuration
The server is configured via `gerrit_mcp_server/gerrit_config.json`.
- **Environment Variable:** `GERRIT_CONFIG_PATH` can be used to point to a custom config file.
- **Structure:**
```json
{
"gerrit_hosts": [
{
"name": "MyGerrit",
"external_url": "https://gerrit.example.com",
"authentication": { "type": "http_basic", ... }
}
]
}
```
*See [Configuration Guide](docs/configuration.md) for full details.*
### Client Setup (Gemini CLI)
To configure the Gemini CLI to use this server, see the **[Gemini CLI Setup Guide](docs/gemini-cli.md)**.
### Running Locally
To run the server locally for debugging (ensure venv is active):
```bash
python -m gerrit_mcp_server
```
## Debugging
- **Logs:** The server outputs logs to stderr.
## Contributing
### Creating a CL
This project uses Gerrit for code reviews. The primary development branch is `master`.
1. **Create a new branch:**
```bash
git checkout -b <your-feature-branch>
```
2. **Commit your changes:**
```bash
git commit -m "Your descriptive commit message"
```
3. **Push for review:**
Changes must be pushed to `refs/for/master` to create a CL. Direct pushes to `master` are not permitted.
```bash
git push origin HEAD:refs/for/master
```