setup sendgrid done #19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |