Skip to content

Commit 285bbfa

Browse files
committed
run script
kushal@syn-2600-6c56-9840-001d-0000-0000-0000-1157:~/src/dotnet/MyDesktopApplication$ cd /home/kushal/src/dotnet/MyDesktopApplication; time dotnet clean; time dotnet restore; time dotnet build; time dotnet test; time dotnet list package; time dotnet list package --outdated; time dotnet format; time sh export.sh; Build succeeded in 1.2s real 0m1.413s user 0m1.148s sys 0m0.291s Restore complete (0.7s) Build succeeded in 0.9s real 0m1.078s user 0m1.166s sys 0m0.251s Restore complete (0.7s) MyDesktopApplication.Core net10.0 succeeded (0.2s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.4s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Core.Tests net10.0 succeeded (0.4s) → tests/MyDesktopApplication.Core.Tests/bin/Debug/net10.0/MyDesktopApplication.Core.Tests.dll MyDesktopApplication.Shared net10.0 succeeded (0.5s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Integration.Tests net10.0 succeeded (0.4s) → tests/MyDesktopApplication.Integration.Tests/bin/Debug/net10.0/MyDesktopApplication.Integration.Tests.dll MyDesktopApplication.Desktop net10.0 succeeded (1.4s) → src/MyDesktopApplication.Desktop/bin/Debug/net10.0/MyDesktopApplication.Desktop.dll MyDesktopApplication.UI.Tests net10.0 succeeded (0.8s) → tests/MyDesktopApplication.UI.Tests/bin/Debug/net10.0/MyDesktopApplication.UI.Tests.dll MyDesktopApplication.Core net10.0 succeeded (0.1s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.1s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Shared net10.0 succeeded (0.1s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Android net10.0-android succeeded with 2 warning(s) (23.4s) → src/MyDesktopApplication.Android/bin/Debug/net10.0-android/MyDesktopApplication.Android.dll /home/kushal/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.targets(2502,3): warning XA0141: Android 16 will require 16 KB page sizes, shared library 'libSkiaSharp.so' does not have a 16 KB page size. Please inform the authors of the NuGet package 'SkiaSharp.NativeAssets.Android' version '2.88.9' which contains 'runtimes/android-arm64/native/libSkiaSharp.so'. See https://developer.android.com/guide/practices/page-sizes for more details. /home/kushal/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.targets(2502,3): warning XA0141: Android 16 will require 16 KB page sizes, shared library 'libSkiaSharp.so' does not have a 16 KB page size. Please inform the authors of the NuGet package 'SkiaSharp.NativeAssets.Android' version '2.88.9' which contains 'runtimes/android-x64/native/libSkiaSharp.so'. See https://developer.android.com/guide/practices/page-sizes for more details. Build succeeded with 2 warning(s) in 25.2s real 0m25.406s user 1m26.420s sys 0m3.902s Restore complete (0.6s) MyDesktopApplication.Core net10.0 succeeded (0.0s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.1s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Shared net10.0 succeeded (0.1s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Core.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Core.Tests/bin/Debug/net10.0/MyDesktopApplication.Core.Tests.dll MyDesktopApplication.Integration.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Integration.Tests/bin/Debug/net10.0/MyDesktopApplication.Integration.Tests.dll MyDesktopApplication.Desktop net10.0 succeeded (0.1s) → src/MyDesktopApplication.Desktop/bin/Debug/net10.0/MyDesktopApplication.Desktop.dll MyDesktopApplication.UI.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.UI.Tests/bin/Debug/net10.0/MyDesktopApplication.UI.Tests.dll [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.07] Discovering: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.08] Discovering: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.12] Discovered: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.11] Discovered: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.15] Starting: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.13] Starting: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.07] Discovering: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.11] Discovered: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.14] Starting: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.25] Finished: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.23] Finished: MyDesktopApplication.UI.Tests MyDesktopApplication.Core.Tests test net10.0 succeeded (1.0s) MyDesktopApplication.UI.Tests test net10.0 succeeded (1.0s) [xUnit.net 00:00:00.83] Finished: MyDesktopApplication.Integration.Tests MyDesktopApplication.Integration.Tests test net10.0 succeeded (1.6s) Test summary: total: 28, failed: 0, succeeded: 28, skipped: 0, duration: 1.6s Build succeeded in 2.6s real 0m2.798s user 0m1.981s sys 0m0.432s Restore complete (0.6s) Build succeeded in 0.8s Project 'MyDesktopApplication.Android' has the following package references [net10.0-android36.0]: Top-level Package Requested Resolved > Avalonia 11.3.10 11.3.10 > Avalonia.Android 11.3.10 11.3.10 > Avalonia.Fonts.Inter 11.3.10 11.3.10 > Avalonia.Themes.Fluent 11.3.10 11.3.10 > CommunityToolkit.Mvvm 8.4.0 8.4.0 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 > Microsoft.NET.ILLink.Tasks (A) [10.0.1, ) 10.0.1 Project 'MyDesktopApplication.Core' has the following package references [net10.0]: No packages were found for this framework. Project 'MyDesktopApplication.Desktop' has the following package references [net10.0]: Top-level Package Requested Resolved > Avalonia.Desktop 11.3.10 11.3.10 > Avalonia.Diagnostics 11.3.10 11.3.10 > Avalonia.Fonts.Inter 11.3.10 11.3.10 > Avalonia.Themes.Fluent 11.3.10 11.3.10 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 Project 'MyDesktopApplication.Infrastructure' has the following package references [net10.0]: Top-level Package Requested Resolved > Microsoft.EntityFrameworkCore 10.0.1 10.0.1 > Microsoft.EntityFrameworkCore.Sqlite 10.0.1 10.0.1 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 Project 'MyDesktopApplication.Shared' has the following package references [net10.0]: Top-level Package Requested Resolved > CommunityToolkit.Mvvm 8.4.0 8.4.0 > FluentValidation 12.1.1 12.1.1 Project 'MyDesktopApplication.Core.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 Project 'MyDesktopApplication.Integration.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.EntityFrameworkCore.InMemory 10.0.1 10.0.1 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 Project 'MyDesktopApplication.UI.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 (A) : Auto-referenced package. real 0m2.319s user 0m2.350s sys 0m0.559s Restore complete (0.7s) Build succeeded in 0.8s The following sources were used: https://api.nuget.org/v3/index.json The given project `MyDesktopApplication.Android` has no updates given the current sources. The given project `MyDesktopApplication.Core` has no updates given the current sources. The given project `MyDesktopApplication.Desktop` has no updates given the current sources. The given project `MyDesktopApplication.Infrastructure` has no updates given the current sources. The given project `MyDesktopApplication.Shared` has no updates given the current sources. The given project `MyDesktopApplication.Core.Tests` has no updates given the current sources. The given project `MyDesktopApplication.Integration.Tests` has no updates given the current sources. The given project `MyDesktopApplication.UI.Tests` has no updates given the current sources. real 0m2.737s user 0m2.790s sys 0m0.523s real 0m11.043s user 0m16.961s sys 0m1.421s ============================================== Generating Clean Project Export ============================================== Generating directory structure... Collecting and cleaning file contents... Processed: .gitattributes Processed: .github/dependabot.yml Processed: .github/workflows/build-and-release.yml Processed: .gitignore Processed: Directory.Build.props Processed: Directory.Packages.props Processed: MyDesktopApplication.slnx Processed: README.md Processed: consolidate-github-actions.sh Processed: docs/llm/commands.txt Processed: docs/llm/gemini.md Processed: docs/llm/grok.md Processed: docs/llm/output.txt Processed: docs/memory.md Processed: docs/thoughts.md Processed: fix-all-issues.sh Processed: fix-android-build.sh Processed: fix-android-crash.sh Processed: fix-android-errors.sh Processed: fix-app-update.sh Processed: fix-github-actions.sh Processed: fix-issues.sh Processed: fix-keystore.sh Processed: fix-ui-and-precision.sh Processed: fix-ui-tests.sh Processed: src/MyDesktopApplication.Android/AndroidManifest.xml Processed: src/MyDesktopApplication.Android/App.axaml Processed: src/MyDesktopApplication.Android/App.axaml.cs Processed: src/MyDesktopApplication.Android/Converters/Converters.cs Processed: src/MyDesktopApplication.Android/MainActivity.cs Processed: src/MyDesktopApplication.Android/MyDesktopApplication.Android.csproj Processed: src/MyDesktopApplication.Android/Resources/drawable/icon.xml Processed: src/MyDesktopApplication.Android/Resources/values/strings.xml Processed: src/MyDesktopApplication.Android/Resources/values/styles.xml Processed: src/MyDesktopApplication.Android/Views/MainView.axaml Processed: src/MyDesktopApplication.Android/Views/MainView.axaml.cs Processed: src/MyDesktopApplication.Core/Entities/Country.cs Processed: src/MyDesktopApplication.Core/Entities/EntityBase.cs Processed: src/MyDesktopApplication.Core/Entities/GameState.cs Processed: src/MyDesktopApplication.Core/Entities/QuestionType.cs Processed: src/MyDesktopApplication.Core/Entities/TodoItem.cs Processed: src/MyDesktopApplication.Core/Interfaces/IGameStateRepository.cs Processed: src/MyDesktopApplication.Core/Interfaces/IRepository.cs Processed: src/MyDesktopApplication.Core/Interfaces/ITodoRepository.cs Processed: src/MyDesktopApplication.Core/MyDesktopApplication.Core.csproj Processed: src/MyDesktopApplication.Desktop/App.axaml Processed: src/MyDesktopApplication.Desktop/App.axaml.cs Processed: src/MyDesktopApplication.Desktop/Converters/Converters.cs Processed: src/MyDesktopApplication.Desktop/MyDesktopApplication.Desktop.csproj Processed: src/MyDesktopApplication.Desktop/Program.cs Processed: src/MyDesktopApplication.Desktop/ViewModels/MainWindowViewModel.cs Processed: src/MyDesktopApplication.Desktop/ViewModels/ViewModelBase.cs Processed: src/MyDesktopApplication.Desktop/Views/MainWindow.axaml Processed: src/MyDesktopApplication.Desktop/Views/MainWindow.axaml.cs Processed: src/MyDesktopApplication.Desktop/app.manifest Processed: src/MyDesktopApplication.Desktop/appsettings.json Processed: src/MyDesktopApplication.Infrastructure/Data/AppDbContext.cs Processed: src/MyDesktopApplication.Infrastructure/Data/DesignTimeDbContextFactory.cs Processed: src/MyDesktopApplication.Infrastructure/DependencyInjection.cs Processed: src/MyDesktopApplication.Infrastructure/MyDesktopApplication.Infrastructure.csproj Processed: src/MyDesktopApplication.Infrastructure/Repositories/GameStateRepository.cs Processed: src/MyDesktopApplication.Infrastructure/Repositories/Repository.cs Processed: src/MyDesktopApplication.Infrastructure/Repositories/TodoRepository.cs Processed: src/MyDesktopApplication.Shared/DTOs/TodoItemDto.cs Processed: src/MyDesktopApplication.Shared/Data/CountryData.cs Processed: src/MyDesktopApplication.Shared/Data/MotivationalMessages.cs Processed: src/MyDesktopApplication.Shared/MyDesktopApplication.Shared.csproj Processed: src/MyDesktopApplication.Shared/ViewModels/CountryQuizViewModel.cs Processed: src/MyDesktopApplication.Shared/ViewModels/MainViewModel.cs Processed: src/MyDesktopApplication.Shared/ViewModels/ViewModelBase.cs Processed: tests/MyDesktopApplication.Core.Tests/GameStateTests.cs Processed: tests/MyDesktopApplication.Core.Tests/MyDesktopApplication.Core.Tests.csproj Processed: tests/MyDesktopApplication.Core.Tests/QuestionTypeTests.cs Processed: tests/MyDesktopApplication.Core.Tests/TodoItemTests.cs Processed: tests/MyDesktopApplication.Integration.Tests/MyDesktopApplication.Integration.Tests.csproj Processed: tests/MyDesktopApplication.Integration.Tests/TodoRepositoryTests.cs Processed: tests/MyDesktopApplication.UI.Tests/MainWindowViewModelTests.cs Processed: tests/MyDesktopApplication.UI.Tests/MyDesktopApplication.UI.Tests.csproj Export Complete: docs/llm/dump.txt real 0m0.837s user 0m0.424s sys 0m0.546s kushal@syn-2600-6c56-9840-001d-0000-0000-0000-1157:~/src/dotnet/MyDesktopApplication$ kushal@syn-2600-6c56-9840-001d-0000-0000-0000-1157:~/src/dotnet/MyDesktopApplication$ keytool -list -v -keystore android.keystore Enter keystore password: Keystore type: PKCS12 Keystore provider: SUN Your keystore contains 1 entry Alias name: myalias Creation date: Jan 4, 2026 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: CN=MyDesktopApplication, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=US Issuer: CN=MyDesktopApplication, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=US Serial number: 98f3a6861c369ac3 Valid from: Sun Jan 04 16:53:58 CST 2026 until: Thu May 22 17:53:58 CDT 2053 Certificate fingerprints: SHA1: 63:DF:89:77:F9:B8:44:CB:52:A2:1F:44:F1:AD:9D:97:F1:CD:BE:48 SHA256: 2F:ED:0C:CB:40:01:74:7D:F9:07:AE:08:23:4C:65:58:CB:B2:11:CA:90:5A:91:C6:EE:8E:21:4E:7A:C4:8D:58 Signature algorithm name: SHA256withRSA Subject Public Key Algorithm: 2048-bit RSA key Version: 3 Extensions: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 04 54 26 18 97 2E 32 2B 34 9A 9E 1E 5A 09 88 B0 .T&...2+4...Z... 0010: CB C3 EA E2 .... ] ] ******************************************* ******************************************* kushal@syn-2600-6c56-9840-001d-0000-0000-0000-1157:~/src/dotnet/MyDesktopApplication$ cd /home/kushal/src/dotnet/MyDesktopApplication; time dotnet clean; time dotnet restore; time dotnet build; time dotnet test; time dotnet list package; time dotnet list package --outdated; time dotnet format; time sh export.sh; Build succeeded in 0.7s real 0m0.864s user 0m0.934s sys 0m0.224s Restore complete (0.7s) Build succeeded in 0.8s real 0m0.976s user 0m1.087s sys 0m0.216s Restore complete (0.7s) MyDesktopApplication.Core net10.0 succeeded (2.3s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.2s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Core.Tests net10.0 succeeded (0.3s) → tests/MyDesktopApplication.Core.Tests/bin/Debug/net10.0/MyDesktopApplication.Core.Tests.dll MyDesktopApplication.Integration.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Integration.Tests/bin/Debug/net10.0/MyDesktopApplication.Integration.Tests.dll MyDesktopApplication.Shared net10.0 succeeded (0.7s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Desktop net10.0 succeeded (1.1s) → src/MyDesktopApplication.Desktop/bin/Debug/net10.0/MyDesktopApplication.Desktop.dll MyDesktopApplication.UI.Tests net10.0 succeeded (0.2s) → tests/MyDesktopApplication.UI.Tests/bin/Debug/net10.0/MyDesktopApplication.UI.Tests.dll MyDesktopApplication.Core net10.0 succeeded (0.0s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Shared net10.0 succeeded (0.0s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.0s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Android net10.0-android succeeded with 2 warning(s) (24.0s) → src/MyDesktopApplication.Android/bin/Debug/net10.0-android/MyDesktopApplication.Android.dll /home/kushal/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.targets(2502,3): warning XA0141: Android 16 will require 16 KB page sizes, shared library 'libSkiaSharp.so' does not have a 16 KB page size. Please inform the authors of the NuGet package 'SkiaSharp.NativeAssets.Android' version '2.88.9' which contains 'runtimes/android-arm64/native/libSkiaSharp.so'. See https://developer.android.com/guide/practices/page-sizes for more details. /home/kushal/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.targets(2502,3): warning XA0141: Android 16 will require 16 KB page sizes, shared library 'libSkiaSharp.so' does not have a 16 KB page size. Please inform the authors of the NuGet package 'SkiaSharp.NativeAssets.Android' version '2.88.9' which contains 'runtimes/android-x64/native/libSkiaSharp.so'. See https://developer.android.com/guide/practices/page-sizes for more details. Build succeeded with 2 warning(s) in 28.0s real 0m28.206s user 1m28.976s sys 0m4.011s Restore complete (0.6s) MyDesktopApplication.Core net10.0 succeeded (0.0s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.0s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Shared net10.0 succeeded (0.0s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Core.Tests net10.0 succeeded (0.0s) → tests/MyDesktopApplication.Core.Tests/bin/Debug/net10.0/MyDesktopApplication.Core.Tests.dll MyDesktopApplication.Integration.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Integration.Tests/bin/Debug/net10.0/MyDesktopApplication.Integration.Tests.dll MyDesktopApplication.Desktop net10.0 succeeded (0.1s) → src/MyDesktopApplication.Desktop/bin/Debug/net10.0/MyDesktopApplication.Desktop.dll MyDesktopApplication.UI.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.UI.Tests/bin/Debug/net10.0/MyDesktopApplication.UI.Tests.dll [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.06] Discovering: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.10] Discovered: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.06] Discovering: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.12] Starting: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.09] Discovered: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.11] Starting: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.06] Discovering: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.09] Discovered: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.11] Starting: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.20] Finished: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.17] Finished: MyDesktopApplication.UI.Tests MyDesktopApplication.Core.Tests test net10.0 succeeded (0.8s) MyDesktopApplication.UI.Tests test net10.0 succeeded (0.8s) [xUnit.net 00:00:00.75] Finished: MyDesktopApplication.Integration.Tests MyDesktopApplication.Integration.Tests test net10.0 succeeded (1.4s) Test summary: total: 28, failed: 0, succeeded: 28, skipped: 0, duration: 1.5s Build succeeded in 2.4s real 0m2.580s user 0m1.854s sys 0m0.392s Restore complete (0.7s) Build succeeded in 0.8s Project 'MyDesktopApplication.Android' has the following package references [net10.0-android36.0]: Top-level Package Requested Resolved > Avalonia 11.3.10 11.3.10 > Avalonia.Android 11.3.10 11.3.10 > Avalonia.Fonts.Inter 11.3.10 11.3.10 > Avalonia.Themes.Fluent 11.3.10 11.3.10 > CommunityToolkit.Mvvm 8.4.0 8.4.0 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 > Microsoft.NET.ILLink.Tasks (A) [10.0.1, ) 10.0.1 Project 'MyDesktopApplication.Core' has the following package references [net10.0]: No packages were found for this framework. Project 'MyDesktopApplication.Desktop' has the following package references [net10.0]: Top-level Package Requested Resolved > Avalonia.Desktop 11.3.10 11.3.10 > Avalonia.Diagnostics 11.3.10 11.3.10 > Avalonia.Fonts.Inter 11.3.10 11.3.10 > Avalonia.Themes.Fluent 11.3.10 11.3.10 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 Project 'MyDesktopApplication.Infrastructure' has the following package references [net10.0]: Top-level Package Requested Resolved > Microsoft.EntityFrameworkCore 10.0.1 10.0.1 > Microsoft.EntityFrameworkCore.Sqlite 10.0.1 10.0.1 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 Project 'MyDesktopApplication.Shared' has the following package references [net10.0]: Top-level Package Requested Resolved > CommunityToolkit.Mvvm 8.4.0 8.4.0 > FluentValidation 12.1.1 12.1.1 Project 'MyDesktopApplication.Core.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 Project 'MyDesktopApplication.Integration.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.EntityFrameworkCore.InMemory 10.0.1 10.0.1 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 Project 'MyDesktopApplication.UI.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 (A) : Auto-referenced package. real 0m2.717s user 0m2.684s sys 0m0.643s Restore complete (0.7s) Build succeeded in 0.8s The following sources were used: https://api.nuget.org/v3/index.json The given project `MyDesktopApplication.Android` has no updates given the current sources. The given project `MyDesktopApplication.Core` has no updates given the current sources. The given project `MyDesktopApplication.Desktop` has no updates given the current sources. The given project `MyDesktopApplication.Infrastructure` has no updates given the current sources. The given project `MyDesktopApplication.Shared` has no updates given the current sources. The given project `MyDesktopApplication.Core.Tests` has no updates given the current sources. The given project `MyDesktopApplication.Integration.Tests` has no updates given the current sources. The given project `MyDesktopApplication.UI.Tests` has no updates given the current sources. real 0m3.376s user 0m3.505s sys 0m0.635s real 0m11.602s user 0m19.486s sys 0m1.659s ============================================== Generating Clean Project Export ============================================== Generating directory structure... Collecting and cleaning file contents... Processed: .gitattributes Processed: .github/dependabot.yml Processed: .github/workflows/build-and-release.yml Processed: .gitignore Processed: Directory.Build.props Processed: Directory.Packages.props Processed: MyDesktopApplication.slnx Processed: README.md Processed: consolidate-github-actions.sh Processed: docs/llm/commands.txt Processed: docs/llm/gemini.md Processed: docs/llm/grok.md Processed: docs/llm/output.txt Processed: docs/memory.md Processed: docs/thoughts.md Processed: fix-all-issues.sh Processed: fix-android-build.sh Processed: fix-android-crash.sh Processed: fix-android-errors.sh Processed: fix-app-update.sh Processed: fix-github-actions.sh Processed: fix-issues.sh Processed: fix-keystore.sh Processed: fix-ui-and-precision.sh Processed: fix-ui-tests.sh Processed: src/MyDesktopApplication.Android/AndroidManifest.xml Processed: src/MyDesktopApplication.Android/App.axaml Processed: src/MyDesktopApplication.Android/App.axaml.cs Processed: src/MyDesktopApplication.Android/Converters/Converters.cs Processed: src/MyDesktopApplication.Android/MainActivity.cs Processed: src/MyDesktopApplication.Android/MyDesktopApplication.Android.csproj Processed: src/MyDesktopApplication.Android/Resources/drawable/icon.xml Processed: src/MyDesktopApplication.Android/Resources/values/strings.xml Processed: src/MyDesktopApplication.Android/Resources/values/styles.xml Processed: src/MyDesktopApplication.Android/Views/MainView.axaml Processed: src/MyDesktopApplication.Android/Views/MainView.axaml.cs Processed: src/MyDesktopApplication.Core/Entities/Country.cs Processed: src/MyDesktopApplication.Core/Entities/EntityBase.cs Processed: src/MyDesktopApplication.Core/Entities/GameState.cs Processed: src/MyDesktopApplication.Core/Entities/QuestionType.cs Processed: src/MyDesktopApplication.Core/Entities/TodoItem.cs Processed: src/MyDesktopApplication.Core/Interfaces/IGameStateRepository.cs Processed: src/MyDesktopApplication.Core/Interfaces/IRepository.cs Processed: src/MyDesktopApplication.Core/Interfaces/ITodoRepository.cs Processed: src/MyDesktopApplication.Core/MyDesktopApplication.Core.csproj Processed: src/MyDesktopApplication.Desktop/App.axaml Processed: src/MyDesktopApplication.Desktop/App.axaml.cs Processed: src/MyDesktopApplication.Desktop/Converters/Converters.cs Processed: src/MyDesktopApplication.Desktop/MyDesktopApplication.Desktop.csproj Processed: src/MyDesktopApplication.Desktop/Program.cs Processed: src/MyDesktopApplication.Desktop/ViewModels/MainWindowViewModel.cs Processed: src/MyDesktopApplication.Desktop/ViewModels/ViewModelBase.cs Processed: src/MyDesktopApplication.Desktop/Views/MainWindow.axaml Processed: src/MyDesktopApplication.Desktop/Views/MainWindow.axaml.cs Processed: src/MyDesktopApplication.Desktop/app.manifest Processed: src/MyDesktopApplication.Desktop/appsettings.json Processed: src/MyDesktopApplication.Infrastructure/Data/AppDbContext.cs Processed: src/MyDesktopApplication.Infrastructure/Data/DesignTimeDbContextFactory.cs Processed: src/MyDesktopApplication.Infrastructure/DependencyInjection.cs Processed: src/MyDesktopApplication.Infrastructure/MyDesktopApplication.Infrastructure.csproj Processed: src/MyDesktopApplication.Infrastructure/Repositories/GameStateRepository.cs Processed: src/MyDesktopApplication.Infrastructure/Repositories/Repository.cs Processed: src/MyDesktopApplication.Infrastructure/Repositories/TodoRepository.cs Processed: src/MyDesktopApplication.Shared/DTOs/TodoItemDto.cs Processed: src/MyDesktopApplication.Shared/Data/CountryData.cs Processed: src/MyDesktopApplication.Shared/Data/MotivationalMessages.cs Processed: src/MyDesktopApplication.Shared/MyDesktopApplication.Shared.csproj Processed: src/MyDesktopApplication.Shared/ViewModels/CountryQuizViewModel.cs Processed: src/MyDesktopApplication.Shared/ViewModels/MainViewModel.cs Processed: src/MyDesktopApplication.Shared/ViewModels/ViewModelBase.cs Processed: tests/MyDesktopApplication.Core.Tests/GameStateTests.cs Processed: tests/MyDesktopApplication.Core.Tests/MyDesktopApplication.Core.Tests.csproj Processed: tests/MyDesktopApplication.Core.Tests/QuestionTypeTests.cs Processed: tests/MyDesktopApplication.Core.Tests/TodoItemTests.cs Processed: tests/MyDesktopApplication.Integration.Tests/MyDesktopApplication.Integration.Tests.csproj Processed: tests/MyDesktopApplication.Integration.Tests/TodoRepositoryTests.cs Processed: tests/MyDesktopApplication.UI.Tests/MainWindowViewModelTests.cs Processed: tests/MyDesktopApplication.UI.Tests/MyDesktopApplication.UI.Tests.csproj Export Complete: docs/llm/dump.txt real 0m0.836s user 0m0.427s sys 0m0.555s kushal@syn-2600-6c56-9840-001d-0000-0000-0000-1157:~/src/dotnet/MyDesktopApplication$ cd /home/kushal/src/dotnet/MyDesktopApplication; time dotnet clean; time dotnet restore; time dotnet build; time dotnet test; time dotnet list package; time dotnet list package --outdated; time dotnet format; time sh export.sh; Build succeeded in 0.6s real 0m0.815s user 0m0.940s sys 0m0.190s Restore complete (0.7s) Build succeeded in 0.8s real 0m0.969s user 0m1.085s sys 0m0.209s Restore complete (0.7s) MyDesktopApplication.Core net10.0 succeeded (0.1s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Core.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Core.Tests/bin/Debug/net10.0/MyDesktopApplication.Core.Tests.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.1s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Shared net10.0 succeeded (0.3s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Integration.Tests net10.0 succeeded (0.2s) → tests/MyDesktopApplication.Integration.Tests/bin/Debug/net10.0/MyDesktopApplication.Integration.Tests.dll MyDesktopApplication.Desktop net10.0 succeeded (0.6s) → src/MyDesktopApplication.Desktop/bin/Debug/net10.0/MyDesktopApplication.Desktop.dll MyDesktopApplication.UI.Tests net10.0 succeeded (0.2s) → tests/MyDesktopApplication.UI.Tests/bin/Debug/net10.0/MyDesktopApplication.UI.Tests.dll MyDesktopApplication.Core net10.0 succeeded (0.0s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Shared net10.0 succeeded (0.0s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.1s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Android net10.0-android succeeded with 2 warning(s) (22.1s) → src/MyDesktopApplication.Android/bin/Debug/net10.0-android/MyDesktopApplication.Android.dll /home/kushal/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.targets(2502,3): warning XA0141: Android 16 will require 16 KB page sizes, shared library 'libSkiaSharp.so' does not have a 16 KB page size. Please inform the authors of the NuGet package 'SkiaSharp.NativeAssets.Android' version '2.88.9' which contains 'runtimes/android-arm64/native/libSkiaSharp.so'. See https://developer.android.com/guide/practices/page-sizes for more details. /home/kushal/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.targets(2502,3): warning XA0141: Android 16 will require 16 KB page sizes, shared library 'libSkiaSharp.so' does not have a 16 KB page size. Please inform the authors of the NuGet package 'SkiaSharp.NativeAssets.Android' version '2.88.9' which contains 'runtimes/android-x64/native/libSkiaSharp.so'. See https://developer.android.com/guide/practices/page-sizes for more details. Build succeeded with 2 warning(s) in 23.5s real 0m23.743s user 1m17.308s sys 0m3.654s Restore complete (0.6s) MyDesktopApplication.Core net10.0 succeeded (0.1s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Shared net10.0 succeeded (0.0s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.1s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Core.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Core.Tests/bin/Debug/net10.0/MyDesktopApplication.Core.Tests.dll MyDesktopApplication.Integration.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Integration.Tests/bin/Debug/net10.0/MyDesktopApplication.Integration.Tests.dll MyDesktopApplication.Desktop net10.0 succeeded (0.1s) → src/MyDesktopApplication.Desktop/bin/Debug/net10.0/MyDesktopApplication.Desktop.dll MyDesktopApplication.UI.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.UI.Tests/bin/Debug/net10.0/MyDesktopApplication.UI.Tests.dll [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.06] Discovering: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.06] Discovering: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.10] Discovered: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.09] Discovered: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.13] Starting: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.11] Starting: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.06] Discovering: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.09] Discovered: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.11] Starting: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.21] Finished: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.17] Finished: MyDesktopApplication.UI.Tests MyDesktopApplication.Core.Tests test net10.0 succeeded (0.8s) MyDesktopApplication.UI.Tests test net10.0 succeeded (0.8s) [xUnit.net 00:00:00.79] Finished: MyDesktopApplication.Integration.Tests MyDesktopApplication.Integration.Tests test net10.0 succeeded (1.4s) Test summary: total: 28, failed: 0, succeeded: 28, skipped: 0, duration: 1.4s Build succeeded in 2.4s real 0m2.549s user 0m1.840s sys 0m0.384s Restore complete (0.7s) Build succeeded in 0.8s Project 'MyDesktopApplication.Android' has the following package references [net10.0-android36.0]: Top-level Package Requested Resolved > Avalonia 11.3.10 11.3.10 > Avalonia.Android 11.3.10 11.3.10 > Avalonia.Fonts.Inter 11.3.10 11.3.10 > Avalonia.Themes.Fluent 11.3.10 11.3.10 > CommunityToolkit.Mvvm 8.4.0 8.4.0 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 > Microsoft.NET.ILLink.Tasks (A) [10.0.1, ) 10.0.1 Project 'MyDesktopApplication.Core' has the following package references [net10.0]: No packages were found for this framework. Project 'MyDesktopApplication.Desktop' has the following package references [net10.0]: Top-level Package Requested Resolved > Avalonia.Desktop 11.3.10 11.3.10 > Avalonia.Diagnostics 11.3.10 11.3.10 > Avalonia.Fonts.Inter 11.3.10 11.3.10 > Avalonia.Themes.Fluent 11.3.10 11.3.10 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 Project 'MyDesktopApplication.Infrastructure' has the following package references [net10.0]: Top-level Package Requested Resolved > Microsoft.EntityFrameworkCore 10.0.1 10.0.1 > Microsoft.EntityFrameworkCore.Sqlite 10.0.1 10.0.1 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 Project 'MyDesktopApplication.Shared' has the following package references [net10.0]: Top-level Package Requested Resolved > CommunityToolkit.Mvvm 8.4.0 8.4.0 > FluentValidation 12.1.1 12.1.1 Project 'MyDesktopApplication.Core.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 Project 'MyDesktopApplication.Integration.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.EntityFrameworkCore.InMemory 10.0.1 10.0.1 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 Project 'MyDesktopApplication.UI.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 (A) : Auto-referenced package. real 0m2.667s user 0m2.732s sys 0m0.588s Restore complete (0.7s) Build succeeded in 0.8s The following sources were used: https://api.nuget.org/v3/index.json The given project `MyDesktopApplication.Android` has no updates given the current sources. The given project `MyDesktopApplication.Core` has no updates given the current sources. The given project `MyDesktopApplication.Desktop` has no updates given the current sources. The given project `MyDesktopApplication.Infrastructure` has no updates given the current sources. The given project `MyDesktopApplication.Shared` has no updates given the current sources. The given project `MyDesktopApplication.Core.Tests` has no updates given the current sources. The given project `MyDesktopApplication.Integration.Tests` has no updates given the current sources. The given project `MyDesktopApplication.UI.Tests` has no updates given the current sources. real 0m5.977s user 0m4.541s sys 0m0.717s real 0m10.876s user 0m16.574s sys 0m1.492s ============================================== Generating Clean Project Export ============================================== Generating directory structure... Collecting and cleaning file contents... Processed: .gitattributes Processed: .github/dependabot.yml Processed: .github/workflows/build-and-release.yml Processed: .gitignore Processed: Directory.Build.props Processed: Directory.Packages.props Processed: MyDesktopApplication.slnx Processed: README.md Processed: consolidate-github-actions.sh Processed: docs/llm/commands.txt Processed: docs/llm/gemini.md Processed: docs/llm/grok.md Processed: docs/llm/output.txt Processed: docs/memory.md Processed: docs/thoughts.md Processed: fix-all-issues.sh Processed: fix-android-build.sh Processed: fix-android-crash.sh Processed: fix-android-errors.sh Processed: fix-app-update.sh Processed: fix-github-actions.sh Processed: fix-issues.sh Processed: fix-keystore.sh Processed: fix-ui-and-precision.sh Processed: fix-ui-tests.sh Processed: src/MyDesktopApplication.Android/AndroidManifest.xml Processed: src/MyDesktopApplication.Android/App.axaml Processed: src/MyDesktopApplication.Android/App.axaml.cs Processed: src/MyDesktopApplication.Android/Converters/Converters.cs Processed: src/MyDesktopApplication.Android/MainActivity.cs Processed: src/MyDesktopApplication.Android/MyDesktopApplication.Android.csproj Processed: src/MyDesktopApplication.Android/Resources/drawable/icon.xml Processed: src/MyDesktopApplication.Android/Resources/values/strings.xml Processed: src/MyDesktopApplication.Android/Resources/values/styles.xml Processed: src/MyDesktopApplication.Android/Views/MainView.axaml Processed: src/MyDesktopApplication.Android/Views/MainView.axaml.cs Processed: src/MyDesktopApplication.Core/Entities/Country.cs Processed: src/MyDesktopApplication.Core/Entities/EntityBase.cs Processed: src/MyDesktopApplication.Core/Entities/GameState.cs Processed: src/MyDesktopApplication.Core/Entities/QuestionType.cs Processed: src/MyDesktopApplication.Core/Entities/TodoItem.cs Processed: src/MyDesktopApplication.Core/Interfaces/IGameStateRepository.cs Processed: src/MyDesktopApplication.Core/Interfaces/IRepository.cs Processed: src/MyDesktopApplication.Core/Interfaces/ITodoRepository.cs Processed: src/MyDesktopApplication.Core/MyDesktopApplication.Core.csproj Processed: src/MyDesktopApplication.Desktop/App.axaml Processed: src/MyDesktopApplication.Desktop/App.axaml.cs Processed: src/MyDesktopApplication.Desktop/Converters/Converters.cs Processed: src/MyDesktopApplication.Desktop/MyDesktopApplication.Desktop.csproj Processed: src/MyDesktopApplication.Desktop/Program.cs Processed: src/MyDesktopApplication.Desktop/ViewModels/MainWindowViewModel.cs Processed: src/MyDesktopApplication.Desktop/ViewModels/ViewModelBase.cs Processed: src/MyDesktopApplication.Desktop/Views/MainWindow.axaml Processed: src/MyDesktopApplication.Desktop/Views/MainWindow.axaml.cs Processed: src/MyDesktopApplication.Desktop/app.manifest Processed: src/MyDesktopApplication.Desktop/appsettings.json Processed: src/MyDesktopApplication.Infrastructure/Data/AppDbContext.cs Processed: src/MyDesktopApplication.Infrastructure/Data/DesignTimeDbContextFactory.cs Processed: src/MyDesktopApplication.Infrastructure/DependencyInjection.cs Processed: src/MyDesktopApplication.Infrastructure/MyDesktopApplication.Infrastructure.csproj Processed: src/MyDesktopApplication.Infrastructure/Repositories/GameStateRepository.cs Processed: src/MyDesktopApplication.Infrastructure/Repositories/Repository.cs Processed: src/MyDesktopApplication.Infrastructure/Repositories/TodoRepository.cs Processed: src/MyDesktopApplication.Shared/DTOs/TodoItemDto.cs Processed: src/MyDesktopApplication.Shared/Data/CountryData.cs Processed: src/MyDesktopApplication.Shared/Data/MotivationalMessages.cs Processed: src/MyDesktopApplication.Shared/MyDesktopApplication.Shared.csproj Processed: src/MyDesktopApplication.Shared/ViewModels/CountryQuizViewModel.cs Processed: src/MyDesktopApplication.Shared/ViewModels/MainViewModel.cs Processed: src/MyDesktopApplication.Shared/ViewModels/ViewModelBase.cs Processed: tests/MyDesktopApplication.Core.Tests/GameStateTests.cs Processed: tests/MyDesktopApplication.Core.Tests/MyDesktopApplication.Core.Tests.csproj Processed: tests/MyDesktopApplication.Core.Tests/QuestionTypeTests.cs Processed: tests/MyDesktopApplication.Core.Tests/TodoItemTests.cs Processed: tests/MyDesktopApplication.Integration.Tests/MyDesktopApplication.Integration.Tests.csproj Processed: tests/MyDesktopApplication.Integration.Tests/TodoRepositoryTests.cs Processed: tests/MyDesktopApplication.UI.Tests/MainWindowViewModelTests.cs Processed: tests/MyDesktopApplication.UI.Tests/MyDesktopApplication.UI.Tests.csproj Export Complete: docs/llm/dump.txt real 0m0.819s user 0m0.446s sys 0m0.527s kushal@syn-2600-6c56-9840-001d-0000-0000-0000-1157:~/src/dotnet/MyDesktopApplication$ cat fix-android-keystore.sh; time bash fix-android-keystore.sh #!/bin/bash # This script fixes the Android keystore path issue in the GitHub Actions workflow. # # Problem: The workflow creates android.keystore in the repository root, but the # Android build can't find it because: # 1. The path in the build command is relative to where dotnet build runs # 2. When building the entire solution, the working directory context changes # # Solution: Use an absolute path via $GITHUB_WORKSPACE and ensure the keystore # is properly set up BEFORE the build step with correct path resolution. set -e WORKFLOW_FILE=".github/workflows/build-and-release.yml" if [[ ! -f "$WORKFLOW_FILE" ]]; then echo "Error: $WORKFLOW_FILE not found" exit 1 fi # Create backup cp "$WORKFLOW_FILE" "${WORKFLOW_FILE}.backup" # Write the complete corrected workflow file cat > "$WORKFLOW_FILE" << 'WORKFLOW_EOF' name: Build and Release on: push: branches: [master, main] pull_request: branches: [master, main] env: DOTNET_NOLOGO: true DOTNET_CLI_TELEMETRY_OPTOUT: true DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true jobs: # ============================================================================= # Build and Test (runs on every push/PR) # ============================================================================= build-and-test: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: Setup Java uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' - name: Install Android workload run: dotnet workload install android - name: Setup Keystore run: | # Create keystore from secret, or create a dummy one for PR builds if [[ -n "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" ]]; then echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > "$GITHUB_WORKSPACE/android.keystore" echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/android.keystore" >> "$GITHUB_ENV" echo "SIGNING_PASSWORD=${{ secrets.ANDROID_SIGNING_PASSWORD }}" >> "$GITHUB_ENV" else # For PRs from forks or when secrets aren't available, create a dummy keystore keytool -genkey -v -keystore "$GITHUB_WORKSPACE/android.keystore" \ -alias myalias -keyalg RSA -keysize 2048 -validity 1 \ -storepass dummypassword -keypass dummypassword \ -dname "CN=Dummy, OU=Dummy, O=Dummy, L=Dummy, ST=Dummy, C=US" \ 2>/dev/null || true echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/android.keystore" >> "$GITHUB_ENV" echo "SIGNING_PASSWORD=dummypassword" >> "$GITHUB_ENV" fi echo "Keystore created at: $GITHUB_WORKSPACE/android.keystore" ls -la "$GITHUB_WORKSPACE/android.keystore" - name: Restore run: dotnet restore - name: Build run: | dotnet build --configuration Release --no-restore \ -p:BuildNumber=${{ github.run_number }} \ -p:AndroidKeyStore=true \ -p:AndroidSigningKeyStore="${{ env.KEYSTORE_PATH }}" \ -p:AndroidSigningStorePass="${{ env.SIGNING_PASSWORD }}" \ -p:AndroidSigningKeyPass="${{ env.SIGNING_PASSWORD }}" \ -p:AndroidSigningKeyAlias=myalias - name: Test run: dotnet test --configuration Release --no-build --verbosity normal # ============================================================================= # Build Desktop Releases # ============================================================================= build-desktop: needs: build-and-test if: github.event_name == 'push' strategy: matrix: include: - os: ubuntu-latest rid: linux-x64 artifact: linux-x64 - os: ubuntu-latest rid: linux-arm64 artifact: linux-arm64 - os: windows-latest rid: win-x64 artifact: win-x64 - os: windows-latest rid: win-arm64 artifact: win-arm64 - os: macos-latest rid: osx-x64 artifact: osx-x64 - os: macos-latest rid: osx-arm64 artifact: osx-arm64 runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: Publish run: | dotnet publish src/MyDesktopApplication.Desktop/MyDesktopApplication.Desktop.csproj \ --configuration Release \ -r ${{ matrix.rid }} \ --self-contained true \ -p:PublishSingleFile=true \ -p:IncludeNativeLibrariesForSelfExtract=true \ -p:BuildNumber=${{ github.run_number }} \ --output ./publish - name: Upload artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.artifact }} path: ./publish/ retention-days: 30 # ============================================================================= # Build Android APK # ============================================================================= build-android: needs: build-and-test if: github.event_name == 'push' runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Keystore run: | echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > "$GITHUB_WORKSPACE/android.keystore" echo "Keystore created at: $GITHUB_WORKSPACE/android.keystore" ls -la "$GITHUB_WORKSPACE/android.keystore" - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: Setup Java uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' - name: Install Android workload run: dotnet workload install android - name: Accept Android licenses run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses || true - name: Build and Sign Android APK run: | dotnet publish src/MyDesktopApplication.Android/MyDesktopApplication.Android.csproj \ --configuration Release \ -p:BuildNumber=${{ github.run_number }} \ --output ./publish/android \ -p:AndroidKeyStore=true \ -p:AndroidSigningKeyStore="$GITHUB_WORKSPACE/android.keystore" \ -p:AndroidSigningStorePass="${{ secrets.ANDROID_SIGNING_PASSWORD }}" \ -p:AndroidSigningKeyPass="${{ secrets.ANDROID_SIGNING_PASSWORD }}" \ -p:AndroidSigningKeyAlias=myalias - name: Find and rename APK run: | APK_PATH=$(find ./publish/android -name "*-Signed.apk" | head -1) if [[ -z "$APK_PATH" ]]; then APK_PATH=$(find ./publish/android -name "*.apk" | head -1) fi if [[ -n "$APK_PATH" ]]; then cp "$APK_PATH" "./publish/MyDesktopApplication-android-${{ github.run_number }}.apk" echo "APK renamed to: MyDesktopApplication-android-${{ github.run_number }}.apk" else echo "No APK found!" find ./publish -type f -name "*.apk" || echo "No APK files anywhere" exit 1 fi - name: Upload artifact uses: actions/upload-artifact@v4 with: name: android path: ./publish/MyDesktopApplication-android-${{ github.run_number }}.apk retention-days: 30 # ============================================================================= # Create Release # ============================================================================= create-release: needs: [build-desktop, build-android] if: github.event_name == 'push' runs-on: ubuntu-latest permissions: contents: write steps: - name: Download all artifacts uses: actions/download-artifact@v4 with: path: ./artifacts - name: List artifacts run: find ./artifacts -type f - name: Create Release uses: softprops/action-gh-release@v2 with: tag_name: v1.0.${{ github.run_number }} name: Release v1.0.${{ github.run_number }} draft: false prerelease: false files: | ./artifacts/**/* env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} WORKFLOW_EOF echo "✓ Updated $WORKFLOW_FILE" echo "" echo "Key changes made:" echo " 1. Using \$GITHUB_WORKSPACE for absolute keystore path" echo " 2. Storing keystore path and password in GITHUB_ENV for use in build step" echo " 3. Proper conditional handling for PR builds vs push builds" echo "" echo "Next steps:" echo " 1. Verify your GitHub secrets are set:" echo " - ANDROID_KEYSTORE_BASE64" echo " - ANDROID_SIGNING_PASSWORD" echo " 2. Commit and push this change" echo " 3. The build should now find the keystore correctly" ✓ Updated .github/workflows/build-and-release.yml Key changes made: 1. Using $GITHUB_WORKSPACE for absolute keystore path 2. Storing keystore path and password in GITHUB_ENV for use in build step 3. Proper conditional handling for PR builds vs push builds Next steps: 1. Verify your GitHub secrets are set: - ANDROID_KEYSTORE_BASE64 - ANDROID_SIGNING_PASSWORD 2. Commit and push this change 3. The build should now find the keystore correctly real 0m0.016s user 0m0.001s sys 0m0.005s kushal@syn-2600-6c56-9840-001d-0000-0000-0000-1157:~/src/dotnet/MyDesktopApplication$ cd /home/kushal/src/dotnet/MyDesktopApplication; time dotnet clean; time dotnet restore; time dotnet build; time dotnet test; time dotnet list package; time dotnet list package --outdated; time dotnet format; time sh export.sh; Build succeeded in 0.6s real 0m0.801s user 0m0.878s sys 0m0.222s Restore complete (0.7s) Build succeeded in 0.9s real 0m1.015s user 0m1.154s sys 0m0.191s Restore complete (0.7s) MyDesktopApplication.Core net10.0 succeeded (0.1s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.1s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Core.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Core.Tests/bin/Debug/net10.0/MyDesktopApplication.Core.Tests.dll MyDesktopApplication.Integration.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Integration.Tests/bin/Debug/net10.0/MyDesktopApplication.Integration.Tests.dll MyDesktopApplication.Shared net10.0 succeeded (0.3s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Desktop net10.0 succeeded (0.9s) → src/MyDesktopApplication.Desktop/bin/Debug/net10.0/MyDesktopApplication.Desktop.dll MyDesktopApplication.UI.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.UI.Tests/bin/Debug/net10.0/MyDesktopApplication.UI.Tests.dll MyDesktopApplication.Core net10.0 succeeded (0.0s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.0s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Shared net10.0 succeeded (0.0s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Android net10.0-android succeeded with 2 warning(s) (22.1s) → src/MyDesktopApplication.Android/bin/Debug/net10.0-android/MyDesktopApplication.Android.dll /home/kushal/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.targets(2502,3): warning XA0141: Android 16 will require 16 KB page sizes, shared library 'libSkiaSharp.so' does not have a 16 KB page size. Please inform the authors of the NuGet package 'SkiaSharp.NativeAssets.Android' version '2.88.9' which contains 'runtimes/android-arm64/native/libSkiaSharp.so'. See https://developer.android.com/guide/practices/page-sizes for more details. /home/kushal/.dotnet/packs/Microsoft.Android.Sdk.Linux/36.1.2/tools/Xamarin.Android.Common.targets(2502,3): warning XA0141: Android 16 will require 16 KB page sizes, shared library 'libSkiaSharp.so' does not have a 16 KB page size. Please inform the authors of the NuGet package 'SkiaSharp.NativeAssets.Android' version '2.88.9' which contains 'runtimes/android-x64/native/libSkiaSharp.so'. See https://developer.android.com/guide/practices/page-sizes for more details. Build succeeded with 2 warning(s) in 23.5s real 0m23.671s user 1m18.885s sys 0m3.518s Restore complete (0.6s) MyDesktopApplication.Core net10.0 succeeded (0.1s) → src/MyDesktopApplication.Core/bin/Debug/net10.0/MyDesktopApplication.Core.dll MyDesktopApplication.Shared net10.0 succeeded (0.0s) → src/MyDesktopApplication.Shared/bin/Debug/net10.0/MyDesktopApplication.Shared.dll MyDesktopApplication.Infrastructure net10.0 succeeded (0.1s) → src/MyDesktopApplication.Infrastructure/bin/Debug/net10.0/MyDesktopApplication.Infrastructure.dll MyDesktopApplication.Core.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Core.Tests/bin/Debug/net10.0/MyDesktopApplication.Core.Tests.dll MyDesktopApplication.Desktop net10.0 succeeded (0.1s) → src/MyDesktopApplication.Desktop/bin/Debug/net10.0/MyDesktopApplication.Desktop.dll MyDesktopApplication.Integration.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.Integration.Tests/bin/Debug/net10.0/MyDesktopApplication.Integration.Tests.dll MyDesktopApplication.UI.Tests net10.0 succeeded (0.1s) → tests/MyDesktopApplication.UI.Tests/bin/Debug/net10.0/MyDesktopApplication.UI.Tests.dll [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.06] Discovering: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v3.1.5+1b188a7b0a (64-bit .NET 10.0.1) [xUnit.net 00:00:00.06] Discovering: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.10] Discovered: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.09] Discovered: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.13] Starting: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.06] Discovering: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.11] Starting: MyDesktopApplication.Integration.Tests [xUnit.net 00:00:00.09] Discovered: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.11] Starting: MyDesktopApplication.UI.Tests [xUnit.net 00:00:00.20] Finished: MyDesktopApplication.Core.Tests [xUnit.net 00:00:00.18] Finished: MyDesktopApplication.UI.Tests MyDesktopApplication.Core.Tests test net10.0 succeeded (0.8s) MyDesktopApplication.UI.Tests test net10.0 succeeded (0.8s) [xUnit.net 00:00:00.70] Finished: MyDesktopApplication.Integration.Tests MyDesktopApplication.Integration.Tests test net10.0 succeeded (1.3s) Test summary: total: 28, failed: 0, succeeded: 28, skipped: 0, duration: 1.3s Build succeeded in 2.3s real 0m2.438s user 0m1.808s sys 0m0.361s Restore complete (0.6s) Build succeeded in 0.7s Project 'MyDesktopApplication.Android' has the following package references [net10.0-android36.0]: Top-level Package Requested Resolved > Avalonia 11.3.10 11.3.10 > Avalonia.Android 11.3.10 11.3.10 > Avalonia.Fonts.Inter 11.3.10 11.3.10 > Avalonia.Themes.Fluent 11.3.10 11.3.10 > CommunityToolkit.Mvvm 8.4.0 8.4.0 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 > Microsoft.NET.ILLink.Tasks (A) [10.0.1, ) 10.0.1 Project 'MyDesktopApplication.Core' has the following package references [net10.0]: No packages were found for this framework. Project 'MyDesktopApplication.Desktop' has the following package references [net10.0]: Top-level Package Requested Resolved > Avalonia.Desktop 11.3.10 11.3.10 > Avalonia.Diagnostics 11.3.10 11.3.10 > Avalonia.Fonts.Inter 11.3.10 11.3.10 > Avalonia.Themes.Fluent 11.3.10 11.3.10 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 Project 'MyDesktopApplication.Infrastructure' has the following package references [net10.0]: Top-level Package Requested Resolved > Microsoft.EntityFrameworkCore 10.0.1 10.0.1 > Microsoft.EntityFrameworkCore.Sqlite 10.0.1 10.0.1 > Microsoft.Extensions.DependencyInjection 10.0.1 10.0.1 Project 'MyDesktopApplication.Shared' has the following package references [net10.0]: Top-level Package Requested Resolved > CommunityToolkit.Mvvm 8.4.0 8.4.0 > FluentValidation 12.1.1 12.1.1 Project 'MyDesktopApplication.Core.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.NET.Test.Sdk 18.0.1 18.0.1 > NSubstitute 5.3.0 5.3.0 > Shouldly 4.3.0 4.3.0 > xunit 2.9.3 2.9.3 > xunit.runner.visualstudio 3.1.5 3.1.5 Project 'MyDesktopApplication.Integration.Tests' has the following package references [net10.0]: Top-level Package Requested Resolved > coverlet.collector 6.0.4 6.0.4 > Microsoft.EntityFrame…
1 parent 28b18e2 commit 285bbfa

File tree

2 files changed

+352
-71
lines changed

2 files changed

+352
-71
lines changed
Lines changed: 123 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# =============================================================================
2+
# Build and Release Workflow
3+
# =============================================================================
4+
# Every push to master/main creates a release with version 1.0.{run_number}
5+
# No git tags required - uses github.run_number for automatic versioning
6+
# =============================================================================
7+
18
name: Build and Release
29

310
on:
@@ -12,9 +19,9 @@ env:
1219
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
1320

1421
jobs:
15-
# =============================================================================
16-
# Build and Test (runs on every push/PR)
17-
# =============================================================================
22+
# ===========================================================================
23+
# Build and Test
24+
# ===========================================================================
1825
build-and-test:
1926
runs-on: ubuntu-latest
2027
steps:
@@ -37,49 +44,25 @@ jobs:
3744
- name: Install Android workload
3845
run: dotnet workload install android
3946

40-
- name: Setup Keystore
41-
run: |
42-
# Create keystore from secret, or create a dummy one for PR builds
43-
if [[ -n "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" ]]; then
44-
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > "$GITHUB_WORKSPACE/android.keystore"
45-
echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/android.keystore" >> "$GITHUB_ENV"
46-
echo "SIGNING_PASSWORD=${{ secrets.ANDROID_SIGNING_PASSWORD }}" >> "$GITHUB_ENV"
47-
else
48-
# For PRs from forks or when secrets aren't available, create a dummy keystore
49-
keytool -genkey -v -keystore "$GITHUB_WORKSPACE/android.keystore" \
50-
-alias myalias -keyalg RSA -keysize 2048 -validity 1 \
51-
-storepass dummypassword -keypass dummypassword \
52-
-dname "CN=Dummy, OU=Dummy, O=Dummy, L=Dummy, ST=Dummy, C=US" \
53-
2>/dev/null || true
54-
echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/android.keystore" >> "$GITHUB_ENV"
55-
echo "SIGNING_PASSWORD=dummypassword" >> "$GITHUB_ENV"
56-
fi
57-
echo "Keystore created at: $GITHUB_WORKSPACE/android.keystore"
58-
ls -la "$GITHUB_WORKSPACE/android.keystore"
59-
6047
- name: Restore
6148
run: dotnet restore
6249

6350
- name: Build
64-
run: |
65-
dotnet build --configuration Release --no-restore \
66-
-p:BuildNumber=${{ github.run_number }} \
67-
-p:AndroidKeyStore=true \
68-
-p:AndroidSigningKeyStore="${{ env.KEYSTORE_PATH }}" \
69-
-p:AndroidSigningStorePass="${{ env.SIGNING_PASSWORD }}" \
70-
-p:AndroidSigningKeyPass="${{ env.SIGNING_PASSWORD }}" \
71-
-p:AndroidSigningKeyAlias=myalias
51+
run: dotnet build --configuration Release --no-restore
7252

7353
- name: Test
74-
run: dotnet test --configuration Release --no-build --verbosity normal
54+
run: |
55+
dotnet test --configuration Release --no-build --verbosity normal \
56+
--filter "FullyQualifiedName!~Android"
7557
76-
# =============================================================================
77-
# Build Desktop Releases
78-
# =============================================================================
58+
# ===========================================================================
59+
# Build Desktop Binaries (Matrix)
60+
# ===========================================================================
7961
build-desktop:
8062
needs: build-and-test
8163
if: github.event_name == 'push'
8264
strategy:
65+
fail-fast: false
8366
matrix:
8467
include:
8568
- os: ubuntu-latest
@@ -119,19 +102,35 @@ jobs:
119102
--self-contained true \
120103
-p:PublishSingleFile=true \
121104
-p:IncludeNativeLibrariesForSelfExtract=true \
122-
-p:BuildNumber=${{ github.run_number }} \
105+
-p:Version=1.0.${{ github.run_number }} \
123106
--output ./publish
124107
108+
- name: Create archive (Unix)
109+
if: runner.os != 'Windows'
110+
shell: bash
111+
run: |
112+
cd ./publish
113+
tar -czvf ../MyDesktopApplication-${{ matrix.artifact }}.tar.gz .
114+
115+
- name: Create archive (Windows)
116+
if: runner.os == 'Windows'
117+
shell: pwsh
118+
run: |
119+
Compress-Archive -Path ./publish/* -DestinationPath ./MyDesktopApplication-${{ matrix.artifact }}.zip
120+
125121
- name: Upload artifact
126122
uses: actions/upload-artifact@v4
127123
with:
128124
name: ${{ matrix.artifact }}
129-
path: ./publish/
130-
retention-days: 30
125+
path: |
126+
./MyDesktopApplication-${{ matrix.artifact }}.tar.gz
127+
./MyDesktopApplication-${{ matrix.artifact }}.zip
128+
if-no-files-found: error
129+
retention-days: 7
131130

132-
# =============================================================================
131+
# ===========================================================================
133132
# Build Android APK
134-
# =============================================================================
133+
# ===========================================================================
135134
build-android:
136135
needs: build-and-test
137136
if: github.event_name == 'push'
@@ -140,12 +139,6 @@ jobs:
140139
- name: Checkout
141140
uses: actions/checkout@v4
142141

143-
- name: Setup Keystore
144-
run: |
145-
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > "$GITHUB_WORKSPACE/android.keystore"
146-
echo "Keystore created at: $GITHUB_WORKSPACE/android.keystore"
147-
ls -la "$GITHUB_WORKSPACE/android.keystore"
148-
149142
- name: Setup .NET
150143
uses: actions/setup-dotnet@v4
151144
with:
@@ -160,47 +153,68 @@ jobs:
160153
- name: Install Android workload
161154
run: dotnet workload install android
162155

163-
- name: Accept Android licenses
164-
run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses || true
156+
- name: Setup Keystore
157+
if: ${{ secrets.ANDROID_KEYSTORE_BASE64 != '' }}
158+
run: |
159+
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > "$GITHUB_WORKSPACE/android.keystore"
160+
echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/android.keystore" >> "$GITHUB_ENV"
161+
echo "HAS_KEYSTORE=true" >> "$GITHUB_ENV"
165162
166-
- name: Build and Sign Android APK
163+
- name: Build Android APK (Signed)
164+
if: env.HAS_KEYSTORE == 'true'
165+
shell: bash
167166
run: |
168167
dotnet publish src/MyDesktopApplication.Android/MyDesktopApplication.Android.csproj \
169168
--configuration Release \
170-
-p:BuildNumber=${{ github.run_number }} \
171-
--output ./publish/android \
169+
-p:ApplicationVersion=${{ github.run_number }} \
170+
-p:ApplicationDisplayVersion=1.0.${{ github.run_number }} \
172171
-p:AndroidKeyStore=true \
173-
-p:AndroidSigningKeyStore="$GITHUB_WORKSPACE/android.keystore" \
172+
-p:AndroidSigningKeyStore="${{ env.KEYSTORE_PATH }}" \
174173
-p:AndroidSigningStorePass="${{ secrets.ANDROID_SIGNING_PASSWORD }}" \
175174
-p:AndroidSigningKeyPass="${{ secrets.ANDROID_SIGNING_PASSWORD }}" \
176-
-p:AndroidSigningKeyAlias=myalias
175+
-p:AndroidSigningKeyAlias=myalias \
176+
-p:AndroidUseAapt2Daemon=false \
177+
--output ./publish/android
177178
178-
- name: Find and rename APK
179+
- name: Build Android APK (Unsigned)
180+
if: env.HAS_KEYSTORE != 'true'
181+
shell: bash
179182
run: |
180-
APK_PATH=$(find ./publish/android -name "*-Signed.apk" | head -1)
181-
if [[ -z "$APK_PATH" ]]; then
182-
APK_PATH=$(find ./publish/android -name "*.apk" | head -1)
183-
fi
183+
dotnet publish src/MyDesktopApplication.Android/MyDesktopApplication.Android.csproj \
184+
--configuration Release \
185+
-p:ApplicationVersion=${{ github.run_number }} \
186+
-p:ApplicationDisplayVersion=1.0.${{ github.run_number }} \
187+
-p:AndroidUseAapt2Daemon=false \
188+
--output ./publish/android
189+
190+
- name: Rename APK
191+
shell: bash
192+
run: |
193+
# Find the APK (could be -Signed.apk or just .apk)
194+
APK_PATH=$(find ./publish/android -name "*-Signed.apk" -o -name "*.apk" | grep -v "\.aab$" | head -1)
184195
185196
if [[ -n "$APK_PATH" ]]; then
186-
cp "$APK_PATH" "./publish/MyDesktopApplication-android-${{ github.run_number }}.apk"
187-
echo "APK renamed to: MyDesktopApplication-android-${{ github.run_number }}.apk"
197+
FINAL_NAME="MyDesktopApplication-android-${{ github.run_number }}.apk"
198+
cp "$APK_PATH" "./$FINAL_NAME"
199+
echo "APK renamed to: $FINAL_NAME"
200+
ls -la "./$FINAL_NAME"
188201
else
189-
echo "No APK found!"
190-
find ./publish -type f -name "*.apk" || echo "No APK files anywhere"
202+
echo "ERROR: No APK found!"
203+
find ./publish -type f -name "*.apk" || echo "No APK files found anywhere"
191204
exit 1
192205
fi
193206
194207
- name: Upload artifact
195208
uses: actions/upload-artifact@v4
196209
with:
197210
name: android
198-
path: ./publish/MyDesktopApplication-android-${{ github.run_number }}.apk
199-
retention-days: 30
211+
path: ./MyDesktopApplication-android-${{ github.run_number }}.apk
212+
if-no-files-found: error
213+
retention-days: 7
200214

201-
# =============================================================================
202-
# Create Release
203-
# =============================================================================
215+
# ===========================================================================
216+
# Create GitHub Release
217+
# ===========================================================================
204218
create-release:
205219
needs: [build-desktop, build-android]
206220
if: github.event_name == 'push'
@@ -213,8 +227,21 @@ jobs:
213227
with:
214228
path: ./artifacts
215229

216-
- name: List artifacts
217-
run: find ./artifacts -type f
230+
- name: Prepare release files
231+
shell: bash
232+
run: |
233+
echo "=== Downloaded artifacts structure ==="
234+
find ./artifacts -type f
235+
echo ""
236+
237+
# Create flat release directory
238+
mkdir -p ./release
239+
240+
# Copy all archives and APK to release folder (flatten structure)
241+
find ./artifacts -type f \( -name "*.tar.gz" -o -name "*.zip" -o -name "*.apk" \) -exec cp {} ./release/ \;
242+
243+
echo "=== Release files ==="
244+
ls -la ./release/
218245
219246
- name: Create Release
220247
uses: softprops/action-gh-release@v2
@@ -223,7 +250,32 @@ jobs:
223250
name: Release v1.0.${{ github.run_number }}
224251
draft: false
225252
prerelease: false
226-
files: |
227-
./artifacts/**/*
253+
generate_release_notes: true
254+
files: ./release/*
255+
body: |
256+
## MyDesktopApplication v1.0.${{ github.run_number }}
257+
258+
### Downloads
259+
260+
| Platform | File |
261+
|----------|------|
262+
| Windows x64 | `MyDesktopApplication-win-x64.zip` |
263+
| Windows ARM64 | `MyDesktopApplication-win-arm64.zip` |
264+
| Linux x64 | `MyDesktopApplication-linux-x64.tar.gz` |
265+
| Linux ARM64 | `MyDesktopApplication-linux-arm64.tar.gz` |
266+
| macOS x64 (Intel) | `MyDesktopApplication-osx-x64.tar.gz` |
267+
| macOS ARM64 (Apple Silicon) | `MyDesktopApplication-osx-arm64.tar.gz` |
268+
| Android | `MyDesktopApplication-android-${{ github.run_number }}.apk` |
269+
270+
### Android Users (Obtainium)
271+
272+
**Version Code**: `${{ github.run_number }}`
273+
274+
Point Obtainium to this repository's releases for automatic updates.
275+
The APK version code increments with each release.
276+
277+
### Changes
278+
279+
See commit history for details.
228280
env:
229281
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)