Skip to content

Merge pull request #289 from Capstone-STEMify/feature/STEM-ai-integra… #569

Merge pull request #289 from Capstone-STEMify/feature/STEM-ai-integra…

Merge pull request #289 from Capstone-STEMify/feature/STEM-ai-integra… #569

name: Build and Push Docker Images
on:
workflow_dispatch:
push:
branches: ['dev']
jobs:
build:
runs-on: ubuntu-latest
env:
continue: 'false'
strategy:
matrix:
service:
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG1 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH1 }}
check_path: src/Services/ClassroomService
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG2 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH2 }}
check_path: src/Services/Resource
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG3 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH3 }}
check_path: src/Services/ApiGateways/ApiGateway
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG4 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH4 }}
check_path: src/Services/Identity
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG5 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH5 }}
check_path: src/Services/Identity
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG6 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH6 }}
check_path: src/Services/Notification
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG7 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH7 }}
check_path: src/Services/ProductService
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG8 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH8 }}
check_path: src/Services/OrderService
# - name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG9 }}
# path: ${{ vars.DOCKERHUB_DOCKERFILEPATH9 }}
# check_path: src/Services/CartService
# - name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG10 }}
# path: ${{ vars.DOCKERHUB_DOCKERFILEPATH10 }}
# check_path: src/Services/PaymentService
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG11 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH11 }}
check_path: src/Services/EmulatorService
- name: ${{ vars.DOCKERHUB_USERNAME }}/${{ vars.DOCKERHUB_REPONAME }}:${{ vars.DOCKERHUB_REPOTAG12 }}
path: ${{ vars.DOCKERHUB_DOCKERFILEPATH12 }}
check_path: src/Services/AIService
steps:
# Step 1: Checkout repository for source code
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
# Step 2: Check for changes
- name: Check for changes in service path
run: |
RANGE=""
if [ -n "${{ github.event.before }}" ] && [ "${{ github.event.before }}" != "0000000000000000000000000000000000000000" ]; then
RANGE="${{ github.event.before }}..${{ github.sha }}"
else
RANGE="HEAD~1..HEAD"
fi
echo "Diff range: $RANGE"
if git diff --quiet $RANGE -- "${{ matrix.service.check_path }}/"; then
echo "No changes in ${{ matrix.service.check_path }}. Skipping build"
echo "continue=false" >> $GITHUB_ENV
else
echo "Changes detected in ${{ matrix.service.check_path }}. Proceeding with build"
echo "continue=true" >> $GITHUB_ENV
fi
# Step 3: Log in to Docker Hub
- name: Log in to Docker Hub
if: env.continue == 'true'
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Step 4: Set up Docker Buildx (for building multi-platform images)
- name: Set up Docker Buildx
if: env.continue == 'true'
uses: docker/setup-buildx-action@v3
- name: Build and push docker image (AIService)
if: env.continue == 'true' && matrix.service.check_path == 'src/Services/AIService'
uses: docker/build-push-action@v6
with:
context: src/Services/AIService
file: ${{ matrix.service.path }}/Dockerfile
push: true
tags: ${{ matrix.service.name }}
- name: Build and push docker image (Others)
if: env.continue == 'true' && matrix.service.check_path != 'src/Services/AIService'
uses: docker/build-push-action@v6
with:
context: .
file: ${{ matrix.service.path }}/Dockerfile
push: true
tags: ${{ matrix.service.name }}