Skip to content

Conversation

@sboorlagadda
Copy link
Member

@sboorlagadda sboorlagadda commented Jan 17, 2026

Add GitHub Actions workflow files to support/1.15 branch to enable automated CI/CD checks for pull requests targeting this branch.

This change adds two workflow files:

  • .github/workflows/codeql.yml: CodeQL security scanning
  • .github/workflows/gradle.yml: Build, test, and code quality checks

The workflows will run on:

  • Push events to support/1.15 branch
  • Pull requests targeting support/1.15 branch
  • Scheduled weekly security scans (CodeQL only)

This ensures that dependency updates and security fixes submitted to the support/1.15 branch are properly validated before merge.

For all changes, please confirm:

  • Is there a JIRA ticket associated with this PR? Is it referenced in the commit message?
  • Has your PR been rebased against the latest commit within the target branch (typically develop)?
  • Is your initial contribution a single, squashed commit?
  • Does gradlew build run cleanly?
  • Have you written or updated unit tests to verify your changes?
  • If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under ASF 2.0?

Add GitHub Actions workflow files to support/1.15 branch to enable
automated CI/CD checks for pull requests targeting this branch.

This change adds two workflow files:
- .github/workflows/codeql.yml: CodeQL security scanning
- .github/workflows/gradle.yml: Build, test, and code quality checks

The workflows will run on:
- Push events to support/1.15 branch
- Pull requests targeting support/1.15 branch
- Scheduled weekly security scans (CodeQL only)

This ensures that dependency updates and security fixes submitted
to the support/1.15 branch are properly validated before merge.
The support/1.15 branch uses Gradle 6.8.3 and is configured for Java 8.
Updated all workflow jobs to use JDK 8 instead of JDK 17 to match the
branch requirements.

Changes:
- Updated all jobs to use java-version: '8'
- Changed JAVA_HOME references from JAVA_HOME_17_X64 to JAVA_HOME_8_X64
- Updated testJava*Home parameters to use testJava8Home
- Set JAVA_BUILD_VERSION and JAVA_TEST_VERSION to 8
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR enables automated CI/CD workflows for the support/1.15 branch by adding two GitHub Actions workflow files. The workflows provide continuous integration with build validation, multiple test suites, and security scanning to ensure code quality for the maintenance branch.

Changes:

  • Added CodeQL security scanning workflow with weekly scheduled scans
  • Added comprehensive Gradle build workflow with unit tests, integration tests, and distributed tests
  • Configured workflows to trigger on push and pull request events to support/1.15 branch

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 12 comments.

File Description
.github/workflows/gradle.yml Comprehensive CI workflow with build validation, API checks, and multiple test suites (unit, integration, acceptance, distributed)
.github/workflows/codeql.yml Security scanning workflow with CodeQL analysis for multiple languages (Go, Java, JavaScript, Python)

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

# limitations under the License.
#

name: develop
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The workflow name is set to "develop" but this workflow is for the support/1.15 branch. The name should be updated to accurately reflect the branch it's targeting, such as "support/1.15" or "Support 1.15 CI".

Suggested change
name: develop
name: Support 1.15 CI

Copilot uses AI. Check for mistakes.
- name: Set JAVA_TEST_PATH to 8
run: |
echo "JAVA_TEST_PATH=${JAVA_HOME_8_X64}" >> $GITHUB_ENV
if: matrix.java == '8'
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JAVA_TEST_PATH environment variable is not set before being used in the gradlewStrict command. The "Set JAVA_TEST_PATH to 8" step only runs when matrix.java equals '8', but JAVA_TEST_PATH is used regardless. This will cause the variable to be undefined if the condition isn't met, or in this case since matrix.java is hardcoded to '8', the step should always run, making the condition unnecessary.

Suggested change
if: matrix.java == '8'

Copilot uses AI. Check for mistakes.
- name: Set JAVA_TEST_PATH to 8
run: |
echo "JAVA_TEST_PATH=${JAVA_HOME_8_X64}" >> $GITHUB_ENV
if: matrix.java == '8'
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JAVA_TEST_PATH environment variable is not set before being used in the gradlewStrict command on line 122. The "Set JAVA_TEST_PATH to 8" step only runs when matrix.java equals '8', but since matrix.java is hardcoded to '8' in the matrix, the conditional check is redundant. Either remove the condition or ensure JAVA_TEST_PATH is always set before use.

Suggested change
if: matrix.java == '8'

Copilot uses AI. Check for mistakes.
Comment on lines +295 to +310
- name: Run cq distributed tests
run: |
GRADLE_JVM_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_VERSION=8
JAVA_TEST_VERSION=8
cp gradlew gradlewStrict
sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict
GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \
--parallel -PparallelDunit --max-workers=6 \
-PcompileJVM=${JAVA_BUILD_PATH} \
-PcompileJVMVer=${JAVA_BUILD_VERSION} \
-PtestJVM=${JAVA_TEST_PATH} \
-PtestJVMVer=${JAVA_TEST_VERSION} \
-PtestJava8Home=${JAVA_HOME_8_X64} \
geode-cq:distributedTest --console=plain --no-daemon
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JAVA_TEST_PATH environment variable is used on line 303 but is never set in this job. This job is missing the "Set JAVA_TEST_PATH" step that appears in other jobs, which will result in JAVA_TEST_PATH being undefined during execution.

Copilot uses AI. Check for mistakes.
Comment on lines +385 to +403
- name: Run gfsh, web-mgmt, web distributed tests
run: |
GRADLE_JVM_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_VERSION=8
JAVA_TEST_VERSION=8
cp gradlew gradlewStrict
sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict
GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \
--no-parallel \
--max-workers=6 \
-PcompileJVM=${JAVA_BUILD_PATH} \
-PcompileJVMVer=${JAVA_BUILD_VERSION} \
-PtestJVM=${JAVA_TEST_PATH} \
-PtestJVMVer=${JAVA_TEST_VERSION} \
-PtestJava8Home=${JAVA_HOME_8_X64} \
geode-gfsh:distributedTest \
geode-web:distributedTest \
geode-web-management:distributedTest --console=plain --no-daemon
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JAVA_TEST_PATH environment variable is used on line 393 but is never set in this job. This job is missing the "Set JAVA_TEST_PATH" step that appears in other jobs, which will result in JAVA_TEST_PATH being undefined during execution.

Copilot uses AI. Check for mistakes.
Comment on lines +205 to +220
- name: Run acceptance tests
run: |
GRADLE_JVM_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_VERSION=8
JAVA_TEST_VERSION=8
cp gradlew gradlewStrict
sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict
GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \
--no-parallel \
-PcompileJVM=${JAVA_BUILD_PATH} \
-PcompileJVMVer=${JAVA_BUILD_VERSION} \
-PtestJVM=${JAVA_TEST_PATH} \
-PtestJVMVer=${JAVA_TEST_VERSION} \
-PtestJava8Home=${JAVA_HOME_8_X64} \
acceptanceTest --console=plain --no-daemon
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JAVA_TEST_PATH environment variable is used on line 213 but is never set in this job. This job is missing the "Set JAVA_TEST_PATH" step that appears in other jobs, which will result in JAVA_TEST_PATH being undefined during execution.

Copilot uses AI. Check for mistakes.
Comment on lines +249 to +266
- name: Run wan distributed tests
run: |
GRADLE_JVM_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_VERSION=8
JAVA_TEST_VERSION=8
cp gradlew gradlewStrict
sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict
GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \
--parallel \
-PparallelDunit \
--max-workers=6 \
-PcompileJVM=${JAVA_BUILD_PATH} \
-PcompileJVMVer=${JAVA_BUILD_VERSION} \
-PtestJVM=${JAVA_TEST_PATH} \
-PtestJVMVer=${JAVA_TEST_VERSION} \
-PtestJava8Home=${JAVA_HOME_8_X64} \
geode-wan:distributedTest --console=plain --no-daemon
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JAVA_TEST_PATH environment variable is used on line 257 but is never set in this job. This job is missing the "Set JAVA_TEST_PATH" step that appears in other jobs, which will result in JAVA_TEST_PATH being undefined during execution.

Copilot uses AI. Check for mistakes.
Comment on lines +339 to +356
- name: Run lucene distributed tests
run: |
GRADLE_JVM_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_VERSION=8
JAVA_TEST_VERSION=8
cp gradlew gradlewStrict
sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict
GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \
--parallel \
-PparallelDunit \
--max-workers=6 \
-PcompileJVM=${JAVA_BUILD_PATH} \
-PcompileJVMVer=${JAVA_BUILD_VERSION} \
-PtestJVM=${JAVA_TEST_PATH} \
-PtestJVMVer=${JAVA_TEST_VERSION} \
-PtestJava8Home=${JAVA_HOME_8_X64} \
geode-lucene:distributedTest --console=plain --no-daemon
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JAVA_TEST_PATH environment variable is used on line 347 but is never set in this job. This job is missing the "Set JAVA_TEST_PATH" step that appears in other jobs, which will result in JAVA_TEST_PATH being undefined during execution.

Copilot uses AI. Check for mistakes.
Comment on lines +433 to +454
- name: Run assembly, connectors, old-client, extensions distributed tests
run: |
GRADLE_JVM_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_PATH=${JAVA_HOME_8_X64}
JAVA_BUILD_VERSION=8
JAVA_TEST_VERSION=8
cp gradlew gradlewStrict
sed -e 's/JAVA_HOME/GRADLE_JVM/g' -i.back gradlewStrict
GRADLE_JVM=${GRADLE_JVM_PATH} JAVA_TEST_PATH=${JAVA_TEST_PATH} ./gradlewStrict \
--no-parallel \
--max-workers=6 \
-PcompileJVM=${JAVA_BUILD_PATH} \
-PcompileJVMVer=${JAVA_BUILD_VERSION} \
-PtestJVM=${JAVA_TEST_PATH} \
-PtestJVMVer=${JAVA_TEST_VERSION} \
-PtestJava8Home=${JAVA_HOME_8_X64} \
geode-assembly:distributedTest \
geode-dunit:distributedTest \
geode-connectors:distributedTest \
geode-old-client:distributedTest \
extensions:geode-modules:distributedTest \
extensions:geode-modules-tomcat10:distributedTest --console=plain --no-daemon
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JAVA_TEST_PATH environment variable is used on line 441 but is never set in this job. This job is missing the "Set JAVA_TEST_PATH" step that appears in other jobs, which will result in JAVA_TEST_PATH being undefined during execution.

Copilot uses AI. Check for mistakes.
# The branches below must be a subset of the branches above
branches: [ support/1.15 ]
schedule:
- cron: '22 22 * * 2'
Copy link

Copilot AI Jan 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The cron expression contains a typo. Line 38 has "- cron:" which is likely missing proper indentation. YAML list items should be indented consistently with surrounding items. It should be " - cron:" (with 2 spaces) to align with the schedule list structure.

Suggested change
- cron: '22 22 * * 2'
- cron: '22 22 * * 2'

Copilot uses AI. Check for mistakes.
Copy link
Contributor

@JinwooHwang JinwooHwang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sboorlagadda , thanks for this clean backport to support/1.15! I've reviewed the changes thoroughly and everything looks excellent.

I verified that all tests have been preserved. All 10 workflow jobs and 15 Gradle test tasks are maintained. The changes are consistent throughout, with systematic Java 17 to 8 updates across both gradle.yml and codeql.yml. The branch triggers have been correctly updated to support/1.15, which is appropriate for this backport.

This is exactly what a support branch backport should look like with infrastructure-only changes and full test coverage maintained. Great work!

The test severalExecuteWithDifferentRegionOrSenderAreAllowed was failing
intermittently with 'expected: 5 but was: 2/3' due to a race condition.

Root Cause:
The test creates 5 CompletableFuture tasks using supplyAsync(), which
executes asynchronously. There was no guarantee that all tasks would
call service.execute() and be added to the executions map before the
final assertion checked the count.

The race occurred because:
1. CompletableFuture.supplyAsync() schedules tasks asynchronously
2. Multiple tasks could be scheduled but not yet executed
3. The assertion would run before all tasks had called service.execute()

Solution:
Instead of starting all tasks and then waiting, we now start each task
sequentially and wait for it to be registered in the executions map
before starting the next one. This ensures:
- Each execution is fully registered before the next one starts
- No race condition between task scheduling and execution registration
- The final count is guaranteed to be 5

This approach is more deterministic and eliminates the race condition
while still testing that multiple executions with different regions
are allowed to run concurrently.
@sboorlagadda sboorlagadda force-pushed the GEODE-10550-enable-github-workflows-support-1.15 branch from 46664e9 to 29d9f2b Compare January 22, 2026 17:00
The test addMethodOverflowsWhenInternalAddThrowsIllegalArgumentException
was failing with 'Expected size: 2 but was: 100' because the
DRF_HASHMAP_OVERFLOW_THRESHOLD was set to 10 by another test
(OplogEntryIdSetDrfHashSetThresholdTest).

Root Cause:
DRF_HASHMAP_OVERFLOW_THRESHOLD is a static final field initialized when
DiskStoreImpl class is loaded. If OplogEntryIdSetDrfHashSetThresholdTest
runs first and sets the system property to 10, then DiskStoreImpl loads
with threshold=10 instead of the default 805306368.

With threshold=10 and testEntries=1000:
- The test adds 999 int entries and 999 long entries
- Every 10 entries triggers shouldOverflow() to return true
- This creates ~100 hash sets (999/10) instead of the expected 2

Solution:
Reduced testEntries from 1000 to 5 to ensure we stay well below any
possible threshold value (even if set to 10 by other tests). This
ensures the test only creates overflow hash sets via the mocked
IllegalArgumentException mechanism, not via the threshold mechanism.

The test still validates the same behavior:
- IllegalArgumentException during add() triggers overflow
- New hash sets are created to handle the overflow
- All entries (including those that caused the exception) are stored
- All entries can be retrieved successfully
Reverting the change that reduced testEntries from 1000 to 5.
The test should use a meaningful number of entries to properly
validate the overflow behavior.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants