Repository navigation
Stabilize Linux support architecture and cross-platform safety - #1
Conversation
Introduce a Linux CLI and Avalonia-based Linux GUI with service/tool management flows, then wire solution/build docs and packaging scripts to produce AppImage and deb artifacts.
Create linux/README.md with release download links and install steps for AppImage and deb, and link it from the main README for quick access.
davutari
left a comment
There was a problem hiding this comment.
🔍 Code Review — Linux Support PR
Merhaba @MustafaKemal0146, Linux desteği için güzel bir başlangıç! Ancak merge'den önce düzeltilmesi gereken birkaç kritik nokta var.
🔴 Kritik — Merge Engelleyici
1. Core.csproj TargetFramework Değişikliği
net8.0-windows → net8.0 değişikliği mevcut Windows WPF uygulamasını bozma riski taşıyor. Multi-targeting kullanılmalı:
<!-- Önerilen -->
<TargetFrameworks>net8.0;net8.0-windows</TargetFrameworks>Bu sayede Windows'ta net8.0-windows, Linux'ta net8.0 hedeflenir ve her iki platform güvende olur.
2. Hardcoded Kullanıcı Yolu
ResolveAutostartExec() içinde hardcoded path var:
/home/ara/Applications/DevARIManager/linux/devari-manager.AppImage
Bu başka kullanıcılarda çalışmaz ve geliştirici bilgisi sızdırır. Dinamik path kullanılmalı:
var home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);3. Avalonia'da Geçersiz Attribute
UpdateSourceTrigger=PropertyChanged WPF'e özel, Avalonia'da geçerli değil. Kaldırılmalı — Avalonia'da TextBox.Text binding'i zaten her karakterde güncellenir.
4. Windows Build Doğrulaması
PR'da Windows WPF App'in Core değişikliği sonrası hala derlendiğine dair test sonucu yok. Lütfen Windows'ta dotnet build DevARIManager.sln çalıştırıp sonucu ekleyin.
🟡 Önemli — Güçlü Öneri
5. Duplicate Tool Kataloğu (DRY İhlali)
Aynı 15 araç tanımı hem Program.cs (CLI) hem LinuxToolCatalog.cs (GUI) içinde tekrarlanmış. EscapeForDoubleQuotedBash metodu da duplicate. Ortak bir SharedLinuxTools sınıfı oluşturulmalı:
src/DevARIManager.Linux.Shared/LinuxToolDefinitions.cs ← tek kaynak
├── CLI referans alır
└── GUI referans alır
6. Linux GUI Core Referansı Yok
GUI projesi DevARIManager.Core'u referans almıyor ve kendi RunShellAsync metodunu yazmış. Core'daki ProcessRunner zaten platform-aware yapılmış — tekrar yazılması gereksiz.
7. Dev ViewModel — Parçalanmalı
MainWindowViewModel.cs 643 satır ve tüm mantığı barındırıyor. MVVM best practice olarak parçalanmalı:
DashboardViewModelServicesViewModelSettingsViewModel
🟠 Güvenlik Notları
8. Shell Injection Potansiyeli
CommandExistsAsync ve RunShellAsync'de parametre sanitize edilmiyor:
// Mevcut — injection'a açık
await RunAsync("bash", $"-lc \"command -v {command}\"");Şu an tool ID'leri hardcoded olduğu için risk düşük ama ileride dinamik input eklenirse tehlikeli olur. ProcessStartInfo.ArgumentList kullanılması önerilir.
9. Solution Dosyası
DevARIManager.sln'e eklenen Linux projeleri Windows'ta dotnet build sırasında hata verebilir (Avalonia bağımlılıkları). Solution filter (.slnf) veya conditional build düşünülebilir.
✅ İyi Yönler
- Avalonia seçimi Linux GUI için doğru karar 👍
- CommunityToolkit.Mvvm pattern tutarlılığı WPF App ile uyumlu
.debve AppImage paketleme altyapısı kapsamlıpkexec/sudoayrımı doğru bir Linux yaklaşımı- FluentTheme ile modern görünüm
- Filtre, arama, tema, ayarlar — zengin özellik seti
📋 Özet
| Kategori | Durum |
|---|---|
| Windows uyumluluğu | |
| Kod tekrarı | |
| Mimari | |
| Güvenlik | |
| UI/UX | ✅ Kapsamlı ve modern |
| Paketleme | ✅ İyi altyapı |
Yukarıdaki 🔴 maddeler düzeltildikten sonra tekrar review edebilirim. İyi çalışma, devam! 🚀
This keeps Windows compatibility via Core multi-targeting, removes environment-specific paths, and centralizes Linux tool definitions so CLI/GUI share one source while the GUI logic is split into focused view models.
|
Merhaba, istenen code review maddelerine göre bu PR kapsamında aşağıdaki düzeltmeler tamamlandı:
Doğrulama:
Teşekkürler. |
davutari
left a comment
There was a problem hiding this comment.
✅ Re-Review: Approved
Harika iş @MustafaKemal0146! 👏
Önceki review'daki 9 maddeden 7'si tamamen düzeltilmiş, kalan 2'si kabul edilebilir seviyede:
Düzeltilen Kritik Maddeler
- ✅ Core.csproj multi-targeting (
net8.0;net8.0-windows) - ✅ Hardcoded path → dinamik
Environment.GetFolderPath - ✅ Avalonia'da geçersiz
UpdateSourceTriggerkaldırıldı - ✅ Windows build doğrulandı — 0 hata, 0 uyarı
- ✅
DevARIManager.Linux.Sharedile DRY ihlali çözüldü - ✅ GUI → Core referansı eklendi
- ✅
.slnfsolution filter ile platform ayrımı
Kalan Minör Notlar (follow-up olarak halledilebilir)
- ViewModel hala 587 satır — ileride refactor edilebilir
CommandExistsAsync'de input escape eksik — düşük risk ama follow-up önerilir
Temiz, düzenli ve kapsamlı bir katkı. Linux desteği için güçlü bir temel oluşturmuşsun. Tebrikler! 🚀
Verdict: APPROVED ✅
Summary
DevARIManager.Core(net8.0;net8.0-windows) and adding a Windows-only solution filter (DevARIManager.Windows.slnf).DevARIManager.Linux.Sharedconsumed by both CLI and GUI.MainWindowViewModelresponsibilities intoSettingsViewModelandServicesViewModel, while wiring GUI shell execution through CoreProcessRunner.Test Plan
./.dotnet/dotnet build DevARIManager.sln -p:EnableWindowsTargeting=truebash packaging/linux/build-linux.sh 0.4.0(with local.dotnetonPATH)dist/linux/devari-manager_0.4.0_amd64.debdist/linux/devari-manager-0.4.0-x86_64.AppImage