-
Notifications
You must be signed in to change notification settings - Fork 42
/
Copy pathgenerate_openapi_v2.sh
executable file
·204 lines (183 loc) · 5.66 KB
/
generate_openapi_v2.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#!/usr/bin/env bash
set -e
# Default values
REPO_URL="[email protected]:GetStream/chat.git"
REFERENCE_TYPE="branch"
REFERENCE_VALUE="feature/rahullohra/kotlin_open_api_generator"
API_SERVICE_CLASS_NAME="ApiService"
MODEL_PACKAGE="org.openapitools.autogenerated.client.models"
API_SERVICE_PACKAGE="org.openapitools.autogenerated.client.apis"
MODEL_DIR="models"
API_SERVICE_DIR="apis"
MOSHI_ADAPTER_DIR="infrastructure"
MOSHI_ADAPTER_PACKAGE="org.openapitools.autogenerated.client.infrastructure"
CLASSES_TO_SKIP="PrivacySettingsResponse,PrivacySettings"
KEEP_CLASSES="WSAuthMessageRequest.kt"
OUTPUT_CLIENT_PATH="./stream-video-android-core/src/main/kotlin/org/openapitools/client"
# Parse key-value arguments
for arg in "$@"; do
case $arg in
--repo-url=*)
REPO_URL="${arg#*=}"
shift
;;
--ref-type=*)
REFERENCE_TYPE="${arg#*=}"
shift
;;
--ref-value=*)
REFERENCE_VALUE="${arg#*=}"
shift
;;
--source-path=*)
SOURCE_PATH="${arg#*=}"
shift
;;
--output-spec=*)
OUTPUT_SPEC_PATH="${arg#*=}"
shift
;;
--output-client=*)
OUTPUT_CLIENT_PATH="${arg#*=}"
shift
;;
--model-package-name=*)
MODEL_PACKAGE="${arg#*=}"
shift
;;
--model-dir=*)
MODEL_DIR="${arg#*=}"
shift
;;
--api-service-dir=*)
API_SERVICE_DIR="${arg#*=}"
shift
;;
--api-service-package-name=*)
API_SERVICE_PACKAGE="${arg#*=}"
shift
;;
--api-service-class-name=*)
API_SERVICE_CLASS_NAME="${arg#*=}"
shift
;;
--moshi-adapters-dir=*)
MOSHI_ADAPTER_DIR="${arg#*=}"
shift
;;
--moshi-adapters-package-name=*)
MOSHI_ADAPTER_PACKAGE="${arg#*=}"
shift
;;
--classes-to-skip=*)
CLASSES_TO_SKIP="${arg#*=}"
shift
;;
--keep-classes=*)
KEEP_CLASSES="${arg#*=}"
shift
;;
*)
echo "❌ ERROR: Unknown argument: $arg"
exit 1
;;
esac
done
# Define working directories
PROJECT_ROOT="$(dirname "$(realpath "$0")")/"
BUILD_DIR="$PROJECT_ROOT/build"
CLONE_DIR="$BUILD_DIR/openapi-generator-repo"
PROGRAM_PATH="$CLONE_DIR/cmd/chat-manager"
SPEC_FILE="$CLONE_DIR/releases/video-openapi-clientside.yaml"
OUTPUT_DIR="$CLONE_DIR/output"
SOURCE_PATH=CLONE_DIR
OUTPUT_SPEC_PATH="$CLONE_DIR/releases/video-openapi-clientside"
OUTPUT_CLIENT_ABSOLUTE_PATH="$PROJECT_ROOT$OUTPUT_CLIENT_PATH"
# Set environment variables
export APP_CONFIG_FILE="configs/test.yaml"
#mkdir -p $OUTPUT_CLIENT_PATH //Create and delete files here TODO Rahul
# Step 1: Delete/Create directory, and keep classes
if [[ ! -d "$OUTPUT_CLIENT_PATH" ]]; then
echo "Error: Directory $OUTPUT_CLIENT_PATH does not exist."
# Function to create a directory if it doesn't exist
create_directory() {
local DIR_PATH=$OUTPUT_CLIENT_PATH
if [ -z $DIR_PATH ]; then
echo "Usage: create_directory <directory_path>"
return 1
fi
if [ ! -d "$DIR_PATH" ]; then
echo "Directory does not exist. Creating: $DIR_PATH"
mkdir -p $DIR_PATH
echo "Directory created successfully."
else
echo "Directory already exists: $DIR_PATH"
fi
}
create_directory $OUTPUT_CLIENT_PATH
else
# Function to check if a file should be kept
should_keep() {
local file_name=$(basename "$1")
for keep in "${KEEP_CLASSES[@]}"; do
echo "file_name = $file_name, keep = $keep"
if [[ "$file_name" == "$keep" ]]; then
return 0 # File should be kept
fi
done
return 1 # File should be deleted
}
# Iterate through files in the directory recursively
find "$OUTPUT_CLIENT_PATH" -type f | while read -r file; do
if ! should_keep "$file"; then
rm "$file"
echo "Deleted: $file"
else
echo "Kept: $file"
fi
done
# Remove empty directories
find "$OUTPUT_CLIENT_PATH" -type d -empty -delete
echo "🧹🧹Cleanup completed!"
fi
# Step 2: Clone the repository with shallow depth
echo "🚀 Cloning repository: $REPO_URL (Type: $REFERENCE_TYPE, Value: $REFERENCE_VALUE)..."
rm -rf "$CLONE_DIR"
git clone --depth=1 --branch "$REFERENCE_VALUE" "$REPO_URL" "$CLONE_DIR"
cd "$CLONE_DIR"
# Step 3: Checkout to the correct branch, tag, or commit
if [ "$REFERENCE_TYPE" == "branch" ]; then
git checkout "$REFERENCE_VALUE"
elif [ "$REFERENCE_TYPE" == "tag" ]; then
git checkout "tags/$REFERENCE_VALUE"
elif [ "$REFERENCE_TYPE" == "commit" ]; then
git checkout "$REFERENCE_VALUE"
else
echo "❌ ERROR: Invalid reference type '$REFERENCE_TYPE'. Use 'branch', 'tag', or 'commit'."
exit 1
fi
# Step 4: Run the Go program with OpenAPI arguments
echo "⚙️ Running OpenAPI Spec Generation..."
go run ./cmd/chat-manager openapi generate-spec \
-products video \
-version v1 \
-clientside \
-output "$OUTPUT_SPEC_PATH"
# Step 5: Generating Kt files
echo "⚙️ Running OpenAPI Client Generation..."
go run ./cmd/chat-manager openapi generate-client \
--language kotlin \
--spec "$OUTPUT_SPEC_PATH.yaml" \
--api-service-class-name "$API_SERVICE_CLASS_NAME" \
--api-service-package "$API_SERVICE_PACKAGE" \
--api-service-dir "$API_SERVICE_DIR" \
--model-package "$MODEL_PACKAGE" \
--model-dir "$MODEL_DIR" \
--moshi-adapters-dir "$MOSHI_ADAPTER_DIR" \
--moshi-adapters-package "$MOSHI_ADAPTER_PACKAGE" \
--classes-to-skip "$CLASSES_TO_SKIP" \
--output "$OUTPUT_CLIENT_ABSOLUTE_PATH"
echo "👉 Your autogenerated files are available under $OUTPUT_CLIENT_ABSOLUTE_PATH"
# Step 6: Delete files
#rm -rf "$CLONE_DIR"
echo "✅ OpenAPI Kotlin client generation completed successfully!"