Skip to content

Consolidate application cache: single-responsibility handlers, correct TTLs, fix config/token race condition #498

Consolidate application cache: single-responsibility handlers, correct TTLs, fix config/token race condition

Consolidate application cache: single-responsibility handlers, correct TTLs, fix config/token race condition #498

name: Build and Run Android Navigation Tests
on:
pull_request:
branches:
- main
jobs:
software_navigation_tests:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Install KVM and Android SDK (x86)
run: |
# Set up environment variables
export ANDROID_SDK_ROOT=$HOME/android-sdk
export ANDROID_HOME=$ANDROID_SDK_ROOT
export PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH
# Create necessary directories
mkdir -p $ANDROID_SDK_ROOT/cmdline-tools
# Download and install command-line tools
wget -q https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip
unzip -q commandlinetools-linux-*.zip -d $ANDROID_SDK_ROOT/cmdline-tools
mv $ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools/latest
chmod +x $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager
# Accept licenses and install required components
yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
# Install Android API level 35 and necessary system images
$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-36" "system-images;android-36;google_apis;x86_64"
# Export paths for future steps
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
echo "ANDROID_HOME=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
echo "PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH" >> $GITHUB_ENV
- name: Cache Emulator System Image (x86)
uses: actions/cache@v3
with:
path: ~/.android/avd
key: android-emulator-x86-${{ runner.os }}-android-36
- name: Create Android Emulator (x86)
run: |
echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-36;google_apis;x86_64" --device "pixel_4"
- name: List AVDs
run: avdmanager list avd
- name: Start Emulator
run: |
echo "Starting emulator..."
export ANDROID_AVD_HOME=$HOME/.config/.android/avd
nohup $ANDROID_HOME/emulator/emulator -avd test_emulator -no-window -no-audio -no-snapshot -gpu swiftshader_indirect -verbose > emulator.log 2>&1 &
echo "Waiting for emulator process to start..."
sleep 10 # Allow time for initialization
echo "Checking if emulator process is running..."
ps aux | grep emulator
echo "Checking ADB devices..."
adb devices
- name: Restart ADB
run: |
adb kill-server
adb start-server
adb devices
- name: Wait for Emulator to Boot (Timeout 10 min with Debug)
run: |
# Start waiting for the emulator
echo "Waiting for emulator to boot..."
# Check the list of devices connected (debugging)
adb wait-for-device
# Wait for emulator boot completion
timeout 600 bash -c '
while true; do
# Show the current list of devices (debugging)
adb devices
# Check if the emulator is booting by checking the boot status
BOOT_COMPLETED=$(adb shell getprop sys.boot_completed 2>/dev/null)
echo "Boot status: $BOOT_COMPLETED"
# If boot is completed, break the loop
if [ "$BOOT_COMPLETED" == "1" ]; then
echo "Emulator boot completed!"
break
fi
# If boot is not completed, keep waiting
echo "Emulator still booting, waiting..."
sleep 5
done
'
- name: Install Android Build Tools
run: |
echo "Installing Android Build Tools..."
sdkmanager "build-tools;36.0.0" # Updated to use Android 35 build tools
sdkmanager --update
- name: Install MAUI workloads
run: |
dotnet workload install maui-android
- name: Install Appium and Drivers
run: |
sudo npm install -g appium
appium driver install uiautomator2
- name: Start Appium Server
run: |
nohup appium --log appium.log &
- name: Restore MAUI App for Android
run: dotnet restore TransactionProcessor.Mobile.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
- name: Build Code
run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net10.0-android -c Release --no-restore
- name: Run Android Navigation Tests
run: dotnet test TransactionProcessor.Mobile.UITests/TransactionProcessor.Mobile.UITests.csproj --filter "(Category=PRNavTest)&(Category=Android)" --no-restore
- name: Upload Appium Logs on Failure
if: always()
uses: actions/upload-artifact@v4
with:
name: android-software_navigation_tests_appium
path: appium.log
hardware_navigation_tests:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up JDK
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: '17'
- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Install KVM and Android SDK (x86)
run: |
# Set up environment variables
export ANDROID_SDK_ROOT=$HOME/android-sdk
export ANDROID_HOME=$ANDROID_SDK_ROOT
export PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH
# Create necessary directories
mkdir -p $ANDROID_SDK_ROOT/cmdline-tools
# Download and install command-line tools
wget -q https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip
unzip -q commandlinetools-linux-*.zip -d $ANDROID_SDK_ROOT/cmdline-tools
mv $ANDROID_SDK_ROOT/cmdline-tools/cmdline-tools $ANDROID_SDK_ROOT/cmdline-tools/latest
chmod +x $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager
# Accept licenses and install required components
yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
# Install Android API level 35 and necessary system images
$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager "platform-tools" "emulator" "platforms;android-36" "system-images;android-36;google_apis;x86_64"
# Export paths for future steps
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
echo "ANDROID_HOME=$ANDROID_SDK_ROOT" >> $GITHUB_ENV
echo "PATH=$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_SDK_ROOT/emulator:$PATH" >> $GITHUB_ENV
- name: Cache Emulator System Image (x86)
uses: actions/cache@v3
with:
path: ~/.android/avd
key: android-emulator-x86-${{ runner.os }}-android-36
- name: Create Android Emulator (x86)
run: |
echo "no" | avdmanager create avd -n test_emulator -k "system-images;android-36;google_apis;x86_64" --device "pixel_4"
- name: List AVDs
run: avdmanager list avd
- name: Start Emulator
run: |
echo "Starting emulator..."
export ANDROID_AVD_HOME=$HOME/.config/.android/avd
nohup $ANDROID_HOME/emulator/emulator -avd test_emulator -no-window -no-audio -no-snapshot -gpu swiftshader_indirect -verbose > emulator.log 2>&1 &
echo "Waiting for emulator process to start..."
sleep 10 # Allow time for initialization
echo "Checking if emulator process is running..."
ps aux | grep emulator
echo "Checking ADB devices..."
adb devices
- name: Restart ADB
run: |
adb kill-server
adb start-server
adb devices
- name: Wait for Emulator to Boot (Timeout 10 min with Debug)
run: |
# Start waiting for the emulator
echo "Waiting for emulator to boot..."
# Check the list of devices connected (debugging)
adb wait-for-device
# Wait for emulator boot completion
timeout 600 bash -c '
while true; do
# Show the current list of devices (debugging)
adb devices
# Check if the emulator is booting by checking the boot status
BOOT_COMPLETED=$(adb shell getprop sys.boot_completed 2>/dev/null)
echo "Boot status: $BOOT_COMPLETED"
# If boot is completed, break the loop
if [ "$BOOT_COMPLETED" == "1" ]; then
echo "Emulator boot completed!"
break
fi
# If boot is not completed, keep waiting
echo "Emulator still booting, waiting..."
sleep 5
done
'
- name: Install Android Build Tools
run: |
echo "Installing Android Build Tools..."
sdkmanager "build-tools;36.0.0" # Updated to use Android 35 build tools
sdkmanager --update
- name: Install MAUI workloads
run: |
dotnet workload install maui-android
- name: Install Appium and Drivers
run: |
sudo npm install -g appium
appium driver install uiautomator2
- name: Start Appium Server
run: |
nohup appium --log appium.log &
- name: Restore MAUI App for Android
run: dotnet restore TransactionProcessor.Mobile.sln --source ${{ secrets.PUBLICFEEDURL }} --source ${{ secrets.PRIVATEFEED_URL }} --source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet6/nuget/v3/index.json
- name: Build Code
run: dotnet build TransactionProcessor.Mobile/TransactionProcessor.Mobile.csproj -f net10.0-android -c Release --no-restore
- name: Run Android Navigation Tests
run: dotnet test TransactionProcessor.Mobile.UITests/TransactionProcessor.Mobile.UITests.csproj --filter "(Category=PRHWNavTest)&(Category=Android)" --no-restore
- name: Upload Appium Logs on Failure
if: always()
uses: actions/upload-artifact@v4
with:
name: android-hardware_navigation_tests_appium
path: appium.log