[ 
https://issues.apache.org/jira/browse/GEODE-10493?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jinwoo Hwang updated GEODE-10493:
---------------------------------
    Fix Version/s: 2.1.0

> japicmp API compatibility task failing after being restored during Gradle 
> 7.6.6 migration
> -----------------------------------------------------------------------------------------
>
>                 Key: GEODE-10493
>                 URL: https://issues.apache.org/jira/browse/GEODE-10493
>             Project: Geode
>          Issue Type: Improvement
>            Reporter: Jinwoo Hwang
>            Assignee: Jinwoo Hwang
>            Priority: Major
>             Fix For: 2.1.0
>
>
> h3. Current Problem
> The japicmp API compatibility check is now failing in CI with binary 
> compatibility errors:
>  
>  > Task :geode-server-all:japicmp FAILED
> > Execution failed for task ':geode-server-all:japicmp'.
> > Detected binary changes between geode-*-1.16.0-build.0.jar and 
> > geode-*-1.14.4.jar
> > See failure report at 
> > build/reports/rich-report-japi-v1.14.4-1.16.0-build.0.html
>  
>  This failure began appearing after build system fixes were applied during 
> the Gradle 7.6.6 migration (GEODE-10490).
>  * 
> h3. Investigation Findings
> h4. japicmp Was Previously Broken
> Analysis reveals that japicmp had been silently non-functional due to class 
> loading issues in composite builds:
>  * Original configuration used compile-time imports that failed to load 
> custom rules
>  * Task would appear to pass but wasn't actually enforcing API compatibility
>  * API violations accumulated undetected across multiple releases
> h4. Stale Baseline Comparison
> The failure compares against an outdated baseline:
>  * Current comparison: 1.16.0-build.0 vs 1.14.4 (missing 1.15.x series)
>  * Missing versions: 1.15.0, 1.15.1, 1.15.2 from 
> [geode-old-versions|vscode-file://vscode-app/Applications/Visual%20Studio%20Code.app/Contents/Resources/app/out/vs/code/electron-browser/workbench/workbench.html]
>  directory
>  * Result: Excessive accumulated changes spanning multiple release cycles
> h4. What the Fix in GEODE-10490 Actually Did
> The Gradle migration included a fix to japicmp class loading:
>  
>  
> // Before: Hard imports that failed in composite builds
> import org.apache.geode.gradle.japicmp.GeodeApiRegressionRule
> // After: Runtime loading with graceful fallback  
> def getJapicmpClassIfAvailable(String className) {
>   try {
>     return Class.forName(className)
>   } catch (ClassNotFoundException e) {
>     return null
>   }
> } 
>  
> This restored japicmp to working order, which then exposed years of untracked 
> API changes.
> h3. Proposed Solution
> h4. 1. Update Baseline Versions
>  * Add missing directories: 1.15.0/, {{{}1.15.1/{}}}, {{1.15.2/}}
>  * Change comparison from 1.14.4 → 1.16.0 to 1.15.2 → 1.16.0
>  * Focus review on recent, relevant changes only
> h4. 2. Update Exception Rules
>  * Clean up japicmp_exceptions.json for correct 1.15.2 baseline
>  * Remove bulk exceptions that were masking the baseline problem
>  * Document legitimate API changes between 1.15.2 and 1.16.0
> h4. 3. Improve CI Diagnostics
>  * Add japicmp report artifact upload for failed builds
>  * Enable developers to download and examine detailed compatibility reports
>  * Reduce debugging time for future API compatibility issues
> h3. Expected Benefits
> *Immediate:*
>  * Unblock CI builds by addressing accumulated technical debt
>  * Provide actionable reports showing specific API compatibility violations
>  * Restore proper API compatibility enforcement going forward
> *Long-term:*
>  * Prevent future API compatibility violations from going undetected
>  * Improve developer productivity with better diagnostic information
>  * Establish foundation for proper API evolution governance
> h3. Risk Assessment
> *Low Risk:*
>  * Changes only affect build tooling and baseline comparison
>  * No impact on runtime behavior or public APIs
>  * Fixes restore intended functionality rather than changing behavior
> *High Value:*
>  * Addresses significant technical debt in API compatibility checking
>  * Prevents future accumulation of undetected violations
>  * Improves development workflow and CI reliability
> h3. Acceptance Criteria
>  *  japicmp task passes with updated 1.15.2 baseline
>  *  Exception rules properly handle legitimate API changes
>  *  CI uploads diagnostic reports on japicmp failures
>  *  Build process documentation updated to include baseline maintenance



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to