Forge'dan ne istersiniz?
(lobste.rs)- Jujutsu ve diğer sürüm kontrol sistemi kullanıcıları için, büyük forge'ların yeterince ele almadığı saf Git iş akışları tartışma konusu
- Temel ilgi alanı SPA/JS ya da sunucu tarafında render edilen HTML gibi uygulama yöntemleri değil; deponun sürüm kontrol işlevlerini nasıl ifade ettiği ve çalıştırdığı
- Tangled, GitHub'ın stacked PRs yaklaşımı, forgefed gibi fikirler var; ancak tasarıma dair kullanıcı görüşlerinin toplandığı bir alan bulmak zor
- stacked PR/MR ve alternatif iş birliği modelleri de buna dahil; mevcut forge'ların ötesine geçen sürüm kontrol deneyimi ana tartışma başlığı
- Etiketler, commit'ler, ağaçlar, blob'lar gibi depo nesnelerinin gösterimi forge'lar arasında büyük ölçüde benzer ve küçük biçim farklılıkları dışında neredeyse hiç tartışılmıyor
1 yorum
Lobste.rs görüşleri
Kod inceleme yorumları deponun kendisinin bir parçası değilse bunu asla kullanmam
Değerli tarihsel bağlamı e-posta listelerinde, veritabanı silolarında ya da HEAD commit hash’ine sabitlenmeyen ayrı bir katmanda saklamak, temelde GitHub ile aynı türden bir risk
Fossil bu yönde kısmen ilerliyor ama yalnızca issue’ları ele alıyor; kod inceleme ise hâlâ e-posta patch akışıyla yapılıyor: https://fossil-scm.org/home/doc/tip/www/contribute.wiki
Bu bilgi bir kez sürüm kontrol sisteminin içine girerse, üstüne güzel bir web UI, RSS feed’i ve e-posta listesi kurulabilir
İkinci özellik, yerleşik merge queue desteği. Önemsiz olmayan projelerde tekil katkıcılar
mainbranch’ine doğrudan push etmemeli; bunun yerine belirli commit’ler “entegrasyona hazır” diye işaretlenebilmeli ve bir bot önerilen değişiklikleri serileştirip CI’ı en iyi şekilde planlayarakmain’i doğrulanmış hash’lerle ilerletmeliÜçüncü özellik ise Windows, macOS vb. heterojen ortamlarda izole iş çalıştırıcısı olarak CI: https://gregoryszorc.com/blog/2021/…
Herkes hesap açıp issue oluşturabilmeli ama spam olmamalı
GitHub şu anda bunu oldukça iyi yapıyor. Ara sıra spam görüyorum ama kötüye kullanım bildirildikten sonra çok hızlı kaldırılıyor. Muhtemelen arka tarafta bir sürü otomasyon ve gerçek insanlardan oluşan bir sınıflandırma ekibi var
Hobi projeleri için “forge” olarak Fossil’e bakıyorum; çok fazla dış katkıcı beklemiyorum, o yüzden kod inceleme olsa iyi olur düzeyinde
Bunun yerine senkronize edilebilen, gönderilebilen ve istenildiği gibi sorgulanabilen bir SQLite DB isterim
git-priçin bir sonraki büyük refaktörde yapmak istediğim şey, SQLite DB’yi bir SSH komutuyla açığa çıkarmak:ssh pr.pico.sh sqlSQLite ihtiyaç duyulan her yerde var ve genel amaçlı, ama forge’un bir parçası olarak ele alındığında eksik olan şey kullanılabilirlik
Ama geçmiş yeniden yazıldığında, örneğin force push ya da squash merge durumlarında, yorumların sonradan nereye “sabitleneceğini” ve kullanıcıların onları nasıl bulacağını merak ediyorum
GitHub’da dayanak noktası Pull Request olduğu için, içindeki commit’ler değişse bile tartışmayı görebiliyorsunuz
Bu sistemin de depoda saklanan ayrı bir PR kavramı mı olacağını, yoksa daha sıkı entegre bir şey mi beklendiğini merak ediyorum
Yine de
jj’yi iyi kullandığım için pratikte büyük bir sorun olmayabilirHem Gerrit hem e-posta kullanan biri olarak, pull request modelinin bu kadar baskın olmasına üzülüyorum
Özellikle bakımcıların, stil düzeyindeki küçük şeyleri yorum olarak yazmak yerine doğrudan düzeltebileceği durumlarda bu daha da belirgin; katkıcı da muhtemelen bu tür stil ayrıntılarını çok önemsemiyor
Ama daha da üzücü olan, son zamanlarda giderek daha çok kullandığım Darcs ya da Pijul için e-posta dışı hiçbir iş akışının olmaması
E-posta yerine XMPP tabanlı bir şey isterdim. Üzerinde çalışılan patch’ler için gerçek zamanlı dağıtık işbirliği sağlayabilir ve patch set başına bir MUC olabilir
MUC’ler sesli sohbet gibi açılabilir; roller, ekler, tepkiler, arama, MAM, moderasyon ve tamamlandıktan sonra tombstoning gibi özellikler de zaten XEP’lerde tanımlı
Abonelik için PubSub kullanılabilir, CI iletimi için de değerlendirilebilir
Pratik olması için özel bir istemci gerekebilir ama birçok özellik herhangi bir istemcide de çalışabilir
Gerçekçi olmak gerekirse, belki de bu daha çok eski federatif teknolojilerin beklenmedik biçimde genişlemesine son zamanlarda ilgi duymamla ilgili
Kod inceleme ve onay darboğaz
Kod gönderen kişiyle iletişimde gecikme çok yüksek; bazen haftalar ya da aylar sürüyor ve güvenilir de değil. PR açıp ortadan kaybolan insanlar oluyor
GitHub’ın karşılıklı gidip gelmeye dayalı modeli burada tamamen çöküyor
İnceleme sırasında kodu doğrudan düzenleyip
git-absorbgibi commit’leri amend edebilmek isterdim. Yazım hatası gibi küçük sorunlar için göndericiyle ileri geri yapmak zaman kaybı; GitHub’ın Edit Suggestion hack’i de hantal ve geçmişi kirletiyorAynı kodu tekrar incelemek istemiyorum. Sorun yalnızca bir fonksiyonda ya da tek bir commit’teyse geri kalanı önceden onaylayabilmeli ve gönderici force push ile düzeltince yeniden bakmak zorunda kalmamalıyım
Bir PR’ın sadece bir kısmını merge edebilmek ya da PR’ı kapatmadan içinden commit çıkarabilmek isterdim. Bazen özelliğin kendisini istemezsiniz ama altyapı çalışmasını korumaya değer bulursunuz; bazen de gereksiz “temizlik” ya da formatting araya girer
Asıl gönderici yanıt vermediğinde, başkalarının PR üzerinde birlikte çalışıp cilalayıp sorunları çözebilmesi gerekir. GitHub modelinde teorik olarak mümkün ama pratikte başka bir PR için PR açma gibi gizli bir numaraya dönüşüyor; o kod ve bildirimler de hedef projede görünmüyor. İnsanlar fork edip düzeltme PR’ı açınca yalnızca kafa karışıklığı ve merge conflict çıkıyor
Çoğu zaman gönderilen kod genel olarak yeterince iyi ama küçük iyileştirmeler istiyorum. Gönderen açısından PR, tüm son rötuşlar tamamlanana kadar rehin kalmış gibi hissettiriyor; bakımcı açısından ise hemen merge edip sonra kişinin ortadan kaybolması ve sonraki iyileştirmelerin hiç yapılamaması riski var. Sonradan temizleme zorunluluğuyla geçici merge yapmanın bir yolu olsa güzel olurdu. Örneğin staging branch’ine merge edilir ama FIXME çözülene kadar stable branch’e cherry-pick edilmez
Popüler açık kaynak projelerde, projeyi ileri taşıyacak kod inceleme ve onayı yapabilen tek bir kişi varken katkı yapmak ve birbirine yardım etmek isteyen 500 kişi olabiliyor. GitHub modeli bu fazla katkıcı kapasitesinden hiç yararlanamıyor. İşbirliğini kolaylaştırmak yerine bunu kriz, kaos ve öfkeli grup baskısına çeviriyor. Tek bir bakımcıya takılmadan başkalarının deney yapabilmesi ve projeyi ilerletebilmesi için fork yönetimi ile fork’lar arası kod kopyalamayı daha iyi desteklemeli; bakımcı da farklı fork’lardaki popüler ve çalıştığı kanıtlanmış değişiklikleri kolayca seçebilmeli
Organizasyonlarda bu varsayılan gibi hatırlıyorum ama her hâlükârda bu durumda force push ile doğrudan temiz düzeltme yapabilirsiniz
Gidip gelmeye değmeyecek küçük değişikliklerde bunu hep yapıyorum
Genelde aylar hatta yıllarla ölçülüyor gibi geliyor
Bazen bakımcı benim; itiraf etmeliyim ki ben de her zaman bundan hızlı değilim
Tanıma git, imza ya da dokümantasyon yorumlarını gösteren hover açılır pencereleri gibi özellikler istiyorum
Branch’i checkout edip istediğiniz editörde inceleyince bu mümkün ama dediğim gibi inceleme darboğaz
Birden fazla PR incelerken her seferinde branch’ler arasında gidip gelmenin ek yükü çok fazla
Tek kullanıcılı, ya da en azından tek kullanıcılı bir moda ihtiyaç var
Neden https://code.chrismorgan.example/chrismorgan/repository-name gibi bir URL’ye katlanayım? https://code.chrismorgan.example/repository-name yeterliyken
Bunu ciddiyetle söylüyorum ve https://github.com/go-gitea/gitea/issues/11028 bağlantısına bakarsanız bunu isteyen epey kişi olduğu açık
Fediverse hesabım olmamasının üç ana nedeninden biri de adreslerin korkunç olması
Birincil e-posta adresi gibi @me@chrismorgan.info kullansam bazı insanlara sadece “@me” gibi görünebilir; @chrismorgan@chrismorgan.info ise bakması bile rahatsız edici
Bu konuda ATProto çok iyi iş çıkardı. Alan adı bir handle olarak harika; birden çok kullanıcı gerekirse alt alan adları yeterli
Paylaşımlı bir forge’da da alt alan adları kullanılarak mantıksal olarak tek kullanıcılı gibi hissettirilebilir. github.com/chris-morgan yerine chris-morgan.github.com düşünmek ilginç olabilir
Estetik önemlidir
Tek kullanıcılı tarafa yönelmenin daha büyük sonuçları da var. Mastodon gibi bir şeyi tek kullanıcı için küçültseniz bile hâlâ ağır kalıyor; ama baştan tek kullanıcı için tasarlanmış Fediverse projeleri bu kullanım için daha uygun
Sunucumu kendim işletmek ama yerel kullanıcı olarak sadece kendimin olması istiyorum; ileride başka kullanıcı olabilir diye taviz vermek istemiyorum
Bu aynı zamanda forge’ların kullandığı
gitgibi genel bir kullanıcı adı yerine, normal SSH’ta olduğu gibichriskullanıcı adıyla push etmek istemem anlamına da geliyorAlışılagelmiş anlamda bir forge olacaksa federasyon elbette gerekli. Ama herkesin “ev sunucusu”nda yerel kullanıcı olarak yalnızca bir kişi olsa güzel olurdu
Kendi adınıza ait bir domain kullanıyorsanız orada da benzer bir sorun olmuyor mu?
Bu konuda Nesbitt’s article hoşuma gitti
Özellikle downstream ile daha iyi iletişim kısmı çok iyiydi
Seçtiğim editörde yerel kod inceleme yapabilmeliyim
Değiştirilemeyen fontlara ve berbat sözdizimi renklendirmesine sahip hantal web arayüzlerine zorla kapatılmak istemiyorum
Şu anda Neovim için yazılmış özel araçlarla yan yana diff görüntüsünü okunur hâle getiriyor ve
git prkomutuyla pull request’leri checkout ettiğim bir iş akışı kullanıyorumAma inceleme yorumu bırakmak gibi biraz daha fazlasını istediğim anda, beş yıl sonra bile bakımının sürmesi pek olası olmayan birinin CLI’ına ya da GitHub API’siyle konuşan araçlara bağımlı kalıyorum
Daha doğrusu sadece yerelde “çalıştırılabilen” araçlar değil, editörlerle vb. yerelde bütünleşen local-first araçlara daha çok ihtiyaç var
Bunun birinci sınıf özellik hâline gelmesinin zor olmasının nedeni gereken emeğin büyük olması. Tek bir web arayüzü kullanıcıları ona mecbur bırakarak tüm platformlar ve editör ortamlarında “çalışır”; ama daha sıkı entegrasyon demek, N tane editör ve ortam varsa N tane entegrasyon gerekir demek
CI için de benzer şekilde, commit’i bir branch’e push edip 15 dakika sıra beklemek yerine Linux, FreeBSD ve macOS’ta testleri kolayca çalıştırmak istiyorum
run-remotely some-command --on freebsd,linux,macgibi bir şey yeterliTemelde local-first ve merkezi olmayan bir CI sistemi olmalı; ama aynı zamanda merge öncesi tüm kodun aynı “onaylı” sistemden geçtiğini garanti eden tek gerçek kaynağı olarak merkezi bir sistemi de desteklemeli
Bu, basit bir
ssh user@host command ...işini aşar. Çünkü kaynak kodu kopyalamayı, cache’lemeyi, gerekli bağımlılıkları kurmayı vb. kapsayıp her seferinde aynı güvenilir durumu elde etmek gerekirAma bunu forge özelliği olarak görmüyorum. Belirli bir forge olmadan da kullanılabilen ve her forge tarafından çağrılabilen bir iş çalıştırıcı aracı olarak sunulmalı
Biraz “driver tabanlı” olması gerektiğini düşünüyorum. Aynı işi tamamen yerelde çalıştırabilir ya da bir uzak sisteme gönderip orada başlatabilirsiniz. O iş bir sanal makine, bir container ya da doğrudan çalıştırma olabilir
Git dışı sürüm kontrol sistemlerini de desteklemeli
Issue’ları, wiki’leri vb. uygun formatlarda içe ve dışa aktarabilmeli ki insanlar belirli bir sisteme kilitlenmesin
Self-hosting de kolay olmalı
Gerçekte önemli olan bazı alt kümeler vardır muhtemelen
Kardeş yorumdaki Heptapod Mercurial için; sourcehut da öyle
Fossil’in kendi forge’u var; SourceForge’un Apache sürümü olan allura ise Subversion sunuyor
Keşke CI katmanında Bazel benzeri bir şey sunan bir forge olsa
Kastettiğim “CI’da Bazel çalıştırabilmek” değil; insanların bağımlılıkları tanımlı, iyi test ve build koleksiyonları yazmasını doğal olarak teşvik eden ve böylece CI süresini sebepsiz yere yakmayan bir yaklaşım
Bununla bağlantılı olarak, “bir proje = bir repo” modelinin pek çok probleme yol açtığını düşünüyorum
Buna daha iyi monorepo desteği de diyebilirsiniz, ama özünde CI ve issue gibi şeylerin kapsamı “bu dizinin kökü”nden daha geniş olabilmeli
Pek çok proje forge ya da CI nedenleriyle depoları parçalıyor ve o durumda çalışmak keyifli değil
İnceleyen biri olarak satır içi patch bölme de istiyorum
Yani iyi bulduğum kısımları seçip yalnızca onları onaylayabilmeli ve memnun olduğum parçaları entegre edebilmeliyim
Stack’lenmiş PR’ların hâlâ fazla ağır bir kavram olduğunu düşünüyorum
Birisi “4 dosyayı değiştirmek istiyorum ve bunu tek bir PR olarak görüyorum” dediğinde, inceleyen kişi “tamam, bu 2 dosya iyi” diyebilmeli ve bu değişiklik setini PR’ın ayrı bir parçasına çevirebilmeli ya da hatta sadece o parçayı ayrı bir commit olarak merge edebilmeli
Mevcut stacked PR sistemleri de sonuçta PR’ı atomik bir birim olarak ele alıyor. Çoğu sistemde PR bana fazla ağır geliyor
Gerekçeleri “bu dosyanın bir alt kümesi, derlenip derlenmeyeceğini bilemezsiniz” idi
Bu görüşe hiç katılmıyorum ama web görünümünde böyle bir şey yapılacaksa epey dikkatli olunması gerekir; bu yorum da bana onu hatırlattı
Tabii yukarıdaki yorumda dendiği gibi depo sahibiyseniz branch’e tercih ettiğiniz sürümü force push edebileceğiniz konusunu bir kenara bırakırsak
Eforsuz CI/CD kurulumu gerekli
Sadece
make build,make test,make uploadolsun yeterGeri kalanı makefile’da kalsın; oradan daha iyi bir build sistemine geçilebilir
Fikirden yayımlanmış çalışır çıktıya iki dakikadan kısa sürede gitmek istiyorum
Çoğu CI/CD sisteminin yaptığı gibi iyi bilinen bir konumdaki yapılandırma dosyası yerine, iyi bilinen bir dizinde iyi bilinen isimlere sahip üç shell script yeterli
Bonus olarak Windows build gerekiyorsa bunlar
.batdosyası da olabilirİşletim sistemine göre değişebilir ve bunu makefile’ın içine koymak istemeyebilirsiniz
Güzel yanı, tüm işlerin zmx altında kendi pty’lerinde çalışması
Başarısız bir işe attach olup yukarı ok ve Enter ile yeniden çalıştırabiliyorsunuz
Nitelikli verinin yayımlanmasını sağlayacak korumaları olan güvenlik tavsiyeleri isterim
Tüm projelerin anlamlı veri yayımlayabilmesi için commit merkezli bir ekosistem gerekli; ayrıca isteyen projelerin doğrudan CVE yayımlayabilmesi için entegrasyon da olmalı