Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
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.
26 changes: 18 additions & 8 deletions src/main/java/com/iemr/common/config/SwaggerConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
Expand All @@ -11,14 +12,23 @@

@Configuration
public class SwaggerConfig {

@Bean
public OpenAPI customOpenAPI() {
return new OpenAPI().info(new
Info().title("Common API").version("version").description("A microservice for the creation and management of beneficiaries."))
.addSecurityItem(new SecurityRequirement().addList("my security"))
.components(new Components().addSecuritySchemes("my security",
new SecurityScheme().name("my security").type(SecurityScheme.Type.HTTP).scheme("bearer")));
private static final String DEFAULT_SERVER_URL = "http://localhost:9090";

@Bean
public OpenAPI customOpenAPI(Environment env) {
String devUrl = env.getProperty("api.dev.url", DEFAULT_SERVER_URL);
String uatUrl = env.getProperty("api.uat.url", DEFAULT_SERVER_URL);
String demoUrl = env.getProperty("api.demo.url", DEFAULT_SERVER_URL);
return new OpenAPI()
.info(new Info().title("Common API").version("version").description("A microservice for the creation and management of beneficiaries."))
.addSecurityItem(new SecurityRequirement().addList("my security"))
.components(new Components().addSecuritySchemes("my security",
new SecurityScheme().name("my security").type(SecurityScheme.Type.HTTP).scheme("bearer")))
.servers(java.util.Arrays.asList(
new io.swagger.v3.oas.models.servers.Server().url(devUrl).description("Dev"),
new io.swagger.v3.oas.models.servers.Server().url(uatUrl).description("UAT"),
new io.swagger.v3.oas.models.servers.Server().url(demoUrl).description("Demo")
));
}

}
6 changes: 5 additions & 1 deletion src/main/resources/application-swagger.properties
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,8 @@ secondary.datasource.url=jdbc:h2:mem:reportingdb
secondary.datasource.driver-class-name=org.h2.Driver

springdoc.api-docs.enabled=true
springdoc.swagger-ui.enabled=true
springdoc.swagger-ui.enabled=true

api.dev.url=${API_DEV_URL:https://amritwprdev.piramalswasthya.org}
api.uat.url=${API_UAT_URL:https://uatamrit.piramalswasthya.org}
api.demo.url=${API_DEMO_URL:https://amritdemo.piramalswasthya.org}
Loading