From 884ef13ff71c657f1bcbd42af7537b38dd6a88ac Mon Sep 17 00:00:00 2001 From: Dennis V <2119348+dzianisv@users.noreply.github.com> Date: Sat, 23 May 2026 09:53:32 +0000 Subject: [PATCH] ci: cache npm + Gradle to slash compute usage - actions/setup-node cache: npm - actions/cache for ~/.gradle/caches, ~/.gradle/wrapper, android/.gradle - actions/cache for Android intermediates (android/app/build/intermediates, android/build, android/app/.cxx) - Skip debug keystore regeneration if cached - Add workflow_dispatch to publish-play-store for manual re-runs Cuts a clean run from ~6m to ~2-3m once warm. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/build.yml | 28 +++++++++++++++++++++++- .github/workflows/publish-play-store.yml | 24 ++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 703e9c2..3450f5c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,6 +21,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 + cache: npm - uses: actions/setup-java@v4 with: @@ -30,6 +31,28 @@ jobs: - name: Setup Android SDK uses: android-actions/setup-android@v3 + - name: Cache Gradle + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + android/.gradle + key: ${{ runner.os }}-gradle-${{ hashFiles('android/**/*.gradle*', 'android/gradle/wrapper/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Cache Android build outputs + uses: actions/cache@v4 + with: + path: | + android/app/build/intermediates + android/build + android/app/.cxx + key: ${{ runner.os }}-android-build-${{ hashFiles('package-lock.json', 'android/**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-android-build- + - name: Install dependencies run: npm install --legacy-peer-deps @@ -37,7 +60,10 @@ jobs: run: npx expo prebuild --platform android --no-install - name: Generate debug keystore - run: keytool -genkey -v -keystore android/app/debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android Debug,O=Android,C=US" + run: | + if [ ! -f android/app/debug.keystore ]; then + keytool -genkey -v -keystore android/app/debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android Debug,O=Android,C=US" + fi - name: Build APK working-directory: android diff --git a/.github/workflows/publish-play-store.yml b/.github/workflows/publish-play-store.yml index 072c069..208dda2 100644 --- a/.github/workflows/publish-play-store.yml +++ b/.github/workflows/publish-play-store.yml @@ -5,6 +5,7 @@ on: types: [published] push: tags: ["v*"] + workflow_dispatch: jobs: publish: @@ -20,6 +21,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 + cache: npm - uses: actions/setup-java@v4 with: @@ -29,6 +31,28 @@ jobs: - name: Setup Android SDK uses: android-actions/setup-android@v3 + - name: Cache Gradle + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + android/.gradle + key: ${{ runner.os }}-gradle-${{ hashFiles('android/**/*.gradle*', 'android/gradle/wrapper/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Cache Android build outputs + uses: actions/cache@v4 + with: + path: | + android/app/build/intermediates + android/build + android/app/.cxx + key: ${{ runner.os }}-android-build-${{ hashFiles('package-lock.json', 'android/**/*.gradle*') }} + restore-keys: | + ${{ runner.os }}-android-build- + - name: Install dependencies run: npm install --legacy-peer-deps