diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 505547d..28a29cb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -73,12 +73,16 @@ jobs: include: - rid: win-x64 os: windows-latest - tfm: net10.0-windows10.0.19041.0 artifact: gui-win-x64 - - rid: maccatalyst-x64 + - rid: osx-x64 os: macos-latest - tfm: net10.0-maccatalyst artifact: gui-osx-x64 + - rid: osx-arm64 + os: macos-latest + artifact: gui-osx-arm64 + - rid: linux-x64 + os: ubuntu-latest + artifact: gui-linux-x64 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 @@ -87,21 +91,9 @@ jobs: with: dotnet-version: '10.x' - - name: Install required MAUI workloads - run: dotnet workload restore src/AtsScanner.Gui/AtsScanner.Gui.csproj - - - name: Publish (Windows) - if: matrix.os == 'windows-latest' - run: > - dotnet publish src/AtsScanner.Gui -f ${{ matrix.tfm }} -c Release -r ${{ matrix.rid }} - --self-contained true - -p:WindowsAppSDKSelfContained=true - -o ./dist/${{ matrix.artifact }} - - - name: Publish (MacCatalyst) - if: matrix.os == 'macos-latest' + - name: Publish run: > - dotnet publish src/AtsScanner.Gui -f ${{ matrix.tfm }} -c Release -r ${{ matrix.rid }} + dotnet publish src/AtsScanner.Gui -c Release -r ${{ matrix.rid }} --self-contained true -o ./dist/${{ matrix.artifact }} @@ -111,7 +103,7 @@ jobs: if [ "${{ matrix.os }}" = "windows-latest" ]; then test -f "dist/${{ matrix.artifact }}/AtsScanner.Gui.exe" else - ls -d dist/${{ matrix.artifact }}/*.app >/dev/null 2>&1 || ls dist/${{ matrix.artifact }}/*.pkg >/dev/null 2>&1 + test -f "dist/${{ matrix.artifact }}/AtsScanner.Gui" fi - name: Package (Windows) @@ -122,8 +114,8 @@ jobs: Compress-Archive -Path * -DestinationPath "../../ats-scanner-${{ matrix.artifact }}.zip" -Force Pop-Location - - name: Package (macOS) - if: matrix.os == 'macos-latest' + - name: Package (Unix) + if: matrix.os != 'windows-latest' shell: bash run: | cd dist/${{ matrix.artifact }} diff --git a/README.md b/README.md index b406959..a6c0c1a 100644 --- a/README.md +++ b/README.md @@ -48,13 +48,12 @@ dotnet build ## Desktop GUI -Prefer a graphical interface? A .NET MAUI desktop app is available in `src/AtsScanner.Gui`, built on the same `AtsScanner.Core` engine as the CLI — all scanning still happens fully offline, on your machine. +Prefer a graphical interface? An Avalonia UI desktop app is available in `src/AtsScanner.Gui`, built on the same `AtsScanner.Core` engine as the CLI — all scanning still happens fully offline, on your machine. -Requires the MAUI workload: `dotnet workload install maui`. +The GUI targets Windows, macOS, and Linux with the standard .NET SDK. ```bash -dotnet run --project src/AtsScanner.Gui -f net10.0-windows10.0.19041.0 # Windows -dotnet run --project src/AtsScanner.Gui -f net10.0-maccatalyst # macOS +dotnet run --project src/AtsScanner.Gui ``` The app lets you pick a resume file, choose which ATS platforms to check against, and view the same scores, ratings, and issue breakdowns as the CLI in an expandable results list. diff --git a/src/AtsScanner.Gui/App.axaml b/src/AtsScanner.Gui/App.axaml new file mode 100644 index 0000000..079c65c --- /dev/null +++ b/src/AtsScanner.Gui/App.axaml @@ -0,0 +1,8 @@ + + + + + diff --git a/src/AtsScanner.Gui/App.axaml.cs b/src/AtsScanner.Gui/App.axaml.cs new file mode 100644 index 0000000..05a9af8 --- /dev/null +++ b/src/AtsScanner.Gui/App.axaml.cs @@ -0,0 +1,21 @@ +using Avalonia; +using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Markup.Xaml; + +namespace AtsScanner.Gui; + +public partial class App : Application +{ + public override void Initialize() + { + AvaloniaXamlLoader.Load(this); + } + + public override void OnFrameworkInitializationCompleted() + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + desktop.MainWindow = new MainWindow(); + + base.OnFrameworkInitializationCompleted(); + } +} diff --git a/src/AtsScanner.Gui/App.xaml b/src/AtsScanner.Gui/App.xaml deleted file mode 100644 index c54d413..0000000 --- a/src/AtsScanner.Gui/App.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - diff --git a/src/AtsScanner.Gui/App.xaml.cs b/src/AtsScanner.Gui/App.xaml.cs deleted file mode 100644 index 39500ac..0000000 --- a/src/AtsScanner.Gui/App.xaml.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace AtsScanner.Gui; - -public partial class App : Application -{ - public App() - { - InitializeComponent(); - } - - protected override Window CreateWindow(IActivationState? activationState) - { - return new Window(new AppShell()); - } -} \ No newline at end of file diff --git a/src/AtsScanner.Gui/AppShell.xaml b/src/AtsScanner.Gui/AppShell.xaml deleted file mode 100644 index 09a6759..0000000 --- a/src/AtsScanner.Gui/AppShell.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/src/AtsScanner.Gui/AppShell.xaml.cs b/src/AtsScanner.Gui/AppShell.xaml.cs deleted file mode 100644 index d782363..0000000 --- a/src/AtsScanner.Gui/AppShell.xaml.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace AtsScanner.Gui; - -public partial class AppShell : Shell -{ - public AppShell() - { - InitializeComponent(); - } -} diff --git a/src/AtsScanner.Gui/AtsScanner.Gui.csproj b/src/AtsScanner.Gui/AtsScanner.Gui.csproj index cd5ff5d..2409dcf 100644 --- a/src/AtsScanner.Gui/AtsScanner.Gui.csproj +++ b/src/AtsScanner.Gui/AtsScanner.Gui.csproj @@ -1,76 +1,28 @@ - - - net10.0-windows10.0.19041.0 - net10.0-maccatalyst - - - - - Exe - AtsScanner.Gui - true - true - enable - enable - - - SourceGen - - - ATS Scanner - - - com.atsscanner.gui - - - 1.0 - 1 - - - None - - 15.0 - 15.0 - 21.0 - 10.0.17763.0 - 10.0.17763.0 - - - - - - - - - - - - - - - - - - - - - - - - - - + + WinExe + net10.0 + AtsScanner.Gui + enable + enable + true + ATS Scanner + com.atsscanner.gui + 1.0 + 1 + false + + + + + + + + + + + + diff --git a/src/AtsScanner.Gui/MainPage.xaml b/src/AtsScanner.Gui/MainPage.xaml deleted file mode 100644 index 04739b7..0000000 --- a/src/AtsScanner.Gui/MainPage.xaml +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - -