2 puan yazan GN⁺ 1 일 전 | 1 yorum | WhatsApp'ta paylaş
  • GitRoot, tek bir ikili dosyayla depoları ve erişim izinlerini yöneten; issue, pano, branch birleştirme ve web arayüzünü bağımsız eklentiler olarak birleştiren küçük bir Git forge'udur
  • Yalnızca kodu değil, issue'leri, merge request'leri ve panoları da kapsayacak şekilde tüm verileri Git içinde normal dosyalar olarak saklar; ayrı bir veritabanına veya gizli blob'lara dayanmaz
  • .gitroot/users.yml ve branch bazlı yazma izinleri ile değişiklikleri kontrol eder; deponun mevcut durumunu temsil eden varsayılan branch'e yalnızca izinli kullanıcılar push yapabilir
  • Şu anda alfa sürümünde; depo, kullanıcı, eklenti, SSH Git komutları ve HTTP üzerinden görüntülemeyi destekliyor, ancak üretim kullanımı için uygun değil
  • 1.0 öncesinde güncellemeler, dosya düzeyinde izinler, HTTP Git komutları, gruplar ve alt gruplar ile eklenti API'sinin kararlı hale getirilmesi planlanıyor; şu an katkı vermek için Git ve grafter eklentisinin akışını anlamak gerekiyor

Yalnızca gerekli özellikleri birleştiren küçük bir Git forge

  • GitRoot, tek bir ikili dosyayla çalışan küçük bir Git forge olup temel işlevlerini depo oluşturma ve depo bazlı erişim izni yönetimiyle sınırlar
  • Geri kalan işlevler, birbirinden bağımsız olarak kurulabilen eklentiler tarafından sağlanır
    • Issue, roadmap, sprint ve milestone oluşturma
    • Öğeleri pano biçiminde gösterme
    • GitRoot'un graft dediği branch inceleme ve birleştirme
    • Depo verilerini ve çeşitli işlevleri web arayüzü üzerinden sunma
  • Eklentiler tamamen ayrık olduğu için web arayüzü olmadan yalnızca pano kullanılabilir; ayrıca proje için gereken işlevler doğrudan eklenti olarak geliştirilebilir

Projeye göre forge'u değiştirmeye yönelik tasarım

  • Her projenin ihtiyaç duyduğu çalışma biçiminin farklı olduğu varsayımıyla, her projenin kendi forge'unu değiştirme özgürlüğüne sahip olması için tasarlanmıştır
  • Geliştiricinin istediği ortam şudur
    • Kodu, issue'leri, pull/merge request'leri ve panoları tek bir depoda saklamak
    • Açılış sayfası, çeviri, bilet sistemi, forum gibi projenin tanıtımı ve işletimi için gerekli işlevleri sağlamak
    • Migration script'leri olmadan ve veri ya da katkıda bulunan bilgisi kaybı yaşamadan başka bir sunucu forge'una taşınabilmek
  • Buna karşılık aşağıdaki karmaşıklıklardan kaçınmayı hedefler
    • Pull/merge request veya issue yönetmek için tarayıcı açmayı zorunlu kılan yaklaşım
    • Projeyle ilk kez karşılaşan kişilere önce dosya ve dizin listesini gösteren yapı
    • Forge'un sprint, milestone, epic ve user story'nin anlamını ve iş akışını belirlemesi
    • Tek bir kullanıcı iznini ayarlamak için birden çok menüden geçmeyi gerektiren yapı

Kurulum ve işletimde özerklik

  • Yöneticilerin kolayca kurup bakım yapabilmesi için bağımlılığı ve veritabanı olmayan bir dağıtım hedeflenir
  • Yönetici, kullanıcı bazında izin verilen işlemleri ayarlayabilmeli; kullanıcılar ise e-posta veya sohbet olmadan proje ve özellik oluşturma/erişim taleplerini kendileri yapabilmelidir
  • Amaç, yükseltme yükünü azaltırken proje ve kullanıcı verilerini üçüncü taraflara vermemek ve işletim politikasını aniden değiştirebilecek büyük sağlayıcılara bağımlı olmamaktır
  • Henüz tamamlanmamış bir proje olarak dış katkı kabul etmektedir

Normal dosyalar ve branch'lerle yönetilen izinler

  • Veritabanı veya Git ağacının içindeki gizli blob'lar yerine, kodun yanında bulunan normal dosyalarda tüm verileri saklar
  • Her deponun .gitroot/users.yml dosyası, kullanıcı bazında yazılabilecek konumları belirtir; erişim denetimi esas olarak branch kısıtlamaları etrafında çalışır
    • Başlangıçta yalnızca sahip, varsayılan branch'e erişebilir
    • Yetkisi olmayan bir kullanıcı varsayılan branch'e push yaparsa GitRoot değişikliği reddeder
    • Herkes yeni bir branch oluşturabilir ve branch'i oluşturan kullanıcı o branch için yazma izni alır; diğer kullanıcılar ise değiştiremez
    • .gitroot/users.yml dosyası değiştirilir ya da kullanıcının kendisini eklediği branch birleştirilirse, ilgili kullanıcı da varsayılan branch'e push yapabilir
  • Herkes dosyaları okuyabilir ve bunları yerelde ya da yeni bir branch'te değiştirebilir; ancak deponun mevcut durumunu temsil eden varsayılan branch'e değişiklik yansıtmak için sahibin birleştirmesi gerekir
  • Forge'un kendi ayarları da kök depoda yönetilir
    • Kök deponun varsayılan branch'indeki .gitroot/repositories.yml dosyasına değişiklik eklenirse veya bu değişiklik birleştirilirse depo oluşturulur
    • Ayrıntılı çalışma biçimi için belgelere bakılabilir

Alfa sürümünde desteklenen özellikler

  • Şu anda alfa sürümünde olduğu için denenebilir, ancak üretimde kullanılmamalıdır
  • Destek kapsamı şöyledir
    • Depo oluşturma ve silme
    • SSH üzerinden Git komutlarını işleme
    • Depo ve branch düzeyinde kullanıcı bazlı yazma konumu yönetimi
    • Eklenti kurma ve depo bazında etkinleştirme
    • Kurulum sırasında çalışma ağacında eklenti çalıştırma
    • Kurulumdan sonra her commit'te diff üzerinde eklenti çalıştırma
    • HTTP üzerinden depo görüntüleme

1.0'a kadar geliştirme planı

  • 1.0 sürümünden önce aşağıdaki işlevlerin uygulanması planlanıyor
    • GitRoot ve eklenti güncellemeleri
    • Dosya düzeyinde kullanıcı izinleri yönetimi
    • HTTP üzerinden Git komutlarını işleme
    • Gruplar ve alt gruplar kullanarak depo yönetimi
    • Eklenti API'sini kararlı hale getirme

Self-hosting ve katkı süreci

  • GitRoot web sitesi, GitRoot kodunun kendisini barındıran bir GitRoot instance'ıdır ve yalnızca GitRoot projesi için işletilir
  • Başka projelerde denemek için kurulum ve kullanım belgeleri izlenmelidir
  • GitRoot'un kendisi de bir GitRoot deposu olduğundan aynı şekilde katkı verilebilir; süreç katkı rehberinde açıklanmıştır
  • Mevcut instance, kodun bir kısmını varsayılan branch'e entegre eden grafter eklentisini kullandığı için katkı vermeden önce bunun nasıl çalıştığını anlamak gerekir
  • Kod, issue, çeviri dahil tüm veriler Git'te saklandığından, şu anda katkı vermek için Git kullanımını bilmek gerekir
  • Gelecekte herkesin tarayıcıda doğrudan git commit ve git push çalıştırarak katılabilmesi hedeflenmektedir

1 yorum

 
GN⁺ 1 일 전
Lobste.rs görüşleri
  • GitHub, yalnızca en büyük Git deposu değil, aynı zamanda en etkili depoydu; Forgejo ve GitLab’in tasarımında da bunun izleri hissediliyor. GitHub’un gerilemesiyle birlikte mevcut modelden uzaklaşan çeşitli depoların ortaya çıkması için yenilik alanı daha büyük görünüyor
    • Gitea geçmişte GitHub frontend’ini neredeyse 1:1 kopyaladı ve Forgejo da Gitea’dan fork edilince bu biçimi olduğu gibi devraldı
  • GitRoot’u yapan kişiyim; merak ettiğiniz bir şey varsa rahatça sorabilirsiniz
    • Üç şey merak ediyorum. CSS’nin küçültülmüş halde commit edilmesinin nedeni neydi, bunu merak ediyorum: https://gitroot.dev/worktree/app/…
      <pre> etiketinin genişliğinin 720px ile sınırlanmasının nedeni body içindeki display:grid gibi görünüyor; bunu kaldırınca beklendiği gibi genişliyor. Ayrıca URL’de belirli bir commit anına ait bilgi olmadığı için bağlantıyı gönderenle alan kişinin aynı ekranı görmesi zor oluyor. Bunun kişisel ihtiyaçlar için bir proje olduğunu anlıyorum; sadece değerlendirilebilecek bir nokta olarak iletmek istedim
  • @manland, LLM ile üretilen katkıları kabul etme ya da yasaklama konusunda bir politika veya rehberiniz olup olmadığını merak ediyorum
    • Şu anda ayrı bir politika yok. Tek seferlik iki katkıcı dışında kodun %99,999’unu kendim yazdım
      Kişisel olarak kodlamada LLM kullanmıyorum ve buna karşıyım, ama LLM kullanılmış olsa bile yama yeterince küçükse reddedip reddetmeyeceğimden emin değilim
      İngilizce ana dilim olmadığı için GitRoot’u anlatmakta zorlanıyorum; bu yüzden dış iletişimde LLM izleri var. Daha önce de https://gts.gitroot.dev/@forge/statuses/01KFNWDKSZBEHTC16N5G02HJZ6 ve https://gts.gitroot.dev/@forge/statuses/01KTP30NTY9FK91Q9B5Z9B4M52 adreslerinde yardım istedim ama kimse gelmedi
      LLM kullanmak zorunda olmak canımı yakıyor, ama hiçbir şey yapmamaktansa asgari düzeyde kullanmaya karar verdim. İleride bir topluluk oluşursa tamamen dışlamak istiyorum; ondan önce de ekonomik nedenlerle doğal olarak ortadan kaybolabileceğini düşünüyorum. Felsefe, güvenlik ve gelecek hakkında yazmam gereken pek çok metin yapılacaklar listemde var, ama sonuçta LLM cümleleri düzeltecek, yazım hatalarını giderecek ve çeviri yapacak diye düşündüğüm için yazmaya başlamakta tereddüt ediyorum
  • Go eklentilerini WASM’a derlemek için TinyGo kullanılmış olmasını beğendim