Skip to content

setup sendgrid done #19

setup sendgrid done

setup sendgrid done #19

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Create .env files
run: |
# API Gateway .env
echo "PORT=8000" > APIGateWay/.env
echo "AUTH_SERVICE_URL=http://auth:8001" >> APIGateWay/.env
echo "USER_SERVICE_URL=http://user:8006" >> APIGateWay/.env
echo "FLASK_SERVICE_URL=http://flask:8005" >> APIGateWay/.env
echo "EMAIL_SERVICE_URL=http://email:8002" >> APIGateWay/.env
echo "SYSTEMLOG_SERVICE_URL=http://systemlog:8003" >> APIGateWay/.env
echo "SPEECHRATE_SERVICE_URL=http://speechrate:8004" >> APIGateWay/.env
# Auth Service .env
echo "PORT=8001" > AuthenticationService/.env
echo "MONGODB_URI=${{ secrets.MONGODB_URI }}" >> AuthenticationService/.env
echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> AuthenticationService/.env
# User Service .env
echo "PORT=8006" > UserService/.env
echo "MONGODB_URI=${{ secrets.MONGODB_URI }}" >> UserService/.env
# Flask Service .env
echo "PORT=8005" > flaskAIservices/.env
echo "MONGODB_URI=${{ secrets.MONGODB_URI }}" >> flaskAIservices/.env
echo "GOOGLE_API_KEY=${{ secrets.GOOGLE_API_KEY }}" >> flaskAIservices/.env
# Email Service .env
echo "PORT=8002" > EmailServices/.env
echo "SMTP_SERVER=${{ secrets.SMTP_SERVER }}" >> EmailServices/.env
echo "SMTP_PORT=${{ secrets.SMTP_PORT }}" >> EmailServices/.env
echo "SMTP_USERNAME=${{ secrets.SMTP_USERNAME }}" >> EmailServices/.env
echo "SMTP_PASSWORD=${{ secrets.SMTP_PASSWORD }}" >> EmailServices/.env
# System Log Service .env
echo "PORT=8003" > SystemLogService/.env
echo "MONGODB_URI=${{ secrets.MONGODB_URI }}" >> SystemLogService/.env
# Speech Rate Service .env
echo "PORT=8004" > SpeechRateService/.env
echo "MONGODB_URI=${{ secrets.MONGODB_URI }}" >> SpeechRateService/.env
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: "20"
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install Node.js dependencies
run: echo "dependencies installed"
- name: Install Python dependencies
run: echo "dependencies installed"
- name: Build Docker Images
run: |
docker compose build
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Push Docker Images
run: |
# Tag images with Docker Hub username
docker tag gateway ${{ secrets.DOCKER_USERNAME }}/lexayudha-gateway:latest
docker tag auth ${{ secrets.DOCKER_USERNAME }}/lexayudha-auth:latest
docker tag user ${{ secrets.DOCKER_USERNAME }}/lexayudha-user:latest
docker tag email ${{ secrets.DOCKER_USERNAME }}/lexayudha-email:latest
docker tag systemlog ${{ secrets.DOCKER_USERNAME }}/lexayudha-systemlog:latest
docker tag speechrate ${{ secrets.DOCKER_USERNAME }}/lexayudha-speechrate:latest
# Push images to Docker Hub
docker push ${{ secrets.DOCKER_USERNAME }}/lexayudha-gateway:latest
docker push ${{ secrets.DOCKER_USERNAME }}/lexayudha-auth:latest
docker push ${{ secrets.DOCKER_USERNAME }}/lexayudha-user:latest
docker push ${{ secrets.DOCKER_USERNAME }}/lexayudha-email:latest
docker push ${{ secrets.DOCKER_USERNAME }}/lexayudha-systemlog:latest
docker push ${{ secrets.DOCKER_USERNAME }}/lexayudha-speechrate:latest
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-east-1
- name: Download task definition
run: aws ecs describe-task-definition --task-definition lexayudha_app --query taskDefinition --output json > task-definition.json
- name: Install jq
run: sudo apt-get install -y jq
- name: Prepare clean task definition and update images
run: |
# Create a clean task definition
jq 'del(.taskDefinitionArn, .status, .requiresAttributes, .compatibilities, .registeredAt, .registeredBy, .revision, .enableFaultInjection)' task-definition.json > clean-task-def.json
# Update all container images
jq --arg GATEWAY "${{ secrets.DOCKER_USERNAME }}/lexayudha-gateway:latest" \
--arg AUTH "${{ secrets.DOCKER_USERNAME }}/lexayudha-auth:latest" \
--arg USER "${{ secrets.DOCKER_USERNAME }}/lexayudha-user:latest" \
--arg EMAIL "${{ secrets.DOCKER_USERNAME }}/lexayudha-email:latest" \
--arg SYSTEMLOG "${{ secrets.DOCKER_USERNAME }}/lexayudha-systemlog:latest" \
--arg SPEECHRATE "${{ secrets.DOCKER_USERNAME }}/lexayudha-speechrate:latest" \
'.containerDefinitions |= map(
if .name == "gateway" then .image = $GATEWAY
elif .name == "auth" then .image = $AUTH
elif .name == "user" then .image = $USER
elif .name == "email" then .image = $EMAIL
elif .name == "systemlog" then .image = $SYSTEMLOG
elif .name == "speechrate" then .image = $SPEECHRATE
else . end
)' clean-task-def.json > updated-task-def.json
- name: Register new task definition
id: register-task-def
run: |
NEW_TASK_DEFINITION=$(aws ecs register-task-definition --cli-input-json file://updated-task-def.json --query 'taskDefinition.taskDefinitionArn' --output text)
echo "task_definition_arn=$NEW_TASK_DEFINITION" >> $GITHUB_OUTPUT
- name: Deploy to ECS
run: |
aws ecs update-service --cluster lexayudha \
--service lexayudha_app \
--task-definition ${{ steps.register-task-def.outputs.task_definition_arn }} \
--force-new-deployment
- name: Wait for service stability
run: aws ecs wait services-stable --cluster lexayudha --services lexayudha_app