Expo EAS
Ehita iOS-i simulaatori ja Androidi APK artefaktid Expo EAS-is, anna need Autonomyle üle ja käivita mobiiliteekonnad iga muudatuse korral.
Expo EAS omab Expo projektide build'i konveierit. Kasuta seda integratsiooni, kui soovid, et EAS toodaks iOS-i simulaatori .app-i või Androidi .apk-i ja Autonomy käivitaks selle vastu mobiiliteekonnad push'i, pull request'i või käsitsi käivitamise korral.
Eeltingimused
Enne EAS-käivituste lubamist
- Expo projekt, kus EAS on iOS-i jaoks juba seadistatud.
- Hoidlaga seotud Autonomy projekt.
- Vähemalt üks mobiilitest, mis läbib käsitsi üleslaadimise vastu.
- Autonomy testiplaani id iga platvormi jaoks, mida EAS-i töövoog peab käivitama.
Vajalikud saladused
Salvesta need EAS-i keskkonnamuutujate või tundlike saladustena. Ära committi neid ja ära paljasta neid EXPO_PUBLIC_* muutuja kaudu — Expo lisab need klientpaketti.
| Variable | Required | Description |
|---|---|---|
| AUTONOMY_API_KEY | Yes | Autonomy API-võti õigusega laadida üles build'e ja käivitada käivitusi. |
| AUTONOMY_API_URL | Yes | Autonomy API origin, näiteks https://api.autonomyqa.com või sinu Convex site URL. |
| AUTONOMY_IOS_TEST_PLAN_ID | No | Testiplaan, mida käivitada üleslaaditud iOS-i build'i vastu. Nõutav, kui töövoog käivitab iOS-i. |
| AUTONOMY_ANDROID_TEST_PLAN_ID | No | Testiplaan, mida käivitada üleslaaditud Androidi build'i vastu. Nõutav, kui töövoog käivitab Androidi. |
| AUTONOMY_IOS_BUNDLE_ID | No | iOS-i bundle identifier simulaatori rakenduse targeti jaoks. |
| AUTONOMY_ANDROID_PACKAGE_NAME | No | Androidi package name APK või AAB targeti jaoks. |
Need leiad Autonomy töölaualt:
- API-võti: Profiil → API-võtmed
- API URL: projekti või juurutuse seaded
- Testiplaanide ID-d: vahekaart Tests → plaani menüü → Kopeeri ID. Kasuta iga platvormi jaoks eraldi plaani, et tõrked osutaksid õigele pinnale.
Build'i profiilid
Lisa või taaskasuta build'i profiile failis eas.json. iOS-i puhul vajab Autonomy .app simulaatori build'i, mitte allkirjastatud .ipa-d. Profiil peab määrama ios.simulator väärtuseks true. Androidi puhul kasuta arendus- või sisedistributsiooni profiili, mis väljastab APK.
1{2 "build": {3 "autonomy-ios-simulator": {4 "distribution": "internal",5 "ios": {6 "simulator": true7 }8 },9 "autonomy-android-apk": {10 "distribution": "internal",11 "android": {12 "buildType": "apk"13 }14 }15 }16}Töövoog
Lisa .eas/workflows/autonomy-mobile-tests.yml. Töövoog ehitab iga sind huvitava platvormi, laadib artefakti alla, laadib selle üles artefakti API kaudu, skaneerib selle ja käivitab vastava Autonomy testiplaani.
Allolev näide käivitab mõlemad platvormid. Eemalda töö, mida sa ei vaja, kui väljastad ainult ühe platvormi.
name: Autonomy Mobile Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
jobs:
ios:
name: Build and test iOS with Autonomy
type: build
params:
platform: ios
profile: autonomy-ios-simulator
steps:
- eas/checkout
- eas/install_node_modules
- eas/prebuild
- eas/build
- eas/download_build:
id: download
path: ./build
- name: Upload to Autonomy and trigger plan
env:
AUTONOMY_API_KEY: ${{ secrets.AUTONOMY_API_KEY }}
AUTONOMY_API_URL: ${{ secrets.AUTONOMY_API_URL }}
AUTONOMY_TEST_PLAN_ID: ${{ secrets.AUTONOMY_IOS_TEST_PLAN_ID }}
AUTONOMY_IOS_BUNDLE_ID: ${{ secrets.AUTONOMY_IOS_BUNDLE_ID }}
run: |
set -euo pipefail
COMMIT_SHA="${EAS_BUILD_GIT_COMMIT_HASH:-}"
APP_PATH=$(find ./build -name "*.app" -type d | head -n 1)
test -n "$APP_PATH"
APP_DIR=$(dirname "$APP_PATH")
APP_NAME=$(basename "$APP_PATH")
(cd "$APP_DIR" && zip -qr app.zip "$APP_NAME")
UPLOAD_URL=$(curl -fsS -X POST "$AUTONOMY_API_URL/api/artifacts/upload-url" \
-H "Authorization: Bearer $AUTONOMY_API_KEY" \
-H "Content-Type: application/json" | jq -r '.uploadUrl')
STORAGE_ID=$(curl -fsS -X POST "$UPLOAD_URL" \
-H "Content-Type: application/zip" \
--data-binary "@$APP_DIR/app.zip" | jq -r '.storageId')
curl -fsS -X POST "$AUTONOMY_API_URL/api/artifacts/scan" \
-H "Authorization: Bearer $AUTONOMY_API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg storageId "$STORAGE_ID" '{ storageId: $storageId, platform: "ios", fileName: "app.zip", contentType: "application/zip" }')"
curl -fsS -X POST "$AUTONOMY_API_URL/api/trigger" \
-H "Authorization: Bearer $AUTONOMY_API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg testPlanId "$AUTONOMY_TEST_PLAN_ID" \
--arg storageId "$STORAGE_ID" \
--arg bundleId "$AUTONOMY_IOS_BUNDLE_ID" \
--arg commitSha "$COMMIT_SHA" \
'{ testPlanId: $testPlanId, platforms: ["ios"], targets: { ios: { storageId: $storageId, sourceMode: "upload", bundleId: $bundleId, fileName: "app.zip" } }, deployment: { provider: "expo-eas", commitSha: $commitSha } }')"
android:
name: Build and test Android with Autonomy
type: build
params:
platform: android
profile: autonomy-android-apk
steps:
- eas/checkout
- eas/install_node_modules
- eas/prebuild
- eas/build
- eas/download_build:
id: download
path: ./build
- name: Upload to Autonomy and trigger plan
env:
AUTONOMY_API_KEY: ${{ secrets.AUTONOMY_API_KEY }}
AUTONOMY_API_URL: ${{ secrets.AUTONOMY_API_URL }}
AUTONOMY_TEST_PLAN_ID: ${{ secrets.AUTONOMY_ANDROID_TEST_PLAN_ID }}
AUTONOMY_ANDROID_PACKAGE_NAME: ${{ secrets.AUTONOMY_ANDROID_PACKAGE_NAME }}
run: |
set -euo pipefail
COMMIT_SHA="${EAS_BUILD_GIT_COMMIT_HASH:-}"
APK_PATH=$(find ./build ( -name "*.apk" -o -name "*.aab" ) | head -n 1)
test -n "$APK_PATH"
FILE_NAME=$(basename "$APK_PATH")
UPLOAD_URL=$(curl -fsS -X POST "$AUTONOMY_API_URL/api/artifacts/upload-url" \
-H "Authorization: Bearer $AUTONOMY_API_KEY" \
-H "Content-Type: application/json" | jq -r '.uploadUrl')
STORAGE_ID=$(curl -fsS -X POST "$UPLOAD_URL" \
-H "Content-Type: application/octet-stream" \
--data-binary "@$APK_PATH" | jq -r '.storageId')
curl -fsS -X POST "$AUTONOMY_API_URL/api/artifacts/scan" \
-H "Authorization: Bearer $AUTONOMY_API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg storageId "$STORAGE_ID" --arg fileName "$FILE_NAME" '{ storageId: $storageId, platform: "android", fileName: $fileName, contentType: "application/octet-stream" }')"
curl -fsS -X POST "$AUTONOMY_API_URL/api/trigger" \
-H "Authorization: Bearer $AUTONOMY_API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg testPlanId "$AUTONOMY_TEST_PLAN_ID" \
--arg storageId "$STORAGE_ID" \
--arg packageName "$AUTONOMY_ANDROID_PACKAGE_NAME" \
--arg fileName "$FILE_NAME" \
--arg commitSha "$COMMIT_SHA" \
'{ testPlanId: $testPlanId, platforms: ["android"], targets: { android: { storageId: $storageId, sourceMode: "upload", packageName: $packageName, fileName: $fileName } }, deployment: { provider: "expo-eas", commitSha: $commitSha } }')"GitHubi kommentaarid ja check'id
Edasta commit'i SHA alati, kui EAS-i või GitHubi kontekst selle annab, et Autonomy saaks commit'ile postitada check run'i. Edasta PR-number ainult siis, kui töövoog käivitub pull request'i jaoks. Ülaltoodud töövoog kaitseb mõlemat, et see jääks kehtivaks push'i, PR-i ja käsitsi käivitamise korral.
Tõrkeotsing
Autonomy lükkab iOS-i build'i tagasi kui seadme build
EAS-i profiil toodab allkirjastatud .ipa simulaatori .app asemel. Kinnita, et ios.simulator on profiilis, mida töövoog käivitab, true.
EAS väljastab APK asemel AAB
Lihtsaima paigaldustee jaoks peaks Androidi profiil määrama android.buildType väärtuseks apk. Autonomy aktsepteerib ka .aab, kuid APK paigaldub emulaatorisse kiiremini ja väldib allkirjastamisüllatusi. Kui pead väljastama AAB, veendu, et üleslaadimise samm valib .aab faili.
Autonomy ei saa PR-kommentaari postitada
Autonomy GitHubi rakendus peab olema hoidlas paigaldatud ja töövoog peab edastama commit'i SHA. Ilma nendeta pole Autonomyl kommentaari jaoks ankrut.
Üleslaadimised kuhjuvad töölaual
Kasuta ajutiste EAS artefaktide jaoks eksplitsiitseid targeteid ja taaskasutatavate build'ide jaoks salvestatud keskkondi. Jäta töölaua üleslaadimised build'i jaoks, mille väljalaskehaldur valib tootmiskäivituste jaoks.