From 7eeb39be04b1b8b05d978d036ff123d25356b591 Mon Sep 17 00:00:00 2001 From: Adam Saghy Date: Wed, 22 Apr 2026 19:58:54 +0100 Subject: [PATCH] FINERACT-2421: Optimize github actions workflow --- .github/workflows/build-cucumber.yml | 188 +++++++++++++++--- .github/workflows/build-docker.yml | 22 +- .github/workflows/build-documentation.yml | 21 +- .github/workflows/build-e2e-tests.yml | 22 +- .github/workflows/build-mariadb.yml | 24 ++- .github/workflows/build-mysql.yml | 24 ++- .github/workflows/build-postgresql.yml | 24 ++- .../workflows/liquibase-only-postgresql.yml | 24 ++- .../mifos-fineract-client-publish.yml | 24 ++- .github/workflows/publish-dockerhub.yml | 36 +++- ...tegration-test-sequentially-postgresql.yml | 24 ++- .github/workflows/smoke-messaging.yml | 22 +- .github/workflows/sonarqube.yml | 24 ++- .../verify-api-backward-compatibility.yml | 59 ++++-- ...erify-liquibase-backward-compatibility.yml | 54 +++-- gradle.properties | 4 +- 16 files changed, 493 insertions(+), 103 deletions(-) diff --git a/.github/workflows/build-cucumber.yml b/.github/workflows/build-cucumber.yml index ddb3224fc66..69936953f86 100644 --- a/.github/workflows/build-cucumber.yml +++ b/.github/workflows/build-cucumber.yml @@ -6,20 +6,88 @@ permissions: contents: read jobs: - verify: + build-core: runs-on: ubuntu-24.04 timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - include: - - task: build-core - job_type: main - - task: cucumber - job_type: main - - task: build-progressive-loan - job_type: progressive-loan + env: + TZ: Asia/Kolkata + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Set up JDK 21 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 + with: + java-version: '21' + distribution: 'zulu' + + - name: Cache Gradle dependencies + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + + - name: Setup Gradle and Validate Wrapper + uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 + with: + validate-wrappers: true + + - name: Build Avro Java SDK + run: ./gradlew --no-daemon :fineract-avro-schemas:buildJavaSdk -x test -x cucumber -x doc + + - name: Compile Fineract Provider + run: ./gradlew --no-daemon :fineract-provider:compileJava -x test -x cucumber -x doc -x buildJavaSdk + + - name: Build Fineract Client Java SDK + run: ./gradlew --no-daemon :fineract-client:buildJavaSdk -x test -x cucumber -x doc + + - name: Build Fineract Client Feign Java SDK + run: ./gradlew --no-daemon :fineract-client-feign:buildJavaSdk -x test -x cucumber -x doc + + - name: Build Fineract + run: ./gradlew --no-daemon build -x test -x cucumber -x doc + + - name: Save compiled Fineract + uses: actions/cache/save@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.run_id }}-${{ github.run_attempt }} + + - name: Archive test results + if: always() + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: test-results-build-core + path: '**/build/reports/' + if-no-files-found: ignore + retention-days: 5 + + - name: Archive server logs + if: always() + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: server-logs-build-core + path: '**/build/cargo/' + retention-days: 5 + + cucumber: + needs: build-core + runs-on: ubuntu-24.04 + timeout-minutes: 60 env: TZ: Asia/Kolkata @@ -46,27 +114,93 @@ jobs: ~/.gradle/wrapper key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.run_id }}-${{ github.run_attempt }} + fail-on-cache-miss: true + - name: Setup Gradle and Validate Wrapper uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: validate-wrappers: true - - name: Run Gradle Task - if: matrix.job_type == 'main' - run: | - set -e # Fail the script if any command fails + - name: Run Cucumber + run: ./gradlew --no-daemon cucumber -x :fineract-e2e-tests-runner:cucumber -x checkstyleJmh -x checkstyleMain -x checkstyleTest -x spotlessCheck -x spotlessApply -x spotbugsMain -x spotbugsTest -x javadoc -x javadocJar -x modernizer + + - name: Archive test results + if: always() + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: test-results-cucumber + path: '**/build/reports/' + if-no-files-found: ignore + retention-days: 5 + + - name: Archive server logs + if: always() + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: server-logs-cucumber + path: '**/build/cargo/' + retention-days: 5 + + build-progressive-loan: + needs: build-core + runs-on: ubuntu-24.04 + timeout-minutes: 60 + + env: + TZ: Asia/Kolkata + DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + fetch-tags: true - case "${{ matrix.task }}" in - build-core) - ./gradlew --no-daemon build -x test -x cucumber -x doc - ;; - cucumber) - ./gradlew --no-daemon cucumber -x :fineract-e2e-tests-runner:cucumber -x checkstyleJmh -x checkstyleMain -x checkstyleTest -x spotlessCheck -x spotlessApply -x spotbugsMain -x spotbugsTest -x javadoc -x javadocJar -x modernizer - ;; - esac + - name: Set up JDK 21 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 + with: + java-version: '21' + distribution: 'zulu' + + - name: Cache Gradle dependencies + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.run_id }}-${{ github.run_attempt }} + fail-on-cache-miss: true + + - name: Setup Gradle and Validate Wrapper + uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 + with: + validate-wrappers: true - name: Build and Test Progressive Loan - if: matrix.job_type == 'progressive-loan' run: | # Build the JAR ./gradlew --no-daemon --console=plain :fineract-progressive-loan-embeddable-schedule-generator:shadowJar @@ -89,7 +223,7 @@ jobs: if: always() uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: - name: test-results-${{ matrix.task }} + name: test-results-build-progressive-loan path: | **/build/reports/ **/fineract-progressive-loan-embeddable-schedule-generator/build/reports/ @@ -97,7 +231,7 @@ jobs: retention-days: 5 - name: Archive Progressive Loan JAR - if: matrix.job_type == 'progressive-loan' && always() + if: always() uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: progressive-loan-jar @@ -109,6 +243,6 @@ jobs: if: always() uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: - name: server-logs-${{ matrix.task }} + name: server-logs-build-progressive-loan path: '**/build/cargo/' retention-days: 5 diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml index 18a6d6b6656..8bc407eedae 100644 --- a/.github/workflows/build-docker.yml +++ b/.github/workflows/build-docker.yml @@ -1,12 +1,18 @@ name: Fineract Docker Builds -on: [push, pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: build: + if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.event != 'pull_request' || github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository) }} runs-on: ubuntu-24.04 timeout-minutes: 60 strategy: @@ -28,6 +34,7 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.event == 'pull_request' && format('refs/pull/{0}/merge', github.event.workflow_run.pull_requests[0].number) || github.event.workflow_run.head_sha }} fetch-depth: 0 - name: Set up JDK 21 @@ -36,6 +43,19 @@ jobs: java-version: '21' distribution: 'zulu' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Setup Gradle uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 diff --git a/.github/workflows/build-documentation.yml b/.github/workflows/build-documentation.yml index 10af8cb47c0..f3ef2f61e28 100644 --- a/.github/workflows/build-documentation.yml +++ b/.github/workflows/build-documentation.yml @@ -1,9 +1,15 @@ name: Fineract Documentation build -on: [push, pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: build: + if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.event != 'pull_request' || github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository) }} runs-on: ubuntu-24.04 timeout-minutes: 60 env: @@ -12,12 +18,25 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.event == 'pull_request' && format('refs/pull/{0}/merge', github.event.workflow_run.pull_requests[0].number) || github.event.workflow_run.head_sha }} fetch-depth: 0 - name: Set up JDK 21 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: java-version: '21' distribution: 'zulu' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true - name: Setup Gradle uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6 diff --git a/.github/workflows/build-e2e-tests.yml b/.github/workflows/build-e2e-tests.yml index 4eece516891..58cc5864ecf 100644 --- a/.github/workflows/build-e2e-tests.yml +++ b/.github/workflows/build-e2e-tests.yml @@ -1,12 +1,18 @@ name: Fineract E2E Tests -on: [push, pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: test: + if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.event != 'pull_request' || github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository) }} name: E2E Tests (Shard ${{ matrix.shard_index }} of ${{ matrix.total_shards }}) runs-on: ubuntu-24.04 timeout-minutes: 60 @@ -35,6 +41,7 @@ jobs: - name: Checkout code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.event == 'pull_request' && format('refs/pull/{0}/merge', github.event.workflow_run.pull_requests[0].number) || github.event.workflow_run.head_sha }} fetch-depth: 0 - name: Set up JDK 21 @@ -43,6 +50,19 @@ jobs: java-version: '21' distribution: 'zulu' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Setup Gradle uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 diff --git a/.github/workflows/build-mariadb.yml b/.github/workflows/build-mariadb.yml index 2dce16dba90..7630dc39bd9 100644 --- a/.github/workflows/build-mariadb.yml +++ b/.github/workflows/build-mariadb.yml @@ -1,12 +1,18 @@ name: Fineract Cargo & Unit- & Integration tests - MariaDB -on: [push, pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: test: + if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.event != 'pull_request' || github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository) }} runs-on: ubuntu-24.04 timeout-minutes: 60 @@ -46,6 +52,7 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.event == 'pull_request' && format('refs/pull/{0}/merge', github.event.workflow_run.pull_requests[0].number) || github.event.workflow_run.head_sha }} fetch-depth: 0 fetch-tags: true @@ -63,6 +70,19 @@ jobs: ~/.gradle/wrapper key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Setup Gradle and Validate Wrapper uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: @@ -123,7 +143,7 @@ jobs: test_args=$(for class in ${module_tests[$module]}; do echo --tests "$class"; done | xargs) # Run test task for this module - if ! ./gradlew "$module:test" $test_args -x checkstyleJmh -x checkstyleMain -x checkstyleTest -x spotlessCheck -x spotlessApply -x spotbugsMain -x spotbugsTest -x javadoc -x javadocJar -x modernizer; then + if ! ./gradlew --no-daemon "$module:test" $test_args -x checkstyleJmh -x checkstyleMain -x checkstyleTest -x spotlessCheck -x spotlessApply -x spotbugsMain -x spotbugsTest -x javadoc -x javadocJar -x modernizer; then echo "::error::Tests failed in module $module" FAILED=1 fi diff --git a/.github/workflows/build-mysql.yml b/.github/workflows/build-mysql.yml index 89798cf8a67..1e3dffa4dc0 100644 --- a/.github/workflows/build-mysql.yml +++ b/.github/workflows/build-mysql.yml @@ -1,12 +1,18 @@ name: Fineract Cargo & Unit- & Integration tests - MySQL -on: [push, pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: test: + if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.event != 'pull_request' || github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository) }} runs-on: ubuntu-24.04 timeout-minutes: 60 @@ -46,6 +52,7 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.event == 'pull_request' && format('refs/pull/{0}/merge', github.event.workflow_run.pull_requests[0].number) || github.event.workflow_run.head_sha }} fetch-depth: 0 fetch-tags: true @@ -63,6 +70,19 @@ jobs: ~/.gradle/wrapper key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Setup Gradle and Validate Wrapper uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: @@ -118,7 +138,7 @@ jobs: test_args=$(for class in ${module_tests[$module]}; do echo --tests "$class"; done | xargs) # Run test task for this module - if ! ./gradlew "$module:test" $test_args -PdbType=mysql -x checkstyleJmh -x checkstyleMain -x checkstyleTest -x spotlessCheck -x spotlessApply -x spotbugsMain -x spotbugsTest -x javadoc -x javadocJar -x modernizer; then + if ! ./gradlew --no-daemon "$module:test" $test_args -PdbType=mysql -x checkstyleJmh -x checkstyleMain -x checkstyleTest -x spotlessCheck -x spotlessApply -x spotbugsMain -x spotbugsTest -x javadoc -x javadocJar -x modernizer; then echo "::error::Tests failed in module $module" FAILED=1 fi diff --git a/.github/workflows/build-postgresql.yml b/.github/workflows/build-postgresql.yml index a16a579a1ca..61c89ebe272 100644 --- a/.github/workflows/build-postgresql.yml +++ b/.github/workflows/build-postgresql.yml @@ -1,12 +1,18 @@ name: Fineract Cargo & Unit- & Integration tests - PostgreSQL -on: [push, pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: test: + if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.event != 'pull_request' || github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository) }} runs-on: ubuntu-24.04 timeout-minutes: 60 @@ -47,6 +53,7 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.event == 'pull_request' && format('refs/pull/{0}/merge', github.event.workflow_run.pull_requests[0].number) || github.event.workflow_run.head_sha }} fetch-depth: 0 fetch-tags: true @@ -64,6 +71,19 @@ jobs: ~/.gradle/wrapper key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Setup Gradle and Validate Wrapper uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: @@ -119,7 +139,7 @@ jobs: test_args=$(for class in ${module_tests[$module]}; do echo --tests "$class"; done | xargs) # Run test task for this module - if ! ./gradlew "$module:test" $test_args -PdbType=postgresql -x checkstyleJmh -x checkstyleMain -x checkstyleTest -x spotlessCheck -x spotlessApply -x spotbugsMain -x spotbugsTest -x javadoc -x javadocJar -x modernizer; then + if ! ./gradlew --no-daemon "$module:test" $test_args -PdbType=postgresql -x checkstyleJmh -x checkstyleMain -x checkstyleTest -x spotlessCheck -x spotlessApply -x spotbugsMain -x spotbugsTest -x javadoc -x javadocJar -x modernizer; then echo "::error::Tests failed in module $module" FAILED=1 fi diff --git a/.github/workflows/liquibase-only-postgresql.yml b/.github/workflows/liquibase-only-postgresql.yml index 0461677702b..27ddf659740 100644 --- a/.github/workflows/liquibase-only-postgresql.yml +++ b/.github/workflows/liquibase-only-postgresql.yml @@ -1,12 +1,18 @@ name: Fineract Liquibase Only mode - PostgreSQL -on: [push, pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: test: + if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.event != 'pull_request' || github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository) }} runs-on: ubuntu-22.04 timeout-minutes: 60 @@ -28,6 +34,7 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.event == 'pull_request' && format('refs/pull/{0}/merge', github.event.workflow_run.pull_requests[0].number) || github.event.workflow_run.head_sha }} fetch-depth: 0 fetch-tags: true @@ -45,6 +52,19 @@ jobs: ~/.gradle/wrapper key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Setup Gradle and Validate Wrapper uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: @@ -78,4 +98,4 @@ jobs: FINERACT_HIKARI_USERNAME: "root" SPRING_PROFILES_ACTIVE: "liquibase-only" run: - ./gradlew fineract-provider:bootRun + ./gradlew --no-daemon fineract-provider:bootRun diff --git a/.github/workflows/mifos-fineract-client-publish.yml b/.github/workflows/mifos-fineract-client-publish.yml index 9b980ee4ff9..dffb6bd3923 100644 --- a/.github/workflows/mifos-fineract-client-publish.yml +++ b/.github/workflows/mifos-fineract-client-publish.yml @@ -1,15 +1,18 @@ name: Publish Fineract client to Mifos Artifactory on: - push: - branches: - - develop-mifos + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: write jobs: build: + if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && github.event.workflow_run.head_branch == 'develop-mifos' }} runs-on: ubuntu-24.04 timeout-minutes: 60 env: @@ -20,6 +23,7 @@ jobs: - name: Checkout Source Code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.head_sha }} fetch-depth: 0 - name: Generate build number uses: onyxmueller/build-tag-number@bbb3e6dd40d79811d5fb661e5d6651c1748f4210 # v1.0.4 @@ -30,7 +34,19 @@ jobs: with: java-version: '21' distribution: 'zulu' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true - name: Setup Gradle uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 - name: Build the image - run: ./gradlew publish -Pfineract.config.username=$ARTIFACTORY_USERNAME -Pfineract.config.password=$ARTIFACTORY_PASSWORD -Pfineract.release.version=${BUILD_NUMBER} + run: ./gradlew --no-daemon publish -Pfineract.config.username=$ARTIFACTORY_USERNAME -Pfineract.config.password=$ARTIFACTORY_PASSWORD -Pfineract.release.version=${BUILD_NUMBER} diff --git a/.github/workflows/publish-dockerhub.yml b/.github/workflows/publish-dockerhub.yml index e38c399bc68..3a427555585 100644 --- a/.github/workflows/publish-dockerhub.yml +++ b/.github/workflows/publish-dockerhub.yml @@ -1,14 +1,15 @@ name: Fineract Publish to DockerHub on: - push: - branches: - - develop - tags: - - 1.* + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: build: + if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && (github.event.workflow_run.head_branch == 'develop' || startsWith(github.event.workflow_run.head_branch, '1.') || !github.event.workflow_run.head_branch) }} runs-on: ubuntu-24.04 timeout-minutes: 60 env: @@ -17,7 +18,9 @@ jobs: - name: Checkout Source Code uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.head_sha }} fetch-depth: 0 + fetch-tags: true - name: Set up JDK 21 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 @@ -25,6 +28,19 @@ jobs: java-version: '21' distribution: 'zulu' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Setup Gradle uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 @@ -36,9 +52,15 @@ jobs: - name: Build the Apache Fineract image run: | - TAGS=${{ github.ref_name }} - if [ "${{ github.ref_name }}" == "develop" ]; then + TAGS=${{ github.event.workflow_run.head_branch }} + if [ "$TAGS" == "develop" ]; then TAGS="$TAGS,${{ steps.git_hashes.outputs.short_hash }},${{ steps.git_hashes.outputs.long_hash }}" + else + TAGS=$(git tag --points-at HEAD | grep -E '^1\.' | head -n 1 || true) + if [ -z "$TAGS" ]; then + echo "Skipping DockerHub publish because this run is not for develop or a 1.* tag." + exit 0 + fi fi ./gradlew --no-daemon --console=plain :fineract-provider:jib -x test -x cucumber \ -Djib.to.auth.username=${{secrets.DOCKERHUB_USER}} \ diff --git a/.github/workflows/run-integration-test-sequentially-postgresql.yml b/.github/workflows/run-integration-test-sequentially-postgresql.yml index 32ead6b9254..bbefd56cca2 100644 --- a/.github/workflows/run-integration-test-sequentially-postgresql.yml +++ b/.github/workflows/run-integration-test-sequentially-postgresql.yml @@ -1,14 +1,16 @@ name: Fineract Cargo & Unit- & Integration tests - Sequential Execution - PostgreSQL on: - workflow_dispatch: - push: - branches: - - develop + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: build: + if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && github.event.workflow_run.head_branch == 'develop' }} runs-on: ubuntu-24.04 timeout-minutes: 180 @@ -35,6 +37,7 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.head_sha }} fetch-depth: 0 fetch-tags: true @@ -43,6 +46,18 @@ jobs: with: java-version: '21' distribution: 'zulu' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true - name: Setup Gradle and Validate Wrapper uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: @@ -77,7 +92,6 @@ jobs: FINERACT_REPORT_EXPORT_S3_ENABLED: true FINERACT_REPORT_EXPORT_S3_BUCKET_NAME: fineract-reports run: | - ./gradlew --no-daemon --console=plain build -x cucumber -x test -x doc ./gradlew --no-daemon --console=plain cucumber -x :fineract-e2e-tests-runner:cucumber ./gradlew --no-daemon --console=plain test -x :twofactor-tests:test -x :oauth2-test:test -x :fineract-e2e-tests-runner:test -PdbType=postgresql ./gradlew --no-daemon --console=plain :twofactor-tests:test -PdbType=postgresql diff --git a/.github/workflows/smoke-messaging.yml b/.github/workflows/smoke-messaging.yml index c74daad6c20..23420532622 100644 --- a/.github/workflows/smoke-messaging.yml +++ b/.github/workflows/smoke-messaging.yml @@ -1,12 +1,18 @@ name: Fineract Messaging Smoke Tests -on: [push, pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: smoke-test: + if: ${{ github.event.workflow_run.conclusion == 'success' && (github.event.workflow_run.event != 'pull_request' || github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository) }} name: Smoke Test with ${{ matrix.messaging }} runs-on: ubuntu-24.04 timeout-minutes: 60 @@ -26,6 +32,7 @@ jobs: steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.event == 'pull_request' && format('refs/pull/{0}/merge', github.event.workflow_run.pull_requests[0].number) || github.event.workflow_run.head_sha }} fetch-depth: 0 - name: Set up JDK 21 @@ -34,6 +41,19 @@ jobs: java-version: '21' distribution: 'zulu' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Setup Gradle uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 diff --git a/.github/workflows/sonarqube.yml b/.github/workflows/sonarqube.yml index c48ee8e94d5..797aa4c714e 100644 --- a/.github/workflows/sonarqube.yml +++ b/.github/workflows/sonarqube.yml @@ -1,12 +1,15 @@ name: Fineract Sonarqube on: - push: - branches: - - develop + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: build: + if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && github.event.workflow_run.head_branch == 'develop' }} runs-on: ubuntu-24.04 timeout-minutes: 60 env: @@ -22,17 +25,28 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: + ref: ${{ github.event.workflow_run.head_sha }} fetch-depth: 0 - name: Set up JDK 21 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 with: java-version: '21' distribution: 'zulu' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true - name: Setup Gradle and Validate Wrapper uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2 with: validate-wrappers: true - - name: Build - run: ./gradlew --no-daemon --console=plain :fineract-provider:build -x test -x cucumber - name: Sonar run: ./gradlew --no-daemon --console=plain -Dsonar.verbose=true -Dsonar.token=$SONAR_TOKEN -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.organization=$SONAR_ORGANIZATION -Dsonar.projectKey=$SONAR_PROJECT_KEY -Dsonar.java.binaries=$JAVA_BINARIES --info --stacktrace sonar diff --git a/.github/workflows/verify-api-backward-compatibility.yml b/.github/workflows/verify-api-backward-compatibility.yml index 66026da22a6..35dc3e42c6d 100644 --- a/.github/workflows/verify-api-backward-compatibility.yml +++ b/.github/workflows/verify-api-backward-compatibility.yml @@ -1,6 +1,11 @@ name: Verify API Backward Compatibility -on: [pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read @@ -8,6 +13,7 @@ permissions: jobs: api-compatibility-check: + if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.pull_requests[0].number != '' && github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository }} runs-on: ubuntu-24.04 timeout-minutes: 30 @@ -15,34 +21,32 @@ jobs: TZ: Asia/Kolkata steps: - - name: Checkout base branch + - name: Checkout PR merge commit uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: - repository: ${{ github.event.pull_request.base.repo.full_name }} - ref: ${{ github.event.pull_request.base.ref }} + ref: refs/pull/${{ github.event.workflow_run.pull_requests[0].number }}/merge fetch-depth: 0 - path: baseline - - name: Checkout PR branch + - name: Checkout base branch uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: - repository: ${{ github.event.pull_request.head.repo.full_name }} - ref: ${{ github.event.pull_request.head.sha }} + repository: ${{ github.event.workflow_run.pull_requests[0].base.repo.full_name }} + ref: ${{ github.event.workflow_run.pull_requests[0].base.ref }} fetch-depth: 0 - path: current + path: baseline - name: Compute merge-base commit id: merge-base run: | cd baseline - # For fork PRs, fetch PR head from the local current/ checkout - git fetch "${GITHUB_WORKSPACE}/current" HEAD --no-tags 2>/dev/null || true - MERGE_BASE=$(git merge-base ${{ github.event.pull_request.base.ref }} ${{ github.event.pull_request.head.sha }}) + # For fork PRs, fetch PR head from the root checkout. + git fetch "${GITHUB_WORKSPACE}" HEAD --no-tags 2>/dev/null || true + MERGE_BASE=$(git merge-base ${{ github.event.workflow_run.pull_requests[0].base.ref }} ${{ github.event.workflow_run.head_sha }}) echo "Merge-base commit: ${MERGE_BASE}" echo "sha=${MERGE_BASE}" >> "$GITHUB_OUTPUT" - BASE_HEAD=$(git rev-parse ${{ github.event.pull_request.base.ref }}) + BASE_HEAD=$(git rev-parse ${{ github.event.workflow_run.pull_requests[0].base.ref }}) if [ "${MERGE_BASE}" != "${BASE_HEAD}" ]; then - echo "::notice::PR is not rebased on latest ${{ github.event.pull_request.base.ref }}. Using merge-base ${MERGE_BASE} as baseline (branch HEAD: ${BASE_HEAD})." + echo "::notice::PR is not rebased on latest ${{ github.event.workflow_run.pull_requests[0].base.ref }}. Using merge-base ${MERGE_BASE} as baseline (branch HEAD: ${BASE_HEAD})." fi - name: Reset baseline to merge-base @@ -55,12 +59,24 @@ jobs: distribution: 'zulu' java-version: '21' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Generate baseline spec working-directory: baseline run: ./gradlew :fineract-provider:resolve --no-daemon - name: Generate PR spec - working-directory: current run: ./gradlew :fineract-provider:resolve --no-daemon - name: Sanitize specs @@ -86,25 +102,24 @@ jobs: print(f'{path}: fixed {fixed} entries') sanitize('${GITHUB_WORKSPACE}/baseline/fineract-provider/build/resources/main/static/fineract.json') - sanitize('${GITHUB_WORKSPACE}/current/fineract-provider/build/resources/main/static/fineract.json') + sanitize('${GITHUB_WORKSPACE}/fineract-provider/build/resources/main/static/fineract.json') " - name: Check breaking changes id: breaking-check continue-on-error: true - working-directory: current run: | set -o pipefail - ./gradlew :fineract-provider:checkBreakingChanges \ + ./gradlew --no-daemon :fineract-provider:checkBreakingChanges \ -PapiBaseline="${GITHUB_WORKSPACE}/baseline/fineract-provider/build/resources/main/static/fineract.json" \ - -PapiNew="${GITHUB_WORKSPACE}/current/fineract-provider/build/resources/main/static/fineract.json" \ + -PapiNew="${GITHUB_WORKSPACE}/fineract-provider/build/resources/main/static/fineract.json" \ --no-daemon - name: Build report if: steps.breaking-check.outcome == 'failure' id: report run: | - REPORT_DIR="current/fineract-provider/build/swagger-brake" + REPORT_DIR="fineract-provider/build/swagger-brake" python3 -c " import json, glob, os @@ -198,7 +213,7 @@ jobs: continue-on-error: true env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PR_NUMBER: ${{ github.event.pull_request.number }} + PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} run: | MARKER="" @@ -234,7 +249,7 @@ jobs: uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: api-compatibility-report - path: current/fineract-provider/build/swagger-brake/ + path: fineract-provider/build/swagger-brake/ retention-days: 30 - name: Fail if breaking changes detected diff --git a/.github/workflows/verify-liquibase-backward-compatibility.yml b/.github/workflows/verify-liquibase-backward-compatibility.yml index 744bf27e074..35e342dc666 100644 --- a/.github/workflows/verify-liquibase-backward-compatibility.yml +++ b/.github/workflows/verify-liquibase-backward-compatibility.yml @@ -1,12 +1,18 @@ name: Verify Liquibase Backward Compatibility -on: [pull_request] +on: + workflow_run: + workflows: + - Fineract Build & Cucumber tests (without E2E tests) + types: + - completed permissions: contents: read jobs: liquibase-backward-compatibility-check: + if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.pull_requests[0].number != '' && github.event.workflow_run.pull_requests[0].head.repo.full_name == github.repository }} runs-on: ubuntu-24.04 timeout-minutes: 30 @@ -31,20 +37,19 @@ jobs: TZ: Asia/Kolkata steps: - - name: Checkout base commit + - name: Checkout PR merge commit uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: - repository: ${{ github.event.pull_request.base.repo.full_name }} - ref: ${{ github.event.pull_request.base.sha }} + ref: refs/pull/${{ github.event.workflow_run.pull_requests[0].number }}/merge fetch-depth: 0 - path: baseline - - name: Checkout PR merge commit + - name: Checkout base commit uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: - ref: ${{ github.sha }} + repository: ${{ github.event.workflow_run.pull_requests[0].base.repo.full_name }} + ref: ${{ github.event.workflow_run.pull_requests[0].base.sha }} fetch-depth: 0 - path: current + path: baseline - name: Set up JDK 21 uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5 @@ -52,6 +57,19 @@ jobs: distribution: 'zulu' java-version: '21' + - name: Restore compiled Fineract + uses: actions/cache/restore@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: | + .gradle + **/build/classes + **/build/generated + **/build/libs + **/build/resources + **/build/tmp + key: fineract-compiled-${{ runner.os }}-${{ github.event.workflow_run.id }}-${{ github.event.workflow_run.run_attempt }} + fail-on-cache-miss: true + - name: Wait for PostgreSQL run: | until pg_isready -h localhost -U $DB_USER; do @@ -67,24 +85,24 @@ jobs: - name: Print checked out revisions run: | - echo "Base branch ref: ${{ github.event.pull_request.base.ref }}" + echo "Base branch ref: ${{ github.event.workflow_run.pull_requests[0].base.ref }}" echo "Base branch event SHA:" - echo "${{ github.event.pull_request.base.sha }}" + echo "${{ github.event.workflow_run.pull_requests[0].base.sha }}" echo "PR head SHA:" - echo "${{ github.event.pull_request.head.sha }}" - echo "GitHub merge SHA:" - echo "${{ github.sha }}" + echo "${{ github.event.workflow_run.head_sha }}" + echo "GitHub PR merge ref:" + echo "refs/pull/${{ github.event.workflow_run.pull_requests[0].number }}/merge" echo "Baseline revision:" git -C baseline rev-parse HEAD git -C baseline log -1 --oneline echo "Merged PR revision:" - git -C current rev-parse HEAD - git -C current log -1 --oneline + git rev-parse HEAD + git log -1 --oneline - name: Start backend on base commit working-directory: baseline run: | - ./gradlew :fineract-provider:devRun --args="\ + ./gradlew --no-daemon :fineract-provider:devRun --args="\ --spring.datasource.hikari.driverClassName=org.postgresql.Driver \ --spring.datasource.hikari.jdbcUrl=jdbc:postgresql://localhost:5432/fineract_tenants \ --spring.datasource.hikari.username=root \ @@ -132,9 +150,8 @@ jobs: sleep 10 - name: Start backend on merged PR commit - working-directory: current run: | - ./gradlew :fineract-provider:devRun --args="\ + ./gradlew --no-daemon :fineract-provider:devRun --args="\ --spring.datasource.hikari.driverClassName=org.postgresql.Driver \ --spring.datasource.hikari.jdbcUrl=jdbc:postgresql://localhost:5432/fineract_tenants \ --spring.datasource.hikari.username=root \ @@ -176,7 +193,6 @@ jobs: - name: Stop PR backend if: always() - working-directory: current run: | kill $(cat backend.pid) sleep 10 diff --git a/gradle.properties b/gradle.properties index 92840b1c2bd..70829cbd9bb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,13 +16,13 @@ # specific language governing permissions and limitations # under the License. # -org.gradle.jvmargs=-Xmx12g --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=null +org.gradle.jvmargs=-Xmx8g --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=null buildType=BUILD org.gradle.caching=true org.gradle.parallel=true # Keep worker concurrency below CPU count to avoid heap spikes from parallel project tasks # and forked Java compilation running alongside Avro code generation. -org.gradle.workers.max=4 +#org.gradle.workers.max=4 org.gradle.daemon.idletimeout=10800000 # Temporarily disabled until we fix configuration cache compatibility #org.gradle.configuration-cache=true