Σύνδεσμος GitHub
Συνδέστε τα αποθετήριά σας GitHub με το Brevo για παρακολούθηση δέσμευσης developer, ροές εργασίας ειδοποίησης κυκλοφορίας και παρακολούθηση κοινοτικής δραστηριότητας μέσω Tajo.
Επισκόπηση
| Ιδιότητα | Τιμή |
|---|---|
| Πλατφόρμα | GitHub |
| Κατηγορία | Προσαρμοσμένο |
| Πολυπλοκότητα Ρύθμισης | Μεσαία |
| Επίσημη Ενσωμάτωση | Όχι |
| Δεδομένα που Συγχρονίζονται | Εκδηλώσεις, Χρήστες, Αποθετήρια |
| Τύπος API | REST API, GraphQL API |
| Πιστοποίηση | GitHub App / Personal Access Token / OAuth 2.0 |
| Βασικό URL | https://api.github.com |
| Έκδοση API | 2022-11-28 (έκδοση βάσει header) |
Χαρακτηριστικά
- Παρακολούθηση ζητημάτων και PR - Συγχρονισμός εκδηλώσεων ζητημάτων και pull request στα χρονοδιαγράμματα επαφών Brevo
- Ειδοποιήσεις κυκλοφορίας - Ενεργοποίηση καμπανιών Brevo σε νέες κυκλοφορίες αποθετηρίου
- Συγχρονισμός συνεισφερόντων - Αντιστοίχιση συνεισφερόντων GitHub σε επαφές Brevo για κοινοτική δέσμευση
- Παρακολούθηση αστεριών και forks - Παρακολούθηση μετρήσεων δημοτικότητας αποθετηρίου
- Προώθηση εκδηλώσεων webhook - Προώθηση εκδηλώσεων GitHub σε αυτοματισμούς Brevo
- Κατάλογος αποθετηρίου - Συγχρονισμός metadata αποθετηρίου ως στοιχεία καταλόγου Brevo
Προαπαιτούμενα
Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε:
- Λογαριασμό GitHub με πρόσβαση στα στοχευόμενα αποθετήρια
- GitHub App ή Personal Access Token (συνιστάται λεπτομερής)
- Πρόσβαση διαχειριστή στα αποθετήρια για ρύθμιση webhook
- Λογαριασμό Brevo με πρόσβαση API
- Λογαριασμό Tajo με ενεργή συνδρομή
Πιστοποίηση
Το GitHub υποστηρίζει πολλαπλές μεθόδους πιστοποίησης. Το Tajo συνιστά τη χρήση GitHub Apps για πρόσβαση σε επίπεδο οργανισμού.
Επιλογή 1: GitHub App (Συνιστάται)
- Μεταβείτε στο Settings > Developer settings > GitHub Apps
- Κάντε κλικ στο New GitHub App
- Ρυθμίστε την εφαρμογή με αυτά τα δικαιώματα:
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Επιλογή 2: Λεπτομερής Personal Access Token
- Μεταβείτε στο Settings > Developer settings > Personal access tokens > Fine-grained tokens
- Κάντε κλικ στο Generate new token
- Επιλέξτε στοχευόμενα αποθετήρια
- Παραχωρήστε αυτά τα δικαιώματα:
Repository access: Selected repositoriesPermissions: Issues: Read-only Pull requests: Read-only Contents: Read-only Metadata: Read-onlyΑσφάλεια Token
Τα λεπτομερή tokens έχουν ημερομηνίες λήξης. Ρυθμίστε εναλλαγή token πριν τη λήξη. Τα tokens εγκατάστασης GitHub App ανανεώνονται αυτόματα και προτιμώνται για χρήση παραγωγής.
Σύνδεση με 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_TOKENΔιαμόρφωση
Βασική Ρύθμιση
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Αντιστοίχιση Πεδίων
Αντιστοιχίστε δεδομένα χρήστη GitHub σε χαρακτηριστικά επαφών 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_BIOEndpoints API
Το Tajo ενσωματώνεται με τα παρακάτω endpoints REST API GitHub:
| Endpoint | Μέθοδος | Σκοπός |
|---|---|---|
/repos/{owner}/{repo}/issues | GET | Λίστα ζητημάτων αποθετηρίου |
/repos/{owner}/{repo}/pulls | GET | Λίστα pull requests |
/repos/{owner}/{repo}/releases | GET | Λίστα κυκλοφοριών |
/repos/{owner}/{repo}/contributors | GET | Λίστα συνεισφερόντων |
/repos/{owner}/{repo}/stargazers | GET | Λίστα παρατηρητών αστεριών |
/repos/{owner}/{repo}/forks | GET | Λίστα forks |
/repos/{owner}/{repo}/events | GET | Λίστα εκδηλώσεων αποθετηρίου |
/users/{username} | GET | Λήψη προφίλ χρήστη |
/orgs/{org}/members | GET | Λίστα μελών οργανισμού |
/repos/{owner}/{repo}/hooks | POST | Δημιουργία webhook |
Παραδείγματα Κώδικα
Αρχικοποίηση Συνδέσμου
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});Συγχρονισμός Συνεισφερόντων στο 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// }Χειρισμός Εκδηλώσεων 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');});Ενεργοποίηση Καμπάνιας Κυκλοφορίας
// 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 } });});Όρια Ρυθμού
Το GitHub επιβάλλει όρια ρυθμού βάσει μεθόδου πιστοποίησης:
| Πιστοποίηση | Κύριο Όριο Ρυθμού | Search API |
|---|---|---|
| Χωρίς πιστοποίηση | 60 αιτήματα/ώρα | 10 αιτήματα/λεπτό |
| Personal Access Token | 5.000 αιτήματα/ώρα | 30 αιτήματα/λεπτό |
| GitHub App (εγκατάσταση) | 5.000 αιτήματα/ώρα | 30 αιτήματα/λεπτό |
| GitHub App (user-to-server) | 5.000 αιτήματα/ώρα | 30 αιτήματα/λεπτό |
Υπό Όρους Αιτήματα
Το Tajo χρησιμοποιεί υπό όρους αιτήματα (headers If-None-Match / If-Modified-Since) για μείωση κατανάλωσης API. Οι αποκρίσεις με 304 Not Modified δεν υπολογίζονται έναντι ορίων ρυθμού.
Πρόσθετα όρια:
- Δευτερεύοντα όρια ρυθμού: Όχι περισσότερα από 100 ταυτόχρονα αιτήματα. Όχι περισσότεροι από 900 πόντοι ανά λεπτό για endpoints REST API.
- GraphQL: 5.000 πόντοι ανά ώρα (το κόστος ερωτήματος ποικίλλει ανάλογα με την πολυπλοκότητα).
Αντιμετώπιση Προβλημάτων
Συνηθισμένα Προβλήματα
| Πρόβλημα | Αιτία | Λύση |
|---|---|---|
| 401 Unauthorized | Ληγμένο token ή λανθασμένα διαπιστευτήρια | Αναγέννηση token ή επανεγκατάσταση GitHub App |
| 403 Forbidden | Ανεπαρκή δικαιώματα | Ελέγξτε scopes token ή δικαιώματα App |
| 404 Not Found | Ιδιωτικό αποθετήριο χωρίς πρόσβαση | Παραχωρήστε πρόσβαση αποθετηρίου στο token ή App |
| Υπέρβαση ορίου ρυθμού | Πολλές κλήσεις API | Ενεργοποιήστε υπό όρους αιτήματα και μειώστε συχνότητα συγχρονισμού |
| Δεν λαμβάνονται webhooks | Λάθος URL ή firewall | Επαληθεύστε ότι το URL webhook είναι δημόσια προσβάσιμο |
Λειτουργία Εντοπισμού Σφαλμάτων
connectors: github: debug: true log_level: verbose log_webhooks: trueΔοκιμή Σύνδεσης
tajo connectors test github# ✓ API authentication successful# ✓ Repository access verified# ✓ Issue data readable# ✓ Webhook delivery active# ✓ Rate limit healthy (4,850/5,000 remaining)Βέλτιστες Πρακτικές
- Χρησιμοποιήστε GitHub Apps αντί PATs - Τα GitHub Apps παρέχουν λεπτομερή δικαιώματα και αυτόματα ανανεούμενα tokens
- Ενεργοποιήστε secrets webhook - Επαληθεύετε πάντα υπογραφές webhook με HMAC-SHA256
- Χρησιμοποιήστε υπό όρους αιτήματα - Αξιοποιήστε ETags για αποφυγή σπατάλης ποσόστωσης ορίου ρυθμού
- Σελιδοποίηση μεγάλων αποκρίσεων - Το GitHub επιστρέφει μέγ. 100 στοιχεία ανά σελίδα· επαναλάβετε με headers
Link - Συγχρονίστε σε ώρες χαμηλής δραστηριότητας - Προγραμματίστε πλήρεις συγχρονισμούς εκτός ωρών αιχμής ανάπτυξης
- Παρακολουθήστε headers ορίου ρυθμού - Ελέγξτε
X-RateLimit-Remainingγια προληπτική δυνατότητα ρύθμισης
Ασφάλεια
- Πιστοποίηση GitHub App - JWT βάσει κλειδιού RSA με βραχύβια tokens εγκατάστασης
- Υπογραφές Webhook - Επαλήθευση υπογραφής HMAC-SHA256 σε όλα τα payloads webhook
- Λεπτομερή Tokens - Περιορισμένα σε συγκεκριμένα αποθετήρια και δικαιώματα
- Μόνο HTTPS - Όλη η επικοινωνία API κρυπτογραφημένη μέσω TLS 1.2+
- Κρυπτογραφημένη Αποθήκευση - Ιδιωτικά κλειδιά και tokens κρυπτογραφημένα σε ηρεμία στο Tajo
- Λήξη Token - Τα λεπτομερή tokens λήγουν αυτόματα· ρυθμίστε ειδοποιήσεις εναλλαγής