GitHub API
Bir GitHub hesabı veya Uygulaması bağlayın, repoları, dalları ve dosyaları tarayın ve push webhook'larını yönetin.
GitHub API, bir Alaf Server örneğini GitHub'a — Alaf Server GitHub Uygulaması, bir OAuth hesabı veya yerel gh CLI aracılığıyla — bağlar ve ardından deploy edebileceğiniz hesapları, repoları, dalları ve dosyaları taramanızı sağlar. Ayrıca otomatik deploy işlemini yönlendiren push webhook'larını da yönetir. Dashboard'da bu, Ayarlar'daki GitHub bağlantı kartı ve deploy sihirbazındaki repo seçicidir.
Temel yol ve yetkilendirme
Tüm yollar, örneğinize göre, /api altında yer alır — örn. https://your-host/api/github/home. alaf server token create ile oluşturulmuş kişisel bir erişim token'ını bearer header olarak (Authorization: Bearer <token>) gönderin. Dashboard bunun yerine oturum çerezinizi kullanır. Tam yetkilendirme modeli için API genel bakışına ve GitHub kimlik bilgilerinin nasıl saklandığına dair Yetkilendirme bölümüne bakın.
Hem bulut hem de kendi kendine barındırılan
Bu modül her örneğe yüklenir. İki route — GET /api/github/local-status ve GET /api/github/connect/poll — yalnızca kendi kendine barındırılanlar içindir (yerel gh CLI login akışını desteklerler) ve Alaf Server Cloud üzerinde 404 döndürürler.
Endpointler
| Method & path | İzin | Ne işe yarar |
|---|---|---|
GET /api/github/status | github:read | Kuruluş için GitHub bağlantı durumu. |
GET /api/github/home | github:read | Tek bir çağrıda bağlantı durumu, hesaplar ve repolar. |
GET /api/github/local-status | github:read | Host'un gh CLI yetkilendirmesinin mevcut olup olmadığı (yalnızca kendi kendine barındırılan). |
GET /api/github/connect/poll | github:read | Cihaz akışı login durumunu sorgula (yalnızca kendi kendine barındırılan). |
POST /api/github/connect | github:write | Bağlantı akışını başlat veya ilerlet. |
GET /api/github/connect/redirect | public | GitHub OAuth callback — tarayıcı buraya yönlenir, henüz oturum yok. |
POST /api/github/disconnect | github:admin | Bir kaynağı veya tümünü bağlantıdan ayır. |
GET /api/github/repos | github:list | Bağlı hesabın repolarını listele (isteğe bağlı olarak ?owner=). |
POST /api/github/repos | github:write | Bir repository oluştur. |
GET /api/github/orgs/:org/repos | github:list | Bir kuruluş / hesap içindeki repoları listele. |
GET /api/github/repos/:owner/:repo | github:read | Bir repository'nin metadata'sını al. |
DELETE /api/github/repos/:owner/:repo | github:admin | Bir repository'yi sil. |
GET /api/github/repos/:owner/:repo/branches | github:list | Bir repository'nin dallarını listele. |
GET /api/github/repos/:owner/:repo/clone-token | github:read | Kısa ömürlü bir clone token'ı + git clone komutu oluştur. |
GET /api/github/repos/:owner/:repo/files | github:list | Bir yoldaki dosya/dizinleri listele (sorgu: path, branch). |
GET /api/github/repos/:owner/:repo/file | github:read | Tek bir dosyanın içeriğini oku (sorgu: file, branch). |
GET /api/github/repos/:owner/:repo/webhooks | github:list | Bir repo'nun webhook'larını listele. |
POST /api/github/repos/:owner/:repo/webhooks | github:write | Alaf Server push webhook'unu kaydet (veya yeniden kullan). |
DELETE /api/github/repos/:owner/:repo/webhooks | github:admin | Bir webhook'u sil. |
Bağlantı durumu
GET /api/github/home dashboard'un tek giriş noktasıdır: tek bir gidiş-dönüşte { state, accounts, repos } döndürür, üye rolünüzün görmesine izin verilen hesaplara ve repolara göre filtrelenir. GET /api/github/status daha dardır — Ayarlar kartının veri kaynağıdır — { state, accounts, installUrl, cloudUnreachable } döndürür.
curl https://your-host/api/github/home \
-H "Authorization: Bearer $ALAFSERVER_TOKEN"# CLI'ın özel bir `github` komutu yoktur; raw-request kaçış yolunu kullanın:
alaf server api /github/homeBağlan
Bağlantı akışını başlatır veya ilerletir. Yanıt kasıtlı olarak moddan bağımsızdır — frontend yalnızca flow alanına tepki verir:
{ connected: true }— zaten bağlı, yapılacak bir şey yok.{ connected: false, flow: "redirect", url }—url'yi açın (OAuth devri veya GitHub Uygulaması kurulumu).{ connected: false, flow: "device_code", userCode, verificationUri, ... }— kendi kendine barındırılan cihaz login'i.{ connected: false, flow: "terminal", command, message }—command'ı (örn.gh auth login) kendiniz çalıştırın.
POST /api/github/connectİsteğe bağlı body alanı source ("oauth" | "cli") dashboard hem "Alaf Server Uygulamasını Bağla" hem de "gh CLI Kullan" düğmelerini gösterdiğinde belirli bir yolu zorlar; sunucunun örneğin yetkilendirme moduna göre seçim yapmasına izin vermek için atlayın.
curl -X POST https://your-host/api/github/connect \
-H "Authorization: Bearer $ALAFSERVER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"source":"oauth"}'Bağlantıyı Kes
POST /api/github/disconnectBody (veya ?source=): source "oauth", "cli" veya "all"'dır (varsayılan "all"). Bu, Alaf Server'ın o kaynak için depoladığı kimlik bilgilerini siler; GitHub Uygulamasını kaldırmaz — bu yalnızca github.com'dan kaldırdığınızda gerçekleşir (Alaf Server, kaldırma webhook'una tepki verir).
alaf server api /github/disconnect -X POST -d '{"source":"cli"}'Bir repository oluştur
POST /api/github/reposProp
Type
curl -X POST https://your-host/api/github/repos \
-H "Authorization: Bearer $ALAFSERVER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"my-app","private":true,"owner":"acme"}'alaf server api /github/repos -X POST -d '{"name":"my-app","private":true}'{ data } (oluşturulan repository) ile 201 döndürür.
Repoları, dalları ve dosyaları tara
Bağlı hesap için repoları listele (?owner= bir hesaba daraltır) veya GET /api/github/orgs/:org/repos aracılığıyla adlandırılmış bir kuruluş için. Her ikisi de rolünüzün görebileceği repolara göre filtrelenmiş { data: [...] } döndürür.
# Bir sahip için repolar
alaf server api /github/repos --query owner=acme
# Bir repo için dallar
alaf server api /github/repos/acme/my-app/branches
# Bir repo, dalları satır içi olarak
alaf server api /github/repos/acme/my-app --query branches=trueDosya taraması doğrudan GitHub'dan okur:
GET /api/github/repos/:owner/:repo/files— dizin listeleme. Sorgu:path(varsayılan repo kökü) vebranch.GET /api/github/repos/:owner/:repo/file— tek bir dosyanın içeriği. Sorgu:file(varsayılanpackage.json) vebranch..jsondosyaları ayrıştırılır ve JSON olarak döndürülür.
curl "https://your-host/api/github/repos/acme/my-app/file?file=package.json&branch=main" \
-H "Authorization: Bearer $ALAFSERVER_TOKEN"Webhook'lar
POST /api/github/repos/:owner/:repo/webhooks repo üzerinde Alaf Server push webhook'unu kaydeder (veya mevcut birini yeniden kullanır) böylece push'lar otomatik deploy'u tetikler. Hiçbir request body almaz — hedef repo yoldan gelir. GET repo'nun hook'larını listeler. Birini kaldırmak için, hook id'si ile DELETE yapın:
DELETE /api/github/repos/:owner/:repo/webhooksProp
Type
alaf server api /github/repos/acme/my-app/webhooks -X DELETE -d '{"hookId":123456}'Klonlama token'ı
GET /api/github/repos/:owner/:repo/clone-token kısa ömürlü (bir saatten az) bir GitHub Uygulaması kurulum token'ı oluşturur ve { token, cloneUrl, command } — çalışmaya hazır bir git clone — döndürür. Bu, build pipeline'ının klonladığı aynı kimlik bilgisidir ve yalnızca Alaf Server GitHub Uygulaması sahibi için yüklendiğinde kullanılabilir.
Görebileceğiniz hatalar
400 — GitHub\'a bağlı değil
Kullanılabilir bir GitHub kaynağı (Uygulama kurulumu, OAuth hesabı veya gh CLI) yapılandırılmadığında repo listeleme route'ları tarafından döndürülür. Önce POST /api/github/connect ile bağlanın, ardından tekrar deneyin.
409 — kurulum token\'ı yok
clone-token için sahibine yönelik bir GitHub Uygulaması kurulumu gerekir. gh CLI veya PAT modlarında kurulum token'ı yoktur, bu nedenle bu route 409 döndürür. Klonlama token'larını kullanmak için o hesapta Alaf Server GitHub Uygulamasını yükleyin.
503 — cloud_unreachable (bulut erişilemez)
Alaf Server Cloud'a bağlı kendi kendine barındırılan bir örnekte, GitHub OAuth ve Uygulama kurulum URL'leri alafteknoloji.com üzerinden çözümlenir. SaaS erişilemezse, connect ölü bir kurulum bağlantısı yerine 503 döndürür. Ayarlar'daki ağ / bulut bağlantısını kontrol edin, ardından tekrar deneyin.
Bir repo route\'unda 404
:owner/:repo aktif GitHub kaynağına görünür değil (özel, üye rolünüze verilmemiş veya mevcut değil). Önce repo'nun GET /api/github/home içinde göründüğünü doğrulayın.