Refactor chat components: restructure MessageInput, MessageBubble, Ch… #86
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 - Build & Deploy to EC2 (Docker Hub + Rollback) | |
| on: | |
| push: | |
| branches: | |
| - main | |
| env: | |
| DOCKERHUB_REPO_BACKEND: rajkrr/chat_app_backend | |
| DOCKERHUB_REPO_FRONTEND: rajkrr/chat_app_frontend | |
| jobs: | |
| build_and_push: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Login to Docker Hub | |
| run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "rajkrr" --password-stdin | |
| # ------------------------------- | |
| # BUILD BACKEND | |
| # ------------------------------- | |
| - name: Build & push backend image (latest + SHA tag) | |
| run: | | |
| SHA=$(echo $GITHUB_SHA | cut -c1-8) | |
| docker build -t $DOCKERHUB_REPO_BACKEND:latest ./backend | |
| docker tag $DOCKERHUB_REPO_BACKEND:latest $DOCKERHUB_REPO_BACKEND:sha-$SHA | |
| docker push $DOCKERHUB_REPO_BACKEND:latest | |
| docker push $DOCKERHUB_REPO_BACKEND:sha-$SHA | |
| # ------------------------------- | |
| # BUILD FRONTEND | |
| # ------------------------------- | |
| - name: Build & push frontend image (latest + SHA tag) | |
| env: | |
| VITE_API_URL: ${{ secrets.PROD_VITE_API_URL }} | |
| run: | | |
| SHA=$(echo $GITHUB_SHA | cut -c1-8) | |
| docker build \ | |
| --build-arg VITE_API_URL=$VITE_API_URL \ | |
| -t $DOCKERHUB_REPO_FRONTEND:latest \ | |
| ./frontend | |
| docker tag $DOCKERHUB_REPO_FRONTEND:latest $DOCKERHUB_REPO_FRONTEND:sha-$SHA | |
| docker push $DOCKERHUB_REPO_FRONTEND:latest | |
| docker push $DOCKERHUB_REPO_FRONTEND:sha-$SHA | |
| deploy_to_ec2: | |
| needs: build_and_push | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Setup SSH | |
| run: | | |
| mkdir -p ~/.ssh | |
| echo "${{ secrets.EC2_SSH_KEY }}" > ~/.ssh/ec2_key | |
| chmod 600 ~/.ssh/ec2_key | |
| - name: Deploy to EC2 using SHA tag | |
| env: | |
| SHA: ${{ github.sha }} | |
| EC2_HOST: ${{ secrets.EC2_HOST }} | |
| EC2_USER: ${{ secrets.EC2_USER }} | |
| run: | | |
| SHA_SHORT=$(echo $SHA | cut -c1-8) | |
| ssh -o StrictHostKeyChecking=no -i ~/.ssh/ec2_key $EC2_USER@$EC2_HOST << EOF | |
| set -e | |
| cd ~/chat_app/chat_app | |
| echo '--- Pulling latest code from GitHub (sync compose) ---' | |
| git pull # Keeps docker-compose.yml synced with GitHub | |
| echo '--- Copying env files ---' | |
| cp -f ../env/backend.env ./backend/.env | |
| cp -f ../env/frontend.env ./frontend/.env || true | |
| echo '--- Pulling new Docker images ---' | |
| sudo docker pull $DOCKERHUB_REPO_BACKEND:sha-$SHA_SHORT | |
| sudo docker pull $DOCKERHUB_REPO_FRONTEND:sha-$SHA_SHORT | |
| echo '--- Updating docker-compose to use new SHA tags ---' | |
| sudo sed -i "s|rajkrr/chat_app_backend:.*|rajkrr/chat_app_backend:sha-$SHA_SHORT|g" docker-compose.yml | |
| sudo sed -i "s|rajkrr/chat_app_frontend:.*|rajkrr/chat_app_frontend:sha-$SHA_SHORT|g" docker-compose.yml | |
| echo '--- Restarting application (docker-compose) ---' | |
| sudo docker-compose down || true | |
| if ! sudo docker-compose up -d; then | |
| echo 'Deploy FAILED. Rolling back...' | |
| sudo sed -i "s|rajkrr/chat_app_backend:sha-$SHA_SHORT|rajkrr/chat_app_backend:previous|g" docker-compose.yml | |
| sudo sed -i "s|rajkrr/chat_app_frontend:sha-$SHA_SHORT|rajkrr/chat_app_frontend:previous|g" docker-compose.yml | |
| sudo docker-compose up -d | |
| exit 1 | |
| fi | |
| echo '--- Marking current build as previous stable ---' | |
| sudo docker tag $DOCKERHUB_REPO_BACKEND:sha-$SHA_SHORT $DOCKERHUB_REPO_BACKEND:previous | |
| sudo docker tag $DOCKERHUB_REPO_FRONTEND:sha-$SHA_SHORT $DOCKERHUB_REPO_FRONTEND:previous | |
| sudo docker push $DOCKERHUB_REPO_BACKEND:previous | |
| sudo docker push $DOCKERHUB_REPO_FRONTEND:previous | |
| echo '--- Cleaning unused images ---' | |
| sudo docker image prune -af || true | |
| echo '--- Deployment COMPLETE 🎉 ---' | |
| EOF |