Я настроил свой рабочий процесс для настройки среды, установки зависимостей и сборки тестового APK. для Android и iOS. Несмотря на многочисленные попытки и разные конфигурации, процесс сборки завершается неудачей, и мне не удалось эффективно запустить эмулятор в конвейере.
Код: Выделить всё
on:
push:
branches: [ staging ]
pull_request:
branches: [ staging ]
workflow_dispatch:
jobs:
setup:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set Git user info
run: |
- name: Install Google Cloud SDK
run: |
curl -sSL https://sdk.cloud.google.com | bash
echo "$HOME/google-cloud-sdk/bin" >> $GITHUB_PATH
- name: Decode and Write Service Account to File
run: |
echo "${{ secrets.KEY}}" | base64 -d > /tmp/temp.json
echo "GOOGLE_APPLICATION_CREDENTIALS=/tmp/temp.json" >> $GITHUB_ENV
- name: Extract Project ID from Service Account
run: |
PROJECT_ID=$(jq -r '.project_id' /tmp/temp.json)
echo "PROJECT_ID=$PROJECT_ID" >> $GITHUB_ENV
- name: Install Firebase CLI
run: curl -sL firebase.tools | bash
- name: Install Google Cloud SDK
run: |
curl -sSL https://sdk.cloud.google.com | bash
echo "$HOME/google-cloud-sdk/bin" >> $GITHUB_PATH
- name: Authenticate with Google Cloud
run: |
gcloud auth activate-service-account --key-file=/tmp/temp.json
gcloud config set project "$PROJECT_ID"
- name: Retrieve and Mask all GCP Secrets
run: |
secrets=$(gcloud secrets list --format='get(name)')
for secret_full_name in $secrets; do
secret_name=${secret_full_name##*/}
secret_value=$(gcloud secrets versions access latest --secret="$secret_name" --project="$PROJECT_ID" --quiet)
echo "::add-mask::***"
echo "$secret_name"='***' >> $GITHUB_ENV
done
android-tests:
needs: setup
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up Flutter
uses: subosito/flutter-action@v1
with:
flutter-version: '3.16.5'
- name: Install Dependencies
run: flutter pub get
- name: Install Patrol
run: flutter pub global activate patrol
- name: Build Android App and Test APK with Patrol
run: patrol build android -t integration_test/example_test.dart --flavor production
- name: Run Tests on Firebase Test Lab (Android)
run: |
gcloud firebase test android run \
--type instrumentation \
--app build/app/outputs/apk/debug/app-debug.apk \
--test build/app/outputs/apk/androidTest/debug/app-debug-androidTest.apk \
--device model="nexus6", version="30", locale=en, orientation=portrait \
--timeout 10m \
--results-bucket="patrol_runs" \
--use-orchestrator \
--environment-variables clearPackageData=true
- name: Fastlane Android Deployment
run: fastlane android deploy
ios-tests:
needs: setup
runs-on: macos-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up Flutter
uses: subosito/flutter-action@v1
with:
flutter-version: '3.16.5'
- name: Install Dependencies
run: flutter pub get
- name: Install Patrol
run: flutter pub global activate patrol
- name: Build iOS App for Testing
run: patrol build ios --target integration_test/example_test.dart --release
- name: Package iOS Tests
run: |
pushd build/ios_integ/Build/Products
zip -r ios_tests.zip Release-iphoneos Runner_iphoneos16.2-arm64.xctestrun
popd
- name: Run Tests on Firebase Test Lab (iOS)
run: |
gcloud firebase test ios run \
--test build/ios_integ/Build/Products/ios_tests.zip \
--device model=iphone13, version=16.2, locale=en_US, orientation=portrait \
--timeout 10m \
--results-bucket="patrol_runs"
- name: Fastlane iOS Deployment
run: fastlane ios deploy
Буду признателен за любые рекомендации по следующим вопросам:
Как Могу ли я успешно создать тестовый APK с помощью Patrol в рабочем процессе GitHub Actions?
Каков наиболее эффективный способ запуска этих тестов в Firebase Test Lab?
Существуют ли передовые методы или рекомендуемые подходы для настройки такого типа конвейера CI/CD для приложения Flutter?
Подробнее здесь: https://stackoverflow.com/questions/778 ... tion-tests