blob: 70e2f6bce1e1f61695164ed22f74fd7bf0d3a8ee [file] [view]
# Client Split Migration Progress
## Baseline
- Working branch: `split-client-jdk8-base`
- Base branch: `origin/2.7.0.1-jdk8-release`
- Goal: keep the split client repository JDK 8 compatible while preparing it to absorb client-only changes from the main ShenYu repository.
## Done
- Selected the existing `2.7.0.1-jdk8-release` branch as the migration base because it already preserves Java 8 source level and Apache release metadata.
- Added the MCP client module from the main ShenYu repository.
- Rebased MCP module POMs onto `shenyu-client-java` and removed Spring Boot 3 / springdoc starter coupling.
- Added MCP registration DTO, disruptor subscriber, RPC/data types, and HTTP register path support in `shenyu-client-core`.
- Added a Java 8 compatible `RequestMethodUtils` for MCP method and parameter discovery.
- Added the Spring Boot starter client modules from the main ShenYu repository.
- Rebased starter POMs onto this split client repo and rewired imports to `shenyu-client-core`.
- Restored the beat register client and beat Spring Boot starter.
- Restored the registry API module needed by instance registration.
- Restored Spring MVC, gRPC, and Spring WebSocket discovery instance auto-configuration.
- Added the minimal client-core DTO/config/registry support needed by beat and discovery without pulling in the full main-repo `shenyu-common` module.
- Updated GitHub Actions CI to run the Maven build on JDK 8, 17, 21, 23, and 25.
- Kept the SOFA starter test dependency on the JDK 8 compatible SOFA Boot 3.1.4 line.
- Upgraded JaCoCo to 0.8.15 so coverage instrumentation recognizes JDK 25 class files.
- Overrode Byte Buddy test dependencies to 1.18.10 so Mockito 3.x tests can run on JDK 21, 23, and 25 while preserving JDK 8 runtime compatibility.
## Verification
- `./mvnw -pl shenyu-client-mcp/shenyu-client-mcp-register -am -DskipTests compile` passed.
- `./mvnw -pl shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-beat -am -DskipTests compile` passed.
- `./mvnw -DskipTests compile` passed.
- `./mvnw -DskipTests test` passed.
- `./mvnw -pl shenyu-spring-boot-starter-client/shenyu-spring-boot-starter-client-springmvc -am test` passed.
- `./mvnw test` passed across the full 30-module reactor.
- `JAVA_HOME=$(/usr/libexec/java_home -v 1.8) ./mvnw -B clean test -Prelease` passed across the full 30-module reactor.
- `JAVA_HOME=$(/usr/libexec/java_home -v 17) ./mvnw -B clean test -Prelease` passed across the full 30-module reactor.
- `JAVA_HOME=$(/usr/libexec/java_home -v 21) ./mvnw -B clean test -Prelease` passed across the full 30-module reactor.
- `JAVA_HOME=$(/usr/libexec/java_home -v 25) ./mvnw -B clean test` passed across the full 30-module reactor after the JaCoCo and Byte Buddy upgrades.
- Downloaded Temurin JDK 23.0.2+7 from Adoptium to `/tmp/shenyu-jdks`, verified SHA256 `749993e751f085c7ae713140066a90800075e4aeedfac50a5ed0c5457131c5a0`, and ran `JAVA_HOME=/tmp/shenyu-jdks/jdk-23.0.2+7/Contents/Home ./mvnw -B clean test` successfully across the full 30-module reactor.
- Re-ran `JAVA_HOME=$(/usr/libexec/java_home -v 1.8) ./mvnw -B clean test` successfully after the JaCoCo and Byte Buddy upgrades.
- The CI command now omits `-Prelease` because Maven reports that profile does not exist in this split repository.
- `.github/workflows/ci.yml` YAML parsing passed.
- Compatibility scan found no remaining old `org.apache.shenyu.common`, `org.apache.shenyu.register.common`, `org.apache.shenyu.register.client.http`, or `jakarta.*` imports in the restored beat/discovery code.
- Java 8 syntax scan found no `List.of`, `Map.of`, `Set.of`, or pattern-matching `instanceof` usage in the migrated MCP/starter modules.
- The full test run still logs existing background exceptions from original async tests under JDK 17, but Surefire reports reactor success.
## Next Steps
- Confirm the expanded GitHub Actions matrix on the remote runner after opening the pull request.
- Verify beat and discovery instance registration against matching admin/bootstrap runtime.
- Verify `/shenyu-client/register-mcp` against the matching admin side before treating MCP registration as end-to-end complete.