Skip to content

Stabilize Linux support architecture and cross-platform safety - #1

Merged
davutari merged 3 commits into
davutari:mainfrom
MustafaKemal0146:linux-support
Mar 4, 2026
Merged

davutari merged 3 commits into
davutari:mainfrom
MustafaKemal0146:linux-support

Conversation

@MustafaKemal0146

@MustafaKemal0146 MustafaKemal0146 commented Mar 3, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Restore cross-platform compatibility by multi-targeting DevARIManager.Core (net8.0;net8.0-windows) and adding a Windows-only solution filter (DevARIManager.Windows.slnf).
  • Remove environment-coupled Linux behavior by replacing hardcoded user paths and consolidating Linux tool definitions into the new shared project DevARIManager.Linux.Shared consumed by both CLI and GUI.
  • Refactor Linux GUI structure by splitting large MainWindowViewModel responsibilities into SettingsViewModel and ServicesViewModel, while wiring GUI shell execution through Core ProcessRunner.
  • Improve command safety by updating command existence checks to avoid shell interpolation risks.

Test Plan

  • Build full solution with Windows targeting enabled:
    • ./.dotnet/dotnet build DevARIManager.sln -p:EnableWindowsTargeting=true
  • Build Linux packages:
    • bash packaging/linux/build-linux.sh 0.4.0 (with local .dotnet on PATH)
  • Verify outputs:
    • dist/linux/devari-manager_0.4.0_amd64.deb
    • dist/linux/devari-manager-0.4.0-x86_64.AppImage

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.
Copilot AI review requested due to automatic review settings March 3, 2026 11:09
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.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@davutari davutari left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 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ı:

  • DashboardViewModel
  • ServicesViewModel
  • SettingsViewModel

🟠 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
  • .deb ve AppImage paketleme altyapısı kapsamlı
  • pkexec / sudo ayrı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 ⚠️ Multi-targeting gerekli
Kod tekrarı ⚠️ Tool kataloğu 2 yerde duplicate
Mimari ⚠️ Core referansı eksik, ViewModel büyük
Güvenlik ⚠️ Shell injection potansiyeli
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.
@MustafaKemal0146 MustafaKemal0146 changed the title Add Linux support with CLI, GUI, and packaging Stabilize Linux support architecture and cross-platform safety Mar 4, 2026
@MustafaKemal0146

Copy link
Copy Markdown
Contributor Author

Merhaba, istenen code review maddelerine göre bu PR kapsamında aşağıdaki düzeltmeler tamamlandı:

  • DevARIManager.Core için hedef framework yapısı multi-target olacak şekilde güncellendi: net8.0;net8.0-windows.
  • Linux GUI tarafında autostart için kullanılan hardcoded kullanıcı yolu kaldırıldı; kullanıcı home dizini dinamik olarak çözümleniyor.
  • Avalonia tarafındaki geçersiz UpdateSourceTrigger=PropertyChanged kullanımı kaldırıldı.
  • CLI ve GUI tarafındaki tekrar eden Linux tool tanımları tek kaynağa taşındı:
    • yeni proje: src/DevARIManager.Linux.Shared
    • ortak sınıflar: LinuxToolDefinition, LinuxToolRegistry
  • Linux GUI projesine DevARIManager.Core referansı eklendi; süreç çalıştırma akışları Core tarafıyla uyumlu hale getirildi.
  • Büyük MainWindowViewModel yapısı sadeleştirildi; sorumluluklar ayrıldı:
    • SettingsViewModel
    • ServicesViewModel
  • Komut kontrolünde shell interpolasyon riski azaltıldı; CommandExistsAsync güvenli hale getirildi.
  • Çözüm yapısına DevARIManager.Linux.Shared eklendi ve Windows odaklı derleme için DevARIManager.Windows.slnf oluşturuldu.

Doğrulama:

  • Çözüm derlemesi (Windows targeting etkin): başarılı
  • Linux paketleme (.deb + .AppImage): başarılı

Teşekkürler.

@davutari davutari left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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 UpdateSourceTrigger kaldırıldı
  • ✅ Windows build doğrulandı — 0 hata, 0 uyarı
  • ✅ DevARIManager.Linux.Shared ile DRY ihlali çözüldü
  • ✅ GUI → Core referansı eklendi
  • ✅ .slnf solution 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 ✅

@davutari
davutari merged commit 80668b9 into davutari:main Mar 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants