Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}

- name: Install project tools and dependencies
shell: bash
run: make project-tools
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
custom
# IDE
*.vscode/
*.idea
Expand Down
71 changes: 71 additions & 0 deletions CustomRegionGenerator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package cloud.stackit.codegen;

import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.languages.GoClientCodegen;

import org.openapitools.codegen.CodegenParameter;

import java.util.Set;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.parameters.Parameter;

public class CustomRegionGenerator extends GoClientCodegen {
Comment thread
marceljk marked this conversation as resolved.

@Override
public String getName() {
// This is the name you will pass to the -g flag
return "cloud.stackit.codegen.CustomRegionGenerator";
}

public CustomRegionGenerator() {
super();
System.out.println("=== CUSTOM GO CLIENT GENERATOR INITIALIZED ===");
}

@Override
public CodegenProperty fromProperty(String name, Schema p, boolean required) {
CodegenProperty property = super.fromProperty(name, p, required);

if (isRegionField(property.name)) {
property.dataType = "string";
property.datatypeWithEnum = "string";
property.baseType = "string";

// Force template engine to treat this as a string
property.isString = true;
property.isInteger = false;
property.isLong = false;
property.isNumber = false;
property.isNumeric = false;
}
return property;
}

/**
* Intercepts operation parameters (query, path, header, body).
*/
@Override
public CodegenParameter fromParameter(Parameter param, Set<String> imports) {
CodegenParameter parameter = super.fromParameter(param, imports);

if (isRegionField(parameter.paramName)) {
parameter.dataType = "string";

// Force template engine to treat this as a string
parameter.isString = true;
parameter.isInteger = false;
parameter.isLong = false;
parameter.isNumber = false;
// If it was previously an enum or another complex type, clear it
parameter.isEnum = false;
}
return parameter;
}

private boolean isRegionField(String name) {
if (name == null) {
return false;
}
return name.equalsIgnoreCase("region") || name.equalsIgnoreCase("regionId");
}
}
12 changes: 9 additions & 3 deletions scripts/generate-sdk/languages/go.sh
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,15 @@ generate_go_sdk() {
mkdir -p "${SERVICES_FOLDER}/${service}/${version}api"
cp "${ROOT_DIR}/languages/golang/.openapi-generator-ignore" "${SERVICES_FOLDER}/${service}/${version}api/.openapi-generator-ignore"

# compile custom generator
mkdir -p custom/cloud/stackit/codegen
javac -cp "${GENERATOR_JAR_PATH}" CustomRegionGenerator.java
mv CustomRegionGenerator.class custom/cloud/stackit/codegen/CustomRegionGenerator.class

Comment thread
marceljk marked this conversation as resolved.
Outdated
# Run the generator for Go
java -Dlog.level=${GENERATOR_LOG_LEVEL} -jar ${jar_path} generate \
--generator-name go \
java -Dlog.level=${GENERATOR_LOG_LEVEL} -cp "custom:scripts/bin/openapi-generator-cli.jar" \
org.openapitools.codegen.OpenAPIGenerator generate \
-g cloud.stackit.codegen.CustomRegionGenerator \
--input-spec "${service_version_json}" \
--output "${SERVICES_FOLDER}/${service}/${version}api" \
--package-name "${version}api" \
Expand All @@ -171,7 +177,7 @@ generate_go_sdk() {
--git-user-id "${GIT_USER_ID}" \
--git-repo-id "${GIT_REPO_ID}/services/${service}" \
--global-property apis,models,modelTests=true,modelDocs=false,apiDocs=false,supportingFiles,apiTests=false\
--inline-schema-options "SKIP_SCHEMA_REUSE=true" \
--inline-schema-options "SKIP_SCHEMA_REUSE=true,RESOLVE_INLINE_ENUMS=true" \
--http-user-agent "stackit-sdk-go/${service}" \
--reserved-words-mappings type=types \
--config "${ROOT_DIR}/languages/golang/openapi-generator-config.yml"
Expand Down
Loading