Skip to content

Create README.md

Create README.md #35

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches:
- main
workflow_dispatch:
jobs:
backend-build:
runs-on: ubuntu-latest
outputs:
backend-built: ${{ steps.build.outputs.built }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Detect backend changes
id: detect
run: |
git fetch --depth=2 origin main
FILES=$(git diff --name-only HEAD~1 HEAD)
echo "Changed files:"
echo "$FILES"
if echo "$FILES" | grep -q "^backend/"; then
echo "CHANGED=true" >> $GITHUB_OUTPUT
else
echo "CHANGED=false" >> $GITHUB_OUTPUT
fi
- name: Debug result
run: echo "Backend changed? ${{ steps.detect.outputs.CHANGED }}"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
if: steps.detect.outputs.CHANGED == 'true'
- name: Login to Docker Hub
run: echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u "${{ secrets.DOCKER_HUB_USERNAME }}" --password-stdin
if: steps.detect.outputs.CHANGED == 'true'
- name: Build Backend Image
id: build
run: |
TAG=$(git rev-parse --short HEAD)
echo "Building backend image with tag: $TAG"
docker build -t ${{ secrets.DOCKER_HUB_USERNAME }}/task-backend:$TAG ./backend
docker tag ${{ secrets.DOCKER_HUB_USERNAME }}/task-backend:$TAG ${{ secrets.DOCKER_HUB_USERNAME }}/task-backend:latest
echo "built=true" >> $GITHUB_OUTPUT
if: steps.detect.outputs.CHANGED == 'true'
- name: Push Backend Image
run: docker push ${{ secrets.DOCKER_HUB_USERNAME }}/task-backend:latest
if: steps.detect.outputs.CHANGED == 'true'
frontend-build:
runs-on: ubuntu-latest
outputs:
frontend-built: ${{ steps.build.outputs.built }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Detect frontend changes
id: detect
run: |
git fetch --depth=2 origin main
FILES=$(git diff --name-only HEAD~1 HEAD)
echo "Changed files:"
echo "$FILES"
if echo "$FILES" | grep -q "^frontend/"; then
echo "CHANGED=true" >> $GITHUB_OUTPUT
else
echo "CHANGED=false" >> $GITHUB_OUTPUT
fi
- name: Debug result
run: echo "Frontend changed? ${{ steps.detect.outputs.CHANGED }}"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
if: steps.detect.outputs.CHANGED == 'true'
- name: Login to Docker Hub
run: echo "${{ secrets.DOCKER_HUB_TOKEN }}" | docker login -u "${{ secrets.DOCKER_HUB_USERNAME }}" --password-stdin
if: steps.detect.outputs.CHANGED == 'true'
- name: Build Frontend Image
id: build
run: |
TAG=$(git rev-parse --short HEAD)
echo "Building frontend image with tag: $TAG"
docker build -t ${{ secrets.DOCKER_HUB_USERNAME }}/task-frontend:$TAG ./frontend
docker tag ${{ secrets.DOCKER_HUB_USERNAME }}/task-frontend:$TAG ${{ secrets.DOCKER_HUB_USERNAME }}/task-frontend:latest
echo "built=true" >> $GITHUB_OUTPUT
if: steps.detect.outputs.CHANGED == 'true'
- name: Push Frontend Image
run: docker push ${{ secrets.DOCKER_HUB_USERNAME }}/task-frontend:latest
if: steps.detect.outputs.CHANGED == 'true'
deploy:
runs-on: [self-hosted, ansible-master-controller]
needs: [backend-build, frontend-build]
if: needs.backend-build.outputs.backend-built == 'true' || needs.frontend-build.outputs.frontend-built == 'true'
steps:
- name: Debug build results
run: |
echo "Backend built? ${{ needs.backend-build.outputs.backend-built }}"
echo "Frontend built? ${{ needs.frontend-build.outputs.frontend-built }}"
echo "Deploying because at least one image was built."
- name: Checkout code
uses: actions/checkout@v3
- name: Run Ansible Deployment
run: |
cd ansible
ansible-playbook -i inventory/hosts.ini playbooks/deploy-web-application.yml