name: Build & Push SDK Proto Builder
on:
  push:
    branches:
      - main
    paths:
      - "contrib/devtools/Dockerfile"
  workflow_dispatch:
    inputs:
      tags:
        description: "Docker image tags"
        required: true
        type: string
  pull_request:
    paths:
      - "contrib/devtools/Dockerfile"

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: cosmos/proto-builder

# Allow one concurrent deployment
concurrency:
  group: "proto-docker"
  cancel-in-progress: true

jobs:
  build:
    runs-on: depot-ubuntu-22.04-4
    permissions:
      contents: read
      packages: write
      id-token: write

    steps:
      # set VERSION to new version when making changes, when merged to main the image will automatically be pushed
      - uses: actions/checkout@v6

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v4

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v4

      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v6
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
          # modify value when deploying a new version
          tags: |
            type=semver,pattern={{version}},value=${{ inputs.tags }}

      - name: Login to GitHub Container Registry
        uses: docker/login-action@v4.5.2
        if: ${{ github.event_name != 'pull_request' }}
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Setup Depot
        uses: depot/setup-action@v1

      - name: Publish to GHCR
        uses: depot/build-push-action@v1
        with:
          project: gnm1jqptpw
          context: ./contrib/devtools
          platforms: linux/amd64,linux/arm64
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
