From bdd5f4719dbd7f6a00e379980fb2b381876791e7 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Mon, 4 May 2026 16:02:36 +0200 Subject: [PATCH 01/18] test run for japicmp --- core-services/document-grounding/pom.xml | 10 ++ .../MSSharePointPipelineCreateRequest.java | 42 ++++- .../grounding/model/NewFeatureResponse.java | 170 ++++++++++++++++++ .../model/S3PipelineCreateRequest.java | 3 + .../src/main/resources/spec/grounding.yaml | 14 +- pom.xml | 29 +++ 6 files changed, 264 insertions(+), 4 deletions(-) create mode 100644 core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/NewFeatureResponse.java diff --git a/core-services/document-grounding/pom.xml b/core-services/document-grounding/pom.xml index 680421da0..279e2fe37 100644 --- a/core-services/document-grounding/pom.xml +++ b/core-services/document-grounding/pom.xml @@ -99,6 +99,16 @@ + + + + com.github.siom79.japicmp + japicmp-maven-plugin + + + + + generate diff --git a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/MSSharePointPipelineCreateRequest.java b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/MSSharePointPipelineCreateRequest.java index 0ae8a47ef..76212731c 100644 --- a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/MSSharePointPipelineCreateRequest.java +++ b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/MSSharePointPipelineCreateRequest.java @@ -93,6 +93,9 @@ public static TypeEnum fromValue(@Nonnull final String value) { @JsonProperty("metadata") private MetaData metadata; + @JsonProperty("extraField") + private String extraField; + @JsonAnySetter @JsonAnyGetter private final Map cloudSdkCustomFields = new LinkedHashMap<>(); @@ -197,6 +200,38 @@ public void setMetadata(@Nullable final MetaData metadata) { this.metadata = metadata; } + /** + * Set the extraField of this {@link MSSharePointPipelineCreateRequest} instance and return the + * same instance. + * + * @param extraField The extraField of this {@link MSSharePointPipelineCreateRequest} + * @return The same instance of this {@link MSSharePointPipelineCreateRequest} class + */ + @Nonnull + public MSSharePointPipelineCreateRequest extraField(@Nullable final String extraField) { + this.extraField = extraField; + return this; + } + + /** + * Get extraField + * + * @return extraField The extraField of this {@link MSSharePointPipelineCreateRequest} instance. + */ + @Nonnull + public String getExtraField() { + return extraField; + } + + /** + * Set the extraField of this {@link MSSharePointPipelineCreateRequest} instance. + * + * @param extraField The extraField of this {@link MSSharePointPipelineCreateRequest} + */ + public void setExtraField(@Nullable final String extraField) { + this.extraField = extraField; + } + /** * Get the names of the unrecognizable properties of the {@link * MSSharePointPipelineCreateRequest}. @@ -241,6 +276,7 @@ public Map toMap() { if (type != null) declaredFields.put("type", type); if (_configuration != null) declaredFields.put("_configuration", _configuration); if (metadata != null) declaredFields.put("metadata", metadata); + if (extraField != null) declaredFields.put("extraField", extraField); return declaredFields; } @@ -271,12 +307,13 @@ public boolean equals(@Nullable final java.lang.Object o) { this.cloudSdkCustomFields, msSharePointPipelineCreateRequest.cloudSdkCustomFields) && Objects.equals(this.type, msSharePointPipelineCreateRequest.type) && Objects.equals(this._configuration, msSharePointPipelineCreateRequest._configuration) - && Objects.equals(this.metadata, msSharePointPipelineCreateRequest.metadata); + && Objects.equals(this.metadata, msSharePointPipelineCreateRequest.metadata) + && Objects.equals(this.extraField, msSharePointPipelineCreateRequest.extraField); } @Override public int hashCode() { - return Objects.hash(type, _configuration, metadata, cloudSdkCustomFields); + return Objects.hash(type, _configuration, metadata, extraField, cloudSdkCustomFields); } @Override @@ -287,6 +324,7 @@ public String toString() { sb.append(" type: ").append(toIndentedString(type)).append("\n"); sb.append(" _configuration: ").append(toIndentedString(_configuration)).append("\n"); sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); + sb.append(" extraField: ").append(toIndentedString(extraField)).append("\n"); cloudSdkCustomFields.forEach( (k, v) -> sb.append(" ").append(k).append(": ").append(toIndentedString(v)).append("\n")); diff --git a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/NewFeatureResponse.java b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/NewFeatureResponse.java new file mode 100644 index 000000000..436710fdc --- /dev/null +++ b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/NewFeatureResponse.java @@ -0,0 +1,170 @@ +/* + * Grounding + * Grounding is a service designed to handle data-related tasks, such as grounding and retrieval, using vector databases. It provides specialized data retrieval through these databases, grounding the retrieval process with your own external and context-relevant data. Grounding combines generative AI capabilities with the ability to use real-time, precise data to improve decision-making and business operations for specific AI-driven business solutions. + * + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +package com.sap.ai.sdk.grounding.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Objects; +import java.util.Set; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** NewFeatureResponse */ +// CHECKSTYLE:OFF +public class NewFeatureResponse +// CHECKSTYLE:ON +{ + @JsonProperty("status") + private String status; + + @JsonAnySetter @JsonAnyGetter + private final Map cloudSdkCustomFields = new LinkedHashMap<>(); + + /** Default constructor for NewFeatureResponse. */ + protected NewFeatureResponse() {} + + /** + * Set the status of this {@link NewFeatureResponse} instance and return the same instance. + * + * @param status The status of this {@link NewFeatureResponse} + * @return The same instance of this {@link NewFeatureResponse} class + */ + @Nonnull + public NewFeatureResponse status(@Nullable final String status) { + this.status = status; + return this; + } + + /** + * Get status + * + * @return status The status of this {@link NewFeatureResponse} instance. + */ + @Nonnull + public String getStatus() { + return status; + } + + /** + * Set the status of this {@link NewFeatureResponse} instance. + * + * @param status The status of this {@link NewFeatureResponse} + */ + public void setStatus(@Nullable final String status) { + this.status = status; + } + + /** + * Get the names of the unrecognizable properties of the {@link NewFeatureResponse}. + * + * @return The set of properties names + */ + @JsonIgnore + @Nonnull + public Set getCustomFieldNames() { + return cloudSdkCustomFields.keySet(); + } + + /** + * Get the value of an unrecognizable property of this {@link NewFeatureResponse} instance. + * + * @deprecated Use {@link #toMap()} instead. + * @param name The name of the property + * @return The value of the property + * @throws NoSuchElementException If no property with the given name could be found. + */ + @Nullable + @Deprecated + public Object getCustomField(@Nonnull final String name) throws NoSuchElementException { + if (!cloudSdkCustomFields.containsKey(name)) { + throw new NoSuchElementException("NewFeatureResponse has no field with name '" + name + "'."); + } + return cloudSdkCustomFields.get(name); + } + + /** + * Get the value of all properties of this {@link NewFeatureResponse} instance including + * unrecognized properties. + * + * @return The map of all properties + */ + @JsonIgnore + @Nonnull + public Map toMap() { + final Map declaredFields = new LinkedHashMap<>(cloudSdkCustomFields); + if (status != null) declaredFields.put("status", status); + return declaredFields; + } + + /** + * Set an unrecognizable property of this {@link NewFeatureResponse} instance. If the map + * previously contained a mapping for the key, the old value is replaced by the specified value. + * + * @param customFieldName The name of the property + * @param customFieldValue The value of the property + */ + @JsonIgnore + public void setCustomField(@Nonnull String customFieldName, @Nullable Object customFieldValue) { + cloudSdkCustomFields.put(customFieldName, customFieldValue); + } + + @Override + public boolean equals(@Nullable final java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final NewFeatureResponse newFeatureResponse = (NewFeatureResponse) o; + return Objects.equals(this.cloudSdkCustomFields, newFeatureResponse.cloudSdkCustomFields) + && Objects.equals(this.status, newFeatureResponse.status); + } + + @Override + public int hashCode() { + return Objects.hash(status, cloudSdkCustomFields); + } + + @Override + @Nonnull + public String toString() { + final StringBuilder sb = new StringBuilder(); + sb.append("class NewFeatureResponse {\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + cloudSdkCustomFields.forEach( + (k, v) -> + sb.append(" ").append(k).append(": ").append(toIndentedString(v)).append("\n")); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(final java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + /** Create a new {@link NewFeatureResponse} instance. No arguments are required. */ + public static NewFeatureResponse create() { + return new NewFeatureResponse(); + } +} diff --git a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/S3PipelineCreateRequest.java b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/S3PipelineCreateRequest.java index 33018523c..59ecf568d 100644 --- a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/S3PipelineCreateRequest.java +++ b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/S3PipelineCreateRequest.java @@ -35,6 +35,9 @@ public enum TypeEnum { /** The S3 option of this S3PipelineCreateRequest */ S3("S3"), + /** The EXTRA option of this S3PipelineCreateRequest */ + EXTRA("Extra"), + /** The UNKNOWN_DEFAULT_OPEN_API option of this S3PipelineCreateRequest */ UNKNOWN_DEFAULT_OPEN_API("unknown_default_open_api"); diff --git a/core-services/document-grounding/src/main/resources/spec/grounding.yaml b/core-services/document-grounding/src/main/resources/spec/grounding.yaml index 83ba716ab..94004993d 100644 --- a/core-services/document-grounding/src/main/resources/spec/grounding.yaml +++ b/core-services/document-grounding/src/main/resources/spec/grounding.yaml @@ -1446,8 +1446,17 @@ components: $ref: "#/components/schemas/MSSharePointConfiguration" metadata: $ref: "#/components/schemas/MetaData" + # additive: field addition + extraField: + type: string + example: extraValue additionalProperties: true - + # additive: add a new class + NewFeatureResponse: + type: object + properties: + status: + type: string S3PipelineCreateRequest: type: object required: @@ -1456,7 +1465,8 @@ components: properties: type: type: string - enum: [S3] + # additive: add a new enum + enum: [S3, Extra] configuration: $ref: "#/components/schemas/S3Configuration" metadata: diff --git a/pom.xml b/pom.xml index 20cd886a6..e0e413600 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,9 @@ 100% 100% 100% + + true + ${project.build.directory}/empty.jar @@ -784,6 +787,32 @@ https://gitbox.apache.org/repos/asf?p=maven-pmd-plugin.git;a=blob_plain;f=src/ma ossindex + + com.github.siom79.japicmp + japicmp-maven-plugin + 0.25.6 + + ${japicmp.skip} + + + ${japicmp.oldVersion.file} + + + + + ${project.build.directory}/${project.artifactId}-${project.version}.jar + + + + true + true + true + public + false + true + + + From 6dafb35f0aad235c0af14d50b4b6c4d336bea28a Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Mon, 11 May 2026 13:59:44 +0200 Subject: [PATCH 02/18] Update all pom to include only generated code --- core-services/document-grounding/pom.xml | 9 +- .../MSSharePointPipelineCreateRequest.java | 42 +---- .../grounding/model/NewFeatureResponse.java | 170 ------------------ .../model/S3PipelineCreateRequest.java | 3 - .../src/main/resources/spec/grounding.yaml | 14 +- core-services/prompt-registry/pom.xml | 17 ++ core/pom.xml | 17 ++ foundation-models/sap-rpt/pom.xml | 11 ++ orchestration/pom.xml | 16 ++ pom.xml | 50 +++--- 10 files changed, 94 insertions(+), 255 deletions(-) delete mode 100644 core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/NewFeatureResponse.java diff --git a/core-services/document-grounding/pom.xml b/core-services/document-grounding/pom.xml index 172509ff7..659240b2c 100644 --- a/core-services/document-grounding/pom.xml +++ b/core-services/document-grounding/pom.xml @@ -104,7 +104,14 @@ com.github.siom79.japicmp japicmp-maven-plugin - + + + + com.sap.ai.sdk.grounding.client + com.sap.ai.sdk.grounding.model + + + diff --git a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/MSSharePointPipelineCreateRequest.java b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/MSSharePointPipelineCreateRequest.java index 76212731c..0ae8a47ef 100644 --- a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/MSSharePointPipelineCreateRequest.java +++ b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/MSSharePointPipelineCreateRequest.java @@ -93,9 +93,6 @@ public static TypeEnum fromValue(@Nonnull final String value) { @JsonProperty("metadata") private MetaData metadata; - @JsonProperty("extraField") - private String extraField; - @JsonAnySetter @JsonAnyGetter private final Map cloudSdkCustomFields = new LinkedHashMap<>(); @@ -200,38 +197,6 @@ public void setMetadata(@Nullable final MetaData metadata) { this.metadata = metadata; } - /** - * Set the extraField of this {@link MSSharePointPipelineCreateRequest} instance and return the - * same instance. - * - * @param extraField The extraField of this {@link MSSharePointPipelineCreateRequest} - * @return The same instance of this {@link MSSharePointPipelineCreateRequest} class - */ - @Nonnull - public MSSharePointPipelineCreateRequest extraField(@Nullable final String extraField) { - this.extraField = extraField; - return this; - } - - /** - * Get extraField - * - * @return extraField The extraField of this {@link MSSharePointPipelineCreateRequest} instance. - */ - @Nonnull - public String getExtraField() { - return extraField; - } - - /** - * Set the extraField of this {@link MSSharePointPipelineCreateRequest} instance. - * - * @param extraField The extraField of this {@link MSSharePointPipelineCreateRequest} - */ - public void setExtraField(@Nullable final String extraField) { - this.extraField = extraField; - } - /** * Get the names of the unrecognizable properties of the {@link * MSSharePointPipelineCreateRequest}. @@ -276,7 +241,6 @@ public Map toMap() { if (type != null) declaredFields.put("type", type); if (_configuration != null) declaredFields.put("_configuration", _configuration); if (metadata != null) declaredFields.put("metadata", metadata); - if (extraField != null) declaredFields.put("extraField", extraField); return declaredFields; } @@ -307,13 +271,12 @@ public boolean equals(@Nullable final java.lang.Object o) { this.cloudSdkCustomFields, msSharePointPipelineCreateRequest.cloudSdkCustomFields) && Objects.equals(this.type, msSharePointPipelineCreateRequest.type) && Objects.equals(this._configuration, msSharePointPipelineCreateRequest._configuration) - && Objects.equals(this.metadata, msSharePointPipelineCreateRequest.metadata) - && Objects.equals(this.extraField, msSharePointPipelineCreateRequest.extraField); + && Objects.equals(this.metadata, msSharePointPipelineCreateRequest.metadata); } @Override public int hashCode() { - return Objects.hash(type, _configuration, metadata, extraField, cloudSdkCustomFields); + return Objects.hash(type, _configuration, metadata, cloudSdkCustomFields); } @Override @@ -324,7 +287,6 @@ public String toString() { sb.append(" type: ").append(toIndentedString(type)).append("\n"); sb.append(" _configuration: ").append(toIndentedString(_configuration)).append("\n"); sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" extraField: ").append(toIndentedString(extraField)).append("\n"); cloudSdkCustomFields.forEach( (k, v) -> sb.append(" ").append(k).append(": ").append(toIndentedString(v)).append("\n")); diff --git a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/NewFeatureResponse.java b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/NewFeatureResponse.java deleted file mode 100644 index 436710fdc..000000000 --- a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/NewFeatureResponse.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Grounding - * Grounding is a service designed to handle data-related tasks, such as grounding and retrieval, using vector databases. It provides specialized data retrieval through these databases, grounding the retrieval process with your own external and context-relevant data. Grounding combines generative AI capabilities with the ability to use real-time, precise data to improve decision-making and business operations for specific AI-driven business solutions. - * - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -package com.sap.ai.sdk.grounding.model; - -import com.fasterxml.jackson.annotation.JsonAnyGetter; -import com.fasterxml.jackson.annotation.JsonAnySetter; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.NoSuchElementException; -import java.util.Objects; -import java.util.Set; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -/** NewFeatureResponse */ -// CHECKSTYLE:OFF -public class NewFeatureResponse -// CHECKSTYLE:ON -{ - @JsonProperty("status") - private String status; - - @JsonAnySetter @JsonAnyGetter - private final Map cloudSdkCustomFields = new LinkedHashMap<>(); - - /** Default constructor for NewFeatureResponse. */ - protected NewFeatureResponse() {} - - /** - * Set the status of this {@link NewFeatureResponse} instance and return the same instance. - * - * @param status The status of this {@link NewFeatureResponse} - * @return The same instance of this {@link NewFeatureResponse} class - */ - @Nonnull - public NewFeatureResponse status(@Nullable final String status) { - this.status = status; - return this; - } - - /** - * Get status - * - * @return status The status of this {@link NewFeatureResponse} instance. - */ - @Nonnull - public String getStatus() { - return status; - } - - /** - * Set the status of this {@link NewFeatureResponse} instance. - * - * @param status The status of this {@link NewFeatureResponse} - */ - public void setStatus(@Nullable final String status) { - this.status = status; - } - - /** - * Get the names of the unrecognizable properties of the {@link NewFeatureResponse}. - * - * @return The set of properties names - */ - @JsonIgnore - @Nonnull - public Set getCustomFieldNames() { - return cloudSdkCustomFields.keySet(); - } - - /** - * Get the value of an unrecognizable property of this {@link NewFeatureResponse} instance. - * - * @deprecated Use {@link #toMap()} instead. - * @param name The name of the property - * @return The value of the property - * @throws NoSuchElementException If no property with the given name could be found. - */ - @Nullable - @Deprecated - public Object getCustomField(@Nonnull final String name) throws NoSuchElementException { - if (!cloudSdkCustomFields.containsKey(name)) { - throw new NoSuchElementException("NewFeatureResponse has no field with name '" + name + "'."); - } - return cloudSdkCustomFields.get(name); - } - - /** - * Get the value of all properties of this {@link NewFeatureResponse} instance including - * unrecognized properties. - * - * @return The map of all properties - */ - @JsonIgnore - @Nonnull - public Map toMap() { - final Map declaredFields = new LinkedHashMap<>(cloudSdkCustomFields); - if (status != null) declaredFields.put("status", status); - return declaredFields; - } - - /** - * Set an unrecognizable property of this {@link NewFeatureResponse} instance. If the map - * previously contained a mapping for the key, the old value is replaced by the specified value. - * - * @param customFieldName The name of the property - * @param customFieldValue The value of the property - */ - @JsonIgnore - public void setCustomField(@Nonnull String customFieldName, @Nullable Object customFieldValue) { - cloudSdkCustomFields.put(customFieldName, customFieldValue); - } - - @Override - public boolean equals(@Nullable final java.lang.Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - final NewFeatureResponse newFeatureResponse = (NewFeatureResponse) o; - return Objects.equals(this.cloudSdkCustomFields, newFeatureResponse.cloudSdkCustomFields) - && Objects.equals(this.status, newFeatureResponse.status); - } - - @Override - public int hashCode() { - return Objects.hash(status, cloudSdkCustomFields); - } - - @Override - @Nonnull - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("class NewFeatureResponse {\n"); - sb.append(" status: ").append(toIndentedString(status)).append("\n"); - cloudSdkCustomFields.forEach( - (k, v) -> - sb.append(" ").append(k).append(": ").append(toIndentedString(v)).append("\n")); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces (except the first line). - */ - private String toIndentedString(final java.lang.Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } - - /** Create a new {@link NewFeatureResponse} instance. No arguments are required. */ - public static NewFeatureResponse create() { - return new NewFeatureResponse(); - } -} diff --git a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/S3PipelineCreateRequest.java b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/S3PipelineCreateRequest.java index 59ecf568d..33018523c 100644 --- a/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/S3PipelineCreateRequest.java +++ b/core-services/document-grounding/src/main/java/com/sap/ai/sdk/grounding/model/S3PipelineCreateRequest.java @@ -35,9 +35,6 @@ public enum TypeEnum { /** The S3 option of this S3PipelineCreateRequest */ S3("S3"), - /** The EXTRA option of this S3PipelineCreateRequest */ - EXTRA("Extra"), - /** The UNKNOWN_DEFAULT_OPEN_API option of this S3PipelineCreateRequest */ UNKNOWN_DEFAULT_OPEN_API("unknown_default_open_api"); diff --git a/core-services/document-grounding/src/main/resources/spec/grounding.yaml b/core-services/document-grounding/src/main/resources/spec/grounding.yaml index 94004993d..83ba716ab 100644 --- a/core-services/document-grounding/src/main/resources/spec/grounding.yaml +++ b/core-services/document-grounding/src/main/resources/spec/grounding.yaml @@ -1446,17 +1446,8 @@ components: $ref: "#/components/schemas/MSSharePointConfiguration" metadata: $ref: "#/components/schemas/MetaData" - # additive: field addition - extraField: - type: string - example: extraValue additionalProperties: true - # additive: add a new class - NewFeatureResponse: - type: object - properties: - status: - type: string + S3PipelineCreateRequest: type: object required: @@ -1465,8 +1456,7 @@ components: properties: type: type: string - # additive: add a new enum - enum: [S3, Extra] + enum: [S3] configuration: $ref: "#/components/schemas/S3Configuration" metadata: diff --git a/core-services/prompt-registry/pom.xml b/core-services/prompt-registry/pom.xml index 84da5e724..a5460e6d8 100644 --- a/core-services/prompt-registry/pom.xml +++ b/core-services/prompt-registry/pom.xml @@ -109,6 +109,23 @@ + + + + com.github.siom79.japicmp + japicmp-maven-plugin + + + + com.sap.ai.sdk.prompt.registry.client + com.sap.ai.sdk.prompt.registry.model + + + + + + + generate diff --git a/core/pom.xml b/core/pom.xml index 8a334b131..42182babf 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -140,6 +140,23 @@ + + + + com.github.siom79.japicmp + japicmp-maven-plugin + + + + com.sap.ai.sdk.core.client + com.sap.ai.sdk.core.model + + + + + + + generate diff --git a/foundation-models/sap-rpt/pom.xml b/foundation-models/sap-rpt/pom.xml index 111d60f8f..1d6727c93 100644 --- a/foundation-models/sap-rpt/pom.xml +++ b/foundation-models/sap-rpt/pom.xml @@ -181,6 +181,17 @@ + + com.github.siom79.japicmp + japicmp-maven-plugin + + + + com.sap.ai.sdk.foundationmodels.rpt.generated + + + + diff --git a/orchestration/pom.xml b/orchestration/pom.xml index a0894d96a..964a3d63b 100644 --- a/orchestration/pom.xml +++ b/orchestration/pom.xml @@ -168,6 +168,22 @@ + + + + com.github.siom79.japicmp + japicmp-maven-plugin + + + + com.sap.ai.sdk.orchestration.model + + + + + + + generate diff --git a/pom.xml b/pom.xml index ddc7d6ad4..35a195abd 100644 --- a/pom.xml +++ b/pom.xml @@ -94,9 +94,7 @@ 100% 100% 100% - - true - ${project.build.directory}/empty.jar + 0.25.6 @@ -303,6 +301,26 @@ openapi-generator-maven-plugin 7.22.0 + + com.github.siom79.japicmp + japicmp-maven-plugin + ${japicmp.version} + + + + ${project.build.directory}/${project.artifactId}-${project.version}.jar + + + + true + true + true + public + false + true + + + @@ -795,32 +813,6 @@ https://gitbox.apache.org/repos/asf?p=maven-pmd-plugin.git;a=blob_plain;f=src/ma ossindex - - com.github.siom79.japicmp - japicmp-maven-plugin - 0.25.6 - - ${japicmp.skip} - - - ${japicmp.oldVersion.file} - - - - - ${project.build.directory}/${project.artifactId}-${project.version}.jar - - - - true - true - true - public - false - true - - - From d9a92d2477d6e69bb135001881feb1ebfaabc67b Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Mon, 11 May 2026 14:46:55 +0200 Subject: [PATCH 03/18] Integrate with spec-update workflow --- .github/workflows/spec-update.yaml | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index b29d81731..0f6be87f0 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -54,6 +54,7 @@ jobs: pr_url: ${{ steps.create-pr.outputs.pr_url }} compilation_result: ${{ steps.compile.outputs.compilation_result }} test_result: ${{ steps.compile.outputs.test_result }} + api_compat_result: ${{ steps.api_compat.outputs.api_compat_result }} env: API_BASE_URL: 'https://github.tools.sap/api/v3/repos' SERVICE: ${{ github.event.inputs.service }} @@ -137,25 +138,31 @@ jobs: core) API_URL="$API_BASE_URL/cloudsdk/cloud-sdk-java-tests/contents/aicore.yaml?ref=$REF" FILE_PATH='core/src/main/resources/spec/aicore.yaml' + MODULE_PATH='core' ;; document-grounding) API_URL="$API_BASE_URL/AI/rage-proxy-inference/contents/docs/public/business_api_hub/api_hub_merged_spec.yaml?ref=$REF" FILE_PATH='core-services/document-grounding/src/main/resources/spec/grounding.yaml' + MODULE_PATH='core-services/document-grounding' ;; orchestration) API_URL="$API_BASE_URL/AI/llm-orchestration/contents/src/spec/v2.yaml?ref=$REF" FILE_PATH='orchestration/src/main/resources/spec/orchestration.yaml' + MODULE_PATH='orchestration' ;; prompt-registry) API_URL="$API_BASE_URL/AI/prompt-registry/contents/src/spec/generated/prompt-registry-combined.yaml?ref=$REF" FILE_PATH='core-services/prompt-registry/src/main/resources/spec/prompt-registry.yaml' + MODULE_PATH='core-services/prompt-registry' ;; sap-rpt) # https://github.tools.sap/DL-COE/sap-rpt-1-public-content API_URL="$API_BASE_URL/DL-COE/sap-rpt-1-public-content/contents/sap-rpt-1_openapi.json?ref=$REF" FILE_PATH='foundation-models/sap-rpt/src/main/resources/spec/sap-rpt-1_openapi.json' + MODULE_PATH='foundation-models/sap-rpt' ;; esac + echo "module_path=$MODULE_PATH" >> "$GITHUB_OUTPUT" echo "Downloading $SERVICE specification file from $API_URL ..." gh api "$API_URL" -H "Accept: application/vnd.github.raw" > $FILE_PATH @@ -206,6 +213,23 @@ jobs: fi fi + - name: 'Build baseline JAR' + id: baseline + if: steps.spec_diff.outputs.spec_diff == 'true' + env: + MODULE_PATH: ${{ steps.download.outputs.module_path }} + run: | + # Fetch main branch and create a parallel checkout via git worktree + git fetch --no-tags --depth=1 origin main + git worktree add /tmp/main-baseline origin/main + + # Build the baseline JAR from main (only the affected module + its dependencies) + mvn package -DskipTests -pl "$MODULE_PATH" -am \ + -f /tmp/main-baseline/pom.xml ${{ env.MVN_MULTI_THREADED_ARGS }} + + # Copy the baseline JAR to a known location for japicmp + cp /tmp/main-baseline/$MODULE_PATH/target/*.jar /tmp/baseline.jar + - name: 'Generate' id: generate if: steps.spec_diff.outputs.spec_diff == 'true' @@ -216,6 +240,27 @@ jobs: echo "generation_result=failure" >> "$GITHUB_OUTPUT" fi + - name: 'API compatibility check' + id: api_compat + if: > + steps.spec_diff.outputs.spec_diff == 'true' && + steps.generate.outputs.generation_result == 'success' + env: + MODULE_PATH: ${{ steps.download.outputs.module_path }} + run: | + # Run japicmp: compare baseline (main) JAR vs newly generated JAR + if mvn japicmp:cmp -pl "$MODULE_PATH" \ + -Djapicmp.oldVersion.file=/tmp/baseline.jar \ + ${{ env.MVN_MULTI_THREADED_ARGS }} ; then + echo "api_compat_result=compatible" >> "$GITHUB_OUTPUT" + else + echo "api_compat_result=incompatible" >> "$GITHUB_OUTPUT" + # Append the japicmp markdown report to the job summary + echo "## API Compatibility Report" >> $GITHUB_STEP_SUMMARY + cat "$MODULE_PATH/target/japicmp/default-cli.md" >> $GITHUB_STEP_SUMMARY 2>/dev/null || true + exit 1 + fi + - name: 'Compile and Test' id: compile if: steps.spec_diff.outputs.spec_diff == 'true' @@ -268,6 +313,7 @@ jobs: - Compilation outcome: ${{ steps.compile.outputs.compilation_result }} - Test run outcome: ${{ steps.compile.outputs.test_result }} + - API compatibility: ${{ steps.api_compat.outputs.api_compat_result || 'skipped' }} Before merging, make sure to update tests and release notes, if necessary. @@ -300,6 +346,7 @@ jobs: echo "| Client Generation | ${{ steps.generate.outputs.generation_result == 'success' && '✅' || '❌' }} ${{ steps.generate.outputs.generation_result }}" >> $GITHUB_STEP_SUMMARY echo "| Client Compilation | ${{ steps.compile.outputs.compilation_result == 'success' && '✅' || '❌' }} ${{ steps.compile.outputs.compilation_result }}" >> $GITHUB_STEP_SUMMARY echo "| Client Testing | ${{ steps.compile.outputs.test_result == 'success' && '✅' || steps.compile.outputs.test_result == 'skipped' && '⏩' || '❌' }} ${{ steps.compile.outputs.test_result }}" >> $GITHUB_STEP_SUMMARY + echo "| API Compatibility | ${{ steps.api_compat.outputs.api_compat_result == 'compatible' && '✅' || steps.api_compat.outputs.api_compat_result == 'incompatible' && '❌' || '⏩' }} ${{ steps.api_compat.outputs.api_compat_result || 'skipped' }}" >> $GITHUB_STEP_SUMMARY echo "| Branch Creation | ${{ steps.push.outcome == 'success' && '✅ [Branch Link]($DIFF_URL)' || '❌ failure' }}" >> $GITHUB_STEP_SUMMARY echo "| Pull Request Creation | ${{ env.CREATE_PR == 'false' && '⏩ skipped' || '' }}${{ env.CREATE_PR == 'true' && steps.push.outcome == 'success' && '✅ [PR Link]($PR_URL)' || '' }}" >> $GITHUB_STEP_SUMMARY fi From 7f5ed0dfd1d276566434a0d8fa847b15e607763a Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Tue, 12 May 2026 12:57:22 +0200 Subject: [PATCH 04/18] Full qualified plugin invocation --- .github/workflows/spec-update.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index 0f6be87f0..f5164f988 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -249,7 +249,7 @@ jobs: MODULE_PATH: ${{ steps.download.outputs.module_path }} run: | # Run japicmp: compare baseline (main) JAR vs newly generated JAR - if mvn japicmp:cmp -pl "$MODULE_PATH" \ + if mvn com.github.siom79.japicmp:japicmp-maven-plugin:cmp -pl "$MODULE_PATH" \ -Djapicmp.oldVersion.file=/tmp/baseline.jar \ ${{ env.MVN_MULTI_THREADED_ARGS }} ; then echo "api_compat_result=compatible" >> "$GITHUB_OUTPUT" From c73d8e5bd050bddf97af93d0fd7f57d3f3512c0a Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Tue, 12 May 2026 15:06:17 +0200 Subject: [PATCH 05/18] Update workflow for better debug logs --- .github/workflows/spec-update.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index f5164f988..d80bb09fc 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -248,11 +248,20 @@ jobs: env: MODULE_PATH: ${{ steps.download.outputs.module_path }} run: | + # Debug: show which JARs are being compared + echo "Baseline JAR:" + ls -la /tmp/baseline.jar + echo "New JAR:" + ls -la "$MODULE_PATH/target/"*.jar + # Run japicmp: compare baseline (main) JAR vs newly generated JAR if mvn com.github.siom79.japicmp:japicmp-maven-plugin:cmp -pl "$MODULE_PATH" \ -Djapicmp.oldVersion.file=/tmp/baseline.jar \ ${{ env.MVN_MULTI_THREADED_ARGS }} ; then echo "api_compat_result=compatible" >> "$GITHUB_OUTPUT" + # Debug: always print the diff report + echo "--- japicmp diff report ---" + cat "$MODULE_PATH/target/japicmp/default-cli.diff" 2>/dev/null || true else echo "api_compat_result=incompatible" >> "$GITHUB_OUTPUT" # Append the japicmp markdown report to the job summary From 61dd63be4066b59734eb54c753fc3c760ea4b398 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Tue, 12 May 2026 15:42:39 +0200 Subject: [PATCH 06/18] upgrade plugin --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 35a195abd..e9731d15d 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ 100% 100% 100% - 0.25.6 + 0.25.7 From a463828d31649445e191b5eb8dae947574d6fcb7 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Tue, 12 May 2026 16:22:10 +0200 Subject: [PATCH 07/18] Add new property to pass old file path --- pom.xml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index e9731d15d..b12833921 100644 --- a/pom.xml +++ b/pom.xml @@ -73,6 +73,7 @@ 2.21.3 1.5.32 1.22.0 + 0.25.7 1.16.5 20251224 @@ -94,7 +95,8 @@ 100% 100% 100% - 0.25.7 + + @@ -306,6 +308,11 @@ japicmp-maven-plugin ${japicmp.version} + + + ${japicmp.oldVersion.file} + + ${project.build.directory}/${project.artifactId}-${project.version}.jar @@ -317,7 +324,7 @@ true public false - true + false @@ -448,7 +455,8 @@ Do not use JUnit 4.X, instead exclusively use Junit Jupiter. JUnit 4 tests will (silently) - simply not be executed. + simply not be executed. + junit:junit @@ -538,7 +546,8 @@ Apache Software License - Version 2.0|Apache License Version 2.0|Apache 2.0| The Apache License, Version 2.0|Apache License, Version 2.0|Apache-2.0| - The Apache Software License, Version 2.0|Apache License 2.0 + The Apache Software License, Version 2.0|Apache License 2.0 + The MIT License|MIT License|The MIT License (MIT)|MIT|MIT-0 The BSD 3-Clause License|BSD License 3|The BSD License|BSD-3-Clause|BSD-2-Clause|BSD licence Eclipse Distribution License - v 1.0|EDL 1.0 From 2a2d1ac21b3b7eb9a61cc545b5f2f55ebde6a7a7 Mon Sep 17 00:00:00 2001 From: SAP Cloud SDK Bot Date: Tue, 12 May 2026 14:23:05 +0000 Subject: [PATCH 08/18] Formatting --- pom.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index b12833921..85e7c1010 100644 --- a/pom.xml +++ b/pom.xml @@ -455,8 +455,7 @@ Do not use JUnit 4.X, instead exclusively use Junit Jupiter. JUnit 4 tests will (silently) - simply not be executed. - + simply not be executed. junit:junit @@ -546,8 +545,7 @@ Apache Software License - Version 2.0|Apache License Version 2.0|Apache 2.0| The Apache License, Version 2.0|Apache License, Version 2.0|Apache-2.0| - The Apache Software License, Version 2.0|Apache License 2.0 - + The Apache Software License, Version 2.0|Apache License 2.0 The MIT License|MIT License|The MIT License (MIT)|MIT|MIT-0 The BSD 3-Clause License|BSD License 3|The BSD License|BSD-3-Clause|BSD-2-Clause|BSD licence Eclipse Distribution License - v 1.0|EDL 1.0 From ccf2d6da422c21824431d4880105b8381a183609 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Tue, 12 May 2026 18:03:00 +0200 Subject: [PATCH 09/18] Make report downloadable --- .github/workflows/spec-update.yaml | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index c819515e9..43c953fef 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -257,28 +257,26 @@ jobs: env: MODULE_PATH: ${{ steps.download.outputs.module_path }} run: | - # Debug: show which JARs are being compared - echo "Baseline JAR:" - ls -la /tmp/baseline.jar - echo "New JAR:" - ls -la "$MODULE_PATH/target/"*.jar - # Run japicmp: compare baseline (main) JAR vs newly generated JAR if mvn com.github.siom79.japicmp:japicmp-maven-plugin:cmp -pl "$MODULE_PATH" \ -Djapicmp.oldVersion.file=/tmp/baseline.jar \ ${{ env.MVN_MULTI_THREADED_ARGS }} ; then echo "api_compat_result=compatible" >> "$GITHUB_OUTPUT" - # Debug: always print the diff report - echo "--- japicmp diff report ---" - cat "$MODULE_PATH/target/japicmp/default-cli.diff" 2>/dev/null || true else echo "api_compat_result=incompatible" >> "$GITHUB_OUTPUT" - # Append the japicmp markdown report to the job summary - echo "## API Compatibility Report" >> $GITHUB_STEP_SUMMARY - cat "$MODULE_PATH/target/japicmp/default-cli.md" >> $GITHUB_STEP_SUMMARY 2>/dev/null || true + echo "## ❌ API Compatibility: Breaking changes detected" >> $GITHUB_STEP_SUMMARY + echo "Download the **japicmp-report** artifact for details." >> $GITHUB_STEP_SUMMARY exit 1 fi + - name: 'Upload japicmp report' + if: always() && steps.api_compat.outcome != 'skipped' + uses: actions/upload-artifact@v4 + with: + name: japicmp-report + path: ${{ steps.download.outputs.module_path }}/target/japicmp/ + if-no-files-found: ignore + - name: 'Compile and Test' id: compile if: steps.spec_diff.outputs.spec_diff == 'true' From 59989f5b7843de1c5ce468f4aa565ed2964774cc Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Wed, 13 May 2026 10:38:36 +0200 Subject: [PATCH 10/18] Simplify build baseline step --- .github/workflows/spec-update.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index 43c953fef..6cbaca618 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -228,11 +228,12 @@ jobs: env: MODULE_PATH: ${{ steps.download.outputs.module_path }} run: | - # Fetch main branch and create a parallel checkout via git worktree + # Extract main branch source into a temporary directory git fetch --no-tags --depth=1 origin main - git worktree add /tmp/main-baseline origin/main + mkdir -p /tmp/main-baseline + git archive origin/main | tar -x -C /tmp/main-baseline - # Build the baseline JAR from main (only the affected module + its dependencies) + # Build the baseline JAR (only the affected module + its dependencies) mvn package -DskipTests -pl "$MODULE_PATH" -am \ -f /tmp/main-baseline/pom.xml ${{ env.MVN_MULTI_THREADED_ARGS }} From 2e474888b4961edde83d68e4d3201823ae4c292a Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Wed, 13 May 2026 12:25:41 +0200 Subject: [PATCH 11/18] hardcode old version file --- .github/workflows/spec-update.yaml | 1 - pom.xml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index 6cbaca618..eee14c7b3 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -260,7 +260,6 @@ jobs: run: | # Run japicmp: compare baseline (main) JAR vs newly generated JAR if mvn com.github.siom79.japicmp:japicmp-maven-plugin:cmp -pl "$MODULE_PATH" \ - -Djapicmp.oldVersion.file=/tmp/baseline.jar \ ${{ env.MVN_MULTI_THREADED_ARGS }} ; then echo "api_compat_result=compatible" >> "$GITHUB_OUTPUT" else diff --git a/pom.xml b/pom.xml index 85e7c1010..453a522a3 100644 --- a/pom.xml +++ b/pom.xml @@ -310,7 +310,7 @@ - ${japicmp.oldVersion.file} + /tmp/baseline.jar From 496d2b6e46f672b54c3116d0c42bc9215546bed8 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Wed, 13 May 2026 12:39:35 +0200 Subject: [PATCH 12/18] debug step added --- .github/workflows/spec-update.yaml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index eee14c7b3..3eea2d956 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -250,6 +250,21 @@ jobs: echo "generation_result=failure" >> "$GITHUB_OUTPUT" fi + - name: 'Debug japicmp configuration' + if: > + steps.spec_diff.outputs.spec_diff == 'true' && + steps.generate.outputs.generation_result == 'success' + env: + MODULE_PATH: ${{ steps.download.outputs.module_path }} + run: | + echo "=== Does baseline.jar exist? ===" + ls -la /tmp/baseline.jar + + echo "" + echo "=== Effective POM japicmp section for $MODULE_PATH ===" + mvn help:effective-pom -pl "$MODULE_PATH" ${{ env.MVN_MULTI_THREADED_ARGS }} \ + | sed -n '/japicmp-maven-plugin/,/<\/plugin>/p' + - name: 'API compatibility check' id: api_compat if: > From c9b78b913ca93c36f51c7f18437af070f2dc1b30 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Wed, 13 May 2026 13:53:59 +0200 Subject: [PATCH 13/18] remove -f flag in building baseline --- .github/workflows/spec-update.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index 3eea2d956..347bece8d 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -233,12 +233,12 @@ jobs: mkdir -p /tmp/main-baseline git archive origin/main | tar -x -C /tmp/main-baseline - # Build the baseline JAR (only the affected module + its dependencies) - mvn package -DskipTests -pl "$MODULE_PATH" -am \ - -f /tmp/main-baseline/pom.xml ${{ env.MVN_MULTI_THREADED_ARGS }} + # Build from within the baseline directory to avoid -f path resolution issues + cd /tmp/main-baseline + mvn package -DskipTests -pl "$MODULE_PATH" -am ${{ env.MVN_MULTI_THREADED_ARGS }} # Copy the baseline JAR to a known location for japicmp - cp /tmp/main-baseline/$MODULE_PATH/target/*.jar /tmp/baseline.jar + cp "$MODULE_PATH/target/"*.jar /tmp/baseline.jar - name: 'Generate' id: generate From be982d9a902cc7ff91d975c7d690f51c7f705407 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Wed, 13 May 2026 14:26:48 +0200 Subject: [PATCH 14/18] amp up debugging --- .github/workflows/spec-update.yaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index 347bece8d..f32886485 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -261,9 +261,19 @@ jobs: ls -la /tmp/baseline.jar echo "" - echo "=== Effective POM japicmp section for $MODULE_PATH ===" - mvn help:effective-pom -pl "$MODULE_PATH" ${{ env.MVN_MULTI_THREADED_ARGS }} \ - | sed -n '/japicmp-maven-plugin/,/<\/plugin>/p' + echo "=== Effective POM for $MODULE_PATH ===" + mvn help:effective-pom -pl "$MODULE_PATH" -Doutput=/tmp/effective-pom.xml ${{ env.MVN_MULTI_THREADED_ARGS }} + + echo "--- grep japicmp ---" + grep -A 30 "japicmp" /tmp/effective-pom.xml || echo "NOT FOUND: japicmp" + + echo "" + echo "--- grep oldVersion ---" + grep -B 2 -A 5 "oldVersion" /tmp/effective-pom.xml || echo "NOT FOUND: oldVersion" + + echo "" + echo "--- grep baseline ---" + grep "baseline" /tmp/effective-pom.xml || echo "NOT FOUND: baseline" - name: 'API compatibility check' id: api_compat From 2af110406f361906247497a629d460f7990fab49 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Wed, 13 May 2026 15:44:00 +0200 Subject: [PATCH 15/18] amp up to 50x debug --- .github/workflows/spec-update.yaml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index f32886485..b2d0aa543 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -262,18 +262,16 @@ jobs: echo "" echo "=== Effective POM for $MODULE_PATH ===" - mvn help:effective-pom -pl "$MODULE_PATH" -Doutput=/tmp/effective-pom.xml ${{ env.MVN_MULTI_THREADED_ARGS }} - - echo "--- grep japicmp ---" - grep -A 30 "japicmp" /tmp/effective-pom.xml || echo "NOT FOUND: japicmp" + mvn help:effective-pom -pl "$MODULE_PATH" -Doutput=/tmp/effective-pom.xml --batch-mode --no-transfer-progress echo "" - echo "--- grep oldVersion ---" - grep -B 2 -A 5 "oldVersion" /tmp/effective-pom.xml || echo "NOT FOUND: oldVersion" + echo "=== File stats ===" + wc -l /tmp/effective-pom.xml + grep -c "" /tmp/effective-pom.xml || echo "No tags found" echo "" - echo "--- grep baseline ---" - grep "baseline" /tmp/effective-pom.xml || echo "NOT FOUND: baseline" + echo "=== Full effective POM content (last 200 lines) ===" + tail -200 /tmp/effective-pom.xml - name: 'API compatibility check' id: api_compat From 21c005610d5126ae4860ecd1e19439896d998660 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Wed, 13 May 2026 16:36:11 +0200 Subject: [PATCH 16/18] Make jar creation robusst --- .github/workflows/spec-update.yaml | 39 ++++++++++++------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index b2d0aa543..d22d55552 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -238,7 +238,21 @@ jobs: mvn package -DskipTests -pl "$MODULE_PATH" -am ${{ env.MVN_MULTI_THREADED_ARGS }} # Copy the baseline JAR to a known location for japicmp - cp "$MODULE_PATH/target/"*.jar /tmp/baseline.jar + FINAL_NAME=$(mvn -pl "$MODULE_PATH" help:evaluate -Dexpression=project.build.finalName -q -DforceStdout) + if [ -z "$FINAL_NAME" ] || [[ "$FINAL_NAME" == *'${'* ]]; then + echo "::error::Failed to resolve project.build.finalName (got: '$FINAL_NAME')" + exit 1 + fi + + BASELINE_JAR="$MODULE_PATH/target/${FINAL_NAME}.jar" + if [ ! -f "$BASELINE_JAR" ]; then + echo "::error::Baseline JAR not found: $BASELINE_JAR" + ls -la "$MODULE_PATH/target/" || true + exit 1 + fi + + cp "$BASELINE_JAR" /tmp/baseline.jar + echo "Baseline JAR ready: $(ls -lh /tmp/baseline.jar)" - name: 'Generate' id: generate @@ -250,29 +264,6 @@ jobs: echo "generation_result=failure" >> "$GITHUB_OUTPUT" fi - - name: 'Debug japicmp configuration' - if: > - steps.spec_diff.outputs.spec_diff == 'true' && - steps.generate.outputs.generation_result == 'success' - env: - MODULE_PATH: ${{ steps.download.outputs.module_path }} - run: | - echo "=== Does baseline.jar exist? ===" - ls -la /tmp/baseline.jar - - echo "" - echo "=== Effective POM for $MODULE_PATH ===" - mvn help:effective-pom -pl "$MODULE_PATH" -Doutput=/tmp/effective-pom.xml --batch-mode --no-transfer-progress - - echo "" - echo "=== File stats ===" - wc -l /tmp/effective-pom.xml - grep -c "" /tmp/effective-pom.xml || echo "No tags found" - - echo "" - echo "=== Full effective POM content (last 200 lines) ===" - tail -200 /tmp/effective-pom.xml - - name: 'API compatibility check' id: api_compat if: > From dfa71a42bd6d6268e543677fabd3ec030cb0d5bf Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Wed, 13 May 2026 16:56:14 +0200 Subject: [PATCH 17/18] simplify workflow --- .github/workflows/spec-update.yaml | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index d22d55552..5f402a8bd 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -233,25 +233,12 @@ jobs: mkdir -p /tmp/main-baseline git archive origin/main | tar -x -C /tmp/main-baseline - # Build from within the baseline directory to avoid -f path resolution issues + # Build from within the baseline directory cd /tmp/main-baseline mvn package -DskipTests -pl "$MODULE_PATH" -am ${{ env.MVN_MULTI_THREADED_ARGS }} - # Copy the baseline JAR to a known location for japicmp - FINAL_NAME=$(mvn -pl "$MODULE_PATH" help:evaluate -Dexpression=project.build.finalName -q -DforceStdout) - if [ -z "$FINAL_NAME" ] || [[ "$FINAL_NAME" == *'${'* ]]; then - echo "::error::Failed to resolve project.build.finalName (got: '$FINAL_NAME')" - exit 1 - fi - - BASELINE_JAR="$MODULE_PATH/target/${FINAL_NAME}.jar" - if [ ! -f "$BASELINE_JAR" ]; then - echo "::error::Baseline JAR not found: $BASELINE_JAR" - ls -la "$MODULE_PATH/target/" || true - exit 1 - fi - - cp "$BASELINE_JAR" /tmp/baseline.jar + # Copy the baseline JAR to a known location + cp /tmp/main-baseline/$MODULE_PATH/target/*.jar /tmp/baseline.jar echo "Baseline JAR ready: $(ls -lh /tmp/baseline.jar)" - name: 'Generate' @@ -273,7 +260,7 @@ jobs: MODULE_PATH: ${{ steps.download.outputs.module_path }} run: | # Run japicmp: compare baseline (main) JAR vs newly generated JAR - if mvn com.github.siom79.japicmp:japicmp-maven-plugin:cmp -pl "$MODULE_PATH" \ + if mvn japicmp:cmp -pl "$MODULE_PATH" \ ${{ env.MVN_MULTI_THREADED_ARGS }} ; then echo "api_compat_result=compatible" >> "$GITHUB_OUTPUT" else From 2d0cf6d6bed357eaae68627835eb4d3009bf4f13 Mon Sep 17 00:00:00 2001 From: Roshin Rajan Panackal Date: Wed, 13 May 2026 17:20:51 +0200 Subject: [PATCH 18/18] Another one of endless trials --- .github/workflows/spec-update.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/spec-update.yaml b/.github/workflows/spec-update.yaml index 5f402a8bd..81c7312fa 100644 --- a/.github/workflows/spec-update.yaml +++ b/.github/workflows/spec-update.yaml @@ -259,8 +259,12 @@ jobs: env: MODULE_PATH: ${{ steps.download.outputs.module_path }} run: | + # Debug: output effective POM to verify japicmp configuration + mvn help:effective-pom -pl "$MODULE_PATH" -Doutput=/tmp/effective-pom.xml ${{ env.MVN_MULTI_THREADED_ARGS }} + cat /tmp/effective-pom.xml + # Run japicmp: compare baseline (main) JAR vs newly generated JAR - if mvn japicmp:cmp -pl "$MODULE_PATH" \ + if mvn com.github.siom79.japicmp:japicmp-maven-plugin:cmp -pl "$MODULE_PATH" \ ${{ env.MVN_MULTI_THREADED_ARGS }} ; then echo "api_compat_result=compatible" >> "$GITHUB_OUTPUT" else