API

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İzinNe işe yarar
GET /api/github/statusgithub:readKuruluş için GitHub bağlantı durumu.
GET /api/github/homegithub:readTek bir çağrıda bağlantı durumu, hesaplar ve repolar.
GET /api/github/local-statusgithub:readHost'un gh CLI yetkilendirmesinin mevcut olup olmadığı (yalnızca kendi kendine barındırılan).
GET /api/github/connect/pollgithub:readCihaz akışı login durumunu sorgula (yalnızca kendi kendine barındırılan).
POST /api/github/connectgithub:writeBağlantı akışını başlat veya ilerlet.
GET /api/github/connect/redirectpublicGitHub OAuth callback — tarayıcı buraya yönlenir, henüz oturum yok.
POST /api/github/disconnectgithub:adminBir kaynağı veya tümünü bağlantıdan ayır.
GET /api/github/reposgithub:listBağlı hesabın repolarını listele (isteğe bağlı olarak ?owner=).
POST /api/github/reposgithub:writeBir repository oluştur.
GET /api/github/orgs/:org/reposgithub:listBir kuruluş / hesap içindeki repoları listele.
GET /api/github/repos/:owner/:repogithub:readBir repository'nin metadata'sını al.
DELETE /api/github/repos/:owner/:repogithub:adminBir repository'yi sil.
GET /api/github/repos/:owner/:repo/branchesgithub:listBir repository'nin dallarını listele.
GET /api/github/repos/:owner/:repo/clone-tokengithub:readKısa ömürlü bir clone token'ı + git clone komutu oluştur.
GET /api/github/repos/:owner/:repo/filesgithub:listBir yoldaki dosya/dizinleri listele (sorgu: path, branch).
GET /api/github/repos/:owner/:repo/filegithub:readTek bir dosyanın içeriğini oku (sorgu: file, branch).
GET /api/github/repos/:owner/:repo/webhooksgithub:listBir repo'nun webhook'larını listele.
POST /api/github/repos/:owner/:repo/webhooksgithub:writeAlaf Server push webhook'unu kaydet (veya yeniden kullan).
DELETE /api/github/repos/:owner/:repo/webhooksgithub:adminBir 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/home

Bağ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/disconnect

Body (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/repos

Prop

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=true

Dosya taraması doğrudan GitHub'dan okur:

  • GET /api/github/repos/:owner/:repo/files — dizin listeleme. Sorgu: path (varsayılan repo kökü) ve branch.
  • GET /api/github/repos/:owner/:repo/file — tek bir dosyanın içeriği. Sorgu: file (varsayılan package.json) ve branch. .json dosyaları 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/webhooks

Prop

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.

On this page