Expo EAS
Ejecuta QA móvil automáticamente contra cada build de EAS e informa el resultado a través de tu repositorio de GitHub vinculado.
La integración de Expo EAS recibe webhooks de finalización de builds de EAS Build. Cuando un build termina con éxito, Autonomy descarga el artefacto y ejecuta el caso de prueba o plan de pruebas configurado en un simulador de iOS o emulador de Android. El estado se reporta como un check run de GitHub en el commit si hay un repositorio de GitHub vinculado.
Qué hace
- Recibe un webhook cuando un build de EAS finaliza.
- Descarga el artefacto del build (archivo
.apppara iOS,.apkpara Android). - Ejecuta el caso de prueba o plan de pruebas configurado contra el artefacto en la plataforma correspondiente.
- Informa el resultado como un check run de GitHub en el commit cuando hay un repositorio de GitHub vinculado.
- Los artefactos
.aab(Android App Bundle) no se pueden instalar en un emulador — solo los builds.apkson probables. Un artefacto.aabse omite conartifact kind aab is not installable. - Los formatos de artefactos no reconocidos (ni
.app,.apk,.ipani.aab) se omiten conartifact format not recognized: <ext>. - Las URLs de artefactos de EAS expiran después de 30 días. Autonomy descarga el artefacto en el momento de la activación; las URLs expiradas se omiten con
build artifact expired.
Configuración
Antes de empezar
- Una cuenta de Expo con al menos un proyecto que use EAS Build.
- Al menos un caso de prueba de Autonomy que pase contra una subida móvil.
- Un entorno de Autonomy configurado para pruebas móviles.
- Un token de acceso robot de Expo con permiso para leer builds y proyectos.
- Para reporte de estado: la GitHub App de Autonomy instalada en el repositorio.
- Abre Ajustes → Integraciones en el panel de Autonomy.
- Haz clic en Conectar en la tarjeta de Expo EAS. Pega un token de acceso robot de Expo. Expo usa autenticación basada en token — no hay flujo OAuth.
- Haz clic en Vincular app. Autonomy lista las apps de Expo visibles para tu cuenta — elige la que quieras probar. El webhook se registra automáticamente al vincular.
- Elige un Caso de prueba o Plan de pruebas como objetivo de ejecución predeterminado.
- Elige el Entorno cuya configuración debe aplicarse.
- Selecciona qué plataformas (iOS, Android o ambas) deben activar ejecuciones.
- Para reportar resultados como un check de GitHub, activa Reportar checks y selecciona el Repositorio vinculado. La GitHub App de Autonomy debe estar instalada en ese repositorio.
Registro del webhook
El webhook se registra automáticamente al vincular una app. Si el registro automático falla — por ejemplo, porque el token de acceso no tiene permiso para gestionar webhooks — hay una alternativa manual disponible:
eas webhook:create --event BUILD --url <url-de-callback> --secret <secreto>Para encontrar la URL de callback y el secreto del webhook:
- En Autonomy, abre los ajustes de la app vinculada.
- Despliega Alternativa manual (eas webhook:create). Copia la URL de callback y el Secreto del webhook.
- Ejecuta el comando
eas webhook:createde arriba con esos valores.
El secreto del webhook es generado por Autonomy cuando vinculas la app. Se usa para verificar la firma de cada webhook entrante.
Filtros de rama
Los filtros de rama no están disponibles para Expo EAS. Los webhooks de EAS Build no incluyen el nombre de la rama, por lo que no se pueden evaluar los filtros de rama. El control de filtro de rama está oculto en el panel, y el backend rechaza los filtros de rama no vacíos para proyectos de Expo.
Perfiles de build para artefactos probables
Autonomy necesita un perfil de build en eas.json que produzca artefactos instalables:
- iOS: establece
simulatorentruepara producir un build.appde Simulador en lugar de un.ipafirmado. Un.ipade dispositivo no se puede instalar en un Simulador. - Android: establece
buildTypeenapkpara producir un.apken lugar de un.aab. Un.aabno se puede instalar en un emulador.
1{2 "build": {3 "autonomy-e2e": {4 "withoutCredentials": true,5 "ios": {6 "simulator": true7 },8 "android": {9 "buildType": "apk"10 }11 }12 }13}Cómo se activa una ejecución
Cuando EAS envía un webhook BUILD con estado finished:
- Autonomy busca la app vinculada por el ID del proyecto de Expo.
- El contexto del build (preview, production o branch) se verifica contra los contextos de activación configurados de la app.
- No se aplican filtros de rama — los webhooks de EAS Build no incluyen rama.
- La plataforma del build (iOS o Android) se verifica contra las plataformas configuradas de la app.
- La URL y el tipo de artefacto se validan. Los tipos no instalables (
.aab) y los formatos no reconocidos se omiten. - Si la URL del artefacto ha expirado (>30 días), el evento se omite.
- Si hay un objetivo de prueba predeterminado configurado, Autonomy crea una ejecución con el artefacto como objetivo móvil.
La ejecución recibe el artefacto como una fuente URL — el runner lo descarga directamente. Como las URLs de artefactos de EAS expiran después de 30 días, la descarga ocurre en el momento de la activación.
Reporte de estado
Expo no tiene una superficie nativa de checks. Autonomy no puede publicar resultados directamente en el panel de Expo.
Para reportar resultados, vincula un repositorio de GitHub a la app de Expo en Autonomy. Cuando está activado, Autonomy publica un check run de GitHub en el commit — el mismo mecanismo usado para Netlify y la GitHub App. El check aparece en la pull request y puede hacerse un check de estado requerido bajo la protección de rama.
Importante: Si Reportar checks está activado pero no hay ningún repositorio de GitHub vinculado, los resultados solo aparecerán en el panel de Autonomy — no en la pull request ni en ningún lugar de Expo. El panel muestra una advertencia cuando este es el caso.
Ejemplo de EAS Workflow
Si usas EAS Workflows, añade .eas/workflows/autonomy-e2e.yml para construir artefactos probables. En el modo predeterminado de webhook, el webhook BUILD se activa automáticamente cuando se completa cada build — no se necesita ningún trabajo de activación en el workflow.
name: 'Autonomy E2E — My App'
on:
push:
branches:
- 'main'
pull_request:
branches:
- '*'
jobs:
build_ios:
name: Build iOS for Autonomy
type: build
params:
platform: ios
profile: 'autonomy-e2e'
build_android:
name: Build Android for Autonomy
type: build
params:
platform: android
profile: 'autonomy-e2e'
# ─── No trigger job needed ───
# The EAS BUILD webhook fires automatically when each build completes.
# Autonomy ingests the webhook, creates QA runs, and reports back.Para la activación explícita (evitando el webhook), vuelve a generar el workflow con dispatchMode: "explicit". Esto añade un trabajo trigger_autonomy que hace un POST a la API de Autonomy después de que se completan los builds. El modo explícito requiere tres secretos de EAS:
AUTONOMY_API_KEY— Clave de API programática de AutonomyAUTONOMY_TEST_PLAN_ID— ID de documento Convex del Plan de pruebas a ejecutarAUTONOMY_ENVIRONMENT_SLUG— Slug de entorno de Autonomy (ej."staging")
Establécelos con:
eas secret:create --name AUTONOMY_API_KEY --value <tu-clave-api>
eas secret:create --name AUTONOMY_TEST_PLAN_ID --value <id-plan>
eas secret:create --name AUTONOMY_ENVIRONMENT_SLUG --value <slug>La integración por webhook y el enfoque de workflow son independientes — usa el que se ajuste a tu pipeline. El camino del webhook es más simple (sin scripts de shell), mientras que el camino explícito de workflow te da control sobre exactamente cuándo se activa la ejecución.
Monorepo y múltiples apps
Una sola cuenta de Expo puede tener múltiples apps. Vincula cada app de forma independiente en Autonomy — cada una tiene su propio objetivo de prueba, entorno y plataformas. Todas las apps vinculadas pueden compartir el mismo repositorio de GitHub vinculado para el reporte de estado.
Solución de problemas
No se inicia ninguna ejecución cuando un build de EAS finaliza
Verifica lo siguiente:
- La cuenta de Expo está conectada y muestra Activa en Autonomy.
- La app de Expo está vinculada. Autonomy solo supervisa apps vinculadas.
- La app está habilitada. Una app deshabilitada registra el evento pero omite la ejecución (
project disabled). - El webhook está registrado. Revisa la sección Webhook en los ajustes de la app — debe mostrar Registrado. Si no, usa la alternativa manual: ejecuta
eas webhook:createcon la URL y el secreto del panel de ajustes. - El estado del build es
finished. Un build en estadoin-progressoerroredno activa una ejecución (deployment not ready). - El contexto del build coincide con los contextos de activación configurados de la app. Una discrepancia omite con
context <x> not enabled. - Un caso de prueba o plan de pruebas predeterminado está seleccionado. Sin uno, el evento se omite con
no default test target. - El build produjo un artefacto descargable. Si no hay URL de artefacto presente, el evento se omite con
no build artifact.
La ejecución falla al instalar el build
- iOS: confirma que el perfil de build de EAS establece
ios.simulator: true. Un.ipafirmado para un dispositivo físico no se puede instalar en un Simulador. - Android: confirma que el perfil de build de EAS establece
android.buildType: "apk". Un.aabno se puede instalar en un emulador. Autonomy omite los artefactos.aabconartifact kind aab is not installable.
El formato del artefacto no se reconoce
Si el build produce un archivo con una extensión que Autonomy no reconoce (que no sea .app, .apk, .ipa o .aab), el evento se omite con artifact format not recognized: <ext>. Revisa el perfil de build de EAS para asegurarte de que produce un artefacto estándar.
La URL del artefacto ha expirado
Las URLs de artefactos de EAS expiran después de 30 días. El evento se omite con build artifact expired. Activa un nuevo build de EAS — Autonomy recibirá un nuevo webhook con una URL válida.
No aparece ningún check en la pull request
Expo no tiene una superficie nativa de checks. El reporte de estado requiere:
- Reportar checks activado en la app vinculada.
- Un Repositorio vinculado seleccionado.
- La GitHub App de Autonomy instalada en ese repositorio.
Si falta alguno de estos, el estado de reporte del evento es unsupported y no se publica ningún check. Si los checks están activados pero no hay ningún repositorio vinculado, los resultados solo aparecen en el panel de Autonomy.