This is an automated email from the ASF dual-hosted git repository.

chia7712 pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/trunk by this push:
     new fafffbe5f90 MINOR: Add test to enforce LATEST_STABLE_METADATA_VERSION 
sync with LATEST_PRODUCTION (#21637)
fafffbe5f90 is described below

commit fafffbe5f90946b60447a1751e76df9db6dd15f9
Author: Eric Chang <[email protected]>
AuthorDate: Tue Mar 10 22:07:13 2026 +0800

    MINOR: Add test to enforce LATEST_STABLE_METADATA_VERSION sync with 
LATEST_PRODUCTION (#21637)
    
    This PR is a follow-up of this comment:
    https://github.com/apache/kafka/pull/21629#discussion_r2884634551
    
    A Gradle task is added to check if `LATEST_STABLE_METADATA_VERSION`
    matches  `LATEST_PRODUCTION`.
    
    ```
    ./gradlew verifyLatestStableMetadataVersion
    ```
    
    Reviewers: Chia-Ping Tsai <[email protected]>
---
 build.gradle | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/build.gradle b/build.gradle
index 770e9ec069e..88e8dd81981 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4132,3 +4132,38 @@ def verifyVersionConsistencyTask = 
tasks.register('verifyVersionConsistency') {
 }
 
 check.dependsOn verifyVersionConsistencyTask
+
+def verifyLatestStableMetadataVersionTask = 
tasks.register('verifyLatestStableMetadataVersion') {
+  group = "Verification"
+  description = "Verifies that LATEST_STABLE_METADATA_VERSION in version.py 
matches LATEST_PRODUCTION in MetadataVersion.java"
+
+  doLast {
+    // Extract enum constant name that LATEST_PRODUCTION points to, e.g. 
LATEST_PRODUCTION = IBP_4_3_IV0 -> IBP_4_3_IV0
+    def mvContent = 
file("${project.rootDir}/server-common/src/main/java/org/apache/kafka/server/common/MetadataVersion.java").text
+    def pyContent = file("${project.rootDir}/tests/kafkatest/version.py").text
+
+    def latestProductionEnumName = mvContent =~ 
/LATEST_PRODUCTION\s*=\s*(IBP_\w+)/
+    if (!latestProductionEnumName) throw new GradleException("Could not find 
LATEST_PRODUCTION in MetadataVersion.java")
+    def latestProductionEnumConstant = latestProductionEnumName[0][1] // e.g. 
"IBP_4_3_IV0"
+
+    // Extract version from enum constant, e.g. IBP_4_3_IV0(30, "4.3", "IV0", 
true) -> 4.3-IV0
+    def enumMatch = mvContent =~ 
/${latestProductionEnumConstant}\(\d+,\s*"(\d+\.\d+)",\s*"(IV\d+)"/
+    if (!enumMatch) throw new GradleException("Could not find enum definition 
for ${latestProductionEnumConstant} in MetadataVersion.java")
+    def javaVersion = "${enumMatch[0][1]}-${enumMatch[0][2]}" // e.g. "4.3-IV0"
+
+    def pyMatch = pyContent =~ /LATEST_STABLE_METADATA_VERSION\s*=\s*"([^"]+)"/
+    if (!pyMatch) throw new GradleException("LATEST_STABLE_METADATA_VERSION 
not found in version.py")
+    def pyVersion = pyMatch[0][1] // e.g. "4.3-IV0"
+
+    if (javaVersion != pyVersion) {
+      throw new GradleException(
+        "LATEST_STABLE_METADATA_VERSION mismatch: MetadataVersion.java 
LATEST_PRODUCTION=${javaVersion}, " +
+        "tests/kafkatest/version.py 
LATEST_STABLE_METADATA_VERSION=${pyVersion}. " +
+        "Make sure LATEST_PRODUCTION in MetadataVersion.java and 
LATEST_STABLE_METADATA_VERSION in tests/kafkatest/version.py are in sync."
+      )
+    }
+    println "MetadataVersion.java 
LATEST_PRODUCTION=${latestProductionEnumConstant} (${javaVersion}) matches 
version.py LATEST_STABLE_METADATA_VERSION=${pyVersion}"
+  }
+}
+
+check.dependsOn verifyLatestStableMetadataVersionTask

Reply via email to