Workflow CI docker push #15
This file contains 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 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 | |