Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prism.Avalonia Library #3127

Open
wants to merge 43 commits into
base: master
Choose a base branch
from

Conversation

DamianSuess
Copy link
Contributor

@DamianSuess DamianSuess commented Apr 28, 2024

Description of Change

Adds fixture for Prism.Avalonia using Avalonia v11.1.x. Pairing together these two awesome libraries under one house.

API Changes

None

Behavioral Changes

Allows users to utilize the cross-platform framework Avalonia for desktop applications.

PR Checklist

  • Import base Prism.Avalonia framework
  • Sync packages to use local projects
  • Rebased on top of master at time of PR
  • Changes adhere to coding standard
  • Add tests
  • Fix tests to run under Prism's toolset - IN-PROGRESS
  • Add e2e samples
  • Directory.Build.props
  • CI/CD GitHub Actions for Prism.Avalonia
  • Minimize code duplication

@DamianSuess DamianSuess requested a review from dansiegel as a code owner April 28, 2024 14:18
@DamianSuess DamianSuess marked this pull request as draft April 28, 2024 14:18
@dansiegel
Copy link
Member

Thanks for the PR. I'll try to review this as soon as I can.

Copy link
Member

@dansiegel dansiegel left a comment

Choose a reason for hiding this comment

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

noticing this is largely just reusing what currently exists in the Prism.Avalonia project. This should start removing duplicated code, similar to what we've done with Prism for Uno.WinUI using linked code from the Prism.Wpf project where possible. The goal should be to have a minimally different API surface and eliminate duplicate code as much as possible.

PrismLibrary_Avalonia.slnf Outdated Show resolved Hide resolved
@dansiegel
Copy link
Member

btw be sure to update the CI Builds. It should be pretty much copy/paste and change the file names... if you need some help on it let me know.

  • NEW: .github/workflows/build_avalonia.yml
  • UPDATE: .github/workflows/ci.yml
  • UPDATE: .github/workflows/start-release.yml

@DamianSuess
Copy link
Contributor Author

Will do. @dansiegel, when you're free, mind if we sync up on Teams?

@dansiegel
Copy link
Member

It'll have to be next week but shoot me an email with some times that work for you and we can set something up

@DamianSuess
Copy link
Contributor Author

Sounds great. Thanks again, Dan.

@dansiegel dansiegel added this to the 9.1 milestone Jul 23, 2024
@dansiegel
Copy link
Member

You'll want to:

  1. Rebase
  2. Update the Directory.Build.props with the following
  <When Condition="$(IsAvaloniaProject)">
    <PropertyGroup>
      <DefineConstants>$(DefineConstants);AVALONIA</DefineConstants>
    </PropertyGroup>
    <ItemGroup>
      <Using Include="Avalonia" />
      <Using Include="Avalonia.Controls" />
      <Using Include="Avalonia.Controls.ApplicationLifetimes" />
      <Using Include="Avalonia.Controls.Primitives" />
      <Using Include="Avalonia.Interactivity" />
      <Using Include="Avalonia.Markup.Xaml"/>
      <Using Include="Avalonia.Metadata" />
      <Using Include="Avalonia.Threading" />
      <Using Include="Avalonia.Styling" />
      <Using Include="Avalonia.VisualTree" />
    </ItemGroup>
  </When>
  1. Start removing classes that have identical or near identical code to WPF. If there are small tweaks it is preferential to include a #if AVALONIA block to conditionally compile Avalonia specific code vs WPF or Uno Platform. The goal should be similar to the Uno Platform implementation where most of the code is actually part of WPF.

@DamianSuess
Copy link
Contributor Author

Dan,

Thanks for the heads up and suggestions to get this puppy rolling. I'll try to get to it this week.

I'm going to upgrade the other repository first to get the GA release of Prism.Avalonia v9.0.537, followed by copying over results to our combined branch. Overall, this should be pretty quick process since the delta between ..401-pre and ..537 is non-impactful. 👍

@DamianSuess
Copy link
Contributor Author

@dansiegel thanks again for the sync-up yesterday! Looking forward to the 9.1 release

@DamianSuess
Copy link
Contributor Author

Ready for action (assuming the build server agrees.. the wheels are still spinning)

Directory.Build.props Outdated Show resolved Hide resolved
@DamianSuess
Copy link
Contributor Author

DamianSuess commented Nov 3, 2024

Hi Dan/Brian,

UPDATE (Damian):
Found it, GitHubActions package was missing as part of my test projects
Could still use a 2nd set of eyes as the AsyncDelegateCommand test does pass locally.

When either of you two get a moment, could you assist me with seeing why the build is failing? It's the classic, "works on my machine" scenario (which is good), however, on the build server it's tripping up.

I noticed the following response on the build machine for "could not find a test logger..". There is a project called, Prism.DryIoc.Avalonia.Tests which I assume it is looking for. Could this be the cause, or just a red herring?

Starting test execution, please wait...
Could not find a test logger with AssemblyQualifiedName, URI or FriendlyName 'GitHubActions'.
  Prism.DryIoc.Avalonia -> D:\a\Prism\Prism\src\Avalonia\Prism.DryIoc.Avalonia\bin\Release\net6.0\Prism.DryIoc.Avalonia.dll
Blame: Attaching crash dump utility to process testhost (1700).

Passed!  - Failed:     0, Passed:   277, Skipped:     0, Total:   277, Duration: 3 s - Prism.Core.Tests.dll (net6.0)

@DamianSuess DamianSuess marked this pull request as ready for review November 3, 2024 15:13
@DamianSuess DamianSuess requested a review from dansiegel November 3, 2024 16:05
@DamianSuess
Copy link
Contributor Author

DamianSuess commented Dec 14, 2024

Was tracking down, failed test in Prism.Core. It's the classic case of, "it works on my machine", using the same build command. Still trying to get to the bottom of it to reproduce the error. Perhaps I'm chasing up the wrong tree.

dotnet test PrismLibrary_Core.slnf --configuration Release --logger GitHubActions --blame-crash --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover --no-build
...
Passed!  - Failed:     0, Passed:   277, Skipped:     0, Total:   277, Duration: 3 s - Prism.Core.Tests.dll (net6.0)

@DamianSuess
Copy link
Contributor Author

Hi @dansiegel & @brianlagunas, Code reduction completed 👍

I could use a 2nd set of eyes on the build machine's failing test, Prism.Tests.Commands.AsyncDelegateCommandFixture.ICommandExecute_UsesDefaultTokenSourceFactory, which I cannot reproduce locally.

Let me know if there's anything else I can do.

Talk to you soon,
Damian

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.

2 participants