patch: se reparan las capturas de Android en el runner de Ubuntu - #148
Merged
Conversation
El lane `android screenshots` moría en `flutter drive` con "Keystore file '~/.android/debug.keystore' not found for signing config 'debug'": el bloque `debug` de signingConfigs le fijaba el `storeFile` a mano, y con eso AGP deja de tratarlo como su keystore de debug (que crea solo la primera vez que lo necesita) y pasa a exigir un archivo ya existente. En una máquina limpia —los runners de CI lo son— ese archivo no está. Ahora el bloque sólo se toca cuando hay un keystore propio que usar, así que firmar el debug con la llave de release sigue igual y el resto cae en el config por defecto. Detrás venía un segundo tropiezo, ya en el post-proceso: el paso de ImageMagick enlaza únicamente `magick`, pero el chequeo de dependencias de frameit busca `convert` (el binario de ImageMagick 6), así que el `fastlane frameit` que usa scripts/compose-store-screenshots para pedir prestado el marco del teléfono se negaba a partir. En macOS no se notaba porque brew deja los dos en el PATH. De paso, ese error era invisible: la salida de frameit se mandaba a /dev/null y `set -e` cortaba el script sin decir nada. Ahora se guarda y se muestra cuando el marco no aparece. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MrzSFvPqQ6gMjYFB1dNQAK
Im-Fran
marked this pull request as ready for review
August 13, 2026 03:12
Im-Fran
enabled auto-merge (squash)
August 13, 2026 03:12
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
El job
screenshots-androidno estaba generando ninguna captura. Había dos fallas, no una: la segunda venía justo detrás y habría reventado el job igual unos minutos después.1. El keystore de debug
flutter drivemoría en el build:El bloque
debugdesigningConfigsle fijaba elstoreFilea mano. Con eso AGP deja de tratarlo como su keystore de debug —el que crea solo la primera vez que lo necesita— y pasa a exigir un archivo ya existente. En una máquina limpia, y los runners lo son, ese archivo no está. No faltaba un paso en el workflow: Gradle lo habría creado si no le hubiéramos puesto la ruta encima.Ahora el bloque sólo se toca cuando hay un keystore propio que usar, así que firmar el debug con la llave de release sigue igual y el resto cae en el config por defecto. De paso queda arreglado
flutter runen una máquina que nunca abrió Android Studio, que fallaba con el mismo error.2. Falta
convertpara frameitEl job recién se mudó a Ubuntu en #146, así que los pasos de post-proceso nunca habían corrido en Linux.
scripts/compose-store-screenshotsmoría en silencio: el chequeo de dependencias de frameit buscaconvert(el binario de ImageMagick 6) y el paso de ImageMagick sólo enlazamagick. En macOS no se nota porque brew deja los dos en el PATH.Se enlaza también
convert, y la verificación pasa a hacerse por la ruta enlazada, que es la que ven los pasos siguientes.Ese error además era invisible: la salida de frameit se mandaba a
/dev/nullyset -ecortaba el script sin decir nada. Ahora se guarda y se muestra cuando el marco no aparece.Cómo se probó
Los pasos del workflow se corrieron en una VM Linux con el mismo toolchain (Flutter 3.44.9, JDK 17, AGP 8.12 / Gradle 9.5.1), partiendo por reproducir el error original tal cual.
Firma, con el APK compilado en cada caso:
MIUTEM_USE_DEBUG_SIGNING=true, sin keystore (lane de capturas)~/.android/debug.keystore; APK firmado conCN=Android Debug, O=Android, C=USflutter run)El APK completo se compiló con el mismo target que usa
flutter drive(integration_test/screenshots_test.dart, flavordevelopment):✓ Built app-development-debug.apk, packagecl.inndev.miutem.dev.Post-proceso, con capturas sintéticas de 1080x2160 en
es-419:generate-screenshot-backgroundsyframe_screenshotscorren bien, ycompose-store-screenshotsdeja las 8 capturas enmarcadas —incluidas la 01 y 02, que se componen aparte— con las tildes bien renderizadas bajoLANG=C.UTF-8. También se probó el camino de error escondiendoconvert: ahora sí explica por qué se cayó.Queda sin probar el recorrido dentro del emulador, porque la VM no tiene KVM. Se verificó todo lo anterior (build y firma) y todo lo posterior (fondos, frameit, composición).
Generated by Claude Code