feat(ui): adaptive widescreen/tablet layout overhaul #174
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 | |
| on: | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: ci-${{ github.event.pull_request.number || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| translations_drift: | |
| name: en.json drift | |
| # Source-bypass guard: the committed English JSON under | |
| # common/assets/translations/*/en.json is generated from the pinned | |
| # deps/translate submodule's v6/*.strings. Regenerate and fail if they | |
| # differ, so a string can never reach the app without coming from source | |
| # (this is the bypass that shipped the June family strings as English). | |
| # Pure python3, so it runs on ubuntu-latest off the self-hosted pool. | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| if: >- | |
| github.event_name == 'workflow_dispatch' || | |
| github.event.pull_request.head.repo.full_name == github.repository | |
| env: | |
| # convert.py writes raw UTF-8 via the locale's preferred encoding; pin a | |
| # UTF-8 locale so non-ASCII source strings round-trip byte-for-byte. | |
| LANG: C.UTF-8 | |
| LC_ALL: C.UTF-8 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 1 | |
| # Only deps/translate is needed; avoid cloning the heavy sibling | |
| # submodules (wireguard-apple, etc.) that the build jobs require. | |
| - name: Init deps/translate submodule | |
| run: git submodule update --init --depth 1 deps/translate | |
| - name: Regenerate en.json from pinned source strings | |
| working-directory: deps/translate/scripts | |
| run: | | |
| set -euo pipefail | |
| out="$GITHUB_WORKSPACE/common/assets/translations" | |
| python3 ./convert.py -i ../v6/Ui.strings -o "$out/ui/en.json" -f flutter | |
| python3 ./convert.py -i ../v6/Packs.strings -o "$out/packs/en.json" -f flutter | |
| python3 ./convert.py -i ../v6/PackTags.strings -o "$out/packtags/en.json" -f flutter | |
| - name: Fail if regenerated en.json differs from committed | |
| run: | | |
| git diff --exit-code -- \ | |
| common/assets/translations/ui/en.json \ | |
| common/assets/translations/packs/en.json \ | |
| common/assets/translations/packtags/en.json | |
| flutter_analyze: | |
| name: Flutter analyze | |
| runs-on: [self-hosted, macOS, ARM64, build-only] | |
| timeout-minutes: 45 | |
| # Skip for the automated translations-sync PRs: a translation-only diff | |
| # can't affect the binary, so don't tie up the self-hosted pool on them. | |
| if: >- | |
| (github.event_name == 'workflow_dispatch' || | |
| github.event.pull_request.head.repo.full_name == github.repository) && | |
| !startsWith(github.head_ref, 'automation/translations-sync/') | |
| env: | |
| LANG: en_US.UTF-8 | |
| LC_ALL: en_US.UTF-8 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 1 | |
| - name: Analyze Flutter module | |
| working-directory: common | |
| run: | | |
| make pub gen | |
| fvm flutter analyze --no-fatal-warnings --no-fatal-infos | |
| ios_build: | |
| name: iOS build | |
| runs-on: [self-hosted, macOS, ARM64, build-only] | |
| timeout-minutes: 120 | |
| # Skip for the automated translations-sync PRs: a translation-only diff | |
| # can't affect the binary, so don't tie up the self-hosted pool on them. | |
| if: >- | |
| (github.event_name == 'workflow_dispatch' || | |
| github.event.pull_request.head.repo.full_name == github.repository) && | |
| !startsWith(github.head_ref, 'automation/translations-sync/') | |
| env: | |
| LANG: en_US.UTF-8 | |
| LC_ALL: en_US.UTF-8 | |
| SHOW_XCODE_LOG: "0" | |
| steps: | |
| - uses: actions/checkout@v7 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 1 | |
| - name: Bootstrap Flutter common lib | |
| # Builds the add-to-app xcframeworks the host project embeds. | |
| run: make -C common build-ios | |
| - name: Build iOS six debug | |
| run: make -C ios check CHECK_SCHEME=Dev CHECK_CONFIG=Debug | |
| - name: Build iOS family debug | |
| run: make -C ios check CHECK_SCHEME=FamilyDev CHECK_CONFIG=Debug | |
| android_assemble: | |
| name: Android assemble | |
| runs-on: [self-hosted, macOS, ARM64, build-only] | |
| timeout-minutes: 120 | |
| # Skip for the automated translations-sync PRs: a translation-only diff | |
| # can't affect the binary, so don't tie up the self-hosted pool on them. | |
| if: >- | |
| (github.event_name == 'workflow_dispatch' || | |
| github.event.pull_request.head.repo.full_name == github.repository) && | |
| !startsWith(github.head_ref, 'automation/translations-sync/') | |
| env: | |
| LANG: en_US.UTF-8 | |
| LC_ALL: en_US.UTF-8 | |
| GRADLE_OPTS: -Dorg.gradle.unsafe.disable.watch-fs=true -Dorg.gradle.vfs.watch=false | |
| steps: | |
| - uses: actions/checkout@v7 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 1 | |
| - name: Build Flutter Android debug library | |
| run: make regen-android | |
| - name: Assemble Android debug apps | |
| run: make -C android apk-family-debug apk-six-debug |