Fix Gradle build directory cache for UP-TO-DATE incremental builds.

Cache project .gradle/ and root build/ (execution history + outputs), restore git mtimes after checkout, skip set-version when unchanged, and bump cache keys to v2 with build-jar restore fallback.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-14 14:41:47 +03:00
Unverified
parent 607192680a
commit 15f88c7349
5 changed files with 48 additions and 18 deletions
@@ -1,5 +1,5 @@
name: Restore Gradle build directories name: Restore Gradle build directories
description: Restore module build/ trees for faster CI Gradle jobs description: Restore project .gradle/, build/ trees for faster CI Gradle jobs
inputs: inputs:
scope: scope:
@@ -21,11 +21,15 @@ runs:
id: cache id: cache
with: with:
path: | path: |
.gradle
build
app/desktop/build app/desktop/build
app/shared/build app/shared/build
app/android/build app/android/build
utils/shared/build utils/shared/build
utils/android/build utils/android/build
key: gradle-build-${{ runner.os }}-${{ runner.arch }}-v1-${{ inputs.scope }}-${{ hashFiles('gradle/libs.versions.toml', 'settings.gradle.kts', 'gradle.properties', 'app/desktop/build.gradle.kts', 'app/desktop/proguard-rules.pro', 'app/shared/build.gradle.kts', 'app/android/build.gradle.kts', 'utils/shared/build.gradle.kts', 'utils/android/build.gradle.kts') }} key: gradle-build-${{ runner.os }}-${{ runner.arch }}-v2-${{ inputs.scope }}-${{ hashFiles('gradle/libs.versions.toml', 'settings.gradle.kts', 'gradle.properties', 'build.gradle.kts', 'app/desktop/build.gradle.kts', 'app/desktop/proguard-rules.pro', 'app/shared/build.gradle.kts', 'app/android/build.gradle.kts', 'utils/shared/build.gradle.kts', 'utils/android/build.gradle.kts') }}
restore-keys: | restore-keys: |
gradle-build-${{ runner.os }}-${{ runner.arch }}-v1- gradle-build-${{ runner.os }}-${{ runner.arch }}-v2-${{ inputs.scope }}-
gradle-build-${{ runner.os }}-${{ runner.arch }}-v2-build-jar-
gradle-build-${{ runner.os }}-${{ runner.arch }}-v2-
@@ -0,0 +1,12 @@
name: Restore git mtimes
description: Reset tracked file timestamps from git so Gradle incremental builds can be UP-TO-DATE after checkout
runs:
using: composite
steps:
- name: Restore mtimes
shell: bash
run: |
set -euo pipefail
python3 -m pip install --disable-pip-version-check --quiet git-restore-mtime
python3 -m git_restore_mtime
@@ -1,5 +1,5 @@
name: Save Gradle build directories name: Save Gradle build directories
description: Save module build/ trees after a Gradle build description: Save project .gradle/, build/ trees after a Gradle build
inputs: inputs:
primary-key: primary-key:
@@ -14,6 +14,8 @@ runs:
with: with:
key: ${{ inputs.primary-key }} key: ${{ inputs.primary-key }}
path: | path: |
.gradle
build
app/desktop/build app/desktop/build
app/shared/build app/shared/build
app/android/build app/android/build
+6
View File
@@ -18,6 +18,12 @@ runs:
VERSION_CODE=1 VERSION_CODE=1
fi fi
GRADLE_FILE="build.gradle.kts" GRADLE_FILE="build.gradle.kts"
CURRENT_NAME="$(sed -n 's/.*extra\["versionName"\] = "\([^"]*\)".*/\1/p' "$GRADLE_FILE" | head -n 1)"
CURRENT_CODE="$(sed -n 's/.*extra\["versionCode"\] = \([0-9]*\).*/\1/p' "$GRADLE_FILE" | head -n 1)"
if [[ "$CURRENT_NAME" == "$VERSION" && "$CURRENT_CODE" == "$VERSION_CODE" ]]; then
echo "versionName=$VERSION versionCode=$VERSION_CODE (unchanged)"
exit 0
fi
sed -i.bak "s/extra\\[\"versionName\"\\] = \"[^\"]*\"/extra[\"versionName\"] = \"$VERSION\"/" "$GRADLE_FILE" sed -i.bak "s/extra\\[\"versionName\"\\] = \"[^\"]*\"/extra[\"versionName\"] = \"$VERSION\"/" "$GRADLE_FILE"
sed -i.bak "s/extra\\[\"versionCode\"\\] = [0-9]*/extra[\"versionCode\"] = $VERSION_CODE/" "$GRADLE_FILE" sed -i.bak "s/extra\\[\"versionCode\"\\] = [0-9]*/extra[\"versionCode\"] = $VERSION_CODE/" "$GRADLE_FILE"
rm -f "$GRADLE_FILE.bak" rm -f "$GRADLE_FILE.bak"
+20 -14
View File
@@ -80,10 +80,11 @@ jobs:
FROMCHAT_PREBUILT_PROGUARD: "0" FROMCHAT_PREBUILT_PROGUARD: "0"
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v5
- uses: ./.github/actions/setup-java-gradle - uses: ./.github/actions/restore-git-mtimes
- uses: ./.github/actions/set-version - uses: ./.github/actions/set-version
with: with:
version: ${{ needs.resolve-version.outputs.version }} version: ${{ needs.resolve-version.outputs.version }}
- uses: ./.github/actions/setup-java-gradle
- uses: ./.github/actions/cache-gradle-build - uses: ./.github/actions/cache-gradle-build
id: gradle-build-cache id: gradle-build-cache
with: with:
@@ -108,10 +109,11 @@ jobs:
timeout-minutes: 30 timeout-minutes: 30
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v5
- uses: ./.github/actions/setup-java-gradle - uses: ./.github/actions/restore-git-mtimes
- uses: ./.github/actions/set-version - uses: ./.github/actions/set-version
with: with:
version: ${{ needs.resolve-version.outputs.version }} version: ${{ needs.resolve-version.outputs.version }}
- uses: ./.github/actions/setup-java-gradle
- uses: ./.github/actions/cache-gradle-build - uses: ./.github/actions/cache-gradle-build
id: gradle-build-cache id: gradle-build-cache
with: with:
@@ -164,6 +166,10 @@ jobs:
timeout-minutes: 60 timeout-minutes: 60
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v5
- uses: ./.github/actions/restore-git-mtimes
- uses: ./.github/actions/set-version
with:
version: ${{ needs.resolve-version.outputs.version }}
- name: Ensure ARM64 packaging JDK - name: Ensure ARM64 packaging JDK
if: matrix.arch == 'arm64' if: matrix.arch == 'arm64'
shell: cmd shell: cmd
@@ -178,9 +184,6 @@ jobs:
gradle-version: wrapper gradle-version: wrapper
cache-read-only: true cache-read-only: true
add-job-summary: on-failure add-job-summary: on-failure
- uses: ./.github/actions/set-version
with:
version: ${{ needs.resolve-version.outputs.version }}
- uses: ./.github/actions/cache-gradle-build - uses: ./.github/actions/cache-gradle-build
id: gradle-build-cache id: gradle-build-cache
with: with:
@@ -237,6 +240,10 @@ jobs:
timeout-minutes: 60 timeout-minutes: 60
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v5
- uses: ./.github/actions/restore-git-mtimes
- uses: ./.github/actions/set-version
with:
version: ${{ needs.resolve-version.outputs.version }}
- uses: ./.github/actions/setup-java-gradle - uses: ./.github/actions/setup-java-gradle
if: matrix.arch == 'x64' if: matrix.arch == 'x64'
with: with:
@@ -246,9 +253,6 @@ jobs:
if: matrix.arch == 'arm64' if: matrix.arch == 'arm64'
with: with:
cache-read-only: "true" cache-read-only: "true"
- uses: ./.github/actions/set-version
with:
version: ${{ needs.resolve-version.outputs.version }}
- uses: ./.github/actions/cache-gradle-build - uses: ./.github/actions/cache-gradle-build
id: gradle-build-cache id: gradle-build-cache
with: with:
@@ -310,12 +314,13 @@ jobs:
timeout-minutes: 45 timeout-minutes: 45
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v5
- uses: ./.github/actions/setup-java-gradle - uses: ./.github/actions/restore-git-mtimes
with:
cache-read-only: "true"
- uses: ./.github/actions/set-version - uses: ./.github/actions/set-version
with: with:
version: ${{ needs.resolve-version.outputs.version }} version: ${{ needs.resolve-version.outputs.version }}
- uses: ./.github/actions/setup-java-gradle
with:
cache-read-only: "true"
- uses: ./.github/actions/cache-gradle-build - uses: ./.github/actions/cache-gradle-build
id: gradle-build-cache id: gradle-build-cache
with: with:
@@ -361,13 +366,14 @@ jobs:
timeout-minutes: 60 timeout-minutes: 60
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v5
- uses: ./.github/actions/restore-git-mtimes
- uses: ./.github/actions/set-version
with:
version: ${{ needs.resolve-version.outputs.version }}
- uses: ./.github/actions/setup-java-gradle - uses: ./.github/actions/setup-java-gradle
with: with:
cache-read-only: "true" cache-read-only: "true"
- uses: android-actions/setup-android@v4 - uses: android-actions/setup-android@v4
- uses: ./.github/actions/set-version
with:
version: ${{ needs.resolve-version.outputs.version }}
- uses: ./.github/actions/cache-gradle-build - uses: ./.github/actions/cache-gradle-build
id: gradle-build-cache id: gradle-build-cache
with: with: