1 puan yazan GN⁺ 3 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • Son 6 ayda crates.io, yayımlanan paketleri doğrudan incelemeye yarayan bir kaynak kod görüntüleyici ve GitHub’dan bağımsız bir hesap sistemi getirdi; güvenlik ve standart kitaplık alternatifleriyle ilgili yönlendirmeleri güçlendirdi
  • Yeni Code sekmesi dosya arama, sözdizimi vurgulama ve paylaşılabilir satır seçimini destekliyor; CDN’deki ZIP ve JSON manifestleri ile HTTP aralık istekleri sayesinde API sunucusuna yük bindirmeden yalnızca gerekli dosyaları getiriyor
  • RFC #3946 doğrultusunda crates.io’ya özgü kullanıcı adları uygulanmaya başlandı; kullanıcı adı değiştirme ve güvenlik incelemesinin ardından gelecekte GitHub dışındaki kimlik doğrulama sağlayıcılarının desteklenmesi planlanıyor
  • Ön yüz tamamen Ember.js’ten Svelte’e taşındı; arama, ters bağımlılık sorgulama, CDN önbellekleme ve Git indeks işleme de performans ve kararlılığı artıracak şekilde iyileştirildi
  • RustSec’in bakım durdurma uyarıları ve std::sync::LazyLock gibi standart kitaplıkta yer alan alternatif API’ler paket sayfalarında gösterilerek bağımlılık denetimleri ve gereksiz bağımlılıkların kaldırılması destekleniyor

Yayımlanmış paketleri incelemek için kaynak kod görüntüleyici

  • Paket sayfasındaki yeni Code sekmesi üzerinden yayımlanmış her sürümün dosyaları crates.io içinde gezilebiliyor
    • Bağlı depoyu değil, cargo bir bağımlılık eklediğinde gerçekten indirdiği dosyaları gösteriyor
    • cargo tarafından oluşturulan normalleştirilmiş Cargo.toml gibi depoda bulunmayan dosyalar da görülebildiği için bağımlılık denetimi kolaylaşıyor
  • Görüntüleyici dosya ağacında arama, sözdizimi vurgulama ve GitHub tarzı satır seçimini destekliyor
    • Satır numarasına tıklandığında veya sürüklendiğinde #L10-L20 biçiminde paylaşılabilir bir URL oluşturuluyor
  • Sunucu, yayımlanmış tüm sürümler için ZIP dosyaları ve dosya yapısını açıklayan bir JSON manifesti oluşturuyor
    • cargonun kullandığı .crate dosyası rastgele erişimi desteklemeyen gzip sıkıştırmalı bir tarball olduğundan, arka plan işinde gezilebilir bir ZIP olarak yeniden paketleniyor
    • ZIP ve manifest statik CDN üzerinden sunuluyor
    • Ön yüz önce manifesti alıyor, ardından her dosyayı yalnızca gerektiğinde HTTP aralık istekleriyle getiriyor
    • Kaynak kod gezintisi crates.io API sunucusuna pratikte ek yük getirmiyor; mevcut sürümler de toplu işlenerek eski sürümlere kadar destek sağlanıyor
  • Kod görüntüleyicinin render kitaplığı aslında bir fark render’ı; aynı altyapıyı kullanan sürümler arası karşılaştırma görüntüleyicisi de geliştiriliyor
    • Tamamlandığında crates.io’da iki yayımlanmış sürüm arasındaki kesin değişiklikler incelenebilecek

GitHub’dan bağımsızlaşan crates.io hesapları

  • crates.io ekibi mayıs sonunda RFC #3946’yı onayladı
  • Önceden GitHub girişi ile crates.io kimliği sıkı biçimde bağlantılıydı ve kullanıcı adı da GitHub hesabına göre belirleniyordu; RFC ise bağlı hesaptan bağımsız crates.io’ya özgü kullanıcı adları getiriyor
  • Bu özgün kullanıcı adı, gelecekte GitHub dışındaki kimlik doğrulama sağlayıcıları üzerinden giriş desteği için bir ön koşul
  • Uygulama başlamış olsa da kullanıcıya görünen başlıca eksik özellik olarak kullanıcı adı değiştirme kalıyor
    • Bu tamamlandıktan sonra diğer kimlik doğrulama sağlayıcılarıyla girişe ilişkin ek RFC ve uygulama çalışmaları yürütülecek
    • Kimlik doğrulama ve hesap güvenliğini doğrudan etkilediği için küçük, dikkatle incelenmiş adımlar halinde yavaşça dağıtılıyor

Güvenlik duyuruları ve standart kitaplık alternatifi yönlendirmeleri

  • Mevcut Security sekmesi RustSec veritabanındaki güvenlik duyurularını gösteriyor; artık RustSec’in bakımı durduruldu olarak işaretlediği paketlerde sayfanın üst kısmında bir uyarı bandı da görünüyor
    • Banttan, ayrıntılar ve olası alternatifleri içeren ilgili duyuruya gidilebiliyor
  • İşlevi standart kitaplığa alınmış paketlerde “You might not need this dependency” bandı gösteriliyor
    • Örneğin lazy_static, Rust 1.80’den itibaren std::sync::LazyLock ile değiştirilebilir
    • Bağımlılık listesinde değiştirilmiş paketlerin yanında aynı yönlendirmeyi sunan küçük bir ampul simgesi yer alıyor
  • İlgili veriler yeni rust-lang/std-replacement-data deposunda yönetiliyor
    • Yalnızca standart kitaplık alternatif kayıtlarına izin veriliyor
    • Her kayıt, kararlı hale gelmiş std, core, alloc API’sine ve ilgili Rust sürümüne atıf yapmak zorunda
    • Kayıt eklenmeden önce paket bakımcılarına haber veriliyor ve görüş bildirmeleri için süre tanınıyor
    • Yeni kayıtlar depoya önerilebiliyor; biriken veriler başka araçlar tarafından da kullanılabiliyor

Svelte ön yüz geçişi tamamlandı

  • crates.io ön yüzünü Ember.js’ten Svelte’e taşıma denemesi başarıyla sonuçlandı
    • Yeni ön yüz, mevcut işlevlerle eşdeğer seviyeye ulaştı
    • Nisan ayındaki açık test sürecinin ardından mayıs başında varsayılan ön yüz olarak devreye alındı
    • Ember.js uygulaması depodan kaldırıldı
  • Mevcut tasarım ve işlevlerin aynen taşındığı bire bir geçiş olduğundan kullanıcıların değişikliği hissetmemesi hedeflendi
  • Ekip ve katkı verenler, modern bir framework kullanırken yeni katkıcılar için giriş bariyerini düşürüp yinelemeli geliştirme hızını artırabilir hale geldi; kaynak kod görüntüleyici bunun bir örneği
  • crates.io’nun uzun yıllar kullandığı Ember.js ekibine ve geçişi destekleyen Svelte ekibine teşekkür ediliyor

Ferris hata sayfası

  • crates.io hata sayfalarındaki Ferris, gözleriyle fare imlecini takip edecek şekilde değiştirildi
  • 404 hata sayfasında da küçük bir etkileşim sunuluyor

Arama ve ters bağımlılık sorgulama performansı

  • Alakalılığa göre sıralı arama daha önce arama terimiyle eşleşen tüm paketlerin sıralamasını hesaplıyordu; kısa veya yaygın arama terimlerinde bu 1-2 saniye sürebiliyordu
    • Artık sıralama hesaplamasının kapsamı, son indirme sayısı en yüksek olan eşleşen 1.000 paketle sınırlandırılıyor
  • Ters bağımlılık uç noktası artık her istekte tüm bağımlı paket kümesini yeniden hesaplamıyor
    • Veritabanı tetikleyicileriyle senkronize edilen önceden hesaplanmış bir tablodan sonuç sunuyor
    • Maliyetli join işlemlerini sınırlı indeks taramasına dönüştürerek zaman aşımı olasılığını büyük ölçüde azaltıyor

Mimari belgesi ve Markdown render’ı

  • ARCHITECTURE.md tamamen elden geçirilerek crates.io’nun üst düzey sistemleri ve bunların birbirleriyle nasıl bağlandığı odağa alındı
    • cargo publish çalıştırıldığında gerçekleşen işlem süreci
    • Tipik paket indirmelerinin neden API sunucusundan geçmediği
    • CDN erişim günlüklerinden indirme sayılarının nasıl çıkarıldığı dahil edildi
  • README, yaygın kullanılan Markdown uzantılarından tanım listelerini render ediyor
    • Markdown render aracı comrak tanım listelerini zaten destekliyordu, ancak bu uzantı etkin değildi

CDN önbellek verimliliği iyileştirmeleri

  • Statik CDN’e yüklenen dosyalara önbellek etiketi metaverisi eklendi
    • Her dosya URL’si için ayrı geçersizleştirme isteği göndermek yerine, belirli bir paketin veya sürümün tüm önbellek dosyaları tek seferde geçersizleştirilebiliyor
  • Herkese açık API yanıtları ve ön yüz varlıklarının CDN’de önbelleğe alınmasını engelleyen genel Vary: Cookie yanıt başlığı kaldırıldı
    • Kullanıcıya özel yanıtlarda bunun yerine Cache-Control: no-store uygulanıyor
    • Bunun sonucunda CDN edge’lerinde önbellek isabet oranı iyileşti

Erişilebilirlik ve Git indeks işleme

  • Ekran okuyucu kullanıcıları için crates.io’nun erişilebilirliği iyileştirildi
    • Süsleme amaçlı ikonlar erişilebilirlik ağacından gizlendi
    • Başlık hiyerarşisi düzeltildi
    • Listelere doğru liste işaretlemesi uygulandı
    • Regresyonların fark edilmeden yansıtılmasını önlemek için ARIA snapshot testleri getirildi
    • Önümüzdeki birkaç ay boyunca erişilebilirliğin iyileştirilmeye devam edilmesi planlanıyor
  • Arka plan worker’larının yerel Git indeks kopyası bare ve shallow depoya dönüştürüldü
    • Yaklaşık 250 bin checkout dosyası ve tüm commit geçmişi diskten kaldırıldı
    • Paket yayımlama sıklığının arttığı ortamda işleme performansı iyileştirildi
  • Periyodik indeks squash işlemi, yerelde büyük Git pack oluşturmak yerine GitHub API’sini kullanıyor
    • Önceki yerel pack oluşturma yöntemi prodüksiyon worker’larında bellek yetersizliğine yol açmıştı

Geri bildirim kanalları

1 yorum

 
GN⁺ 3 시간 전
Lobste.rs görüşleri
  • crates.io hesabını GitHub'dan ayırmaya yönelik çalışmanın sürüyor olması sevindirici

    • Eskiden birçok hizmette GitHub hesabıyla giriş yapma özelliğini tercih ederdim, ama artık bana daha az cazip geliyor. Tailscale, OIDC kimlik sağlayıcılarını destekliyor; ben de Codeberg ve kendi alan adımın WebFinger'ını kullanarak giriş yapacak şekilde ayarladım
      Kendi alan adımdaki example@example.com e-postasıyla giriş yapmak için, https://example.com/.well-known/webfinger adresine subject değeri acct:example@example.com olan ve OpenID Connect issuer href değeri https://codeberg.org olan bir JSON dosyası koyuyorum
      Codeberg ayarlarında yönlendirme URI'si https://login.tailscale.com/a/oauth_response olan bir OAuth2 uygulaması oluşturup, verilen Client ID ve Client Secret değerlerini Tailscale'e girmek yeterli. Görünüşe göre crates.io da ileride benzer bir yöntem sunacak
  • Son zamanlarda crates.io'daki iyileştirmelerin bu kadar kapsamlı olduğunun farkında değildim. Normalde önce lib.rs'ye bakardım ama yakında bu alışkanlığım değişebilir; en çok hoşuma giden değişiklik ise Ferris

    • Bu iyileştirmelerin ne kadarının ajan kullanımından kaynaklandığını merak ediyorum
  • Ferris'in gözlerindeki değişim fiziksel olarak pek anlamlı değil. Siyah gözlerde görülen beyaz kısım ayna yansıması kaynaklı parlama, yani fare imleci ışık kaynağıysa bile gözlerin imleci takip ettiği şeklinde yorumlamak zor

  • Bağımlılıkları denetlerken önce ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ yolunu ~/cargosrc olarak sembolik bağlantıyla eşliyorum; böylece Cargo'nun indirdiği dosyalara kolayca erişebiliyorum
    Denetlenecek her bağımlılık için Git deposunu klonlayıp hedef sürümü checkout ediyorum, ardından izlenen dosyaları yerelde silip rust-analyzer sürecine SIGSTOP gönderiyorum. Projenin Cargo.toml dosyasına bağımlılığı ekleyip cargo fetch çalıştırdıktan sonra, indirilen $dependency-$version dizininin içeriğini klonladığım depoya kopyalayıp commitliyor ve Git geçmişi görüntüleyicisinde farkları inceliyorum
    İnceleme bittiğinde Cargo.lock içindeki bağımlılık-sürüm-hash kombinasyonunu bir betikle güvenilir bir veritabanına kaydediyorum; böylece aynı sürümü tekrar kontrol etmiyorum. Süreç karmaşık görünebilir ama büyük kısmını otomatikleştirdiğim için web arayüzünden daha verimli, ayrıca Cargo'nun komut satırında bu tür bir inceleme sürecini desteklemesi iyi olurdu. cargo-crev gibi araçlardan ziyade, incelemenin kendisini kolaylaştıran bir eklenti olup olmadığını da merak ediyorum

  • Frontend'in sadece manifest'i alıp ardından her dosyayı gerektiğinde HTTP range request ile çağırdığı uygulama burada yer alıyor ve tarayıcının yerleşik DecompressionStream özelliğini kullanıyor