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