Autonomy dokumentatsioon
Integratsioonid

GitHub Actions

Käivita Autonomy GitHub Actionsist, kui eelvaate või staging'i sihtmärk on valmis.

Kasuta GitHub Actionsit, kui sinu juurutuse pakkujal pole otseintegratsiooni, kui ehitad eelvaate-URL-e kohandatud skriptides või kui soovid, et Autonomy käivituks osana olemasolevast CI-konveierist.

Töövoo paigutus

Paiguta Autonomy pärast build'i, juurutust ja eelvaate-URL-i tuvastamist. Käivitus peaks saama lõpliku URL-i, mille ülevaataja avaks. Hoia harufiltrid selgesõnalised, et pikalt kestvad plaanid ei käivituks igal push'il.

Vajalikud saladused

Töövoo sisendid

  • Hoidlaga ühendatud Autonomy projekt.
  • Eelvaate juurutuse URL hostingu töövoost.
  • Valikuline kaitstud eelvaate möödaminekutoken.
  • Pull request'i number või commit'i SHA tõendite GitHubi avaldamiseks.

Haru- ja sündmusstrateegia

Käivita pull request'idel lühikesi smoke-plaane. Jäta laiemad komplektid väljalaskeharudele, ajastatud käivitustele või käsitsi töövoo käivitamisele. Kui plaan puudutab tasulisi teenuseid või napi testandmeid, tee päästik selgesõnaliseks.

Mobiiliartefakti üleandmine

GitHub Actions on ka soovitatav viis mobiilikäivituste ühendamiseks, kui projekt pole Expo EAS-il. Muster on sama nagu veebi eelvaate-URL-ide puhul, kuid Autonomy sisend on URL-i asemel build'i artefakt: iOS-i jaoks simulaatori .app või Androidi jaoks .apk / .aab.

Mobiilitöövoo sisendid

  • Autonomy API-võti, API URL, testiplaani id ja platvormi identifikaatorid, salvestatud hoidla saladustena.
  • Autonomy testiplaani id mobiiliplaani jaoks, mida soovid käivitada.
  • iOS-i jaoks: macOS-i runner, mis suudab simulaatori rakenduse ehitada.
  • Androidi jaoks: Linuxi runner Androidi SDK-ga APK ehitamiseks.

iOS

Jaga töö kaheks etapiks: ehita macOS-il, seejärel käivita Autonomy Linuxil. Edasta .app nende vahel actions'i artefaktina, et mitte raisata macOS-i minuteid võrgukõnele.

.github/workflows/ios-tests.ymlyaml
name: iOS Tests

on:
push:
  branches: [main]
pull_request:
workflow_dispatch:

jobs:
build:
  name: Build iOS Simulator app
  runs-on: macos-latest
  steps:
    - uses: actions/checkout@v5
    - name: Build .app
      shell: bash
      run: |
        set -euo pipefail
        xcodebuild \
          -workspace ios/MyApp.xcworkspace \
          -scheme MyApp \
          -configuration Release \
          -sdk iphonesimulator \
          -destination 'generic/platform=iOS Simulator' \
          -derivedDataPath ios/build \
          build
        mkdir -p .build
        cp -R ios/build/Build/Products/Release-iphonesimulator/MyApp.app .build/MyApp.app
    - uses: actions/upload-artifact@v5
      with:
        name: ios-simulator-app
        path: .build/MyApp.app
        retention-days: 1

test:
  name: Run Autonomy iOS plan
  needs: build
  runs-on: ubuntu-latest
  steps:
    - uses: actions/download-artifact@v5
      with:
        name: ios-simulator-app
        path: ./build/MyApp.app
    - name: Upload and trigger
      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
        (cd ./build && zip -qr MyApp.app.zip MyApp.app)
        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 "@./build/MyApp.app.zip" | jq -r '.storageId')
        SCAN_BODY=$(jq -n \
          --arg storageId "$STORAGE_ID" \
          '{ storageId: $storageId, platform: "ios", fileName: "MyApp.app.zip", contentType: "application/zip" }')
        curl -fsS -X POST "$AUTONOMY_API_URL/api/artifacts/scan" \
          -H "Authorization: Bearer $AUTONOMY_API_KEY" \
          -H "Content-Type: application/json" \
          -d "$SCAN_BODY"
        TRIGGER_BODY=$(jq -n \
          --arg testPlanId "$AUTONOMY_TEST_PLAN_ID" \
          --arg storageId "$STORAGE_ID" \
          --arg bundleId "$AUTONOMY_IOS_BUNDLE_ID" \
          --arg branch "$GITHUB_REF_NAME" \
          --arg commitSha "$GITHUB_SHA" \
          '{
            testPlanId: $testPlanId,
            platforms: ["ios"],
            branch: $branch,
            targets: { ios: { storageId: $storageId, sourceMode: "upload", bundleId: $bundleId, fileName: "MyApp.app.zip" } },
            deployment: { provider: "github-actions", branch: $branch, commitSha: $commitSha }
          }')
        curl -fsS -X POST "$AUTONOMY_API_URL/api/trigger" \
          -H "Authorization: Bearer $AUTONOMY_API_KEY" \
          -H "Content-Type: application/json" \
          -d "$TRIGGER_BODY"

Android

Androidi build'id käivituvad Linuxil, seega kogu töövoog mahub ühte töösse. Artefakti üleandmist pole vaja.

.github/workflows/android-tests.ymlyaml
name: Android Tests

on:
push:
  branches: [main]
pull_request:
workflow_dispatch:

jobs:
test:
  name: Build and run Autonomy Android plan
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v5
    - uses: actions/setup-java@v4
      with:
        distribution: temurin
        java-version: '17'
    - name: Build debug APK
      shell: bash
      run: |
        set -euo pipefail
        cd android
        ./gradlew assembleDebug
    - name: Upload and trigger
      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
        APK_PATH="android/app/build/outputs/apk/debug/app-debug.apk"
        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/vnd.android.package-archive" \
          --data-binary "@$APK_PATH" | jq -r '.storageId')
        SCAN_BODY=$(jq -n \
          --arg storageId "$STORAGE_ID" \
          '{ storageId: $storageId, platform: "android", fileName: "app-debug.apk", contentType: "application/vnd.android.package-archive" }')
        curl -fsS -X POST "$AUTONOMY_API_URL/api/artifacts/scan" \
          -H "Authorization: Bearer $AUTONOMY_API_KEY" \
          -H "Content-Type: application/json" \
          -d "$SCAN_BODY"
        TRIGGER_BODY=$(jq -n \
          --arg testPlanId "$AUTONOMY_TEST_PLAN_ID" \
          --arg storageId "$STORAGE_ID" \
          --arg packageName "$AUTONOMY_ANDROID_PACKAGE_NAME" \
          --arg branch "$GITHUB_REF_NAME" \
          --arg commitSha "$GITHUB_SHA" \
          '{
            testPlanId: $testPlanId,
            platforms: ["android"],
            branch: $branch,
            targets: { android: { storageId: $storageId, sourceMode: "upload", packageName: $packageName, fileName: "app-debug.apk" } },
            deployment: { provider: "github-actions", branch: $branch, commitSha: $commitSha }
          }')
        curl -fsS -X POST "$AUTONOMY_API_URL/api/trigger" \
          -H "Authorization: Bearer $AUTONOMY_API_KEY" \
          -H "Content-Type: application/json" \
          -d "$TRIGGER_BODY"

Kasuta iga platvormi jaoks eraldi testiplaani, et tõrked osutaksid õigele pinnale.

Tõrkeotsing

Veebikäivitus algab enne, kui eelvaade on valmis

Jaga juurutus ja QA eraldi töödeks ning edasta juurutuse URL töö väljundite kaudu. Autonomy peaks käivituma alles pärast seda, kui eelvaate-URL on teada.

Ühtegi PR-kommentaari ei ilmu

Kinnita, et pull request'i kontekst on saadaval, Autonomy GitHubi rakendus on hoidla jaoks paigaldatud ja commit'i SHA edastati Autonomyle.

iOS-i üleslaadimine lükatakse tagasi kui seadme build

macOS-i build-samm toodab simulaatori .app asemel .ipa-d. Kinnita, et -sdk iphonesimulator on xcodebuild käsus ja sihtkoht on simulaatori sihtkoht.

Androidi build ei leia SDK-d

GitHubi hostitud Ubuntu runnerid tulevad eelpaigaldatud Androidi SDK-ga. Kui hostid ise, lisa enne Gradle'i sammu actions/setup-android (või paigalda käsurea tööriistad).

Mobiili üleslaadimised kuhjuvad

Kasuta ajutiste CI artefaktide jaoks eksplitsiitseid targeteid ja taaskasutatavate build'ide jaoks salvestatud keskkondi.

On this page