Skip to content

Commit

Permalink
Add Maui iOS and MacCatalyst build steps (dotnet#61068)
Browse files Browse the repository at this point in the history
* Fix artifact match string.

* Completed first attempt for a complete Maui SOD run. Added ios_scenarios tests, setup file copies, uploads, and downloads; and setup perf branch to use as partner testing branch.

* Reset performance-setup.ps1 file to use main perf branch.

* Reenable yml jobs disabled for testing.
  • Loading branch information
LoopedBard3 authored Nov 2, 2021
1 parent bfcb542 commit 06c2dba
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 15 deletions.
15 changes: 7 additions & 8 deletions eng/pipelines/coreclr/perf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ jobs:
runJobTemplate: /eng/pipelines/coreclr/templates/run-scenarios-job.yml
logicalmachine: 'perfpixel4a'

# run mono iOS scenarios
# run mono and maui iOS scenarios
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
jobTemplate: /eng/pipelines/coreclr/templates/perf-job.yml
Expand Down Expand Up @@ -495,20 +495,15 @@ jobs:
- Android_x64
- Android_arm
- Android_arm64
- MacCatalyst_x64
- iOSSimulator_x64
jobParameters:
buildArgs: -s mono+libs+host+packs -c $(_BuildConfig)
nameSuffix: Maui_Packs_Mono
isOfficialBuild: false
extraStepsTemplate: /eng/pipelines/common/upload-intermediate-artifacts-step.yml
extraStepsParameters:
name: MonoRuntimePacks
# Eventual platforms to add
# - MacCatalyst_x64
# - MacCatalyst_arm64
# - iOS_arm
# - iOS_arm64
# - OSX_x64
# - OSX_arm64

# build maui app
- template: /eng/pipelines/common/platform-matrix.yml
Expand All @@ -524,9 +519,13 @@ jobs:
- Build_Android_arm64_release_Maui_Packs_Mono
- Build_Android_x86_release_Maui_Packs_Mono
- Build_Android_x64_release_Maui_Packs_Mono
- Build_MacCatalyst_x64_release_Maui_Packs_Mono
- Build_iOSSimulator_x64_release_Maui_Packs_Mono
buildArgs: -s mono -c $(_BuildConfig)
nameSuffix: MACiOSAndroidMaui
isOfficialBuild: false
pool:
vmImage: 'macos-11'
extraStepsTemplate: /eng/pipelines/coreclr/templates/build-perf-maui-apps.yml
extraStepsParameters:
rootFolder: '$(Build.SourcesDirectory)/artifacts/'
Expand Down
66 changes: 63 additions & 3 deletions eng/pipelines/coreclr/templates/build-perf-maui-apps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,11 @@ steps:
path: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks
patterns: |
IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.android-!(*.symbols).nupkg
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
# IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.ios-*.nupkg
# IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.iossimulator-*.nupkg
# IntermediateArtifacts/MonoRuntimePacks/Shipping/Microsoft.NETCore.App.Runtime.Mono.maccatalyst-*.nupkg

- task: CopyFiles@2
Expand Down Expand Up @@ -79,6 +80,20 @@ steps:
destinationFolder: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks/Microsoft.NETCore.App.Runtime.Mono.android-x64
overwriteExistingFiles: true
cleanDestinationFolder: false
- task: ExtractFiles@1
displayName: Extract maccatalyst-x64 runtime
inputs:
archiveFilePatterns: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks/Microsoft.NETCore.App.Runtime.Mono.maccatalyst-x64.*.zip
destinationFolder: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks/Microsoft.NETCore.App.Runtime.Mono.maccatalyst-x64
overwriteExistingFiles: true
cleanDestinationFolder: false
- task: ExtractFiles@1
displayName: Extract iossimulator-x64 runtime
inputs:
archiveFilePatterns: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks/Microsoft.NETCore.App.Runtime.Mono.iossimulator-x64.*.zip
destinationFolder: $(Build.SourcesDirectory)/MauiTesting/ArtifactPacks/Microsoft.NETCore.App.Runtime.Mono.iossimulator-x64
overwriteExistingFiles: true
cleanDestinationFolder: false

- script: |
curl -o ./rollback.json 'maui.blob.core.windows.net/metadata/rollbacks/main.json'
Expand All @@ -102,12 +117,38 @@ steps:
displayName: Build MAUI Android
workingDirectory: $(Build.SourcesDirectory)/MauiTesting
- script: |
chmod -R a+r .
../dotnet.sh publish -bl:MauiiOS.binlog -f net6.0-ios -c Release
mv ./bin/Release/net6.0-ios/iossimulator-x64/MauiTesting.app ./MauiiOSDefault.app
displayName: Build MAUI iOS
workingDirectory: $(Build.SourcesDirectory)/MauiTesting
- script: |
chmod -R a+r .
../dotnet.sh publish -bl:MauiMacCatalyst.binlog -f net6.0-maccatalyst -c Release
mv ./bin/Release/net6.0-maccatalyst/maccatalyst-x64/MauiTesting.app ./MauiMacCatalystDefault.app
displayName: Build MAUI MacCatalyst
workingDirectory: $(Build.SourcesDirectory)/MauiTesting
- task: PublishBuildArtifacts@1
displayName: 'Publish MauiAndroid binlog'
inputs:
pathtoPublish: $(Build.SourcesDirectory)/MauiTesting/MauiAndroid.binlog
artifactName: ${{ parameters.artifactName }}

- task: PublishBuildArtifacts@1
displayName: 'Publish MauiiOS binlog'
inputs:
pathtoPublish: $(Build.SourcesDirectory)/MauiTesting/MauiiOS.binlog
artifactName: ${{ parameters.artifactName }}

- task: PublishBuildArtifacts@1
displayName: 'Publish MauiMacCatalyst binlog'
inputs:
pathtoPublish: $(Build.SourcesDirectory)/MauiTesting/MauiMacCatalyst.binlog
artifactName: ${{ parameters.artifactName }}

- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/MauiTesting/MauiAndroidDefault.apk
Expand All @@ -118,6 +159,26 @@ steps:
archiveType: tar
tarCompression: gz

- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/MauiTesting/MauiiOSDefault.app
includeRootFolder: true
displayName: Maui iOS App
artifactName: MauiiOSDefault
archiveExtension: '.tar.gz'
archiveType: tar
tarCompression: gz

- template: /eng/pipelines/common/upload-artifact-step.yml
parameters:
rootFolder: $(Build.SourcesDirectory)/MauiTesting/MauiMacCatalystDefault.app
includeRootFolder: true
displayName: Maui MacCatalyst App
artifactName: MauiMacCatalystDefault
archiveExtension: '.tar.gz'
archiveType: tar
tarCompression: gz

- script: rm -r -f ./bin
workingDirectory: $(Build.SourcesDirectory)/MauiTesting
displayName: Clean bin directory
Expand All @@ -142,4 +203,3 @@ steps:
archiveExtension: ${{ parameters.archiveExtension }}
archiveType: ${{ parameters.archiveType }}
tarCompression: ${{ parameters.tarCompression }}

19 changes: 17 additions & 2 deletions eng/pipelines/coreclr/templates/perf-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ jobs:
- ${{ 'Build_iOS_arm64_release_MACiOSAndroidMaui' }}
- ${{ if eq(parameters.runtimeType, 'iOSMono')}}:
- ${{ 'build_iOS_arm64_release_iOSMono' }}
- ${{ 'Build_iOS_arm64_release_MACiOSAndroidMaui' }}

${{ if and(eq(parameters.osGroup, 'windows'), not(in(parameters.runtimeType, 'AndroidMono', 'iOSMono'))) }}:
${{ if eq(parameters.runtimeType, 'mono') }}:
Expand Down Expand Up @@ -149,7 +150,7 @@ jobs:
- script: "mkdir -p $(librariesDownloadDir)/bin/aot/sgen;mkdir -p $(librariesDownloadDir)/bin/aot/pack;cp -r $(librariesDownloadDir)/LinuxMonoAOT/artifacts/obj/mono/Linux.${{ parameters.archType }}.Release/mono/* $(librariesDownloadDir)/bin/aot/sgen;cp -r $(librariesDownloadDir)/LinuxMonoAOT/artifacts/bin/microsoft.netcore.app.runtime.linux-${{ parameters.archType }}/Release/* $(librariesDownloadDir)/bin/aot/pack"
displayName: "Create aot directory (Linux)"

# Download AndroidMono
# Download AndroidMono and MauiAndroid
- ${{ if eq(parameters.runtimeType, 'AndroidMono')}}:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
Expand All @@ -167,7 +168,7 @@ jobs:
displayName: 'Maui Android App'


# Download iOSMono tests
# Download iOSMono tests and MauiiOS/MacCatalyst
- ${{ if eq(parameters.runtimeType, 'iOSMono') }}:
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
Expand All @@ -183,6 +184,20 @@ jobs:
artifactFileName: 'iOSSampleAppLLVM.tar.gz'
artifactName: 'iOSSampleAppLLVM'
displayName: 'iOS Sample App LLVM'
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
unpackFolder: $(Build.SourcesDirectory)/MauiiOSDefault
cleanUnpackFolder: false
artifactFileName: 'MauiiOSDefault.tar.gz'
artifactName: 'MauiiOSDefault'
displayName: 'Maui iOS App'
- template: /eng/pipelines/common/download-artifact-step.yml
parameters:
unpackFolder: $(Build.SourcesDirectory)/MauiMacCatalystDefault
cleanUnpackFolder: false
artifactFileName: 'MauiMacCatalystDefault.tar.gz'
artifactName: 'MauiMacCatalystDefault'
displayName: 'Maui MacCatalyst App'

# Create Core_Root
- script: $(Build.SourcesDirectory)/src/tests/build$(scriptExt) $(buildConfig) $(archType) generatelayoutonly $(librariesOverrideArg)
Expand Down
14 changes: 13 additions & 1 deletion eng/testing/performance/ios_scenarios.proj
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,17 @@
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
<HelixWorkItem Include="SOD - Maui iOS .app Size" Condition="'$(iOSLlvmBuild)' == 'False'">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)mauiios;xcopy %HELIX_CORRELATION_PAYLOAD%\MauiiOSDefault .\app\/e;$(Python) pre.py</PreCommands>
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
<HelixWorkItem Include="SOD - Maui MacCatalyst .app Size" Condition="'$(iOSLlvmBuild)' == 'False'">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<PreCommands>cd $(ScenarioDirectory)mauiios;xcopy %HELIX_CORRELATION_PAYLOAD%\MauiMacCatalystDefault .\app\/e;$(Python) pre.py</PreCommands>
<Command>$(Python) test.py sod --scenario-name &quot;%(Identity)&quot;</Command>
<PostCommands>$(Python) post.py</PostCommands>
</HelixWorkItem>
</ItemGroup>
</Project>
</Project>
4 changes: 3 additions & 1 deletion eng/testing/performance/performance-setup.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ if ($iOSMono) {
Copy-Item -path "$SourceDirectory\iosHelloWorld\llvm" $PayloadDirectory\iosHelloWorld\llvm -Recurse
} else {
Copy-Item -path "$SourceDirectory\iosHelloWorld\nollvm" $PayloadDirectory\iosHelloWorld\nollvm -Recurse
Copy-Item -path "$SourceDirectory\MauiiOSDefault" $PayloadDirectory\MauiiOSDefault -Recurse
Copy-Item -path "$SourceDirectory\MauiMacCatalystDefault" $PayloadDirectory\MauiMacCatalystDefault -Recurse
}

$SetupArguments = $SetupArguments -replace $Architecture, 'arm64'
Expand Down Expand Up @@ -202,4 +204,4 @@ Write-PipelineSetVariable -Name 'Queue' -Value "$Queue" -IsMultiJobVariable $fal
Write-PipelineSetVariable -Name 'HelixSourcePrefix' -Value "$HelixSourcePrefix" -IsMultiJobVariable $false
Write-PipelineSetVariable -Name '_BuildConfig' -Value "$Architecture.$Kind.$Framework" -IsMultiJobVariable $false

exit 0
exit 0
4 changes: 4 additions & 0 deletions src/tests/Common/maui/MauiScenario.targets
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
Condition="'%(ResolvedRuntimePack.FrameworkName)' == 'Microsoft.NETCore.App' and '%(ResolvedRuntimePack.RuntimeIdentifier)' == 'android-x86'" />
<ResolvedRuntimePack PackageDirectory="$(MicrosoftNetCoreAppRuntimePackDir)/Microsoft.NETCore.App.Runtime.Mono.android-x64"
Condition="'%(ResolvedRuntimePack.FrameworkName)' == 'Microsoft.NETCore.App' and '%(ResolvedRuntimePack.RuntimeIdentifier)' == 'android-x64'" />
<ResolvedRuntimePack PackageDirectory="$(MicrosoftNetCoreAppRuntimePackDir)/Microsoft.NETCore.App.Runtime.Mono.maccatalyst-x64"
Condition="'%(ResolvedRuntimePack.FrameworkName)' == 'Microsoft.NETCore.App' and '%(ResolvedRuntimePack.RuntimeIdentifier)' == 'maccatalyst-x64'" />
<ResolvedRuntimePack PackageDirectory="$(MicrosoftNetCoreAppRuntimePackDir)/Microsoft.NETCore.App.Runtime.Mono.iossimulator-x64"
Condition="'%(ResolvedRuntimePack.FrameworkName)' == 'Microsoft.NETCore.App' and '%(ResolvedRuntimePack.RuntimeIdentifier)' == 'iossimulator-x64'" />
</ItemGroup>
</Target>
</Project>

0 comments on commit 06c2dba

Please sign in to comment.