---
title: "GitHub-kobling"
description: "Fullstendig GitHub-integrasjonsveiledning for synkronisering av repository-hendelser, issues, pull requests og utvikleraktivitet med Brevo via Tajo."
url: https://tajo.io/no/docs/connectors/custom/github/
markdown: https://tajo.io/no/docs/connectors/custom/github.md
lang: no-NO
robots: noindex
---

Be om tidlig tilgang

Skriv inn fornavn og e-postadresse på jobb. Vi sender deg en lenke for å bekrefte forespørselen om tilgang til Tajo.

# GitHub-kobling

Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.

| Kildefelt | Målfelt | Eksempelverdi |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Koble GitHub-repositoriene dine til Brevo for sporing av utviklerengasjement, arbeidsflyter for release-varslinger og overvåking av samfunnsaktivitet gjennom Tajo.

## Oversikt

| Egenskap | Verdi |
| --- | --- |
| **Plattform** | GitHub |
| **Kategori** | Custom |
| **Oppsettskompleksitet** | Moderat |
| **Offisiell integrasjon** | Nei |
| **Synkroniserte data** | Hendelser, brukere, repositorier |
| **API-type** | REST API, GraphQL API |
| **Autentisering** | GitHub App / Personal Access Token / OAuth 2.0 |
| **Base URL** | `https://api.github.com` |
| **API-versjon** | `2022-11-28` (header-basert versjonering) |

## Funksjoner

- **Sporing av issues og PR-er** - Synkroniser issue- og pull request-hendelser til Brevo-kontakttidslinjer
- **Release-varslinger** - Utløs Brevo-kampanjer på nye repository-releases
- **Synkronisering av bidragsytere** - Mapp GitHub-bidragsytere til Brevo-kontakter for samfunnsengasjement
- **Sporing av stjerner og forks** - Overvåk metrikk for repository-popularitet
- **Videresending av webhook-hendelser** - Videresend GitHub-hendelser til Brevo-automatiseringer
- **Repository-katalog** - Synkroniser repository-metadata som Brevo-katalogelementer

## Forutsetninger

Før du begynner, sørg for at du har:

1. En GitHub-konto med tilgang til målrepositorier
2. En GitHub App eller Personal Access Token (fine-grained anbefales)
3. Admin-tilgang til repositorier for webhook-konfigurasjon
4. En Brevo-konto med API-tilgang
5. En Tajo-konto med aktivt abonnement

## Autentisering

GitHub støtter flere autentiseringsmetoder. Tajo anbefaler å bruke GitHub Apps for tilgang på organisasjonsnivå.

### Alternativ 1: GitHub App (anbefalt)

1. Naviger til **Settings** > **Developer settings** > **GitHub Apps**
2. Klikk **New GitHub App**
3. Konfigurer appen med disse tillatelsene:

```
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
```

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

1. Gå til **Settings** > **Developer settings** > **Personal access tokens** > **Fine-grained tokens**
2. Klikk **Generate new token**
3. Velg målrepositorier
4. Gi disse tillatelsene:

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

Tokensikkerhet

Fine-grained tokens har utløpsdatoer. Sett opp token-rotering før utløp. GitHub App installation-tokens oppdateres automatisk og foretrekkes for produksjonsbruk.

### Koble til 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
```

## Konfigurasjon

### Grunnleggende oppsett

```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
```

### Feltmapping

Mapp GitHub-brukerdata til Brevo-kontaktattributter:

```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-endepunkter

Tajo integreres med følgende GitHub REST API-endepunkter:

| Endepunkt | Metode | Formål |
| --- | --- | --- |
| `/repos/{owner}/{repo}/issues` | GET | List repository-issues |
| `/repos/{owner}/{repo}/pulls` | GET | List pull requests |
| `/repos/{owner}/{repo}/releases` | GET | List releases |
| `/repos/{owner}/{repo}/contributors` | GET | List bidragsytere |
| `/repos/{owner}/{repo}/stargazers` | GET | List stargazers |
| `/repos/{owner}/{repo}/forks` | GET | List forks |
| `/repos/{owner}/{repo}/events` | GET | List repository-hendelser |
| `/users/{username}` | GET | Hent brukerprofil |
| `/orgs/{org}/members` | GET | List organisasjonsmedlemmer |
| `/repos/{owner}/{repo}/hooks` | POST | Opprett webhook |

## Kodeeksempler

### Initialiser kobling

```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
});
```

### Synkroniser bidragsytere til 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
// }
```

### Håndter webhook-hendelser

```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');
});
```

### Utløs release-kampanje

```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
    }
  });
});
```

## Hastighetsgrenser

GitHub håndhever hastighetsgrenser basert på autentiseringsmetode:

| Autentisering | Primær hastighetsgrense | Search API |
| --- | --- | --- |
| **Uautentisert** | 60 forespørsler/time | 10 forespørsler/minutt |
| **Personal Access Token** | 5 000 forespørsler/time | 30 forespørsler/minutt |
| **GitHub App (installation)** | 5 000 forespørsler/time | 30 forespørsler/minutt |
| **GitHub App (user-to-server)** | 5 000 forespørsler/time | 30 forespørsler/minutt |

Betingede forespørsler

Tajo bruker betingede forespørsler (`If-None-Match` / `If-Modified-Since`-headere) for å redusere API-forbruk. Responser med `304 Not Modified` teller ikke mot hastighetsgrenser.

Ytterligere grenser:

- **Sekundære hastighetsgrenser**: Ikke mer enn 100 samtidige forespørsler. Ikke mer enn 900 poeng per minutt for REST API-endepunkter.
- **GraphQL**: 5 000 poeng per time (spørringskostnad varierer med kompleksitet).

## Feilsøking

### Vanlige problemer

| Problem | Årsak | Løsning |
| --- | --- | --- |
| 401 Unauthorized | Utløpt token eller feil legitimasjon | Generer tokenet på nytt eller installer GitHub App på nytt |
| 403 Forbidden | Utilstrekkelige tillatelser | Sjekk tokenets scopes eller App-tillatelser |
| 404 Not Found | Privat repo uten tilgang | Gi repository-tilgang til token eller App |
| Hastighetsgrense overskredet | For mange API-kall | Aktiver betingede forespørsler og reduser synkroniseringsfrekvens |
| Webhooks ikke mottatt | Feil URL eller brannmur | Verifiser at webhook-URL er offentlig tilgjengelig |

### Feilsøkingsmodus

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

### Test tilkobling

```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)
```

## Beste praksis

1. **Bruk GitHub Apps fremfor PAT-er** - GitHub Apps gir granulære tillatelser og selvoppdaterende tokens
2. **Aktiver webhook-hemmeligheter** - Verifiser alltid webhook-signaturer med HMAC-SHA256
3. **Bruk betingede forespørsler** - Utnytt ETags for å unngå å kaste bort hastighetsgrense-kvote
4. **Paginér store responser** - GitHub returnerer maks 100 elementer per side; iterer med `Link`-headere
5. **Synkroniser i lavaktivitetsperioder** - Planlegg fulle synkroniseringer utenfor utviklingsarbeidstid
6. **Overvåk hastighetsgrense-headere** - Sjekk `X-RateLimit-Remaining` for å proaktivt strupe

## Sikkerhet

- **GitHub App-autentisering** - RSA-nøkkelbasert JWT med kortlivede installation-tokens
- **Webhook-signaturer** - HMAC-SHA256-signaturverifisering på alle webhook-payloader
- **Fine-Grained Tokens** - Begrenset til spesifikke repositorier og tillatelser
- **Kun HTTPS** - All API-kommunikasjon kryptert via TLS 1.2+
- **Kryptert lagring** - Private nøkler og tokens kryptert i ro i Tajo
- **Token-utløp** - Fine-grained tokens utløper automatisk; sett opp rotasjonsvarsler

## Relaterte ressurser

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