name: Build and Push Frontend

on:
  push:
    branches:
      - main
    paths:
      - 'workloads/ecommerce/**'
      - '.gitea/workflows/build.yaml'

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 20  # Aumentamos a 20 min para evitar que se corte el clone
    steps:
      - name: Checkout del código
        uses: actions/checkout@v3
        with:
          fetch-depth: 1 # IMPORTANTE: Solo descarga el último commit, no todo el historial

      # 1. NUEVO: Generamos la versión semántica dinámica
      - name: Definir Versión Semántica
        id: vars
        run: |
          # Formato v1.0.X (X = número de ejecución del pipeline)
          echo "VERSION=v1.0.${{ github.run_number }}" >> $GITHUB_OUTPUT

      - name: Login en Gitea Registry
        uses: docker/login-action@v2
        with:
          registry: gitea.cruzcloud.net
          username: ${{ secrets.REGISTRY_USER }}
          password: ${{ secrets.REGISTRY_PASSWORD }}

      # 2. ACTUALIZADO: Usamos la nueva variable para los tags de Docker
      - name: Construir y Subir Imagen
        uses: docker/build-push-action@v4
        with:
          context: workloads/ecommerce/
          push: true
          tags: |
            gitea.cruzcloud.net/devops/ecommerce-frontend:${{ steps.vars.outputs.VERSION }}
            gitea.cruzcloud.net/devops/ecommerce-frontend:latest

      # 3. ACTUALIZADO: Inyectamos la versión limpia en el manifiesto YAML
      - name: Actualizar Manifiesto GitOps (CD)
        run: |
          git config user.name "Cristian Felipe"
          git config user.email "cristiancruz0529@gmail.com"
          
          # 1. Forzamos a Git a ignorar la historia local y sincronizarse 100% con el servidor
          git fetch origin main
          git reset --hard origin/main
          
          # 2. Aplicamos el cambio de versión
          sed -i -E "s|(image: gitea.cruzcloud.net/devops/ecommerce-frontend:).*|\1${{ steps.vars.outputs.VERSION }}|g" workloads/ecommerce/frontend.yaml
          
          # 3. Solo hacemos commit si realmente hubo un cambio
          git add workloads/ecommerce/frontend.yaml
          if git diff --cached --quiet; then
            echo "No hay cambios en el manifiesto."
          else
            git commit -m "chore: release ${{ steps.vars.outputs.VERSION }} [skip ci]"
            # 4. Forzamos el push usando --force para limpiar cualquier discrepancia
            git push origin HEAD:main --force
          fi