diff --git a/.github/workflows/build-nightly-apk.yml b/.github/workflows/build-nightly-apk.yml index 76e3edbb..0272ee61 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: @@ -44,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 @@ -85,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 f1c49a01..789cda92 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,26 +15,19 @@ 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@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4 with: filters: | android: - 'app/**' - 'shared/**' + - 'extensions/**' - 'pi-bridge/**' - 'packages/extension-api/**' - 'third_party/termux/**' @@ -49,6 +41,7 @@ jobs: - '.github/workflows/pr-check.yml' ios: - 'shared/**' + - 'extensions/**' - 'pi-bridge/**' - 'packages/extension-api/**' - 'build.gradle.kts' @@ -60,17 +53,59 @@ 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: + - 'extensions/**' + - '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,14 +118,23 @@ 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 + with: + packages: platform-tools - name: Make Gradle executable run: chmod +x ./gradlew @@ -111,20 +155,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 +184,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 +207,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 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 69914476..f23e890c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -152,6 +152,7 @@ android { buildTypes { debug { + applicationIdSuffix = ".debug" manifestPlaceholders["appIcon"] = "@mipmap/ic_launcher" manifestPlaceholders["appRoundIcon"] = "@mipmap/ic_launcher_round" manifestPlaceholders["appLabel"] = "@string/app_name" @@ -168,10 +169,22 @@ android { buildConfigField("Boolean", "SHOWCASE_MODE", "true") } + 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" @@ -183,18 +196,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 {