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 Ubuntu tags id: ubuntu_tags if: ${{ inputs.variant != 'alpine' }} shell: bash run: | TAGS="${{ inputs.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> $GITHUB_OUTPUT - name: Build and push Docker image (Alpine) if: ${{ inputs.variant != 'ubuntu' }} uses: docker/build-push-action@v5 with: context: ${{ inputs.context }} file: ${{ inputs.dockerfile }} platforms: ${{ inputs.platforms }} push: true tags: ${{ inputs.tags }} cache-from: type=gha cache-to: type=gha - name: Build and push Docker image (Ubuntu) if: ${{ inputs.variant != 'alpine' }} uses: docker/build-push-action@v5 with: context: ${{ inputs.context }} file: docker/Dockerfile.ubuntu platforms: ${{ inputs.platforms }} push: true tags: ${{ steps.ubuntu_tags.outputs.ubuntu_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' variant: required: true default: 'both' description: 'Image variant to build: alpine, ubuntu, or both'