From f4cc4ca045b665d1548d1b60f2acfb33c7453f7a Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 15 Sep 2026 10:36:47 +0200 Subject: [PATCH 1/5] perf(ci): cache Gradle state and drop duplicate release builds Signed-off-by: alperozturk96 --- .github/workflows/assembleFlavors.yml | 18 +++++++++++++----- .github/workflows/check.yml | 4 ++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/.github/workflows/assembleFlavors.yml b/.github/workflows/assembleFlavors.yml index 8e96c5e2ed10..a0399f01cb6e 100644 --- a/.github/workflows/assembleFlavors.yml +++ b/.github/workflows/assembleFlavors.yml @@ -6,6 +6,8 @@ name: "Assemble" on: pull_request: branches: [ master, stable-* ] + push: + branches: [ master ] # Declare default permissions as read only. permissions: read-all @@ -16,11 +18,18 @@ concurrency: jobs: flavor: + name: flavor (${{ matrix.flavor }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: - flavor: [ Generic, Gplay, Huawei ] + include: + - flavor: Generic + tasks: assembleGenericDebug + - flavor: Gplay + tasks: assembleGplayDebug assembleGplayRelease + - flavor: Huawei + tasks: assembleHuaweiDebug steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: set up JDK 21 @@ -29,10 +38,9 @@ jobs: distribution: "temurin" java-version: 21 - uses: gradle/actions/wrapper-validation@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 - name: Build ${{ matrix.flavor }} run: | echo "org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g" >> gradle.properties - echo "org.gradle.caching=true" >> gradle.properties - echo "org.gradle.parallel=true" >> gradle.properties - echo "org.gradle.configureondemand=true" >> gradle.properties - ./gradlew assemble${{ matrix.flavor }} + ./gradlew ${{ matrix.tasks }} diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 60f83503ac30..efc226d6eb20 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -6,6 +6,8 @@ name: Check on: pull_request: branches: [ master, stable-* ] + push: + branches: [ master ] # Declare default permissions as read only. permissions: read-all @@ -28,5 +30,7 @@ jobs: with: distribution: "temurin" java-version: 21 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 - name: Check ${{ matrix.task }} run: ./gradlew ${{ matrix.task }} From 8b05449dae8b4e642f345f33df253870293e12ff Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 15 Sep 2026 11:22:00 +0200 Subject: [PATCH 2/5] reduce run resouces to have more stable build Signed-off-by: alperozturk96 --- .github/workflows/assembleFlavors.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/assembleFlavors.yml b/.github/workflows/assembleFlavors.yml index a0399f01cb6e..1ec74bf030c3 100644 --- a/.github/workflows/assembleFlavors.yml +++ b/.github/workflows/assembleFlavors.yml @@ -40,7 +40,16 @@ jobs: - uses: gradle/actions/wrapper-validation@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 - name: Setup Gradle uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 + - name: Runner resources + run: | + free -h + nproc + df -h . - name: Build ${{ matrix.flavor }} run: | - echo "org.gradle.jvmargs=-Xmx6g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=1g" >> gradle.properties + { + echo "org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:MaxMetaspaceSize=768m" + echo "kotlin.daemon.jvmargs=-Xmx3g -XX:+UseParallelGC -XX:MaxMetaspaceSize=512m" + echo "org.gradle.workers.max=2" + } >> gradle.properties ./gradlew ${{ matrix.tasks }} From 68c27fa15bb9d06c487556058138e93d9caa2a25 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 15 Sep 2026 11:22:20 +0200 Subject: [PATCH 3/5] add re-run for failed assemble ga Signed-off-by: alperozturk96 --- .github/workflows/assembleRerun.yml | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/assembleRerun.yml diff --git a/.github/workflows/assembleRerun.yml b/.github/workflows/assembleRerun.yml new file mode 100644 index 000000000000..b70a334b9718 --- /dev/null +++ b/.github/workflows/assembleRerun.yml @@ -0,0 +1,46 @@ +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only + +name: "Assemble rerun" + +on: + workflow_run: + workflows: [ "Assemble" ] + types: [ completed ] + +permissions: + actions: write + +jobs: + rerun: + if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.run_attempt < 2 }} + runs-on: ubuntu-latest + steps: + - name: Rerun failed jobs when the runner was lost + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GH_REPO: ${{ github.repository }} + RUN_ID: ${{ github.event.workflow_run.id }} + run: | + set -uo pipefail + + curl -sSL \ + -H "Authorization: Bearer $GH_TOKEN" \ + -H "Accept: application/vnd.github+json" \ + -o run-logs.zip \ + "https://api.github.com/repos/$GH_REPO/actions/runs/$RUN_ID/logs" + + if ! unzip -tq run-logs.zip >/dev/null 2>&1; then + echo "Logs for run $RUN_ID are not available, leaving it alone." + exit 0 + fi + + markers=$(unzip -p run-logs.zip '*' 2>/dev/null \ + | grep -cE "runner has received a shutdown signal|daemon disappeared" || true) + + if [ "${markers:-0}" -gt 0 ]; then + echo "Runner was lost ($markers marker(s)), rerunning failed jobs of run $RUN_ID." + gh run rerun "$RUN_ID" --failed + else + echo "No runner-loss markers found, leaving run $RUN_ID as a genuine failure." + fi From 6ccc7d5bf78bdda7a5176a49aa7788ef1339c417 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Tue, 15 Sep 2026 14:02:08 +0200 Subject: [PATCH 4/5] second run Signed-off-by: alperozturk96 --- .github/workflows/assembleFlavors.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/assembleFlavors.yml b/.github/workflows/assembleFlavors.yml index 1ec74bf030c3..7fce400bc63d 100644 --- a/.github/workflows/assembleFlavors.yml +++ b/.github/workflows/assembleFlavors.yml @@ -53,3 +53,4 @@ jobs: echo "org.gradle.workers.max=2" } >> gradle.properties ./gradlew ${{ matrix.tasks }} + From 43a48eddc381f19f5e32bd31530dac372ea5b23b Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Wed, 16 Sep 2026 12:10:17 +0200 Subject: [PATCH 5/5] wip Signed-off-by: alperozturk96 --- .github/workflows/assembleFlavors.yml | 5 --- .github/workflows/assembleRerun.yml | 46 --------------------------- 2 files changed, 51 deletions(-) delete mode 100644 .github/workflows/assembleRerun.yml diff --git a/.github/workflows/assembleFlavors.yml b/.github/workflows/assembleFlavors.yml index 7fce400bc63d..587b27b0d698 100644 --- a/.github/workflows/assembleFlavors.yml +++ b/.github/workflows/assembleFlavors.yml @@ -40,11 +40,6 @@ jobs: - uses: gradle/actions/wrapper-validation@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 - name: Setup Gradle uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0 - - name: Runner resources - run: | - free -h - nproc - df -h . - name: Build ${{ matrix.flavor }} run: | { diff --git a/.github/workflows/assembleRerun.yml b/.github/workflows/assembleRerun.yml deleted file mode 100644 index b70a334b9718..000000000000 --- a/.github/workflows/assembleRerun.yml +++ /dev/null @@ -1,46 +0,0 @@ -# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors -# SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only - -name: "Assemble rerun" - -on: - workflow_run: - workflows: [ "Assemble" ] - types: [ completed ] - -permissions: - actions: write - -jobs: - rerun: - if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.run_attempt < 2 }} - runs-on: ubuntu-latest - steps: - - name: Rerun failed jobs when the runner was lost - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GH_REPO: ${{ github.repository }} - RUN_ID: ${{ github.event.workflow_run.id }} - run: | - set -uo pipefail - - curl -sSL \ - -H "Authorization: Bearer $GH_TOKEN" \ - -H "Accept: application/vnd.github+json" \ - -o run-logs.zip \ - "https://api.github.com/repos/$GH_REPO/actions/runs/$RUN_ID/logs" - - if ! unzip -tq run-logs.zip >/dev/null 2>&1; then - echo "Logs for run $RUN_ID are not available, leaving it alone." - exit 0 - fi - - markers=$(unzip -p run-logs.zip '*' 2>/dev/null \ - | grep -cE "runner has received a shutdown signal|daemon disappeared" || true) - - if [ "${markers:-0}" -gt 0 ]; then - echo "Runner was lost ($markers marker(s)), rerunning failed jobs of run $RUN_ID." - gh run rerun "$RUN_ID" --failed - else - echo "No runner-loss markers found, leaving run $RUN_ID as a genuine failure." - fi