Skip to content

chore(swagger): automate swagger sync to amrit-docs (#127) #1

chore(swagger): automate swagger sync to amrit-docs (#127)

chore(swagger): automate swagger sync to amrit-docs (#127) #1

Workflow file for this run

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 -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: |
nohup java -jar target/tm-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..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
jq . swagger_raw.json > tm-api.json || {
echo "Swagger JSON invalid"
cat swagger_raw.json
exit 1
}
if [ "$(jq '.paths | length' tm-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 4
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
fetch-depth: 0
- name: Copy Swagger JSON
run: |
mkdir -p amrit-docs/docs/swagger
cp tm-api.json amrit-docs/docs/swagger/tm-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 }}-${{ github.run_attempt }}
base: main
commit-message: "chore(docs): auto-update TM-API swagger"
title: "chore(docs): auto-update TM-API swagger"
delete-branch: true
body: |
This PR automatically updates TM-API Swagger JSON
from the latest main branch build.