Repository navigation
NH-085: escrita e ferramentas mobile V2 / beta.17 #231
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
| 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 |