Skip to content

BRAMPP 1.6

Choose a tag to compare

@macitkaraca macitkaraca released this 12 Aug 09:39
· 61 commits to main since this release

Uygulama artık kendi güncellemesini buluyor ve açmadan önce doğruluyor. Ama yükseltmenin asıl nedeni paylaşımlar: ikinci bir BRAMPP kopyası ya da bir test koşusu canlı tünelleri öldürebiliyordu, ölmüş bir tünel ise arayüzde canlı görünmeye devam ediyordu. 1.5'in içeriği de bu pakette.

Düzeltildi

  • Birim testleri çalıştırmak — ya da yalnızca ikinci bir BRAMPP kopyasının açık olması — canlı Cloudflare tünellerini öldürüyordu. Tünellerin pid ve log dosyaları siliniyor, MCP portu çalışan kopyanın üstüne bağlanmaya çalışılıyor, Homebrew servisleri başlatılıyor ve "son çalışan servisler" listesi üzerine yazılıyordu. BRAMPP'ın tuttuğu makine düzeyindeki durum makineye aittir, bir sürece değil: ona artık yalnızca birincil kopya dokunuyor (Core/ProcessRole.swift). Konsol satırları da hangi sürecin yazdığını taşıyor — kurulu uygulama, Xcode derlemesi, test ana uygulaması ve önizlemeler aynı dosyaya eklediği için bunu görmek bu kadar zordu.
  • cloudflared'i ölmüş bir paylaşım canlı bildirilmeye devam ediyordu. Servisler satırı yeşil kalıyor, MCP list_shares aracı adresi vermeyi sürdürüyor, Cloudflare ise Error 1033 döndürüyordu. Tüneller artık zaten dönen tazeleme döngüsünde gerçekle karşılaştırılıyor.
  • İkinci bir BRAMPP kopyasını kapatmak, birincinin canlı tünellerini öldürüyordu. Kapanan süreç artık yalnızca kendi başlattığı tünelleri durduruyor.
  • "Paylaşımı durdur", site herkese açık kalırken başarı bildiriyordu. SIGKILL'e yükseltme yoktu ve bekleme, cloudflared'in 30 saniyelik kapanma payına karşı 0,4 saniyeydi.
  • Veritabanı geri yükleme, başarısız olduğunda başarılı raporluyordu. Betik if psql …; then exit 0; fi yazıp ardından rc=$? okuyordu — POSIX'te koşulu başarısız olan ve else'i bulunmayan bir if 0 ile biter, yani hata kodu hiçbir zaman görülmüyordu. Hem PostgreSQL hem MariaDB tarafında.
  • MariaDB, PostgreSQL ya da Python'u kaldırmak yalnızca "paket ve yapılandırma dosyaları silinecek" diyordu — betik ise veri dizinini siliyordu: her veritabanınızı, ya da site-packages ağacının tamamını. Onay artık somut yolları adıyla sayıyor, yapılandırmayı veriden ayırıyor, neyin gittiğini söylüyor ve servis adının yazılmasını istiyor.
  • Üretilen phpMyAdmin ve Adminer Apache yapılandırmaları apachectl configtest'te AH00671 uyarısı veriyordu: iki Alias yönergesi ters sıradaydı, bu yüzden ikincisi hiçbir zaman eşleşemiyordu.
  • Üç konsol satırı metin yerine ham çeviri anahtarını yazıyordu.

Eklendi

  • Açılışta güncelleme bildirimi — kurulu sürüm, yeni sürüm, sürüm notları kaydırılabilir bir liste olarak, ve o sürümü atlama ya da sonra hatırlatma seçeneği.
  • Ayarlar'da kendine ait bir Güncellemeler sekmesi: kanal, şimdi denetle, otomatik denetim, otomatik indirme ve bir güncelleme bulunduğunda ne yapılacağı.
  • İndirilen dosya, hiçbir şey açılmadan önce doğrulanıyor: güncelleme manifestinde yayınlanan sağlama, dosyanın gerçekten beklenen yayın varlığından geldiği (yönlendirmelerin ardından yeniden denetlenerek), kod imzası, Team Identifier'ın çalışan uygulamanınkiyle aynı olduğu ve Gatekeeper'ın noter onayı kararı. Herhangi biri geçmezse indirilen dosya siliniyor. BRAMPP kendini asla değiştirmiyor — doğrulanan disk kalıbı size veriliyor.
  • Manifestteki blockedVersions ve minimumOS alanları dikkate alınıyor, böylece sorunlu çıkan bir sürüm onu zaten çalıştıran kişileri uyarabiliyor.
  • Servisler'deki cloudflared satırında, açık bütün paylaşımları tek seferde durduran bir düğme — bunu zaten yapan menü çubuğu komutunun yanına.

Değişti

  • Güncelleme denetimi sürümü ve sağlamayı yayınlanan manifestten, sürüm notlarını ise yalnızca GitHub'dan okuyor — dosyayı sunan makine, ona kefil olan makine değil. Manifest geride kaldığında denetim GitHub'a düşüyor ve doğrulanamayacak bir indirme yerine sürüm sayfasını öneriyor.
  • Yayın betiği o manifesti kendisi yayınlıyor, gerçek sağlamayla ve yalnızca noter onayından gerçekten geçmiş bir yapı için.
  • Kullanılmayan proje çatısı algılayıcısı kaldırıldı.

Ayrıntı: Değişiklikler

Apple Silicon, macOS 14+.


In English

The state BRAMPP keeps belongs to the machine, not to a process — and until this release a second copy of the app, or a test run, would walk all over it. Also: BRAMPP now tells you when there is a new version, and verifies the download five ways before it opens.

Fixed

  • Running the unit tests — or simply having a second copy of BRAMPP open — tore down the live environment. Cloudflare tunnels were killed, their pid and log files deleted, the MCP port was bound on top of the copy already holding it, Homebrew services were started, and the "last running services" list was overwritten. The machine-wide state BRAMPP keeps belongs to the machine, not to a process; only the primary instance touches it now (Core/ProcessRole.swift). Console lines also carry which process wrote them, because the installed app, an Xcode build, the test host and previews all append to one file — that is what made this so hard to see.
  • A share kept being reported as live after its cloudflared had died. The Services row stayed green, the MCP list_shares tool still handed out the address, and Cloudflare answered Error 1033. Tunnels are now checked against reality on the refresh loop that was already running.
  • Quitting a second copy of BRAMPP killed the first copy's live tunnels. A quitting process now only stops the tunnels it started itself.
  • "Stop sharing" reported success while the site stayed public. There was no SIGKILL escalation and the wait was 0.4 s against cloudflared's 30-second grace period.
  • Restoring a database reported success when it had failed. The script ran if psql …; then exit 0; fi and read rc=$? afterwards — in POSIX an if whose condition fails and which has no else exits 0, so the failure code was never seen. Both PostgreSQL and MariaDB.
  • Uninstalling MariaDB, PostgreSQL or Python said only that "the package and its config files will be removed" — while the script deleted the data directory: every database, or the whole site-packages tree. The confirmation now names the concrete paths, separates configuration from data, says what dies, and asks you to type the service name.
  • The generated phpMyAdmin and Adminer Apache configs made apachectl configtest warn AH00671. The two Alias directives were in the wrong order, so the second could never match.
  • Three console lines printed their raw translation key instead of text.

Added

  • An update notice on launch — the installed version, the new version, the release notes as a scrollable list, and the choice to skip that version or be reminded later.
  • A dedicated Updates tab in Settings: channel, check now, automatic checking, automatic download, and what to do when one is found.
  • Downloads are verified before anything opens — the checksum published in the update manifest, that the file really came from the expected release asset (re-checked after redirects), the code signature, that the Team Identifier matches the running app's own, and Gatekeeper's notarization verdict. Any failure deletes the download. BRAMPP never replaces itself: the verified disk image is handed to you.
  • The manifest's blockedVersions and minimumOS are honoured, so a release that turns out to be harmful can warn the people already running it.
  • A button on the cloudflared row in Services that stops every open share at once, next to the menu bar command that already did it.

Changed

  • Update checking reads the published manifest for the version and the checksum, and GitHub only for the release notes — so the host that serves the file is not also the host that vouches for it. When the manifest lags behind, the check falls back to GitHub and offers the release page instead of an unverifiable download.
  • The release script publishes that manifest itself, with the real checksum, and only for a build that was actually notarized.
  • The unused project framework detector was removed.

Details: Changelog

Apple Silicon, macOS 14+.