# IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.ios-!(*.symbols).nupkg
# IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.iossimulator-!(*.symbols).nupkg
# IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.maccatalyst-!(*.symbols).nupkg
-
+
# # Other artifacts to include once they are being built
# # EX. IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.maccatalyst-*.nupkg
# cleanTargetFolder: false
# targetFolder: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks
# flattenFolders: true
-
+
#- script: |
# for file in *.nupkg
- # do
- # mv -v "$file" "${file%.nupkg}.zip"
+ # do
+ # mv -v "$file" "${file%.nupkg}.zip"
# done
# displayName: Change nupkgs to zips
# workingDirectory: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks
-
+
##Unzip the nuget packages to make the actual runtimes accessible
#- task: ExtractFiles@1
displayName: Build MAUI MacCatalyst
workingDirectory: $(Build.SourcesDirectory)/MauiTesting
+ - script: |
+ ./dotnet new maui-blazor -n MauiBlazorTesting
+ cd MauiBlazorTesting
+ cp $(Build.SourcesDirectory)/src/tests/Common/maui/MauiScenario.props ./Directory.Build.props
+ cp $(Build.SourcesDirectory)/src/tests/Common/maui/MauiScenario.targets ./Directory.Build.targets
+ cp $(Build.SourcesDirectory)/NuGet.config ./NuGet.config
+
+ echo -e "using Microsoft.AspNetCore.Components;
+ #if ANDROID
+ using Android.App;
+ #endif
+
+ namespace MauiBlazorTesting.Pages
+ {
+ public partial class Index
+ {
+ protected override void OnAfterRender(bool firstRender)
+ {
+ if (firstRender)
+ {
+ #if ANDROID
+ var activity = MainActivity.Context as Activity;
+ activity.ReportFullyDrawn();
+ #else
+ System.Console.WriteLine("__MAUI_Blazor_WebView_OnAfterRender__");
+ #endif
+ }
+ }
+ }
+ }" > Pages/Index.razor.cs
+
+ sed -i'' -e "s/{/{\npublic static Android.Content.Context Context { get; private set; }\npublic MainActivity() { Context = this; }/g" Platforms/Android/MainActivity.cs
+ displayName: Setup MAUI Blazor Hybrid Project
+ workingDirectory: $(Build.SourcesDirectory)
+
+ - script: |
+ chmod -R a+r .
+ # Restore is split out because of https://github.com/dotnet/sdk/issues/21877, can be removed with --no-restore once fixed
+ ../dotnet restore
+ ../dotnet publish -bl:MauiBlazorAndroid.binlog -f net6.0-android -c Release -r android-arm64 --no-restore --self-contained
+ mv ./bin/Release/net6.0-android/android-arm64/com.companyname.mauiblazortesting-Signed.apk ./MauiBlazorAndroidDefault.apk
+ displayName: Build MAUI Blazor Android
+ workingDirectory: $(Build.SourcesDirectory)/MauiBlazorTesting
+
- task: PublishBuildArtifacts@1
displayName: 'Publish MauiAndroid binlog'
condition: always()
artifactName: ${{ parameters.artifactName }}
- task: PublishBuildArtifacts@1
+ displayName: 'Publish MauiBlazorAndroid binlog'
+ condition: always()
+ inputs:
+ pathtoPublish: $(Build.SourcesDirectory)/MauiBlazorTesting/MauiBlazorAndroid.binlog
+ artifactName: ${{ parameters.artifactName }}
+
+ - task: PublishBuildArtifacts@1
displayName: 'Publish MauiiOS binlog'
condition: always()
inputs:
- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
+ rootFolder: $(Build.SourcesDirectory)/MauiBlazorTesting/MauiBlazorAndroidDefault.apk
+ includeRootFolder: true
+ displayName: Maui Blazor Android App
+ artifactName: MauiBlazorAndroidApp
+ archiveExtension: '.tar.gz'
+ archiveType: tar
+ tarCompression: gz
+
+ - template: /eng/pipelines/common/upload-artifact-step.yml
+ parameters:
rootFolder: $(Build.SourcesDirectory)/MauiTesting/MauiAndroidPodcast.apk
includeRootFolder: true
displayName: Maui Android Podcast
- script: rm -r -f ./bin
workingDirectory: $(Build.SourcesDirectory)/MauiTesting
- displayName: Clean bin directory
+ displayName: Clean MauiTesting bin directory
+ condition: succeededOrFailed()
+
+ - script: rm -r -f ./bin
+ workingDirectory: $(Build.SourcesDirectory)/MauiBlazorTesting
+ displayName: Clean MauiBlazorTesting bin directory
condition: succeededOrFailed()
- template: /eng/pipelines/common/upload-artifact-step.yml
artifactFileName: 'MauiAndroidPodcast.tar.gz'
artifactName: 'MauiAndroidPodcast'
displayName: 'Maui Android Podcast'
+ - template: /eng/pipelines/common/download-artifact-step.yml
+ parameters:
+ unpackFolder: $(Build.SourcesDirectory)
+ cleanUnpackFolder: false
+ artifactFileName: 'MauiBlazorAndroidApp.tar.gz'
+ artifactName: 'MauiBlazorAndroidApp'
+ displayName: 'Maui Blazor Android App'
# Download iOSMono tests and MauiiOS/MacCatalyst
<Command>$(Python) test.py sod --scenario-name "%(Identity)"</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
+ <HelixWorkItem Include="SOD - Maui Blazor Android APK Size">
+ <PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
+ <PreCommands>cd $(ScenarioDirectory)mauiblazorandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiBlazorAndroidDefault.apk .; $(Python) pre.py --apk-name MauiBlazorAndroidDefault.apk</PreCommands>
+ <Command>$(Python) test.py sod --scenario-name "%(Identity)"</Command>
+ <PostCommands>$(Python) post.py</PostCommands>
+ </HelixWorkItem>
<HelixWorkItem Include="SOD - Maui Android Podcast APK Size">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)mauiandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiAndroidPodcast.apk .; $(Python) pre.py --apk-name MauiAndroidPodcast.apk</PreCommands>
<Command>$(Python) test.py sod --scenario-name "%(Identity)"</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
+ <HelixWorkItem Include="SOD - Maui Blazor Android Extracted Size">
+ <PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
+ <PreCommands>cd $(ScenarioDirectory)mauiblazorandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiBlazorAndroidDefault.apk .; $(Python) pre.py --unzip --apk-name MauiBlazorAndroidDefault.apk</PreCommands>
+ <Command>$(Python) test.py sod --scenario-name "%(Identity)"</Command>
+ <PostCommands>$(Python) post.py</PostCommands>
+ </HelixWorkItem>
<HelixWorkItem Include="SOD - Maui Android Podcast Extracted Size">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)mauiandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiAndroidPodcast.apk .; $(Python) pre.py --unzip --apk-name MauiAndroidPodcast.apk</PreCommands>
<Command>$(Python) test.py devicestartup --device-type android --package-path pub\MauiAndroidDefault.apk --package-name com.companyname.mauitesting --scenario-name "%(Identity)"</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
+ <HelixWorkItem Include="Device Startup - Android Maui Blazor DefaultTesting">
+ <PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
+ <PreCommands>echo on;set XHARNESSPATH=$(XharnessPath);cd $(ScenarioDirectory)mauiblazorandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiBlazorAndroidDefault.apk .;$(Python) pre.py --apk-name MauiBlazorAndroidDefault.apk</PreCommands>
+ <Command>$(Python) test.py devicestartup --device-type android --package-path pub\MauiBlazorAndroidDefault.apk --package-name com.companyname.mauiblazortesting --scenario-name "%(Identity)" --use-fully-drawn-time --fully-drawn-extra-delay 6</Command>
+ <PostCommands>$(Python) post.py</PostCommands>
+ </HelixWorkItem>
<HelixWorkItem Include="Device Startup - Android Maui Podcast">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>echo on;set XHARNESSPATH=$(XharnessPath);cd $(ScenarioDirectory)mauiandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiAndroidPodcast.apk .;$(Python) pre.py --apk-name MauiAndroidPodcast.apk</PreCommands>
<Command>$(Python) test.py devicestartup --device-type android --package-path pub\MauiAndroidDefault.apk --package-name com.companyname.mauitesting --scenario-name "%(Identity)" --disable-animations</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
+ <HelixWorkItem Include="Device Startup - Android Maui Blazor DefaultTesting NoAnimation">
+ <PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
+ <PreCommands>echo on;set XHARNESSPATH=$(XharnessPath);cd $(ScenarioDirectory)mauiblazorandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiBlazorAndroidDefault.apk .;$(Python) pre.py --apk-name MauiBlazorAndroidDefault.apk</PreCommands>
+ <Command>$(Python) test.py devicestartup --device-type android --package-path pub\MauiBlazorAndroidDefault.apk --package-name com.companyname.mauiblazortesting --scenario-name "%(Identity)" --use-fully-drawn-time --fully-drawn-extra-delay 6 --disable-animations</Command>
+ <PostCommands>$(Python) post.py</PostCommands>
+ </HelixWorkItem>
<HelixWorkItem Include="Device Startup - Android Maui Podcast NoAnimation">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>echo on;set XHARNESSPATH=$(XharnessPath);cd $(ScenarioDirectory)mauiandroid;copy %HELIX_CORRELATION_PAYLOAD%\MauiAndroidPodcast.apk .;$(Python) pre.py --apk-name MauiAndroidPodcast.apk</PreCommands>
mkdir $WorkItemDirectory
}
- Copy-Item -path "$SourceDirectory\androidHelloWorld\HelloAndroid.apk" $PayloadDirectory -Verbose
+ Copy-Item -path "$SourceDirectory\androidHelloWorld\HelloAndroid.apk" $PayloadDirectory -Verbose
Copy-Item -path "$SourceDirectory\MauiAndroidDefault.apk" $PayloadDirectory -Verbose
+ Copy-Item -path "$SourceDirectory\MauiBlazorAndroidDefault.apk" $PayloadDirectory -Verbose
Copy-Item -path "$SourceDirectory\MauiAndroidPodcast.apk" $PayloadDirectory -Verbose
$SetupArguments = $SetupArguments -replace $Architecture, 'arm64'
}