From 9c200c631a6c1475c92130c032d14051fc9ae621 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Mon, 19 Jan 2026 16:18:11 +0530 Subject: [PATCH 1/6] Add documentation badge --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 131ec045..c134d8d9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Health and Wellness Centre (HWC) API Module -[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) ![branch parameter](https://github.com/PSMRI/HWC-API/actions/workflows/sast-and-package.yml/badge.svg) +[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![DeepWiki](https://img.shields.io/badge/DeepWiki-PSMRI%2FHWC--API-blue)](https://deepwiki.com/PSMRI/HWC-API) + Health and Wellness centre (HWC) is one of the comprehensive applications of AMRIT designed to capture details of 7 Service packages as per guidelines which should be available at Health and Wellness centre. From 516e69c39a360994797f89541261679dcef74215 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Wed, 4 Feb 2026 17:18:11 +0530 Subject: [PATCH 2/6] chore(swagger): automate swagger sync to amrit-docs --- .github/workflows/swagger-json.yml | 89 +++++++++++++++++++ pom.xml | 5 ++ .../resources/application-swagger.properties | 64 +++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 .github/workflows/swagger-json.yml create mode 100644 src/main/resources/application-swagger.properties diff --git a/.github/workflows/swagger-json.yml b/.github/workflows/swagger-json.yml new file mode 100644 index 00000000..e4c6689e --- /dev/null +++ b/.github/workflows/swagger-json.yml @@ -0,0 +1,89 @@ +name: Sync Swagger to AMRIT-Docs + +on: + push: + branches: [ main ] + workflow_dispatch: + +jobs: + swagger-sync: + runs-on: ubuntu-latest + timeout-minutes: 20 + + steps: + - name: Checkout API repo + uses: actions/checkout@v4 + + - name: Set up Java 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 17 + cache: maven + + - name: Build API (skip tests) + run: mvn clean package -DskipTests + + - name: Install jq + run: sudo apt-get update && sudo apt-get install -y jq + + - name: Run API in swagger profile + run: | + mvn spring-boot:run \ + -Dspring-boot.run.profiles=swagger \ + -Dspring-boot.run.arguments=--server.port=9090 \ + > app.log 2>&1 & + echo $! > api_pid.txt + + - name: Wait for API & fetch Swagger + run: | + for i in {1..30}; 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 > hwc-api.json; then + echo "Swagger generated successfully" + exit 0 + else + echo "Failed to parse swagger_raw.json with jq" + exit 1 + fi + fi + echo "Waiting for API... ($i)" + sleep 5 + done + + echo "Swagger not generated" + cat app.log || true + exit 1 + + - name: Stop API + if: always() + run: | + if [ -f api_pid.txt ]; then + kill $(cat api_pid.txt) || true + fi + + - name: Checkout AMRIT-Docs + uses: actions/checkout@v4 + with: + repository: PSMRI/AMRIT-Docs + token: ${{ secrets.DOCS_REPO_TOKEN }} + path: amrit-docs + + - name: Copy Swagger JSON + run: | + mkdir -p amrit-docs/docs/swagger + cp hwc-api.json amrit-docs/docs/swagger/hwc-api.json + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v6 + with: + token: ${{ secrets.DOCS_REPO_TOKEN }} + path: amrit-docs + branch: auto/swagger-update-${{ github.run_id }} + base: main + commit-message: Auto-update HWC-API swagger + title: Auto-update HWC-API swagger + body: | + This PR automatically updates the HWC-API Swagger JSON + from the latest main branch build. diff --git a/pom.xml b/pom.xml index 1bdf705e..8a0ed27b 100644 --- a/pom.xml +++ b/pom.xml @@ -297,6 +297,11 @@ 0.12.6 runtime + + com.h2database + h2 + runtime + diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties new file mode 100644 index 00000000..779749cd --- /dev/null +++ b/src/main/resources/application-swagger.properties @@ -0,0 +1,64 @@ +registrationUrl=http://localhost:8080/registration +syncSearchByLocation=http://localhost:8080/syncSearchByLocation +getBenCountToSync=10 +snomedCTPageSize=100 +tcSpecialistSlotCancel=cancel +sendSMSUrl=http://localhost:8080/sendSMS +schedule=schedule +prescription=prescription +cancel=cancel +reSchedule=reSchedule +servicePointID=1 +parkingPlaceID=1 +providerServiceMapID=1 +vanID=1 +serviceID=1 +providerID=1 +appId=1 +authKey=dummyAuthKey +authSecret=dummyAuthSecret +scheduling-slotsize=15 +registrarQuickSearchByIdUrl=http://localhost:8080/registrarQuickSearchById +registrarQuickSearchByPhoneNoUrl=http://localhost:8080/registrarQuickSearchByPhoneNo +beneficiaryEditUrl=http://localhost:8080/beneficiaryEdit +registrarAdvanceSearchUrl=http://localhost:8080/registrarAdvanceSearch +foetalMonitorFilePath=/tmp/foetalmonitor +foetalMonitorAPIKey=dummyAPIKey +tcSpecialistSlotBook=book +docWL=7 +tcSpeclistWL=7 +labWL=7 +radioWL=7 +oncoWL=7 +TMReferredWL=7 +dataSyncDownloadUrl=http://localhost:8080/dataSyncDownload +dataSyncUploadUrl=http://localhost:8080/dataSyncUpload +getBenImageFromIdentity=http://localhost:8080/getBenImageFromIdentity +carestreamOrderCreateURL=http://localhost:8080/carestreamOrderCreate +saveCovidVaccineDetailsURL=http://localhost:8080/saveCovidVaccineDetails +# Default for pharmaWL to prevent bean creation errors in swagger profile +pharmaWL=7 +# Default for nurseTCWL to prevent bean creation errors in swagger profile +nurseTCWL=7 +# Default for openkmDocUrl to prevent bean creation errors in swagger profile +openkmDocUrl=http://localhost:8080/openkm/mock +# Default for nurseWL to prevent bean creation errors in swagger profile +nurseWL=7 +spring.datasource.url=jdbc:h2:mem:swaggerdb +spring.datasource.driver-class-name=org.h2.Driver +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.jpa.hibernate.ddl-auto=create-drop + +# Disable Redis if not needed for docs (optional) +spring.redis.host=localhost +spring.redis.port=6379 + +# CORS for Swagger UI +cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:9090,http://localhost:8080} + +jwt.secret=JWT_SECRET +# Logging +logging.level.root=INFO + +# Use environment variable for JWT secret +jwt.secret=${JWT_SECRET_KEY:default-swagger-secret-change-me} From adc7ab2a2772b691266d4346142602dc11fcbab8 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Wed, 4 Feb 2026 17:25:58 +0530 Subject: [PATCH 3/6] chore(swagger): automate swagger sync to amrit-docs --- src/main/resources/application-swagger.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties index 779749cd..a9e48919 100644 --- a/src/main/resources/application-swagger.properties +++ b/src/main/resources/application-swagger.properties @@ -56,7 +56,7 @@ spring.redis.port=6379 # CORS for Swagger UI cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:9090,http://localhost:8080} -jwt.secret=JWT_SECRET +jwt.secret=${JWT_SECRET_KEY:default-swagger-secret-change-me} # Logging logging.level.root=INFO From 28caf247c7fba8db413eda0380535f9b3732d4a2 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Wed, 4 Feb 2026 17:41:27 +0530 Subject: [PATCH 4/6] chore(swagger): automate swagger sync to amrit-docs --- src/main/resources/application-swagger.properties | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties index a9e48919..5c2aff5b 100644 --- a/src/main/resources/application-swagger.properties +++ b/src/main/resources/application-swagger.properties @@ -60,5 +60,3 @@ jwt.secret=${JWT_SECRET_KEY:default-swagger-secret-change-me} # Logging logging.level.root=INFO -# Use environment variable for JWT secret -jwt.secret=${JWT_SECRET_KEY:default-swagger-secret-change-me} From e6e960843988bd372005fe8fd5a40b6dfa4133b6 Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Wed, 4 Feb 2026 17:54:11 +0530 Subject: [PATCH 5/6] chore(swagger): automate swagger sync to amrit-docs --- src/main/resources/application-swagger.properties | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/resources/application-swagger.properties b/src/main/resources/application-swagger.properties index 5c2aff5b..7c5c61de 100644 --- a/src/main/resources/application-swagger.properties +++ b/src/main/resources/application-swagger.properties @@ -15,15 +15,15 @@ vanID=1 serviceID=1 providerID=1 appId=1 -authKey=dummyAuthKey -authSecret=dummyAuthSecret +authKey=${AUTH_KEY:default-auth-key} +authSecret=${AUTH_SECRET:default-auth-secret} scheduling-slotsize=15 registrarQuickSearchByIdUrl=http://localhost:8080/registrarQuickSearchById registrarQuickSearchByPhoneNoUrl=http://localhost:8080/registrarQuickSearchByPhoneNo beneficiaryEditUrl=http://localhost:8080/beneficiaryEdit registrarAdvanceSearchUrl=http://localhost:8080/registrarAdvanceSearch foetalMonitorFilePath=/tmp/foetalmonitor -foetalMonitorAPIKey=dummyAPIKey +foetalMonitorAPIKey=${FOETAL_MONITOR_API_KEY:default-api-key} tcSpecialistSlotBook=book docWL=7 tcSpeclistWL=7 @@ -52,7 +52,6 @@ spring.jpa.hibernate.ddl-auto=create-drop # Disable Redis if not needed for docs (optional) spring.redis.host=localhost spring.redis.port=6379 - # CORS for Swagger UI cors.allowed-origins=${CORS_ALLOWED_ORIGINS:http://localhost:9090,http://localhost:8080} From a56fec2e49da52d4b613504de04560597dbfe9cb Mon Sep 17 00:00:00 2001 From: DurgaPrasad-54 Date: Wed, 11 Feb 2026 09:56:03 +0530 Subject: [PATCH 6/6] chore(swagger): update swagger workflow --- .github/workflows/swagger-json.yml | 56 ++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/.github/workflows/swagger-json.yml b/.github/workflows/swagger-json.yml index e4c6689e..e185562c 100644 --- a/.github/workflows/swagger-json.yml +++ b/.github/workflows/swagger-json.yml @@ -22,34 +22,42 @@ 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 - name: Run API in swagger profile run: | - mvn spring-boot:run \ - -Dspring-boot.run.profiles=swagger \ - -Dspring-boot.run.arguments=--server.port=9090 \ + nohup java -jar target/hwc-api-*.war \ + --spring.profiles.active=swagger \ + --server.port=9090 \ > app.log 2>&1 & echo $! > api_pid.txt - 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 > hwc-api.json; then - echo "Swagger generated successfully" - exit 0 - else - echo "Failed to parse swagger_raw.json with jq" + jq . swagger_raw.json > hwc-api.json || { + echo "Swagger JSON invalid" + cat swagger_raw.json + exit 1 + } + + if [ "$(jq '.paths | length' hwc-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" @@ -59,9 +67,17 @@ 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 @@ -69,6 +85,7 @@ jobs: repository: PSMRI/AMRIT-Docs token: ${{ secrets.DOCS_REPO_TOKEN }} path: amrit-docs + fetch-depth: 0 - name: Copy Swagger JSON run: | @@ -76,14 +93,15 @@ jobs: cp hwc-api.json amrit-docs/docs/swagger/hwc-api.json - 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-${{ github.run_id }}-${{ github.run_attempt }} base: main - commit-message: Auto-update HWC-API swagger - title: Auto-update HWC-API swagger + commit-message: "chore(docs): auto-update HWC-API swagger" + title: "chore(docs): auto-update HWC-API swagger" + delete-branch: true body: | - This PR automatically updates the HWC-API Swagger JSON + This PR automatically updates HWC-API Swagger JSON from the latest main branch build.