πŸ€– GitPulse β€” AI-Powered GitLab Code Review Agent (Gemini + Ollama)

#gitlab#ai#code-review#automation#devops

TL;DR: GitPulse β€” это AI-Π°Π³Π΅Π½Ρ‚ для автоматичСского Π°Π½Π°Π»ΠΈΠ·Π° merge requests Π² GitLab, ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‰ΠΈΠΉ статичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ AI-ΠΌΠΎΠ΄Π΅Π»ΠΈ (Gemini ΠΈ Ollama). Он прСдоставляСт структурированныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΎΡ†Π΅Π½ΠΊΡƒ качСства ΠΊΠΎΠ΄Π° ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ процСссами Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅: контСкст ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Code review β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… процСссов Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ качСство ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ошибки. Однако Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… этот процСсс часто сталкиваСтся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ: ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ security issues, Π½Π΅ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ стандарты review, ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ feedback cycles, отсутствиС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π½Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки.

GitPulse Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ статичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ AI-ΠΌΠΎΠ΄Π΅Π»ΠΈ для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ускоряСт процСсс, Π½ΠΎ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ прСдсказуСмым.

Основная Ρ‡Π°ΡΡ‚ΡŒ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°

АрхитСктура GitPulse

GitPulse состоит ΠΈΠ· Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° Π½Π° React ΠΈ бэкСнда Π½Π° NestJS. Для хранСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ MongoDB, Π° для взаимодСйствия с GitLab β€” WebSockets ΠΈ REST API.

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ структуры ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
// server/
//   src/
//     app.module.ts
//     review/
//       review.module.ts
//       review.service.ts
// client/
//   src/
//     App.tsx
//     components/
//       ReviewComponent.tsx

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ GitLab

Для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с GitLab ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Webhooks. Когда создаСтся Π½ΠΎΠ²Ρ‹ΠΉ merge request, GitPulse автоматичСски запускаСт процСсс Π°Π½Π°Π»ΠΈΠ·Π°.

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ webhook Π² NestJS
@Post('webhook')
async handleWebhook(@Body() payload: any) {
  const eventType = payload.object_kind;
  if (eventType === 'merge_request') {
    this.reviewService.startReview(payload);
  }
}

БтатичСский Π°Π½Π°Π»ΠΈΠ·

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΊΠΎΠ΄Π° AI-ΠΌΠΎΠ΄Π΅Π»ΠΈ GitPulse выполняСт статичСский Π°Π½Π°Π»ΠΈΠ·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ рСгулярныС выраТСния для поиска Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок.

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ статичСского Π°Π½Π°Π»ΠΈΠ·Π°
function performStaticAnalysis(code: string): string[] {
  const issues: string[] = [];
  const consoleLogRegex = /console\.log\(.*\);/g;
  if (consoleLogRegex.test(code)) {
    issues.push('Avoid using console.log in production code');
  }
  return issues;
}

ИспользованиС AI-модСлСй

GitPulse ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько AI-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Google Gemini ΠΈ Ollama (для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… LLM). Π­Ρ‚ΠΎ позволяСт Π³ΠΈΠ±ΠΊΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ модСль Π² зависимости ΠΎΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Gemini API
async function analyzeWithGemini(code: string): Promise<string> {
  const geminiResponse = await geminiClient.generateContent({
    model: 'gemini-2.0-flash',
    prompt: `Review this code: ${code}`,
  });
  return geminiResponse.text();
}

ΠžΡ†Π΅Π½ΠΊΠ° качСства ΠΊΠΎΠ΄Π°

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ merge request ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ†Π΅Π½ΠΊΡƒ качСства ΠΎΡ‚ 0 Π΄ΠΎ 100 ΠΈ Π±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ (A-F). Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ быстро ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ качСство ΠΊΠΎΠ΄Π°.

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ расчСта ΠΎΡ†Π΅Π½ΠΊΠΈ
function calculateQualityScore(issues: string[]): number {
  const totalIssues = issues.length;
  return totalIssues > 0 ? Math.max(0, 100 - totalIssues * 10) : 100;
}

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

GitPulse интСгрируСтся нСпосрСдствСнно Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс GitLab, прСдоставляя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹Π΅ feedback loops. Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… с высоким Ρ‚Π΅ΠΌΠΏΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π³Π΄Π΅ Π²Π°ΠΆΠ½ΠΎ быстро ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ качСствСнныС Ρ€Π΅Π²ΡŒΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

  1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ создаСт merge request.
  2. GitPulse автоматичСски Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.
  3. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ†Π΅Π½ΠΊΡƒ качСства ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ.
  4. ΠŸΡ€ΠΎΡ†Π΅ΡΡ повторяСтся Π΄ΠΎ достиТСния ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ уровня качСства.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

GitPulse β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ code review, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сочСтаСт статичСский Π°Π½Π°Π»ΠΈΠ· ΠΈ AI-ΠΌΠΎΠ΄Π΅Π»ΠΈ для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π°. Он Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ускоряСт процСсс, Π½ΠΎ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ прСдсказуСмым. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с GitLab ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… AI-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄Π΅Π»Π°ΡŽΡ‚ Π΅Π³ΠΎ Π³ΠΈΠ±ΠΊΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для ΠΊΠΎΠΌΠ°Π½Π΄ любого Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ GitPulse Π² своСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ доступСн Π½Π° GitHub: GitPulse-AIAgent. Π’Π°ΡˆΠΈ feedback ΠΈ прСдлоТСния ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ΡΡ!


Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: https://dev.to/pandi2352/gitpulse-ai-powered-gitlab-code-review-agent-gemini-ollama-p8o