Konektor GitHub
Status konektor: Direncanakan Belum dibangun. Tajo belum menjalankan konektor ini.
Ilustrasi · data contoh
Contoh sinkronisasi
Sumber
GitHub
Status konektor: Direncanakan
Tujuan
Alat Anda yang lain
Status konektor: Alat khusus
Pemetaan field
| Field sumber | Field tujuan | Nilai contoh |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Susun draf
- Tinjau satu data
- Setujui versi ini
Status berlaku untuk masing-masing konektor dan tidak menjamin sinkronisasi ini siap. Field ini hanya ilustrasi. Periksa skema dan izin sebenarnya sebelum sinkronisasi berjalan.
Hubungkan repositori GitHub Anda ke Brevo untuk melacak engagement developer, menjalankan alur notifikasi rilis, dan memantau aktivitas komunitas melalui Tajo.
Ikhtisar
| Properti | Nilai |
|---|---|
| Platform | GitHub |
| Kategori | Kustom |
| Kompleksitas penyiapan | Menengah |
| Integrasi resmi | Tidak |
| Data yang disinkronkan | Events, Users, Repositories |
| Tipe API | REST API, GraphQL API |
| Autentikasi | GitHub App / Personal Access Token / OAuth 2.0 |
| Base URL | https://api.github.com |
| Versi API | 2022-11-28 (versioning berbasis header) |
Fitur
- Pelacakan issue dan PR - Sinkronkan event issue dan pull request ke linimasa contact Brevo
- Notifikasi rilis - Picu kampanye Brevo saat ada rilis repositori baru
- Sync kontributor - Petakan kontributor GitHub ke contacts Brevo untuk engagement komunitas
- Pelacakan star dan fork - Pantau metrik popularitas repositori
- Penerusan event webhook - Teruskan event GitHub ke otomatisasi Brevo
- Katalog repositori - Sinkronkan metadata repositori sebagai item katalog Brevo
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
- Akun GitHub dengan akses ke repositori yang dituju
- GitHub App atau Personal Access Token (fine-grained direkomendasikan)
- Akses admin ke repositori untuk mengonfigurasi webhook
- Akun Brevo dengan akses API
- Akun Tajo dengan langganan aktif
Autentikasi
GitHub mendukung beberapa metode autentikasi. Tajo merekomendasikan GitHub Apps untuk akses tingkat organisasi.
Opsi 1: GitHub App (direkomendasikan)
- Buka Settings > Developer settings > GitHub Apps
- Klik New GitHub App
- Konfigurasikan app dengan permission berikut:
Repository permissions: Issues: Read Pull requests: Read Contents: Read Metadata: Read
Organization permissions: Members: Read
Subscribe to events: Issues Pull request Push Release Star ForkOpsi 2: Fine-grained Personal Access Token
- Buka Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Klik Generate new token
- Pilih repositori yang dituju
- Berikan permission berikut:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyKeamanan token
Token fine-grained memiliki tanggal kedaluwarsa. Siapkan rotasi token sebelum masa berlakunya habis. Token instalasi GitHub App diperbarui otomatis dan lebih disarankan untuk penggunaan produksi.
Menghubungkan ke Tajo
# Using GitHub Apptajo connectors install github \ --app-id $GITHUB_APP_ID \ --private-key-path ./github-app-key.pem \ --installation-id $GITHUB_INSTALLATION_ID
# Using Personal Access Tokentajo connectors install github \ --token $GITHUB_TOKENKonfigurasi
Penyiapan dasar
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: 21Pemetaan field
Petakan data pengguna GitHub ke atribut contact Brevo:
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_BIOEndpoint API
Tajo terintegrasi dengan endpoint GitHub REST API berikut:
| Endpoint | Method | Tujuan |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Menampilkan issue repositori |
/repos/{owner}/{repo}/pulls | GET | Menampilkan pull request |
/repos/{owner}/{repo}/releases | GET | Menampilkan rilis |
/repos/{owner}/{repo}/contributors | GET | Menampilkan kontributor |
/repos/{owner}/{repo}/stargazers | GET | Menampilkan stargazer |
/repos/{owner}/{repo}/forks | GET | Menampilkan fork |
/repos/{owner}/{repo}/events | GET | Menampilkan event repositori |
/users/{username} | GET | Mengambil profil pengguna |
/orgs/{org}/members | GET | Menampilkan anggota organisasi |
/repos/{owner}/{repo}/hooks | POST | Membuat webhook |
Contoh kode
Inisialisasi konektor
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});Menyinkronkan kontributor ke Brevo
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// }Menangani event webhook
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');});Memicu kampanye rilis
// Listen for new releases and trigger Brevo campaigntajo.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 } });});Batas rate
GitHub menerapkan rate limit berdasarkan metode autentikasi:
| Autentikasi | Rate limit utama | Search API |
|---|---|---|
| Tanpa autentikasi | 60 request/jam | 10 request/menit |
| Personal Access Token | 5.000 request/jam | 30 request/menit |
| GitHub App (installation) | 5.000 request/jam | 30 request/menit |
| GitHub App (user-to-server) | 5.000 request/jam | 30 request/menit |
Request kondisional
Tajo menggunakan request kondisional (header If-None-Match / If-Modified-Since) untuk menekan konsumsi API. Respons dengan 304 Not Modified tidak dihitung terhadap rate limit.
Batas tambahan:
- Rate limit sekunder: Tidak lebih dari 100 request bersamaan. Tidak lebih dari 900 poin per menit untuk endpoint REST API.
- GraphQL: 5.000 poin per jam (biaya query bervariasi menurut kompleksitas).
Pemecahan masalah
Masalah umum
| Masalah | Penyebab | Solusi |
|---|---|---|
| 401 Unauthorized | Token kedaluwarsa atau kredensial salah | Buat ulang token atau pasang ulang GitHub App |
| 403 Forbidden | Permission tidak mencukupi | Periksa scope token atau permission App |
| 404 Not Found | Repositori privat tanpa akses | Berikan akses repositori ke token atau App |
| Rate limit terlampaui | Terlalu banyak panggilan API | Aktifkan request kondisional dan kurangi frekuensi sync |
| Webhook tidak diterima | URL salah atau terhalang firewall | Pastikan URL webhook dapat diakses publik |
Mode debug
connectors: github: debug: true log_level: verbose log_webhooks: trueUji koneksi
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Praktik terbaik
- Utamakan GitHub Apps dibanding PAT - GitHub Apps memberikan permission yang lebih granular dan token yang diperbarui otomatis
- Aktifkan secret webhook - Selalu verifikasi signature webhook dengan HMAC-SHA256
- Gunakan request kondisional - Manfaatkan ETag agar kuota rate limit tidak terbuang
- Paginasikan respons besar - GitHub mengembalikan maksimal 100 item per halaman; lakukan iterasi dengan header
Link - Sinkronkan saat aktivitas rendah - Jadwalkan sync penuh di luar jam pengembangan tersibuk
- Pantau header rate limit - Periksa
X-RateLimit-Remaininguntuk melakukan throttling secara proaktif
Keamanan
- Autentikasi GitHub App - JWT berbasis kunci RSA dengan token instalasi berumur pendek
- Signature webhook - Verifikasi signature HMAC-SHA256 pada semua payload webhook
- Token fine-grained - Dibatasi ke repositori dan permission tertentu
- HTTPS Only - Semua komunikasi API dienkripsi melalui TLS 1.2+
- Penyimpanan terenkripsi - Private key dan token dienkripsi saat disimpan di Tajo
- Masa berlaku token - Token fine-grained kedaluwarsa otomatis; siapkan peringatan rotasi