Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 49 additions & 5 deletions build-tools/automation/MauiR2RHelix.proj
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<EnableAzurePipelinesReporter Condition="'$(SYSTEM_ACCESSTOKEN)' != ''">true</EnableAzurePipelinesReporter>
<EnableAzurePipelinesReporter Condition="'$(SYSTEM_ACCESSTOKEN)' == ''">false</EnableAzurePipelinesReporter>
<FailOnTestFailure>true</FailOnTestFailure>
<IncludeXHarnessCli>true</IncludeXHarnessCli>
<HelixType Condition="'$(HelixType)' == ''">tests/android/maui-r2r/</HelixType>
<HelixWorkItemName Condition="'$(HelixWorkItemName)' == ''">WorkItem</HelixWorkItemName>
<HelixTestRunName Condition="'$(HelixTestRunName)' == ''">$(HelixWorkItemName)</HelixTestRunName>
Expand All @@ -18,10 +19,53 @@
</ItemGroup>

<ItemGroup>
<HelixWorkItem Include="$(HelixWorkItemName)" Condition="'$(WorkItemDirectory)' != ''">
<PayloadDirectory>$(WorkItemDirectory)</PayloadDirectory>
<Command>$(WorkItemCommand)</Command>
<Timeout Condition="'$(WorkItemTimeout)' != ''">$(WorkItemTimeout)</Timeout>
</HelixWorkItem>
<XHarnessApkToTest Include="$(HelixWorkItemName)" Condition="'$(WorkItemApk)' != ''">
<ApkPath>$(WorkItemApk)</ApkPath>
<AndroidPackageName>$(AndroidPackageName)</AndroidPackageName>
<WorkItemTimeout Condition="'$(WorkItemTimeout)' != ''">$(WorkItemTimeout)</WorkItemTimeout>
<CustomCommands><![CDATA[
"Scenario: $(HelixTestRunName)" | Set-Content -LiteralPath (Join-Path $output_directory "scenario-$(HelixConfiguration).txt")
"PackageName: $package_name" | Add-Content -LiteralPath (Join-Path $output_directory "scenario-$(HelixConfiguration).txt")
"APK: $app" | Add-Content -LiteralPath (Join-Path $output_directory "scenario-$(HelixConfiguration).txt")

xharness android adb -- devices -l |
Tee-Object -FilePath (Join-Path $output_directory "adb-devices-$(HelixConfiguration).log")

$deviceId = xharness android device --app "$app" --verbosity Error |
Where-Object { $_ -and $_.Trim() } |
Select-Object -Last 1
if ($LASTEXITCODE -ne 0) {
exit $LASTEXITCODE
}

xharness android install --app "$app" --package-name "$package_name" --device-id "$deviceId" --output-directory "$output_directory" --verbosity Debug
if ($LASTEXITCODE -ne 0) {
exit $LASTEXITCODE
}

xharness android adb -- -s "$deviceId" shell getprop | Set-Content -LiteralPath (Join-Path $output_directory "getprop-$(HelixConfiguration).log")
xharness android adb -- -s "$deviceId" shell getprop ro.product.cpu.abi
xharness android adb -- -s "$deviceId" shell getprop ro.product.cpu.abilist
xharness android adb -- -s "$deviceId" shell getprop ro.build.fingerprint
xharness android adb -- -s "$deviceId" shell pm path "$package_name" | Set-Content -LiteralPath (Join-Path $output_directory "pm-path-$(HelixConfiguration).log")
xharness android adb -- -s "$deviceId" shell dumpsys package "$package_name" | Set-Content -LiteralPath (Join-Path $output_directory "dumpsys-package-$(HelixConfiguration).log")
xharness android adb -- -s "$deviceId" logcat -b all -c

xharness android adb -- -s "$deviceId" shell monkey -p "$package_name" -c android.intent.category.LAUNCHER 1
$launchExitCode = $LASTEXITCODE
if ($launchExitCode -ne 0) {
xharness android adb -- -s "$deviceId" logcat -d -b all | Set-Content -LiteralPath (Join-Path $output_directory "logcat-$(HelixConfiguration).log")
xharness android uninstall --package-name "$package_name" --device-id "$deviceId"
exit $launchExitCode
}

Start-Sleep -Seconds 10
xharness android adb -- -s "$deviceId" shell pidof "$package_name"
$pidExitCode = $LASTEXITCODE
xharness android adb -- -s "$deviceId" logcat -d -b all | Set-Content -LiteralPath (Join-Path $output_directory "logcat-$(HelixConfiguration).log")
xharness android uninstall --package-name "$package_name" --device-id "$deviceId"
exit $pidExitCode
]]></CustomCommands>
</XHarnessApkToTest>
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,9 @@ steps:
$packageName = '${{ testCase.packageName }}'
$apkName = "MauiR2R-${{ testCase.name }}-Signed.apk"

if (Test-Path $payloadDirectory) {
Remove-Item -LiteralPath $payloadDirectory -Recurse -Force
}
New-Item -ItemType Directory -Force -Path $payloadDirectory | Out-Null
$apk = Get-ChildItem $projectDirectory -Recurse -Filter '*-Signed.apk' |
Where-Object { $_.FullName -like "*\bin\Release\*$runtimeIdentifier*" } |
Expand All @@ -169,67 +172,6 @@ steps:
}

Copy-Item -LiteralPath $apk.FullName -Destination (Join-Path $payloadDirectory $apkName) -Force

$sdkCandidates = @(
$env:ANDROID_HOME,
$env:ANDROID_SDK_ROOT,
$env:AndroidSdkDirectory,
$(if ($env:USERPROFILE) { Join-Path $env:USERPROFILE 'android-toolchain\sdk' }),
$(if ($env:HOME) { Join-Path $env:HOME 'android-toolchain\sdk' })
) | Where-Object { $_ -and (Test-Path (Join-Path $_ 'platform-tools\adb.exe')) }
$androidSdk = $sdkCandidates | Select-Object -First 1
if (-not $androidSdk) {
throw "Could not find Android SDK platform-tools. Tried ANDROID_HOME, ANDROID_SDK_ROOT, AndroidSdkDirectory, and user android-toolchain paths."
}

$platformTools = Join-Path $androidSdk 'platform-tools'
$payloadPlatformTools = Join-Path $payloadDirectory 'platform-tools'
New-Item -ItemType Directory -Force -Path $payloadPlatformTools | Out-Null
Copy-Item -Path (Join-Path $platformTools '*') -Destination $payloadPlatformTools -Recurse -Force

$script = @"
@echo on
setlocal
set "UPLOAD_DIR=%HELIX_WORKITEM_UPLOAD_ROOT%"
if "%UPLOAD_DIR%"=="" set "UPLOAD_DIR=%~dp0"
if not exist "%UPLOAD_DIR%" mkdir "%UPLOAD_DIR%"
echo Scenario: ${{ testCase.displayName }} > "%UPLOAD_DIR%\scenario-${{ testCase.name }}.txt"
echo RuntimeIdentifier: $runtimeIdentifier >> "%UPLOAD_DIR%\scenario-${{ testCase.name }}.txt"
echo PackageName: $packageName >> "%UPLOAD_DIR%\scenario-${{ testCase.name }}.txt"
echo APK: $apkName >> "%UPLOAD_DIR%\scenario-${{ testCase.name }}.txt"
set "ADB=%~dp0platform-tools\adb.exe"
if not exist "%ADB%" (
echo Could not find payload adb.exe at "%ADB%"
dir "%~dp0" /s
exit /b 1
)
"%ADB%" version || exit /b 1
"%ADB%" devices -l > "%UPLOAD_DIR%\adb-devices-${{ testCase.name }}.log"
type "%UPLOAD_DIR%\adb-devices-${{ testCase.name }}.log"
"%ADB%" wait-for-device || exit /b 1
"%ADB%" shell getprop > "%UPLOAD_DIR%\getprop-${{ testCase.name }}.log"
"%ADB%" shell getprop ro.product.cpu.abi
"%ADB%" shell getprop ro.product.cpu.abilist
"%ADB%" shell getprop ro.build.fingerprint
"%ADB%" uninstall $packageName
"%ADB%" install -r "%~dp0$apkName" || exit /b 1
"%ADB%" shell pm path $packageName > "%UPLOAD_DIR%\pm-path-${{ testCase.name }}.log"
"%ADB%" shell dumpsys package $packageName > "%UPLOAD_DIR%\dumpsys-package-${{ testCase.name }}.log"
"%ADB%" shell logcat -c
"%ADB%" shell monkey -p $packageName -c android.intent.category.LAUNCHER 1 || exit /b 1
ping -n 11 127.0.0.1 > nul
"%ADB%" shell pidof $packageName
if errorlevel 1 (
"%ADB%" logcat -d -b all > "%UPLOAD_DIR%\logcat-${{ testCase.name }}.log"
"%ADB%" uninstall $packageName
exit /b 1
)
"%ADB%" logcat -d -b all > "%UPLOAD_DIR%\logcat-${{ testCase.name }}.log"
"%ADB%" uninstall $packageName
exit /b 0
"@

Set-Content -LiteralPath (Join-Path $payloadDirectory 'run-maui-r2r.cmd') -Value $script -Encoding ASCII
displayName: Prepare MAUI R2R Helix payload - ${{ testCase.displayName }}

- template: /build-tools/automation/yaml-templates/run-dotnet-preview.yaml
Expand Down Expand Up @@ -290,6 +232,7 @@ steps:
$binlogPath = Join-Path $logsDirectory "SendMauiR2R-$($case.name)ToHelix.binlog"
$helixResultsDestinationDir = Join-Path (Join-Path $logsDirectory 'helix-results') $case.name
$workItemDirectory = Join-Path $payloadRootDirectory $case.name
$workItemApk = Join-Path $workItemDirectory "MauiR2R-$($case.name)-Signed.apk"

Remove-Item -LiteralPath $scriptPath, $outputPath, $errorPath -Force -ErrorAction Ignore

Expand All @@ -307,9 +250,9 @@ steps:
"`$env:HelixWorkItemName = '$($case.workItemName)'"
"`$env:HelixResultsDestinationDir = '$helixResultsDestinationDir'"
"`$env:HelixAccessToken = ''"
"`$env:WorkItemDirectory = '$workItemDirectory'"
"`$env:WorkItemCommand = 'run-maui-r2r.cmd'"
"`$env:WorkItemTimeout = '00:10:00'"
"`$env:WorkItemApk = '$workItemApk'"
"`$env:AndroidPackageName = '$($case.packageName)'"
"`$env:WorkItemTimeout = '00:20:00'"
"`$env:WaitForWorkItemCompletion = 'true'"
"`$env:Creator = 'dotnet-android'"
"& '$dotnetPath' msbuild '$helixProject' /p:TreatWarningsAsErrors=false /t:Test /bl:'$binlogPath'"
Expand Down
1 change: 1 addition & 0 deletions eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<!-- Last version built for net10.0, needed for CI steps that only have the .NET 10 SDK installed (e.g., BAR manifest publishing) -->
<MicrosoftDotNetBuildTasksFeedPackageVersionNet10>11.0.0-beta.26060.102</MicrosoftDotNetBuildTasksFeedPackageVersionNet10>
<MicrosoftDotNetBuildTasksFeedPackageVersion>11.0.0-beta.26452.117</MicrosoftDotNetBuildTasksFeedPackageVersion>
<MicrosoftDotNetXHarnessCLIVersion>11.0.0-prerelease.26428.1</MicrosoftDotNetXHarnessCLIVersion>
<MicrosoftNETWorkloadMonoToolchainCurrentManifest110100preview4PackageVersion>11.0.100-preview.4.26215.121</MicrosoftNETWorkloadMonoToolchainCurrentManifest110100preview4PackageVersion>
<MicrosoftNETWorkloadEmscriptenCurrentManifest110100preview4PackageVersion>11.0.100-preview.4.26215.121</MicrosoftNETWorkloadEmscriptenCurrentManifest110100preview4PackageVersion>
<MicrosoftNETWorkloadMonoToolChainPackageVersion>$(MicrosoftNETWorkloadMonoToolChainCurrentManifest110100preview4PackageVersion)</MicrosoftNETWorkloadMonoToolChainPackageVersion>
Expand Down
Loading