Files
shorebird/scripts/patch_e2e.sh
T
2024-05-07 12:59:57 -07:00

84 lines
2.7 KiB
Bash
Executable File

#!/bin/bash -ex
# This script tests the patching functionality of Shorebird.
# It creates a new empty, flutter project, initializes Shorebird,
# creates a new release, patches the release, and then ensures
# that the patch was applied correctly.
#
# Pre-requisites:
# - Flutter must be installed.
# - Android SDK must be installed.
# - ADB must be installed and be part of PATH.
# - Android emulator must be running.
# - Shorebird must be installed.
#
# Usage: ./patch_e2e.sh
# Intentionally including a space in the path.
TEMP_DIR=$(mktemp -d -t 'shorebird workspace-XXXXX')
cd "$TEMP_DIR"
# Create a new empty flutter project
flutter create e2e_test --empty --platforms android
cd e2e_test
# Replace the contents of "lib/main.dart" with a single print statement.
echo "void main() { print('hello world'); }" >lib/main.dart
# Initialize Shorebird
shorebird init --force -v
# Point to the development environment
echo "base_url: https://api-dev.shorebird.dev" >> shorebird.yaml
# Extract the app_id from the "shorebird.yaml"
APP_ID=$(cat shorebird.yaml | grep 'app_id:' | awk '{print $2}')
# Create a new release on Android
shorebird release android -v
# Run the app on Android and ensure that the print statement is printed.
while IFS= read line; do
if [[ "$line" == *"I flutter : hello world"* ]]; then
adb kill-server
echo "✅ 'hello world' was printed"
break
fi
done < <(shorebird preview --release-version 0.1.0+1 --app-id $APP_ID --platform android)
# Replace lib/main.dart "hello world" to "hello shorebird"
sed -i 's/hello world/hello shorebird/g' lib/main.dart
echo "lib/main.dart is now:"
cat lib/main.dart
# Create a patch
shorebird patch android -v
# Run the app on Android and ensure that the original print statement is printed.
while IFS= read line; do
if [[ "$line" == *"Patch 1 successfully installed"* ]]; then
# Kill the app so we can boot the patch
adb shell am force-stop com.example.e2e_test
echo "✅ Patch 1 successfully installed"
break
fi
done < <(shorebird preview --release-version 0.1.0+1 --app-id $APP_ID --platform android)
# Re-run the app, *not* using shorebird preview, as that installs the base release.
adb shell monkey -p com.example.e2e_test -c android.intent.category.LAUNCHER 1
# Re-run the app on Android and ensure that the new print statement is printed,
# tailing adb logs and printing the last 10 seconds of logs in case the
# "hello shorebird" statement was printed before entering the loop.
while IFS= read line; do
if [[ "$line" == *"I flutter : hello shorebird"* ]]; then
adb kill-server
echo "✅ 'hello shorebird' was printed"
break
fi
done < <(adb logcat -T '10.0')
echo "✅ All tests passed!"
exit 0