Autonomy dokumentatsioon
Integratsioonid

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.

VariableRequiredDescription
AUTONOMY_API_KEYYesAutonomy API-võti õigusega laadida üles build'e ja käivitada käivitusi.
AUTONOMY_API_URLYesAutonomy API origin, näiteks https://api.autonomyqa.com või sinu Convex site URL.
AUTONOMY_IOS_TEST_PLAN_IDNoTestiplaan, mida käivitada üleslaaditud iOS-i build'i vastu. Nõutav, kui töövoog käivitab iOS-i.
AUTONOMY_ANDROID_TEST_PLAN_IDNoTestiplaan, mida käivitada üleslaaditud Androidi build'i vastu. Nõutav, kui töövoog käivitab Androidi.
AUTONOMY_IOS_BUNDLE_IDNoiOS-i bundle identifier simulaatori rakenduse targeti jaoks.
AUTONOMY_ANDROID_PACKAGE_NAMENoAndroidi 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.

eas.jsonjson
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.

.eas/workflows/autonomy-mobile-tests.ymlyaml
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.

On this page