name: 'Docker: Web Client'

on:
  workflow_dispatch:
  workflow_call:
    inputs:
      semver:
        required: true
        type: string
  push:
    branches: [ "main" ]
    paths: ["frontend", "web"]
  pull_request:
    branches: [ "main" ]
    paths: ["frontend", "web"]

jobs:
  push_to_registry:
    name: 'Push Docker image to Docker Hub'
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - name: 'Download Basic main.js Artifact'
      if: inputs.semver == ''  # Only if workflow fired from frontend-build.yml
      uses: dawidd6/action-download-artifact@v7
      with:
        workflow: frontend-build.yml
        workflow_conclusion: success
        name: web-main-static
        path: web

    - name: 'Download Basic main.js Artifact for a release'
      if: inputs.semver != ''  # Only if fired as job in release.yml
      uses: actions/download-artifact@v4
      with:
        name: web-main-static
        path: web

    - name: 'Log in to Docker Hub'
      uses: docker/login-action@v3
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: 'Extract metadata (tags, labels) for Docker'
      id: meta
      uses: docker/metadata-action@v5
      with:
        images: recksato/robosats-web
        tags: |
            type=ref,event=pr
            type=ref,event=tag
            type=semver,pattern={{major}}.{{minor}}
            type=sha,enable=true,priority=100,prefix=,suffix=,format=short
            type=raw,value=latest

    - name: 'Get Commit Hash'
      id: commit
      uses: pr-mpt/actions-commit-hash@v3

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

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

    - name: 'Build and push Docker image'
      uses: docker/build-push-action@v6
      with:
        context: ./web
        platforms: linux/amd64,linux/arm64
        push: true
        tags: ${{ steps.meta.outputs.tags }}
        labels: ${{ steps.meta.outputs.labels }}