name: 'Docker Build and Push'
description: 'Builds and pushes Docker images to GHCR with flexible tagging.'
runs:
  using: 'composite'
  steps:
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v3

    - name: Log in to GHCR
      uses: docker/login-action@v3
      with:
        registry: ghcr.io
        username: ${{ inputs.ghcr_username }}
        password: ${{ inputs.ghcr_token }}

    - name: Prepare combined tags (default + ubuntu suffix)
      id: combined_tags
      shell: bash
      run: |
        TAGS="${{ inputs.tags }}"
        # Generate both default tags and ubuntu-suffixed tags
        DEFAULT_TAGS="$TAGS"
        UBUNTU_TAGS=$(echo "$TAGS" | awk -F, '{for(i=1;i<=NF;i++){split($i,a,":"); printf "%s:%s-ubuntu", a[1], a[2]; if(i<NF) printf ","}}')
        COMBINED_TAGS="$DEFAULT_TAGS,$UBUNTU_TAGS"
        echo "combined_tags=$COMBINED_TAGS" >> $GITHUB_OUTPUT

    - name: Build and push Docker image (Ubuntu)
      uses: docker/build-push-action@v5
      with:
        context: ${{ inputs.context }}
        file: docker/Dockerfile.ubuntu
        platforms: ${{ inputs.platforms }}
        push: true
        tags: ${{ steps.combined_tags.outputs.combined_tags }}
        cache-from: type=gha
        cache-to: type=gha

inputs:
  ghcr_username:
    required: true
    description: 'GHCR username'
  ghcr_token:
    required: true
    description: 'GHCR token'
  context:
    required: true
    description: 'Build context'
  dockerfile:
    required: true
    description: 'Dockerfile path'
  platforms:
    required: true
    description: 'Platforms to build for'
  tags:
    required: true
    description: 'Comma-separated list of image tags'

