Skip to main content

A smart GitHub webhook service that analyzes PRs to determine test impact

This project has been archived.

The maintainers of this project have marked this project as archived. No new releases are expected.

Project description

Test Impact Analyzer Agent

A smart GitHub webhook service that analyzes pull requests to determine which tests should be run based on code changes. The agent uses AI to understand code dependencies and suggest relevant tests.

Features

  • GitHub webhook integration for pull request events
  • Intelligent test impact analysis
  • Automatic PR comments with analysis results
  • Support for multiple programming languages
  • Configurable via environment variables

Overall Architecture

+------------------+    +------------------+    +------------------+
|  GitHub Webhook  |--->|    AI Agent      |--->|   Test Runner    |
|   (PR Events)    |    |(Direct Git API)  |    |  (pytest/jest)   |
+------------------+    +------------------+    +------------------+
                               |
                       +------------------+
                       |   Local Git +    |
                       |   GitHub API     |
                       +------------------+
                               |
                       +------------------+
                       |  Ollama (Local   |
                       |      LLM)        |
                       +------------------+

Prerequisites

  • Python 3.8 or higher
  • Git 2.x or higher
  • Node.js 16+ (for JavaScript/TypeScript projects)
  • Docker (optional, for containerized deployment)
  • 8GB RAM minimum (16GB recommended for Ollama LLM)
  • Operating System:
    • Linux (Ubuntu 20.04+, CentOS 7+)
    • macOS (Big Sur or newer)
    • Windows 10/11 with WSL2
  • Disk Space:
    • 5GB for base installation
    • 4GB+ for Ollama models
    • Additional space for analyzed repositories

Installation

Option 1: Install from PyPI (Recommended)

pip install test-impact-analyzer

Option 2: Install from source

  1. Clone the repository:
git clone https://github.com/uppadhyayraj/test-impact-analyzer-agent.git
cd test-impact-analyzer-agent
  1. Create and activate a virtual environment:
python -m venv venv
source venv/bin/activate
  1. Install dependencies:
pip install -r requirements.txt
  1. Set up environment variables in .env:
# GitHub token with minimal scope (pull_request:write) for PR comments
GITHUB_TOKEN=your_github_token

# Server configuration (optional, defaults shown)
PORT=5043
HOST=0.0.0.0
DEBUG=False

Note: For security best practices, limit the GitHub token scope to only pull_request:write access. Here's how to create a token with minimal permissions:

  1. Go to GitHub Settings > Developer Settings > Personal access tokens > Fine-grained tokens
  2. Click "Generate new token"
  3. Set token name (e.g., "Test Impact Analyzer")
  4. Set expiration date
  5. Select the specific repository you want to analyze
  6. Under "Repository permissions":
    • Pull requests: Access level "Write"
    • Leave all other permissions unchecked
  7. Click "Generate token"
  8. Copy the token and add it to your .env file

This minimal scope is sufficient for posting PR comments while following security best practices.

Ollama Setup

  1. Install Ollama:
# macOS and Linux
curl -fsSL https://ollama.com/install.sh | sh

# Windows
# Download from https://ollama.com/download/windows
  1. Pull the required model:
ollama pull qwen2.5-coder:7b
  1. Update your .env file with Ollama configuration:
OLLAMA_HOST=http://localhost:11434
OLLAMA_MODEL=qwen2.5-coder:7b
  1. Verify Ollama is running:
curl http://localhost:11434/api/health

Note: Ensure Ollama is running before starting the webhook server.

Usage

Running as a Webhook Server

  1. Start the server:
python src/app.py
  1. Configure your GitHub repository webhook:
    • Webhook URL: http://your-server:5043/webhook
    • Events: Select "Pull requests"
    • Content type: application/json

The server will automatically:

  • Analyze new pull requests
  • Comment with test recommendations
  • Update analysis when PRs are updated

Running Webhook Locally

  1. Install ngrok:
# macOS with Homebrew
brew install ngrok

# Windows with Chocolatey
choco install ngrok

# Or download from https://ngrok.com/download
  1. Start the webhook server:
python src/github_webhook.py
  1. In a new terminal, create a public URL with ngrok:
ngrok http 5043
  1. Configure your GitHub repository webhook:
    • Copy the ngrok URL (e.g., https://a1b2-c3d4.ngrok.io)
    • Webhook URL: https://your-ngrok-url/webhook
    • Events: Select "Pull requests"
    • Content type: application/json
    • Secret: Leave empty for testing

Note: The ngrok URL changes each time you restart ngrok. Update your webhook URL in GitHub repository settings accordingly.

Running from Command Line

You can also run the analysis directly on a repository:

python main.py --repo-path /path/to/repo --base-branch main --target-branch feature --format detailed

Options:

  • --repo-path: Path to the git repository
  • --base-branch: Base branch for comparison (default: main)
  • --target-branch: Target branch with changes
  • --format: Output format (json, markdown, or detailed)
  • --output-file: Optional file to write results to

Configuration

The application can be configured using environment variables or a .env file:

  1. Create a .env file in your project directory:
cp example.env .env
  1. Edit the .env file with your configuration:
# GitHub token with minimal scope (pull_request:write) for PR comments
GITHUB_TOKEN=your_github_token

# Server configuration (optional, defaults shown)
PORT=5043
HOST=0.0.0.0
DEBUG=False

Note: For security best practices, limit the GitHub token scope to only pull_request:write access. Here's how to create a token with minimal permissions:

  1. Go to GitHub Settings > Developer Settings > Personal access tokens > Fine-grained tokens
  2. Click "Generate new token"
  3. Set token name (e.g., "Test Impact Analyzer")
  4. Set expiration date
  5. Select the specific repository you want to analyze
  6. Under "Repository permissions":
    • Pull requests: Access level "Write"
    • Leave all other permissions unchecked
  7. Click "Generate token"
  8. Copy the token and add it to your .env file

This minimal scope is sufficient for posting PR comments while following security best practices.

Project Structure

test-impact-analyzer-agent/
├── src/
│   ├── app.py              # Main Flask application
│   ├── config.py           # Configuration management
│   ├── services/
│   │   ├── github_service.py   # GitHub API interactions
│   │   └── repo_service.py     # Git repository operations
│   └── utils/
│       └── logging.py          # Logging configuration
├── main.py                 # Test analysis implementation
├── requirements.txt        # Project dependencies
└── README.md              # Project documentation

Development

  1. Install dev dependencies:
pip install -r requirements-dev.txt
  1. Run tests:
pytest
  1. Run linting:
flake8

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Push to the branch
  5. Create a Pull Request

License

MIT License - see LICENSE file for details

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

test_impact_analyzer-0.1.0.tar.gz (20.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

test_impact_analyzer-0.1.0-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

Details for the file test_impact_analyzer-0.1.0.tar.gz.

File metadata

  • Download URL: test_impact_analyzer-0.1.0.tar.gz
  • Upload date:
  • Size: 20.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for test_impact_analyzer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 128513590adc5294148bbe6179a3f71520fcedc3ebefbed1ed60b0e52a6a80ae
MD5 028fa01b30451efc43e149755120a751
BLAKE2b-256 2c0b0865c0d454f6a47a6c1d986e4e75afe9fa62fed2523b226a165a0e80ecd5

See more details on using hashes here.

File details

Details for the file test_impact_analyzer-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for test_impact_analyzer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 888d880e1439374ec025aca37aa3fc208a8ef02ad10c89992dcfa9de05037768
MD5 32e08ca3904a4bae38f6b01bb37dc643
BLAKE2b-256 209c21b8ceb5e5256506cc28886f810cc8bab18129a09255a65c8029402963ab

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page