Skip to content

Mobile: MobileShell, gestos, viewport e performance no Android #222

Mobile: MobileShell, gestos, viewport e performance no Android

Mobile: MobileShell, gestos, viewport e performance no Android #222

Workflow file for this run

name: CI
# O workflow de release roda só por `workflow_dispatch`, então até aqui nenhum
# Pull Request era validado pelo GitHub: os commits diziam que o build e os
# testes passaram localmente, e não havia como conferir. Este workflow existe
# para o "All checks have passed" significar alguma coisa.
on:
pull_request:
push:
branches: [main, feat/native-app-foundation]
# Um PR que recebe vários pushes seguidos não precisa terminar as execuções
# antigas — só a do último commit diz algo sobre o que será mesclado.
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
frontend:
name: Angular
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
# A versao e um fato unico do repositorio: manifests, README e CHANGELOG.
# Ficava so na pipeline de release, e por isso o README anunciou 0.7.4
# durante tres releases sem ninguem reprovar nada.
- run: npm run release:validate-version
- run: npm run build
- run: npm run test:architecture
- run: npm run test:planning
- run: npm run test:ai
- run: npm run share-api:test
# O contrato entre o workflow de release e o atualizador do Android: nomes dos assets,
# SHA-256, assinatura verificada, e versionCode na ordem SemVer.
- run: npm run test:android-release
mobile:
name: Mobile (Playwright)
# A experiência do celular em navegador real: quatro tamanhos de Android com toque e o desktop.
# Gestos, folhas, diálogos com teclado simulado, rolagem horizontal e o desktop intacto.
# O que o Chromium não emula está em docs/mobile/ROTEIRO_ANDROID.md.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- name: Chromium do Playwright
run: npx playwright install --with-deps chromium
- run: npm run test:mobile-e2e
env:
CI: 'true'
- uses: actions/upload-artifact@v4
if: failure()
with:
name: playwright-report
path: |
playwright-report
test-results
retention-days: 7
rust:
name: Core Rust
# Ubuntu porque o core não depende de nada de Windows: ele fala rusqlite e
# SQLite. O empacotamento do instalador continua sendo Windows, no workflow
# de release. Rodar aqui em Linux é o que mantém o CI barato e rápido.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
# O crate depende do Tauri, que precisa das bibliotecas de sistema do
# GTK/WebKit mesmo quando só se compila a biblioteca e os testes.
- name: Dependências de sistema do Tauri
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
- run: cargo fmt --manifest-path src-tauri/Cargo.toml -- --check
- run: cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings
- run: cargo test --manifest-path src-tauri/Cargo.toml
android:
name: Android
# A etapa 14 e Windows <-> Android, e ate aqui nenhuma pipeline tinha
# construido nada para Android -- entao "funciona no Android" era
# afirmacao, nao fato. Quando este job nasceu, o alvo NAO compilava: a
# capability pedia `updater:default` numa plataforma onde o plugin do
# updater nao existe, e o build script do Tauri parava antes de verificar
# qualquer tipo. Sem job, isso teria sido descoberto num aparelho.
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# Node, Rust com alvo Android, JDK 17, NDK, `npm ci`, build do Angular e clippy do alvo.
# A mesma action prepara o APK assinado da release: nenhum dos dois caminhos é exercitado
# só por um deles.
- uses: ./.github/actions/android-toolchain
# O gate de verdade: um APK. `cargo check` cru nao passa pelo Gradle, pelo
# manifest, nem pelas capabilities resolvidas por plataforma -- que foi
# exatamente onde o alvo estava quebrado.
# APK de DEBUG. Não é o da release: este não é assinado para distribuição, e o nome do
# artefato diz isso. O APK assinado sai somente do workflow de release.
- name: APK de debug
run: npm run android:apk
- uses: actions/upload-artifact@v4
with:
name: narrahub-debug-apk
path: src-tauri/gen/android/app/build/outputs/apk/**/*.apk
if-no-files-found: error