From f275ca5b7db3b9e64e6ea392f110360505ab0389 Mon Sep 17 00:00:00 2001 From: Chumor <185651145+Chumor@users.noreply.github.com> Date: Sun, 6 Sep 2026 11:47:03 +0800 Subject: [PATCH 1/4] ci: check changed areas in pull requests - Remove manual workflow dispatch and run checks only for pull requests - Select Android, iOS, and Node checks from their actual changed inputs - Update action versions and keep CI dependency caches read-only --- .github/workflows/pr-check.yml | 84 +++++++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 22 deletions(-) diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index f1c49a01..aad2359b 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -1,7 +1,6 @@ name: PR Check on: - workflow_dispatch: pull_request: permissions: @@ -16,30 +15,22 @@ jobs: changes: runs-on: ubuntu-latest outputs: - android: ${{ steps.manual.outputs.android || steps.filter.outputs.android }} - ios: ${{ steps.manual.outputs.ios || steps.filter.outputs.ios }} + android: ${{ steps.filter.outputs.android }} + ios: ${{ steps.filter.outputs.ios }} + node: ${{ steps.filter.outputs.node }} steps: - - name: Run all checks for manual dispatch - id: manual - if: github.event_name == 'workflow_dispatch' - shell: bash - run: | - echo "android=true" >> "$GITHUB_OUTPUT" - echo "ios=true" >> "$GITHUB_OUTPUT" - - name: Detect changed areas id: filter - if: github.event_name == 'pull_request' - uses: dorny/paths-filter@v3 + uses: dorny/paths-filter@v4 with: filters: | android: - 'app/**' - 'shared/**' + - 'extensions/**' - 'pi-bridge/**' - 'packages/extension-api/**' - 'third_party/termux/**' - - '.github/workflows/build-nightly-apk.yml' - 'build.gradle.kts' - 'settings.gradle.kts' - 'gradle.properties' @@ -49,6 +40,7 @@ jobs: - '.github/workflows/pr-check.yml' ios: - 'shared/**' + - 'extensions/**' - 'pi-bridge/**' - 'packages/extension-api/**' - 'build.gradle.kts' @@ -60,17 +52,58 @@ jobs: - 'scripts/bootstrap-ios.sh' - 'scripts/prepare-ios-runtime.sh' - 'scripts/build-ios-ish-runtime.sh' + - 'third_party/ish-arm64' - 'third_party/ish-arm64/**' - '.gitmodules' - 'LICENSE' - 'THIRD_PARTY_NOTICES.md' - - 'app/src/main/assets/fonts/JetBrainsMono-Regular.ttf' - '.github/workflows/pr-check.yml' + node: + - 'pi-bridge/**' + - 'packages/extension-api/**' + - '.github/workflows/pr-check.yml' + + node: + needs: changes + if: ${{ needs.changes.outputs.node == 'true' }} + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + persist-credentials: false + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.19.0' + cache: npm + cache-dependency-path: | + pi-bridge/package-lock.json + packages/extension-api/package-lock.json + + - name: Check Pi Bridge types + working-directory: pi-bridge + run: | + npm ci --ignore-scripts --legacy-peer-deps + npm run check + + - name: Test Pi Bridge + working-directory: pi-bridge + run: npm test + + - name: Check Extension API + working-directory: packages/extension-api + run: | + npm ci --ignore-scripts + npm run check android: needs: changes - if: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.android == 'true' }} + if: ${{ needs.changes.outputs.android == 'true' }} runs-on: ubuntu-latest + timeout-minutes: 30 steps: - name: Checkout uses: actions/checkout@v7 @@ -83,11 +116,18 @@ jobs: distribution: temurin java-version: '17' + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.19.0' + cache: npm + cache-dependency-path: pi-bridge/package-lock.json + - name: Setup Gradle uses: gradle/actions/setup-gradle@v6 with: cache-provider: enhanced - cache-read-only: false + cache-read-only: true - name: Set up Android SDK uses: android-actions/setup-android@v4 @@ -111,20 +151,20 @@ jobs: ios: needs: changes - if: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.ios == 'true' }} + if: ${{ needs.changes.outputs.ios == 'true' }} runs-on: macos-26 timeout-minutes: 60 env: DEVELOPER_DIR: /Applications/Xcode_26.6.app/Contents/Developer steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: submodules: recursive persist-credentials: false - name: Set up JDK 17 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: temurin java-version: '17' @@ -140,7 +180,7 @@ jobs: uses: gradle/actions/setup-gradle@v6 with: cache-provider: enhanced - cache-read-only: false + cache-read-only: true - name: Install iOS build tools run: brew install llvm lld meson ninja xcodegen @@ -163,4 +203,4 @@ jobs: -sdk iphonesimulator \ -destination 'platform=iOS Simulator,name=iPhone 17 Pro,OS=26.5' \ CODE_SIGNING_ALLOWED=NO \ - build \ No newline at end of file + build From 0a932fd3afb3de243d0fa5845adcdb17068e5387 Mon Sep 17 00:00:00 2001 From: Chumor <185651145+Chumor@users.noreply.github.com> Date: Sun, 6 Sep 2026 12:19:06 +0800 Subject: [PATCH 2/4] ci: build nightly APKs with bundled extensions --- .github/workflows/build-nightly-apk.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build-nightly-apk.yml b/.github/workflows/build-nightly-apk.yml index 76e3edbb..969aea7b 100644 --- a/.github/workflows/build-nightly-apk.yml +++ b/.github/workflows/build-nightly-apk.yml @@ -7,6 +7,7 @@ on: paths: - 'app/**' - 'shared/**' + - 'extensions/**' - 'pi-bridge/**' - 'packages/extension-api/**' - 'third_party/termux/terminal-emulator/**' @@ -36,6 +37,13 @@ jobs: distribution: temurin java-version: '17' + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.19.0' + cache: npm + cache-dependency-path: pi-bridge/package-lock.json + - name: Setup Gradle uses: gradle/actions/setup-gradle@v6 with: From 091d855e206d7d3fa640c9eedef75ccc9d5f3745 Mon Sep 17 00:00:00 2001 From: Chumor <185651145+Chumor@users.noreply.github.com> Date: Sun, 6 Sep 2026 11:51:03 +0800 Subject: [PATCH 3/4] fix(android): separate debug and nightly variants - Use a .debug application ID suffix for debug builds without production conflicts - Build nightly artifacts from release settings with nightly signing when available --- app/build.gradle.kts | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 38840a2f..5de85cdf 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -148,15 +148,28 @@ android { buildTypes { debug { + applicationIdSuffix = ".debug" manifestPlaceholders["appIcon"] = "@mipmap/ic_launcher" manifestPlaceholders["appRoundIcon"] = "@mipmap/ic_launcher_round" manifestPlaceholders["appLabel"] = "@string/app_name" } + release { + isMinifyEnabled = true + isShrinkResources = true + manifestPlaceholders["appIcon"] = "@mipmap/ic_launcher" + manifestPlaceholders["appRoundIcon"] = "@mipmap/ic_launcher_round" + manifestPlaceholders["appLabel"] = "@string/app_name" + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + create("nightly") { - initWith(getByName("debug")) + initWith(getByName("release")) applicationIdSuffix = ".nightly" - matchingFallbacks += listOf("debug") + matchingFallbacks += listOf("release") resValue("string", "nightly_app_name", "Aether Nightly") buildConfigField("String", "UPDATE_CHANNEL", "\"nightly\"") manifestPlaceholders["appIcon"] = "@mipmap/ic_launcher_nightly" @@ -168,18 +181,6 @@ android { signingConfigs.getByName("debug") } } - - release { - isMinifyEnabled = true - isShrinkResources = true - manifestPlaceholders["appIcon"] = "@mipmap/ic_launcher" - manifestPlaceholders["appRoundIcon"] = "@mipmap/ic_launcher_round" - manifestPlaceholders["appLabel"] = "@string/app_name" - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - } } compileOptions { From bd3c1bc7ab109f3674d28f910065d91c5ff68a47 Mon Sep 17 00:00:00 2001 From: BaimoQilin Date: Tue, 15 Sep 2026 21:51:49 +0800 Subject: [PATCH 4/4] fix(ci): skip removed Android SDK tools package --- .github/workflows/build-nightly-apk.yml | 4 +++- .github/workflows/pr-check.yml | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-nightly-apk.yml b/.github/workflows/build-nightly-apk.yml index 969aea7b..0272ee61 100644 --- a/.github/workflows/build-nightly-apk.yml +++ b/.github/workflows/build-nightly-apk.yml @@ -52,6 +52,8 @@ jobs: - name: Set up Android SDK uses: android-actions/setup-android@v4 + with: + packages: platform-tools - name: Make Gradle executable run: chmod +x ./gradlew @@ -93,4 +95,4 @@ jobs: uses: actions/upload-artifact@v7 with: name: Aether-nightly - path: dist/nightly/*.apk \ No newline at end of file + path: dist/nightly/*.apk diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index 42152623..789cda92 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -133,6 +133,8 @@ jobs: - name: Set up Android SDK uses: android-actions/setup-android@v4 + with: + packages: platform-tools - name: Make Gradle executable run: chmod +x ./gradlew