Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions .github/workflows/swagger-json.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: Sync Swagger to AMRIT-Docs

on:
push:
branches: [ main ]
workflow_dispatch:

jobs:
swagger-sync:
runs-on: ubuntu-latest

Comment thread
coderabbitai[bot] marked this conversation as resolved.
services:
redis:
image: redis:7
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 5s
--health-timeout 5s
--health-retries 5

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 --spring.redis.host=localhost" \
> 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 > helpline104-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: |
# Graceful shutdown of the process group
sleep 5
# Force kill the process group if still running
if [ -f api_pid.txt ]; then
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

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

- name: Create Pull Request
uses: peter-evans/create-pull-request@v8
with:
token: ${{ secrets.DOCS_REPO_TOKEN }}
path: amrit-docs
branch: auto/swagger-update-${{ github.run_id }}
base: main
commit-message: Auto-update Helpline104-API swagger
title: Auto-update Helpline104-API swagger
delete-branch: true
body: |
This PR automatically updates the Helpline104-API Swagger JSON
from the latest main branch build.
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,11 @@
<version>0.12.6</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>


</dependencies>
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/iemr/helpline104/config/RedisConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,14 @@ public RedisTemplate<String, M_User> redisTemplate(RedisConnectionFactory factor
return template;
}

// Add a generic RedisTemplate<String, Object> bean for TokenDenylist and other usages
@Bean(name = "genericRedisTemplate")
Comment thread
DurgaPrasad-54 marked this conversation as resolved.
Outdated
public RedisTemplate<String, Object> genericRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer());
return template;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class JwtAuthenticationUtil {
@Autowired
private JwtUtil jwtUtil;
@Autowired
private RedisTemplate<String, Object> redisTemplate;
private RedisTemplate<String, M_User> redisTemplate;
@Autowired
private IEMRUserRepositoryCustom iEMRUserRepositoryCustom;
private final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/com/iemr/helpline104/utils/TokenDenylist.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;
Expand All @@ -15,6 +16,7 @@ public class TokenDenylist {
private static final String PREFIX = "denied_";

@Autowired
@Qualifier("genericRedisTemplate")
private RedisTemplate<String, Object> redisTemplate;

private String getKey(String jti) {
Expand Down
20 changes: 20 additions & 0 deletions src/main/resources/application-swagger.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
spring.datasource.url=jdbc:h2:mem:swaggerdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=SA
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=none

# 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}
2 changes: 2 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ spring.session.store-type=redis
#spring.redis.host=localhost
spring.redis.password=
spring.redis.port=6379
spring.datasource.username=${DB_USERNAME:}
Comment thread
DurgaPrasad-54 marked this conversation as resolved.
Outdated
spring.datasource.password=${DB_PASSWORD:}
## Below values are needed for extending the expiry time and extend expiry time.
iemr.extend.expiry.time=true
iemr.session.expiry.time=7200
Expand Down
Loading