Skip to content

Commit 95a4680

Browse files
committed
feat: actions updated
1 parent fa49a65 commit 95a4680

File tree

4 files changed

+3727
-4
lines changed

4 files changed

+3727
-4
lines changed

.github/workflows/generator.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ name: Generate Java SDK
55

66
on:
77
workflow_dispatch:
8-
release:
9-
types: [published]
108
push:
119
paths:
1210
- 'generator/**'
@@ -24,7 +22,7 @@ jobs:
2422
- name: Download OpenAPI spec from Permify repository
2523
run: |
2624
echo "Downloading latest OpenAPI specification from Permify repository..."
27-
curl -L -o generator/openapi.json https://raw.githubusercontent.com/Permify/permify/master/docs/api-reference/openapi.json
25+
curl -L -o generator/openapi.json https://raw.githubusercontent.com/Permify/permify/master/docs/api-reference/openapiv2/apidocs.swagger.json
2826
2927
- name: Check if OpenAPI spec has changed
3028
id: check_changes

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,5 @@ target
2121
build
2222
private-key.asc
2323
gradle.properties
24-
generator/
2524
_gradle.properties
2625
.openapi-generator

generator/generate-sdk.sh

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
6+
PROJECT_ROOT="${SCRIPT_DIR}/.."
7+
DEFAULT_OPENAPI_FILE="${SCRIPT_DIR}/openapi.json"
8+
DEFAULT_PACKAGE_NAME="co.permify.sdk"
9+
DEFAULT_CLIENT_NAME="PermifyClient"
10+
11+
usage() {
12+
echo "Usage: $0 [OPTIONS]"
13+
echo ""
14+
echo "Generate Java SDK from OpenAPI specification and update project directories"
15+
echo ""
16+
echo "Options:"
17+
echo " -i, --input FILE OpenAPI JSON file (default: ${DEFAULT_OPENAPI_FILE})"
18+
echo " -p, --package NAME Java package name (default: ${DEFAULT_PACKAGE_NAME})"
19+
echo " -c, --client NAME Client class name (default: ${DEFAULT_CLIENT_NAME})"
20+
echo " -h, --help Show this help message"
21+
echo ""
22+
echo "This script will update the following directories:"
23+
echo " - ../api"
24+
echo " - ../src"
25+
echo " - ../docs"
26+
echo ""
27+
echo "Examples:"
28+
echo " $0 # Use defaults"
29+
echo " $0 -i swagger.json # Custom input file"
30+
echo " $0 -p com.example.client # Custom package name"
31+
}
32+
33+
OPENAPI_FILE="${DEFAULT_OPENAPI_FILE}"
34+
PACKAGE_NAME="${DEFAULT_PACKAGE_NAME}"
35+
CLIENT_NAME="${DEFAULT_CLIENT_NAME}"
36+
37+
while [[ $# -gt 0 ]]; do
38+
case $1 in
39+
-i|--input)
40+
OPENAPI_FILE="$2"
41+
shift 2
42+
;;
43+
-p|--package)
44+
PACKAGE_NAME="$2"
45+
shift 2
46+
;;
47+
-c|--client)
48+
CLIENT_NAME="$2"
49+
shift 2
50+
;;
51+
-h|--help)
52+
usage
53+
exit 0
54+
;;
55+
*)
56+
echo "Unknown option: $1"
57+
usage
58+
exit 1
59+
;;
60+
esac
61+
done
62+
63+
if [[ ! -f "${OPENAPI_FILE}" ]]; then
64+
echo "Error: OpenAPI file '${OPENAPI_FILE}' not found"
65+
exit 1
66+
fi
67+
68+
if ! command -v docker &> /dev/null; then
69+
echo "Error: Docker is required but not installed"
70+
echo "Please install Docker: https://docs.docker.com/get-docker/"
71+
exit 1
72+
fi
73+
74+
TEMP_OUTPUT_DIR=$(mktemp -d)
75+
trap 'rm -rf "${TEMP_OUTPUT_DIR}"' EXIT
76+
77+
OPENAPI_ABSOLUTE_PATH=$(realpath "${OPENAPI_FILE}")
78+
79+
OPENAPI_VERSION=$(grep -o '"version": *"[^"]*"' "${OPENAPI_FILE}" | cut -d '"' -f 4)
80+
if [[ -z "${OPENAPI_VERSION}" ]]; then
81+
echo "Error: Could not extract version from OpenAPI file"
82+
exit 1
83+
fi
84+
85+
echo "Generating Java SDK..."
86+
echo " OpenAPI file: ${OPENAPI_ABSOLUTE_PATH}"
87+
echo " OpenAPI version: ${OPENAPI_VERSION}"
88+
echo " Package name: ${PACKAGE_NAME}"
89+
echo " Client name: ${CLIENT_NAME}"
90+
echo " Temp directory: ${TEMP_OUTPUT_DIR}"
91+
echo ""
92+
93+
docker run --rm \
94+
-v "${OPENAPI_ABSOLUTE_PATH}:/local/openapi.json:ro" \
95+
-v "${TEMP_OUTPUT_DIR}:/local/out" \
96+
openapitools/openapi-generator-cli:latest generate \
97+
-i /local/openapi.json \
98+
-g java \
99+
-o /local/out \
100+
--package-name="${PACKAGE_NAME}" \
101+
--api-package="${PACKAGE_NAME}.api" \
102+
--model-package="${PACKAGE_NAME}.model" \
103+
--invoker-package="${PACKAGE_NAME}.client" \
104+
--additional-properties=clientPackage="${PACKAGE_NAME}.client",clientName="${CLIENT_NAME}" \
105+
--additional-properties=useJakartaEe=true \
106+
--additional-properties=library=native \
107+
--additional-properties=dateLibrary=java8 \
108+
--additional-properties=java8=true \
109+
--additional-properties=hideGenerationTimestamp=true \
110+
--skip-validate-spec
111+
112+
if [[ $? -ne 0 ]]; then
113+
echo ""
114+
echo "❌ Failed to generate Java SDK"
115+
exit 1
116+
fi
117+
118+
echo "Updating project directories..."
119+
120+
API_DIR="${PROJECT_ROOT}/api"
121+
SRC_DIR="${PROJECT_ROOT}/src"
122+
DOCS_DIR="${PROJECT_ROOT}/docs"
123+
124+
if [[ -f "${TEMP_OUTPUT_DIR}/openapi.yaml" ]]; then
125+
echo " Updating ${API_DIR}/openapi.yaml"
126+
mkdir -p "${API_DIR}"
127+
cp "${TEMP_OUTPUT_DIR}/openapi.yaml" "${API_DIR}/openapi.yaml"
128+
fi
129+
130+
if [[ -d "${TEMP_OUTPUT_DIR}/src" ]]; then
131+
echo " Updating ${SRC_DIR}"
132+
rm -rf "${SRC_DIR}/main/java/${PACKAGE_NAME//./\/}"
133+
mkdir -p "${SRC_DIR}/main/java"
134+
cp -r "${TEMP_OUTPUT_DIR}/src/main/java/"* "${SRC_DIR}/main/java/"
135+
136+
if [[ -d "${TEMP_OUTPUT_DIR}/src/test" ]]; then
137+
rm -rf "${SRC_DIR}/test/java/${PACKAGE_NAME//./\/}"
138+
mkdir -p "${SRC_DIR}/test/java"
139+
cp -r "${TEMP_OUTPUT_DIR}/src/test/java/"* "${SRC_DIR}/test/java/"
140+
fi
141+
fi
142+
143+
if [[ -d "${TEMP_OUTPUT_DIR}/docs" ]]; then
144+
echo " Updating ${DOCS_DIR}"
145+
rm -rf "${DOCS_DIR}"/*.md
146+
mkdir -p "${DOCS_DIR}"
147+
cp "${TEMP_OUTPUT_DIR}/docs/"*.md "${DOCS_DIR}/"
148+
fi
149+
150+
# Strip 'v' prefix from version if present
151+
VERSION_WITHOUT_V="${OPENAPI_VERSION#v}"
152+
echo " Updating version in pom.xml to ${VERSION_WITHOUT_V}"
153+
POM_FILE="${PROJECT_ROOT}/pom.xml"
154+
if [[ -f "${POM_FILE}" ]]; then
155+
if command -v sed &> /dev/null; then
156+
if [[ "$OSTYPE" == "darwin"* ]]; then
157+
sed -i '' '/<name>Permify Java<\/name>/{n;s|<version>[^<]*</version>|<version>'"${VERSION_WITHOUT_V}"'</version>|;}' "${POM_FILE}"
158+
if [[ $? -eq 0 ]]; then
159+
echo " ✅ Updated pom.xml version to ${VERSION_WITHOUT_V}"
160+
else
161+
echo " ❌ Error: Failed to update pom.xml version"
162+
fi
163+
else
164+
sed -i '/<name>Permify Java<\/name>/{n;s|<version>[^<]*</version>|<version>'"${VERSION_WITHOUT_V}"'</version>|;}' "${POM_FILE}"
165+
if [[ $? -eq 0 ]]; then
166+
echo " ✅ Updated pom.xml version to ${VERSION_WITHOUT_V}"
167+
else
168+
echo " ❌ Error: Failed to update pom.xml version"
169+
fi
170+
fi
171+
else
172+
echo " ⚠️ Warning: sed not available, could not update pom.xml version"
173+
fi
174+
else
175+
echo " ⚠️ Warning: pom.xml not found at ${POM_FILE}"
176+
fi
177+
178+
echo ""
179+
echo "✅ Java SDK updated successfully!"
180+
echo "📁 Updated directories:"
181+
echo " - ${API_DIR}"
182+
echo " - ${SRC_DIR}"
183+
echo " - ${DOCS_DIR}"
184+
echo "📝 Updated version in pom.xml to ${OPENAPI_VERSION}"
185+
echo ""
186+
echo "Next steps:"
187+
echo "1. Build the SDK: ./gradlew build (or mvn compile if using Maven)"
188+
echo "2. Run tests: ./gradlew test (or mvn test if using Maven)"
189+
echo "3. Install to local repository: ./gradlew publishToMavenLocal (or mvn install)"

0 commit comments

Comments
 (0)