PullGenius is an automated AI-powered code review bot that integrates with Azure DevOps pull requests. It uses Azure OpenAI to analyze code changes and provide structured, file-specific reviews directly in your pull requests.
- 🤖 AI-Powered Reviews: Uses Azure OpenAI (GPT-4) to analyze code changes
- 📁 File-Based Comments: Posts reviews as file-specific comments in Azure DevOps
- ⚡ Parallel Processing: Reviews multiple files simultaneously for optimal performance
- 🎯 Smart Change Detection: Reviews only modified lines, not entire files
- 🔍 Method-Level Analysis: For C# files, uses Roslyn to extract and analyze changed methods
- 📊 Configurable Limits: Skip excessively large files to avoid timeouts
- 🌐 Multi-Language Support: Supports C#, JavaScript, TypeScript, Python, and many more
- Azure DevOps webhook triggers on PR created/updated events
- Service processes each modified file in parallel
- For each file:
- Fetches diff from Azure DevOps
- Analyzes with Azure OpenAI
- Posts file-based review comment
- 🔒 Security: Vulnerabilities, data exposure, authentication flaws
- ⚡ Performance: Bottlenecks, memory leaks, inefficient algorithms
- 🔧 Quality: Maintainability, readability, design patterns
- 🐛 Logic & Bugs: Business logic errors, edge cases, potential bugs
- .NET 8.0 SDK
- Azure DevOps Server (on-premise or cloud)
- Azure OpenAI Service with GPT-4 deployment
- Azure DevOps Personal Access Token (PAT) with Code Read & Write permissions
- Clone the repository
git clone https://github.com/your-username/PullGenius.git
cd PullGenius- Configure settings
cd PullGenius
cp appsettings.Example.json appsettings.jsonEdit appsettings.json and fill in your configuration:
{
"AzureDevOps": {
"BaseUrl": "https://dev.azure.com or your on-premise URL",
"Organization": "YourOrganization",
"Project": "YourProject",
"PersonalAccessToken": "your-pat-token"
},
"OpenAI": {
"Endpoint": "https://your-resource.openai.azure.com/",
"ApiKey": "your-api-key",
"Model": "gpt-4",
"MaxTokens": 2000,
"Temperature": 0.3,
"MaxDiffLength": 8000
}
}- Build and run
dotnet restore
dotnet build
dotnet runThe service will start on http://localhost:5093 and https://localhost:7050
- Go to your Azure DevOps project
- Navigate to Project Settings → Service Hooks
- Click + Create subscription
- Select Web Hooks
- Configure:
- Event: Pull request created/updated
- URL:
http://your-server:5093/api/webhook/pullrequest - Method: POST
- Click Finish
BaseUrl: Your Azure DevOps server URLOrganization: Organization/Collection nameProject: Project namePersonalAccessToken: PAT with Code Read/Write permissions
Endpoint: Azure OpenAI resource endpointApiKey: Azure OpenAI API keyModel: Model deployment name (default: gpt-4)MaxTokens: Maximum tokens per response (default: 2000)Temperature: Creativity level 0-1 (default: 0.3)MaxDiffLength: Max characters in diff before skipping file (default: 8000)
POST /api/webhook/pullrequest- Webhook endpoint for Azure DevOpsGET /api/webhook/health- Health check endpoint
PullGenius/
├── Controllers/ # API controllers
├── Services/ # Business logic
│ ├── PullRequestReviewService.cs
│ ├── AzureDevOpsService.cs
│ └── OpenAIService.cs
├── Models/ # Data models
└── appsettings.json # Configuration
- Azure.AI.OpenAI (2.1.0) - Azure OpenAI client
- Microsoft.TeamFoundationServer.Client (19.225.1) - Azure DevOps API
- DiffPlex (1.9.0) - Text diffing
- Microsoft.CodeAnalysis.CSharp (4.14.0) - Roslyn for C# parsing
appsettings.json with real credentials to source control!
- The
.gitignorefile is configured to excludeappsettings.json - Use
appsettings.Example.jsonas a template - Store sensitive credentials in:
- Azure Key Vault
- Environment variables
- User secrets (for development)
- Verify webhook URL is accessible from Azure DevOps
- Check Azure DevOps Service Hooks history for errors
- Ensure firewall allows incoming connections
- Check application logs for errors
- Verify PAT token has Code (Read & Write) permissions
- Confirm Azure OpenAI endpoint and API key are correct
- Check logs for "diff too long" messages
- Increase
MaxDiffLengthif needed - Consider splitting large changes into smaller PRs
Contributions are welcome! Please feel free to submit issues or pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.
- Uses Azure OpenAI for intelligent code analysis
- Built with ASP.NET Core 8.0
- Integrates with Azure DevOps REST API