name: 'Build & Push Docker Image'
description: 'Build multi-stage Docker image and push to registry'
inputs:
  registry:
    description: 'Docker registry URL'
    required: true
  image-name:
    description: 'Docker image name'
    required: true
  dockerfile-path:
    description: 'Path to Dockerfile'
    required: false
    default: 'Dockerfile'
  build-context:
    description: 'Docker build context'
    required: false
    default: '.'
outputs:
  image-tag:
    description: 'Full image tag with registry'
    value: ${{{{ steps.build.outputs.tags }}}}

runs:
  using: 'composite'
  steps:
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3

    - name: Login to Registry
      uses: docker/login-action@v3
      with:
        registry: ${{{{ inputs.registry }}}}
        username: ${{{{ secrets.REGISTRY_USERNAME }}}}
        password: ${{{{ secrets.REGISTRY_PASSWORD }}}}

    - name: Build and push
      id: build
      uses: docker/build-push-action@v5
      with:
        context: ${{{{ inputs.build-context }}}}
        file: ${{{{ inputs.dockerfile-path }}}}
        push: true
        tags: ${{{{ inputs.registry }}}}/${{{{ inputs.image-name }}}}:${{{{ github.sha }}}}
        cache-from: type=gha
        cache-to: type=gha,mode=max
