Skip to content
52 changes: 36 additions & 16 deletions .github/workflows/swagger-json.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ jobs:
cache: maven

- name: Build API (skip tests)
run: mvn clean package -DskipTests

run: mvn -B clean package -DskipTests
- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq

Expand All @@ -37,19 +37,27 @@ jobs:

- name: Wait for API & fetch Swagger
run: |
for i in {1..30}; do
for i in {1..40}; do
CODE=$(curl --connect-timeout 2 --max-time 5 -s -o swagger_raw.json -w "%{http_code}" http://localhost:9090/v3/api-docs || true)

if [ "$CODE" = "200" ]; then
if jq . swagger_raw.json > common-api.json; then
echo "Swagger generated successfully"
exit 0
else
echo "Failed to parse swagger_raw.json with jq"
jq . swagger_raw.json > common-api.json || {
echo "Swagger JSON invalid"
cat swagger_raw.json
exit 1
}

if [ "$(jq '.paths | length' common-api.json)" -eq 0 ]; then
echo "Swagger paths empty – failing"
exit 1
fi

echo "Swagger generated successfully"
exit 0
fi

echo "Waiting for API... ($i)"
sleep 5
sleep 4
done

echo "Swagger not generated"
Expand All @@ -59,31 +67,43 @@ jobs:
- name: Stop API
if: always()
run: |
# Graceful shutdown of the process group
sleep 5
# Force kill the process group if still running
if [ -f api_pid.txt ]; then
kill $(cat api_pid.txt) || true
fi
PID=$(cat api_pid.txt)
kill -TERM -- -"$PID" 2>/dev/null || true
sleep 2
kill -9 -- -"$PID" 2>/dev/null || true
fi
# Fallback: kill any remaining java process on port 9090
fuser -k 9090/tcp 2>/dev/null || true

- name: Checkout AMRIT-Docs
uses: actions/checkout@v4
with:
repository: PSMRI/AMRIT-Docs
token: ${{ secrets.DOCS_REPO_TOKEN }}
path: amrit-docs
fetch-depth: 0

- name: Copy Swagger JSON
run: |
mkdir -p amrit-docs/docs/swagger
cp common-api.json amrit-docs/docs/swagger/common-api.json

# Use a fixed branch name for PRs to avoid accumulating stale PRs.
# This ensures only one open PR is updated per run; delete-branch: true cleans up after merge.
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.DOCS_REPO_TOKEN }}
path: amrit-docs
branch: auto/swagger-update-${{ github.run_id }}
branch: auto/swagger-update-common-api
base: main
commit-message: Auto-update Common-API swagger
title: Auto-update Common-API swagger
commit-message: "chore(docs): auto-update Common-API swagger"
title: "chore(docs): auto-update Common-API swagger"
delete-branch: true
body: |
This PR automatically updates the Common-API Swagger JSON
This PR automatically updates Common-API Swagger JSON
from the latest main branch build.
Loading