Skip to content

Commit 3f8ff6b

Browse files
committed
feat: add java generator
1 parent 8e4a5fe commit 3f8ff6b

File tree

5 files changed

+194
-1
lines changed

5 files changed

+194
-1
lines changed

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,11 @@ download-oas:
1717
generate-sdk:
1818
@$(SCRIPTS_BASE)/generate-sdk/generate-sdk.sh "$(GIT_HOST)" "$(GIT_USER_ID)" "$(GIT_REPO_ID)" "$(SDK_REPO_URL)" "$(LANGUAGE)" "$(SDK_BRANCH)"
1919

20+
generate-go-sdk: LANGUAGE=go
21+
generate-go-sdk: generate-sdk
22+
23+
generate-python-sdk: LANGUAGE=python
24+
generate-python-sdk: generate-sdk
25+
26+
generate-java-sdk: LANGUAGE=java
27+
generate-java-sdk: generate-sdk

openapi-generator-config-java.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
artifactUrl: https://github.com/stackitcloud/stackit-sdk-java
2+
developerName: STACKIT Developer Tools
3+
developerEmail: [email protected]
4+
developerOrganization: STACKIT
5+
developerOrganizationUrl: https://www.stackit.de
6+
groupId: cloud.stackit
7+
hideGenerationTimestamp: true
8+
licenseName: Apache License 2.0
9+
licenseUrl: http://www.apache.org/licenses/
10+
scmConnection: scm:[email protected]:stackitcloud/stackit-sdk-java.git
11+
scmDeveloperConnection: scm:[email protected]:stackitcloud/stackit-sdk-java.git
12+
scmUrl: https://github.com/stackitcloud/stackit-sdk-java
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
git_push.sh
2+
.travis.yml
3+
.gitignore
4+
api/openapi.yaml
5+
tox.ini
6+
**/.github/**

scripts/generate-sdk/generate-sdk.sh

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ go)
5757
GENERATOR_VERSION="v6.6.0" # There are issues with GO SDK generation in version v7
5858
;;
5959
python)
60+
# Renovate: datasource=github-tags depName=OpenAPITools/openapi-generator versioning=semver
61+
GENERATOR_VERSION="v7.14.0"
62+
;;
63+
java)
6064
# Renovate: datasource=github-tags depName=OpenAPITools/openapi-generator versioning=semver
6165
GENERATOR_VERSION="v7.14.0"
6266
;;
@@ -74,7 +78,7 @@ if [ -e ${jar_path} ] && [ $(java -jar ${jar_path} version) == ${GENERATOR_VERSI
7478
else
7579
echo "Downloading OpenAPI generator (version ${GENERATOR_VERSION})..."
7680
mkdir -p ${GENERATOR_PATH}
77-
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/${GENERATOR_VERSION_NUMBER}/openapi-generator-cli-${GENERATOR_VERSION_NUMBER}.jar -O ${jar_path} --quiet
81+
wget https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/${GENERATOR_VERSION_NUMBER}/openapi-generator-cli-${GENERATOR_VERSION_NUMBER}.jar -O ${jar_path} --quiet --no-check-certificate
7882
echo "Download done."
7983
fi
8084

@@ -94,6 +98,13 @@ python)
9498
# Usage: generate_python_sdk GENERATOR_PATH GIT_HOST GIT_USER_ID [GIT_REPO_ID] [SDK_REPO_URL] [SDK_BRANCH]
9599
generate_python_sdk "${jar_path}" "${GIT_HOST}" "${GIT_USER_ID}" "${GIT_REPO_ID}" "${SDK_REPO_URL}" "${SDK_BRANCH}"
96100
;;
101+
java)
102+
echo -e "\n>> Generating the Java SDK..."
103+
104+
source ${LANGUAGE_GENERATORS_FOLDER_PATH}/${LANGUAGE}.sh
105+
# Usage: generate_java_sdk GENERATOR_PATH GIT_HOST GIT_USER_ID [GIT_REPO_ID] [SDK_REPO_URL] [SDK_BRANCH]
106+
generate_java_sdk "${jar_path}" "${GIT_HOST}" "${GIT_USER_ID}" "${GIT_REPO_ID}" "${SDK_REPO_URL}" "${SDK_BRANCH}"
107+
;;
97108
*)
98109
echo "! SDK language not supported."
99110
exit 1
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
#!/bin/bash
2+
# This script clones the SDK repo and updates it with the generated API modules
3+
# Pre-requisites: Java
4+
set -eo pipefail
5+
6+
ROOT_DIR=$(git rev-parse --show-toplevel)
7+
SDK_REPO_LOCAL_PATH="${ROOT_DIR}/sdk-repo-updated"
8+
9+
SERVICES_FOLDER="${SDK_REPO_LOCAL_PATH}/services"
10+
11+
GENERATOR_LOG_LEVEL="error" # Must be a Java log level (error, warn, info...)
12+
13+
INCLUDE_SERVICES=("resourcemanager")
14+
15+
generate_java_sdk() {
16+
# Required parameters
17+
local GENERATOR_JAR_PATH=$1
18+
local GIT_HOST=$2
19+
local GIT_USER_ID=$3
20+
21+
# Optional parameters
22+
local GIT_REPO_ID=$4
23+
local SDK_REPO_URL=$5
24+
local SDK_BRANCH=$6
25+
26+
# Check required parameters
27+
if [[ -z ${GIT_HOST} ]]; then
28+
echo "! GIT_HOST not specified."
29+
exit 1
30+
fi
31+
32+
if [[ -z ${GIT_USER_ID} ]]; then
33+
echo "! GIT_USER_ID id not specified."
34+
exit 1
35+
fi
36+
37+
# Check optional parameters and set defaults if not provided
38+
if [[ -z ${GIT_REPO_ID} ]]; then
39+
echo "GIT_REPO_ID not specified, default will be used."
40+
GIT_REPO_ID="stackit-sdk-java"
41+
fi
42+
43+
if [[ -z ${SDK_REPO_URL} ]]; then
44+
echo "SDK_REPO_URL not specified, default will be used."
45+
SDK_REPO_URL="https://github.com/stackitcloud/stackit-sdk-java.git"
46+
fi
47+
48+
# Prepare folders
49+
if [[ ! -d $SERVICES_FOLDER ]]; then
50+
mkdir -p "$SERVICES_FOLDER"
51+
fi
52+
53+
# Clone SDK repo
54+
if [ -d ${SDK_REPO_LOCAL_PATH} ]; then
55+
echo "Old SDK repo clone was found, it will be removed."
56+
rm -rf ${SDK_REPO_LOCAL_PATH}
57+
fi
58+
git clone --quiet -b ${SDK_BRANCH} ${SDK_REPO_URL} ${SDK_REPO_LOCAL_PATH}
59+
60+
# Backup of the current state of the SDK services dir (services/)
61+
sdk_services_backup_dir=$(mktemp -d)
62+
if [[ ! ${sdk_services_backup_dir} || -d {sdk_services_backup_dir} ]]; then
63+
echo "! Unable to create temporary directory"
64+
exit 1
65+
fi
66+
cleanup() {
67+
rm -rf ${sdk_services_backup_dir}
68+
}
69+
cp -a "${SERVICES_FOLDER}/." ${sdk_services_backup_dir}
70+
71+
# Cleanup after we are done
72+
trap cleanup EXIT
73+
74+
# Remove old contents of services dir (services/)
75+
rm -rf ${SERVICES_FOLDER}
76+
77+
# Generate SDK for each service
78+
for service_json in ${ROOT_DIR}/oas/*.json; do
79+
service="${service_json##*/}"
80+
service="${service%.json}"
81+
82+
# Remove invalid characters to ensure a valid Go pkg name
83+
service="${service//-/}" # remove dashes
84+
service="${service// /}" # remove empty spaces
85+
service="${service//_/}" # remove underscores
86+
service=$(echo "${service}" | tr '[:upper:]' '[:lower:]') # convert upper case letters to lower case
87+
service=$(echo "${service}" | tr -d -c '[:alnum:]') # remove non-alphanumeric characters
88+
89+
if ! [[ ${INCLUDE_SERVICES[*]} =~ ${service} ]]; then
90+
echo "Skipping not included service ${service}"
91+
continue
92+
fi
93+
94+
if grep -E "^$service$" ${ROOT_DIR}/blacklist.txt; then
95+
echo "Skipping blacklisted service ${service}"
96+
continue
97+
fi
98+
99+
echo ">> Generating \"${service}\" service..."
100+
cd ${ROOT_DIR}
101+
102+
mkdir -p "${SERVICES_FOLDER}/${service}/"
103+
cp "${ROOT_DIR}/scripts/generate-sdk/.openapi-generator-ignore-java" "${SERVICES_FOLDER}/${service}/.openapi-generator-ignore"
104+
105+
SERVICE_DESCRIPTION=$(cat ${service_json} | jq .info.title --raw-output)
106+
107+
# Run the generator
108+
java -Dlog.level=${GENERATOR_LOG_LEVEL} -jar ${jar_path} generate \
109+
--generator-name java \
110+
--input-spec "${service_json}" \
111+
--output "${SERVICES_FOLDER}/${service}" \
112+
--git-host ${GIT_HOST} \
113+
--git-user-id ${GIT_USER_ID} \
114+
--git-repo-id ${GIT_REPO_ID} \
115+
--global-property apis,models,modelTests=false,modelDocs=false,apiDocs=false,apiTests=false,supportingFiles \
116+
--additional-properties=artifactId="stackit-${service}",artifactDescription="${SERVICE_DESCRIPTION}",invokerPackage="cloud.stackit.${service}",modelPackage="cloud.stackit.${service}.model",apiPackage="cloud.stackit.${service}.api" >/dev/null \
117+
--http-user-agent stackit-sdk-java/"${service}" \
118+
--config openapi-generator-config-java.yml
119+
120+
# Remove unnecessary files
121+
rm "${SERVICES_FOLDER}/${service}/.openapi-generator-ignore"
122+
rm -r "${SERVICES_FOLDER}/${service}/.openapi-generator/"
123+
rm "${SERVICES_FOLDER}/${service}/.github/workflows/maven.yml"
124+
125+
# If the service has a wait package files, move them inside the service folder
126+
if [ -d ${sdk_services_backup_dir}/${service}/src/main/java/cloud/stackit/${service}/wait ]; then
127+
echo "Found ${service} \"wait\" package"
128+
cp -r ${sdk_services_backup_dir}/${service}/src/main/java/cloud/stackit/${service}/wait ${SERVICES_FOLDER}/${service}/src/main/java/cloud/stackit/${service}/wait
129+
fi
130+
131+
# If the service has a README.md file, move them inside the service folder
132+
if [ -f ${sdk_services_backup_dir}/${service}/README.md ]; then
133+
echo "Found ${service} \"README.md\" file"
134+
cp -r ${sdk_services_backup_dir}/${service}/README.md ${SERVICES_FOLDER}/${service}/README.md
135+
fi
136+
137+
# If the service has a CHANGELOG file, move it inside the service folder
138+
if [ -f ${sdk_services_backup_dir}/${service}/CHANGELOG.md ]; then
139+
echo "Found ${service} \"CHANGELOG\" file"
140+
cp -r ${sdk_services_backup_dir}/${service}/CHANGELOG.md ${SERVICES_FOLDER}/${service}/CHANGELOG.md
141+
fi
142+
143+
# If the service has a LICENSE file, move it inside the service folder
144+
if [ -f ${sdk_services_backup_dir}/${service}/LICENSE.md ]; then
145+
echo "Found ${service} \"LICENSE\" file"
146+
cp -r ${sdk_services_backup_dir}/${service}/LICENSE.md ${SERVICES_FOLDER}/${service}/LICENSE.md
147+
fi
148+
149+
# If the service has a NOTICE file, move it inside the service folder
150+
if [ -f ${sdk_services_backup_dir}/${service}/NOTICE.txt ]; then
151+
echo "Found ${service} \"NOTICE\" file"
152+
cp -r ${sdk_services_backup_dir}/${service}/NOTICE.txt ${SERVICES_FOLDER}/${service}/NOTICE.txt
153+
fi
154+
155+
done
156+
}

0 commit comments

Comments
 (0)