Skip to content
This repository was archived by the owner on Feb 16, 2026. It is now read-only.
Merged

Mt #36

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
44 changes: 31 additions & 13 deletions .github/workflows/ci-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ jobs:
cd ../result-service && npm ci
cd ../../archive/frontendOld && npm ci


- name: Run linting
run: |
cd backend/api-gateway && npm run lint || echo "No lint"
Expand Down Expand Up @@ -86,22 +85,41 @@ jobs:
if: always()
run: docker compose -f container/compose/docker-compose.dev.yml down -v

docker-build:
name: Build All Docker Images
docker-push:
name: Build & Push Docker Images
runs-on: ubuntu-latest
needs: lint-and-test
needs: integration-test

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Create .env files for build
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build & Push API Gateway
run: |
cp container/env/gateway.env.example backend/api-gateway/.env
cp container/env/auth.env.example backend/auth-service/.env
cp container/env/quiz.env.example backend/quiz-service/.env
cp container/env/result.env.example backend/result-service/.env
cp archive/frontendOld/.env.example archive/frontendOld/.env
docker build -f container/dockerfiles/dev/gateway.dev.Dockerfile \
-t mintri269/qms-gateway:dev backend/api-gateway
docker push mintri269/qms-gateway:dev

- name: Build & Push Auth Service
run: |
docker build -f container/dockerfiles/dev/auth.dev.Dockerfile \
-t mintri269/qms-auth:dev backend/auth-service
docker push mintri269/qms-auth:dev

- name: Build & Push Quiz Service
run: |
docker build -f container/dockerfiles/dev/quiz.dev.Dockerfile \
-t mintri269/qms-quiz:dev backend/quiz-service
docker push mintri269/qms-quiz:dev

- name: Build all images
run: docker compose -f container/compose/docker-compose.dev.yml build
- name: Build & Push Result Service
run: |
docker build -f container/dockerfiles/dev/result.dev.Dockerfile \
-t mintri269/qms-result:dev backend/result-service
docker push mintri269/qms-result:dev
113 changes: 113 additions & 0 deletions container/compose/docker-compose.image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
version: "3.9"

services:
# ---------------------------------------------------
# 🚪 API Gateway
# ---------------------------------------------------
gateway:
image: mintri269/qms-gateway:dev
container_name: gateway_image
ports:
- "8000:8000" # public gateway
env_file:
- ../../backend/api-gateway/.env
depends_on:
- auth-service
- quiz-service
- result-service
networks:
- quiz-net

# ---------------------------------------------------
# 🔐 Auth Service
# ---------------------------------------------------
auth-service:
image: mintri269/qms-auth:dev
container_name: auth_service_image
expose:
- "5000"
env_file:
- ../../backend/auth-service/.env
depends_on:
mysql-db:
condition: service_healthy
networks:
- quiz-net

# ---------------------------------------------------
# 🧠 Quiz Service
# ---------------------------------------------------
quiz-service:
image: mintri269/qms-quiz:dev
container_name: quiz_service_image
expose:
- "5001"
env_file:
- ../../backend/quiz-service/.env
depends_on:
mysql-db:
condition: service_healthy
networks:
- quiz-net

# ---------------------------------------------------
# 📊 Result Service
# ---------------------------------------------------
result-service:
image: mintri269/qms-result:dev
container_name: result_service_image
expose:
- "5002"
env_file:
- ../../backend/result-service/.env
depends_on:
mysql-db:
condition: service_healthy
networks:
- quiz-net

# ---------------------------------------------------
# 🛢️ MySQL — Shared runtime
# ---------------------------------------------------
mysql-db:
image: mysql:8.0
container_name: mysql_image
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot"]
interval: 5s
timeout: 3s
retries: 10
start_period: 30s
networks:
- quiz-net

# ---------------------------------------------------
# ⚡ Redis — Cache / Queue / Session
# ---------------------------------------------------
redis:
image: redis:7-alpine
container_name: redis_image
ports:
- "6379:6379"
command: ["redis-server", "--appendonly", "yes"]
volumes:
- redis_data:/data
networks:
- quiz-net

# ---------------------------------------------------
# 🌐 Networks & Volumes
# ---------------------------------------------------
networks:
quiz-net:
name: quiz-net

volumes:
mysql_data:
redis_data:
4 changes: 4 additions & 0 deletions container/scripts/setup.dev.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

echo "🚀 Setting up Quiz Application..."

if [ ! -f archive/frontendOld/.env ]; then
cp archive/frontendOld/.env.example archive/frontendOld/.env
echo "✅ Created archive/frontendOld/.env"
fi
# Copy .env files if not exist
if [ ! -f backend/api-gateway/.env ]; then
cp container/env/gateway.env.example backend/api-gateway/.env
Expand Down