---
title: "GitHub konektor"
description: "Kompletan vodič za GitHub integraciju za sinhronizaciju događaja u repozitorijumu, problema, pull zahteva i aktivnosti programera sa Brevo putem Tajo."
url: https://tajo.io/sr/docs/connectors/custom/github/
markdown: https://tajo.io/sr/docs/connectors/custom/github.md
lang: sr-Latn-RS
robots: noindex
---

Zatražite rani pristup

Unesite ime i poslovnu adresu e-pošte. Poslaćemo vam vezu za potvrdu zahteva za pristup Taju.

# GitHub konektor

Status konektora: Planirano Još nije izrađeno. Tajo danas ne pokreće ovaj konektor.

| Izvorno polje | Odredišno polje | Primer vrednosti |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Poveži svoje GitHub repozitorijume sa Brevo za praćenje angažovanja programera, tokove obaveštavanja o izdanjima i praćenje aktivnosti zajednice putem Tajo.

## Pregled

| Svojstvo | Vrednost |
| --- | --- |
| **Platforma** | GitHub |
| **Kategorija** | Prilagođeno |
| **Složenost podešavanja** | Srednje |
| **Zvanična integracija** | Ne |
| **Sinhronizovani podaci** | Događaji, Korisnici, Repozitorijumi |
| **Tip API-ja** | REST API, GraphQL API |
| **Autentifikacija** | GitHub App / Personal Access Token / OAuth 2.0 |
| **Osnovni URL** | `https://api.github.com` |
| **Verzija API-ja** | `2022-11-28` (verzionisanje zasnovano na headeru) |

## Karakteristike

- **Praćenje problema i PR** - Sinhronizuj događaje problema i pull zahteva sa Brevo vremenskim linijama kontakata
- **Obaveštenja o izdanjima** - Pokretanje Brevo kampanja pri novim izdanjima repozitorijuma
- **Sinhronizacija saradnika** - Mapiranje GitHub saradnika na Brevo kontakte za angažovanje zajednice
- **Praćenje zvezdica i forkova** - Praćenje metrika popularnosti repozitorijuma
- **Prosleđivanje webhook događaja** - Prosleđivanje GitHub događaja Brevo automatizacijama
- **Katalog repozitorijuma** - Sinhronizacija metapodataka repozitorijuma kao Brevo katalog stavki

## Preduslovi

Pre nego što započneš, proveri da imaš:

1. GitHub nalog sa pristupom ciljnim repozitorijumima
2. GitHub App ili Personal Access Token (fine-grained preporučeno)
3. Admin pristup repozitorijumima za konfiguraciju webhook-ova
4. Brevo nalog sa API pristupom
5. Tajo nalog sa aktivnom pretplatom

## Autentifikacija

GitHub podržava više metoda autentifikacije. Tajo preporučuje korišćenje GitHub Apps za pristup na nivou organizacije.

### Opcija 1: GitHub App (preporučeno)

1. Idi na **Settings** > **Developer settings** > **GitHub Apps**
2. Klikni **New GitHub App**
3. Konfiguriši aplikaciju sa ovim dozvolama:

```
Repository permissions:
  Issues: Read
  Pull requests: Read
  Contents: Read
  Metadata: Read

Organization permissions:
  Members: Read

Subscribe to events:
  Issues
  Pull request
  Push
  Release
  Star
  Fork
```

### Opcija 2: Fine-Grained Personal Access Token

1. Idi na **Settings** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Klikni **Generate new token**
3. Izaberi ciljne repozitorijume
4. Dodeli ove dozvole:

```
Repository access: Selected repositories
Permissions:
  Issues: Read-only
  Pull requests: Read-only
  Contents: Read-only
  Metadata: Read-only
```

Bezbednost tokena

Fine-grained tokeni imaju datume isteka. Postavi rotaciju tokena pre isteka. GitHub App instalacioni tokeni se automatski osvežavaju i preferiraju se za produkcijsku upotrebu.

### Povezivanje sa Tajo

```bash
# Using GitHub App
tajo connectors install github \
  --app-id $GITHUB_APP_ID \
  --private-key-path ./github-app-key.pem \
  --installation-id $GITHUB_INSTALLATION_ID

# Using Personal Access Token
tajo connectors install github \
  --token $GITHUB_TOKEN
```

## Konfiguracija

### Osnovno podešavanje

```yaml
connectors:
  github:
    enabled: true
    auth_type: "github_app"  # or "token"

    repositories:
      - owner/repo-1
      - owner/repo-2

    sync:
      issues: true
      pull_requests: true
      releases: true
      contributors: true
      stars: true

    lists:
      contributors: 20
      stargazers: 21
```

### Mapiranje polja

Mapiranje GitHub korisničkih podataka na Brevo atribute kontakta:

```yaml
field_mapping:
  # Standard fields
  login: GITHUB_USERNAME
  email: email
  name: FIRSTNAME

  # Developer metrics
  contributions: GITHUB_CONTRIBUTIONS
  repositories_count: GITHUB_REPOS
  followers: GITHUB_FOLLOWERS
  created_at: GITHUB_JOINED

  # Custom attributes
  company: COMPANY
  location: LOCATION
  bio: GITHUB_BIO
```

## API endpointi

Tajo se integriše sa sledećim GitHub REST API endpointima:

| Endpoint | Metoda | Svrha |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | Listanje problema u repozitorijumu |
| `/repos/{owner}/{repo}/pulls` | GET | Listanje pull zahteva |
| `/repos/{owner}/{repo}/releases` | GET | Listanje izdanja |
| `/repos/{owner}/{repo}/contributors` | GET | Listanje saradnika |
| `/repos/{owner}/{repo}/stargazers` | GET | Listanje posmatrača zvezdica |
| `/repos/{owner}/{repo}/forks` | GET | Listanje forkova |
| `/repos/{owner}/{repo}/events` | GET | Listanje događaja repozitorijuma |
| `/users/{username}` | GET | Dohvatanje profila korisnika |
| `/orgs/{org}/members` | GET | Listanje članova organizacije |
| `/repos/{owner}/{repo}/hooks` | POST | Kreiranje webhook-a |

## Primeri koda

### Inicijalizacija konektora

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

await tajo.connectors.connect('github', {
  appId: process.env.GITHUB_APP_ID,
  privateKey: process.env.GITHUB_PRIVATE_KEY,
  installationId: process.env.GITHUB_INSTALLATION_ID
});
```

### Sinhronizacija saradnika sa Brevo

```javascript
await tajo.connectors.sync('github', {
  type: 'full',
  resources: ['contributors'],
  repositories: ['owner/repo-1', 'owner/repo-2']
});

const status = await tajo.connectors.status('github');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-03-15T11:00:00Z',
//   contributorsCount: 245,
//   issuesTracked: 1890,
//   releasesTracked: 34
// }
```

### Obrada webhook događaja

```javascript
app.post('/webhooks/github', async (req, res) => {
  const signature = req.get('X-Hub-Signature-256');
  const event = req.get('X-GitHub-Event');

  // Verify webhook signature
  if (!verifyGitHubSignature(req.body, signature)) {
    return res.status(401).send('Unauthorized');
  }

  await tajo.connectors.handleWebhook('github', {
    event,
    payload: req.body
  });

  res.status(200).send('OK');
});
```

### Pokretanje kampanje za izdanje

```javascript
// Listen for new releases and trigger Brevo campaign
tajo.connectors.on('github', 'release.published', async (event) => {
  await tajo.campaigns.trigger('release-announcement', {
    listId: 21,
    params: {
      version: event.release.tag_name,
      release_notes: event.release.body,
      download_url: event.release.html_url
    }
  });
});
```

## Ograničenja brzine

GitHub primenjuje ograničenja brzine zasnovana na metodu autentifikacije:

| Autentifikacija | Primarno ograničenje | Search API |
| --- | --- | --- |
| **Neautentifikovano** | 60 zahteva/sat | 10 zahteva/minut |
| **Personal Access Token** | 5.000 zahteva/sat | 30 zahteva/minut |
| **GitHub App (instalacija)** | 5.000 zahteva/sat | 30 zahteva/minut |
| **GitHub App (user-to-server)** | 5.000 zahteva/sat | 30 zahteva/minut |

Uslovni zahtevi

Tajo koristi uslovne zahteve (`If-None-Match` / `If-Modified-Since` headeri) za smanjenje API potrošnje. Odgovori sa `304 Not Modified` ne računaju se u ograničenja brzine.

Dodatna ograničenja:

- **Sekundarna ograničenja brzine**: Ne više od 100 istovremenih zahteva. Ne više od 900 poena po minuti za REST API endpointe.
- **GraphQL**: 5.000 poena po satu (cena upita varira prema složenosti).

## Rešavanje problema

### Česti problemi

| Problem | Uzrok | Rešenje |
| --- | --- | --- |
| 401 Unauthorized | Istekao token ili pogrešni akreditivi | Regeneriši token ili ponovo instaliraj GitHub App |
| 403 Forbidden | Nedovoljne dozvole | Proveri skopove tokena ili dozvole aplikacije |
| 404 Not Found | Privatni repozitorijum bez pristupa | Dodeli pristup repozitorijumu tokenu ili aplikaciji |
| Prekoračen limit brzine | Previše API poziva | Omogući uslovne zahteve i smanji učestalost sinhronizacije |
| Webhook-ovi nisu primljeni | Pogrešan URL ili firewall | Proveri da je URL webhook-a javno dostupan |

### Debug režim

```yaml
connectors:
  github:
    debug: true
    log_level: verbose
    log_webhooks: true
```

### Testiraj vezu

```bash
tajo connectors test github
# ✓ API authentication successful
# ✓ Repository access verified
# ✓ Issue data readable
# ✓ Webhook delivery active
# ✓ Rate limit healthy (4,850/5,000 remaining)
```

## Najbolje prakse

1. **Koristi GitHub Apps umesto PAT-ova** - GitHub Apps pružaju granularne dozvole i automatski osvežavajuće tokene
2. **Omogući webhook secrets** - Uvek verifikuj webhook potpise sa HMAC-SHA256
3. **Koristi uslovne zahteve** - Koristi ETags da izbjegneš trošenje kvote ograničenja brzine
4. **Paginiraj velike odgovore** - GitHub vraća maksimalno 100 stavki po stranici; iteriraj sa `Link` headerima
5. **Sinhronizuj tokom male aktivnosti** - Zakaži pune sinhronizacije van vršnih sati razvoja
6. **Prati headere ograničenja brzine** - Proveri `X-RateLimit-Remaining` da proaktivno ograničiš

## Bezbednost

- **GitHub App autentifikacija** - JWT zasnovan na RSA ključu sa kratkoročnim instalacionim tokenima
- **Webhook potpisi** - HMAC-SHA256 verifikacija potpisa na svim webhook payload-ima
- **Fine-Grained tokeni** - Skopovani na specifične repozitorijume i dozvole
- **Samo HTTPS** - Sva API komunikacija enkriptovana putem TLS 1.2+
- **Enkriptovano skladištenje** - Privatni ključevi i tokeni enkriptovani u mirovanju u Tajo
- **Isticanje tokena** - Fine-grained tokeni automatski ističu; postavi upozorenja za rotaciju

## Povezani resursi

- [Jira konektor](https://tajo.io/sr/docs/connectors/custom/jira)
- [Linear konektor](https://tajo.io/sr/docs/connectors/custom/linear)
- [Notion konektor](https://tajo.io/sr/docs/connectors/custom/notion)
- [Brevo Contacts API](https://tajo.io/sr/docs/contact-management)
