Skip to content

Merge pull request #92 from BUMETCS673/feature/iteration3a #45

Merge pull request #92 from BUMETCS673/feature/iteration3a

Merge pull request #92 from BUMETCS673/feature/iteration3a #45

Workflow file for this run

name: CD workflow
on:
push:
tags:
- 'v*'
branches-ignore:
- '**'
env:
REGISTRY: ghcr.io
DB_IMAGE: bumetcs673/cs673olsum25team1/db
BACKEND_IMAGE: bumetcs673/cs673olsum25team1/backend
FRONTEND_IMAGE: bumetcs673/cs673olsum25team1/frontend
TAG: ${{ github.ref_name }}
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push database image
uses: docker/build-push-action@v5
with:
context: ./code/database
file: ./code/database/Dockerfile
push: true
tags: ${{ env.REGISTRY }}/${{ env.DB_IMAGE }}:${{ env.TAG }}
- name: Build and push backend image
uses: docker/build-push-action@v5
with:
context: ./code/backend
file: ./code/backend/Dockerfile
push: true
tags: ${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE }}:${{ env.TAG }}
- name: Build frontend image
uses: docker/build-push-action@v5
with:
context: ./code/frontend
file: ./code/frontend/Dockerfile
push: true
tags: ${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE }}:${{ env.TAG }}
build-args: |
NODE_ENV=production
deploy:
needs: build-and-push
runs-on: ubuntu-latest
steps:
- name: Deploy to EC2
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
set -e
PROJECT_DIR="/srv/getactive"
echo "Navigating to project directory: $PROJECT_DIR"
cd $PROJECT_DIR
echo "Logging into GitHub Container Registry..."
echo ${{ secrets.GITHUB_TOKEN }} | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin
echo "Pulling latest images..."
docker pull ${{ env.REGISTRY }}/${{ env.DB_IMAGE }}:${{ env.TAG }}
docker pull ${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE }}:${{ env.TAG }}
docker pull ${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE }}:${{ env.TAG }}
echo "Updating image tags in docker-compose.yml..."
sed -i "s|image: ${{ env.REGISTRY }}/${{ env.DB_IMAGE }}:.*|image: ${{ env.REGISTRY }}/${{ env.DB_IMAGE }}:${{ env.TAG }}|" docker-compose.yml
sed -i "s|image: ${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE }}:.*|image: ${{ env.REGISTRY }}/${{ env.BACKEND_IMAGE }}:${{ env.TAG }}|" docker-compose.yml
sed -i "s|image: ${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE }}:.*|image: ${{ env.REGISTRY }}/${{ env.FRONTEND_IMAGE }}:${{ env.TAG }}|" docker-compose.yml
echo "Restarting services using docker-compose..."
docker stop getactive-frontend || echo "Frontend container already stopped or does not exist."
sleep 10
docker stop getactive-backend || echo "Backend container already stopped or does not exist."
sleep 10
docker rm getactive-frontend || echo "Frontend container already removed or does not exist."
sleep 10
docker rm getactive-backend || echo "Backend container already removed or does not exist."
sleep 10
docker stop getactive-db || echo "Database container already stopped or does not exist."
sleep 10
docker rm getactive-db || echo "Database container already removed or does not exist."
sleep 10
docker network rm frontend-network || echo "Frontend network already removed or does not exist."
sleep 10
docker network rm backend-network || echo "Backend network already removed or does not exist."
sleep 10
docker volume rm mysql_data || echo "Database volume already removed or does not exist."
sleep 10
docker-compose up -d
echo "Cleaning up old Docker images..."
docker image prune -f
echo "Deployment to EC2 completed successfully!"