Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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");
}
}
2 changes: 2 additions & 0 deletions languages/golang/.openapi-generator-ignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@ git_push.sh
.travis.yml
.gitignore
api/openapi.yaml
*_region_id_parameter.go
*_region_parameter.go
13 changes: 10 additions & 3 deletions scripts/generate-sdk/languages/go.sh
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,12 @@ generate_go_sdk() {
# see https://openapi-generator.tech/docs/file-post-processing/
export GO_POST_PROCESS_FILE="gofmt -w"

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

warning=""

for service_dir in "${ROOT_DIR}/oas/services"/*; do
Expand Down Expand Up @@ -161,8 +167,9 @@ generate_go_sdk() {
cp "${ROOT_DIR}/languages/golang/.openapi-generator-ignore" "${SERVICES_FOLDER}/${service}/${version}api/.openapi-generator-ignore"

# 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 +178,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