Skip to content

Commit 3a6ad7b

Browse files
docs(api): add OpenAPI specifications and service-level documentation
- Introduced OpenAPI (Swagger) annotations for course-service, user-service, and genai-service - Documented all major public endpoints including request/response schemas and error responses - Enabled live Swagger UI for all services for interactive API testing - Added service-specific README.md files with instructions for accessing and maintaining API docs - Updated genai-service `/chat` endpoint to include input/output schema in documentation Benefits: - Improves developer onboarding and API discoverability - Ensures consistent and versionable API definitions across services - Supports potential client SDK generation and external integration Closes #81
1 parent 7bee87d commit 3a6ad7b

File tree

65 files changed

+6104
-1813
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+6104
-1813
lines changed

.github/workflows/deploy_to_aws.yml

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,31 @@ on:
66
ec2_ip:
77
required: true
88
type: string
9+
OPENAI_MODEL:
10+
required: false
11+
type: string
12+
default: "gpt-4o-mini"
13+
LLM_PROVIDER:
14+
required: false
15+
type: string
16+
default: "openai"
917
secrets:
1018
AWS_EC2_PRIVATE_KEY:
1119
required: true
1220
MONGODB_URL:
1321
required: true
22+
MONGODB_DATABASE:
23+
required: true
1424
JWT_SECRET:
1525
required: true
1626
OPENAI_BASE_URL:
1727
required: true
1828
OPENAI_API_KEY:
1929
required: true
30+
GRAFANA_ADMIN_USER:
31+
required: true
32+
GRAFANA_ADMIN_PASSWORD:
33+
required: true
2034
permissions:
2135
contents: read
2236
packages: read
@@ -54,8 +68,9 @@ jobs:
5468
host: ${{ inputs.ec2_ip }}
5569
username: ${{ vars.AWS_EC2_USER }}
5670
key: ${{ secrets.AWS_EC2_PRIVATE_KEY }}
71+
# Copy and rename the compose file so that the follow-up command uses the expected filename
5772
source: "./compose.aws.yml"
58-
target: /home/${{ vars.AWS_EC2_USER }}
73+
target: /home/${{ vars.AWS_EC2_USER }}/docker-compose.prod.yml
5974

6075
- name: Get latest version (or use 1.0.0-beta as fallback)
6176
id: get_tag
@@ -83,25 +98,30 @@ jobs:
8398
echo "SPRING_PROFILES_ACTIVE=prod" >> .env
8499
85100
echo "MONGO_URL=${{ secrets.MONGODB_URL }}" >> .env
86-
echo "MONGODB_DATABASE=SkillForge" >> .env
101+
echo "MONGODB_DATABASE=${{ secrets.MONGODB_DATABASE }}" >> .env
87102
88103
echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> .env
89104
90-
echo "OPENAI_BASE_URL=${{ secrets.OPENAI_BASE_URL }}" >> .env
105+
# GenAI service expects OPENAI_API_BASE
106+
echo "OPENAI_API_BASE=${{ secrets.OPENAI_BASE_URL }}" >> .env
91107
echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> .env
92-
echo "OPENAI_MODEL=gpt-4o" >> .env
108+
echo "OPENAI_MODEL=${{ inputs.OPENAI_MODEL }}" >> .env
109+
echo "LLM_PROVIDER=${{ inputs.LLM_PROVIDER }}" >> .env
110+
93111
echo "UVICORN_WORKERS=${{ vars.UVICORN_WORKERS }}" >> .env
94112
95-
echo "VITE_PUBLIC_API_URL=https://api.${{ vars.EC2_PUBLIC_IP }}.nip.io/api" >> .env
96-
echo "CLIENT_HOST=client.${{ vars.EC2_PUBLIC_IP }}.nip.io" >> .env
97-
echo "SERVER_HOST=api.${{ vars.EC2_PUBLIC_IP }}.nip.io" >> .env
98-
echo "GENAI_HOST=api.genai.${{ vars.EC2_PUBLIC_IP }}.nip.io" >> .env
99-
echo "MAILHOG_HOST=mail.${{ vars.EC2_PUBLIC_IP }}.nip.io" >> .env
100-
echo "PROMETHEUS_HOST=prometheus.${{ vars.EC2_PUBLIC_IP }}.nip.io" >> .env
101-
echo "LOKI_HOST=loki.${{ vars.EC2_PUBLIC_IP }}.nip.io" >> .env
102-
echo "PROMTAIL_HOST=promtail.${{ vars.EC2_PUBLIC_IP }}.nip.io" >> .env
103-
echo "ALERTMANAGER_HOST=alertmanager.${{ vars.EC2_PUBLIC_IP }}.nip.io" >> .env
104-
echo "GRAFANA_HOST=grafana.${{ vars.EC2_PUBLIC_IP }}.nip.io" >> .env
113+
echo "VITE_PUBLIC_API_URL=https://api.${{ inputs.ec2_ip }}.nip.io/api" >> .env
114+
echo "CLIENT_HOST=client.${{ inputs.ec2_ip }}.nip.io" >> .env
115+
echo "SERVER_HOST=api.${{ inputs.ec2_ip }}.nip.io" >> .env
116+
echo "GENAI_HOST=api.genai.${{ inputs.ec2_ip }}.nip.io" >> .env
117+
echo "MAILHOG_HOST=mail.${{ inputs.ec2_ip }}.nip.io" >> .env
118+
echo "PROMETHEUS_HOST=prometheus.${{ inputs.ec2_ip }}.nip.io" >> .env
119+
echo "PROMTAIL_HOST=promtail.${{ inputs.ec2_ip }}.nip.io" >> .env
120+
echo "ALERTMANAGER_HOST=alertmanager.${{ inputs.ec2_ip }}.nip.io" >> .env
121+
echo "GRAFANA_HOST=grafana.${{ inputs.ec2_ip }}.nip.io" >> .env
122+
123+
echo "GRAFANA_ADMIN_USER=${{ secrets.GRAFANA_ADMIN_USER }}" >> .env
124+
echo "GRAFANA_ADMIN_PWD=${{ secrets.GRAFANA_ADMIN_PASSWORD }}" >> .env
105125
106126
chmod 600 .env
107127
echo ".env file created ✅"
@@ -129,16 +149,16 @@ jobs:
129149
- name: Echo all links
130150
run: |
131151
echo "Deployment complete! Access your services at:"
132-
echo "Client: https://client.${{ vars.EC2_PUBLIC_IP }}.nip.io"
133-
echo "API: https://api.${{ vars.EC2_PUBLIC_IP }}.nip.io"
134-
echo "GenAI: https://api.genai.${{ vars.EC2_PUBLIC_IP }}.nip.io"
135-
echo "Mailhog: https://mail.${{ vars.EC2_PUBLIC_IP }}.nip.io"
136-
echo "Prometheus: https://prometheus.${{ vars.EC2_PUBLIC_IP }}.nip.io"
137-
echo "Loki: https://loki.${{ vars.EC2_PUBLIC_IP }}.nip.io"
138-
echo "Promtail: https://promtail.${{ vars.EC2_PUBLIC_IP }}.nip.io"
139-
echo "Alertmanager: https://alertmanager.${{ vars.EC2_PUBLIC_IP }}.nip.io"
140-
echo "Grafana: https://grafana.${{ vars.EC2_PUBLIC_IP }}.nip.io"
141-
echo "Check the status of your services with:"
152+
echo "Client: https://client.${{ inputs.ec2_ip }}.nip.io"
153+
echo "API: https://api.${{ inputs.ec2_ip }}.nip.io"
154+
echo "GenAI: https://api.genai.${{ inputs.ec2_ip }}.nip.io"
155+
echo "Mailhog: https://mail.${{ inputs.ec2_ip }}.nip.io"
156+
echo "Prometheus: https://prometheus.${{ inputs.ec2_ip }}.nip.io"
157+
echo "Loki: https://loki.${{ inputs.ec2_ip }}.nip.io"
158+
echo "Promtail: https://promtail.${{ inputs.ec2_ip }}.nip.io"
159+
echo "Alertmanager: https://alertmanager.${{ inputs.ec2_ip }}.nip.io"
160+
echo "Grafana: https://grafana.${{ inputs.ec2_ip }}.nip.io"
161+
echo "Check the status of the services on the EC2 instance with:"
142162
echo "docker compose -f docker-compose.prod.yml ps"
143163
echo "View logs with:"
144164
echo "docker compose -f docker-compose.prod.yml logs --tail=40"

.github/workflows/provision_configure_deploy.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,14 @@ jobs:
136136
name: Deploy to AWS
137137
with:
138138
ec2_ip: ${{ needs.configure.outputs.ec2_ip }}
139+
OPENAI_MODEL: ${{ vars.OPENAI_MODEL }}
140+
LLM_PROVIDER: ${{ vars.LLM_PROVIDER }}
139141
secrets:
140142
AWS_EC2_PRIVATE_KEY: ${{ secrets.AWS_EC2_PRIVATE_KEY }}
141143
MONGODB_URL: ${{ secrets.MONGODB_URL }}
144+
MONGODB_DATABASE: ${{ secrets.MONGODB_DATABASE }}
142145
JWT_SECRET: ${{ secrets.JWT_SECRET }}
143146
OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }}
144147
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
148+
GRAFANA_ADMIN_USER: ${{ secrets.GRAFANA_ADMIN_USER }}
149+
GRAFANA_ADMIN_PASSWORD: ${{ secrets.GRAFANA_ADMIN_PASSWORD }}

0 commit comments

Comments
 (0)