Skip to content

Workflow CI docker push #15

Workflow CI docker push

Workflow CI docker push #15

Workflow file for this run

name: CI for Monorepo
on:
push:
branches:
- main
jobs:
detect-changes:
runs-on: ubuntu-latest
outputs:
services: ${{ steps.filter.outputs.services }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Detect changed microservices
id: filter
run: |
changed_services=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep '^backend/' | cut -d'/' -f2 | sort -u | jq -R . | jq -s -c .)
echo "Detected changes in: $changed_services"
# Ensure valid JSON
if [[ -z "$changed_services" || "$changed_services" == "[]" ]]; then
services_json="[]"
else
services_json="$changed_services"
fi
echo "services=$services_json" >> "$GITHUB_OUTPUT"
# - name: Detect changed microservices
# id: filter
# run: |
# changed_services=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | grep '^backend/' | cut -d'/' -f2 | sort -u)
# echo "Detected changes in: $changed_services"
# services_json=$(echo "$changed_services" | jq -R -c 'split("\n") | map(select(. != ""))')
# echo "services=$services_json" >> "$GITHUB_OUTPUT"
build:
needs: detect-changes
runs-on: ubuntu-latest
environment: opinex
if: needs.detect-changes.outputs.services != '[]'
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Set up Node.js Environment
uses: actions/setup-node@v3
with:
node-version: '22'
- name: Install Node.js Dependencies
run: |
npm install -g turbo
npm install
- name: 🌟 Setup Backend Environment (Variables)
run: |
cd scripts/
chmod +x start.sh
./start.sh
- name: Configure all Resources in Docker
run: |
docker compose -f 'docker/docker-compose.resources.yaml' up -d --build --wait
- name: Verify Running Containers
run: docker compose -f 'docker/docker-compose.resources.yaml' ps
- name: Debug Logs on Failure
if: failure()
run: docker compose -f 'docker/docker-compose.resources.yaml' logs --tail=100
- name: Start Turbo Dev
run: |
turbo build
nohup turbo dev > turbo.log 2>&1 & echo $! > turbo_dev.pid
- name: Wait Until All Servers are Up
run: |
cd scripts/
chmod +x checkservice.sh
./checkservice.sh
- name: Run Tests in /packages/test
run: |
cd packages/test
npm run test
- name: Stop Turbo Dev
run: |
if [ -f turbo_dev.pid ]; then
kill $(cat turbo_dev.pid) || echo "Process already stopped"
rm turbo_dev.pid
fi
- name: Wait Until All Servers are Up
run: |
cd scripts/
chmod +x checkservice.sh
./checkservice.sh
- name: Cleanup Resources
run: |
docker compose -f 'docker/docker-compose.resources.yaml' down -v
- name: Build Images
run: |
cd scripts/
chmod +x build_images.sh
./build_images.sh
- name: Configure All Images + Resources in Docker
run: |
docker compose -f 'docker/docker-compose.yaml' up -d --build --wait
- name: Verify Running Containers
run: docker compose -f 'docker/docker-compose.yaml' ps
- name: Debug Logs on Failure
if: failure()
run: docker compose -f 'docker/docker-compose.yaml' logs --tail=100
- name: Wait Until All Servers are Up (Docker)
run: |
cd scripts/
chmod +x checkservice.sh
./checkservice.sh
- name: Run Tests in /packages/test
run: |
cd packages/test
npm run test
- name: Convert JSON to space-separated list
id: format_services
run: |
services_list=$(echo '${{ needs.detect-changes.outputs.services }}' | jq -r '.[]' | tr '\n' ' ')
echo "services_list=$services_list" >> "$GITHUB_ENV"
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Tag Images
run: |
cd scripts/
chmod +x tag_images.sh
./tag_images.sh vanshpatel latest $services_list
# build-auth:
# needs: [detect-changes, build]
# if: contains(fromJson(needs.detect-changes.outputs.services), 'auth')
# runs-on: ubuntu-latest
# steps:
# - name: Checkout repository
# uses: actions/checkout@v3
# - name: Set up Node.js Environment
# uses: actions/setup-node@v3
# with:
# node-version: '22'
# - name: Install Node.js Dependencies
# run: |
# cd backend/auth
# npm install
# - name: 🌟 Setup Backend Environment (Variables)
# run: |
# cd scripts/
# chmod +x start.sh
# ./start.sh
# - name: Run Auth Service Tests
# run: |
# cd backend/auth
# npm install
# npm test
# - name: Build Auth Service Image (Not Pushed)
# run: |
# docker build -t myrepo/auth-service:latest backend/auth
# - name: Build Docker Images
# run: |
# docker build -f docker/service1/Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/opinex-service1-image:latest .
# docker build -f docker/service2/Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/opinex-service2-image:latest .
# - name: Manually Install Docker Compose
# run: |
# sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# sudo chmod +x /usr/local/bin/docker-compose
# - name: Test Docker Images with Docker Compose
# run: |
# export DOCKER_USERNAME=${{ secrets.DOCKER_USERNAME }}
# docker-compose up --build & # Run in background
# echo $! > compose_dev.pid # Save PID to a file
# - name: Wait for Backend to be Ready
# run: |
# cd scripts/
# chmod +x checkservice.sh
# ./checkservice.sh
# - name: Run Tests in /packages/test for docker compose
# run: |
# cd packages/test
# npm run test
# - name: Stop Docker compose
# run: |
# if [ -f compose_dev.pid ]; then
# kill $(cat compose_dev.pid) || echo "Process already stopped"
# rm compose_dev.pid
# fi
# - name: Login to Docker Hub
# uses: docker/login-action@v2
# with:
# username: ${{ secrets.DOCKER_USERNAME }}
# password: ${{ secrets.DOCKER_PASSWORD }}
# - name: Push Docker Images to Docker Hub
# run: |
# docker push ${{ secrets.DOCKER_USERNAME }}/opinex-service1-image:latest
# docker push ${{ secrets.DOCKER_USERNAME }}/opinex-service2-image:latest