104 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| name: Build and Push Microservices
 | |
| 
 | |
| on:
 | |
|   push:
 | |
|     branches:
 | |
|       - master
 | |
|   workflow_dispatch:
 | |
| 
 | |
| jobs:
 | |
|   determine-changes:
 | |
|     runs-on: ubuntu-latest
 | |
|     outputs:
 | |
|       matrix: ${{ steps.changes.outputs.matrix }}
 | |
|     steps:
 | |
|       - name: Checkout repository
 | |
|         uses: actions/checkout@v4
 | |
|         with:
 | |
|           fetch-depth: 0
 | |
| 
 | |
|       - name: Get changed files
 | |
|         id: changed-files
 | |
|         run: |
 | |
|           echo "files=$(git diff --name-only ${{ github.event.before }} ${{ github.sha }} | xargs)" >> $GITHUB_OUTPUT
 | |
| 
 | |
|       - name: Determine changed services
 | |
|         id: changes
 | |
|         run: |
 | |
|           files="${{ steps.changed-files.outputs.files }}"
 | |
|           matrix="{\"include\":[]}"
 | |
|           services=("Sphere" "Pass" "Ring" "Drive" "Develop" "Gateway" "Insight")
 | |
|           images=("sphere" "pass" "ring" "drive" "develop" "gateway" "insight")
 | |
|           changed_services=()
 | |
| 
 | |
|           for file in $files; do
 | |
|             if [[ "$file" == DysonNetwork.Shared/* ]]; then
 | |
|               changed_services=("${services[@]}")
 | |
|               break
 | |
|             fi
 | |
|             for i in "${!services[@]}"; do
 | |
|               if [[ "$file" == DysonNetwork.${services[$i]}/* ]]; then
 | |
|                 # check if service is already in changed_services
 | |
|                 if [[ ! " ${changed_services[@]} " =~ " ${services[$i]} " ]]; then
 | |
|                   changed_services+=("${services[$i]}")
 | |
|                 fi
 | |
|               fi
 | |
|             done
 | |
|           done
 | |
| 
 | |
|           if [ ${#changed_services[@]} -gt 0 ]; then
 | |
|             json_objects=""
 | |
|             for service in "${changed_services[@]}"; do
 | |
|               for i in "${!services[@]}"; do
 | |
|                 if [[ "${services[$i]}" == "$service" ]]; then
 | |
|                   image="${images[$i]}"
 | |
|                   break
 | |
|                 fi
 | |
|               done
 | |
|               json_objects+="{\"service\":\"$service\",\"image\":\"$image\"},"
 | |
|             done
 | |
|             matrix="{\"include\":[${json_objects%,}]}"
 | |
|           fi
 | |
|           echo "matrix=$matrix" >> $GITHUB_OUTPUT
 | |
| 
 | |
|   build-and-push:
 | |
|     needs: determine-changes
 | |
|     if: ${{ needs.determine-changes.outputs.matrix != '{"include":[]}' }}
 | |
|     runs-on: ubuntu-latest
 | |
|     permissions:
 | |
|       contents: read
 | |
|       packages: write
 | |
|     strategy:
 | |
|       matrix: ${{ fromJson(needs.determine-changes.outputs.matrix) }}
 | |
| 
 | |
|     steps:
 | |
|       - name: Checkout repository
 | |
|         uses: actions/checkout@v4
 | |
|         with:
 | |
|           fetch-depth: 0
 | |
| 
 | |
|       - name: Setup NBGV
 | |
|         uses: dotnet/nbgv@master
 | |
|         id: nbgv
 | |
| 
 | |
|       - name: Set up Docker Buildx
 | |
|         uses: docker/setup-buildx-action@v3
 | |
| 
 | |
|       - name: Log in to GitHub Container Registry
 | |
|         uses: docker/login-action@v3
 | |
|         with:
 | |
|           registry: ghcr.io
 | |
|           username: ${{ github.actor }}
 | |
|           password: ${{ secrets.GITHUB_TOKEN }}
 | |
| 
 | |
|       - name: Build and push Docker image for ${{ matrix.service }}
 | |
|         uses: docker/build-push-action@v6
 | |
|         with:
 | |
|           context: .
 | |
|           file: DysonNetwork.${{ matrix.service }}/Dockerfile
 | |
|           push: true
 | |
|           tags: |
 | |
|             ghcr.io/${{ vars.PACKAGE_OWNER }}/dyson-${{ matrix.image }}:${{ steps.nbgv.outputs.SimpleVersion }}
 | |
|             ghcr.io/${{ vars.PACKAGE_OWNER }}/dyson-${{ matrix.image }}:latest
 | |
|           platforms: linux/amd64
 |