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
 |