name: Build and Push Frontend on: push: branches: - main paths: - 'workloads/ecommerce/index.html' - 'workloads/ecommerce/Dockerfile' 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. Traer cambios remotos y rebasear localmente # Esto evita el error de 'rejected' al integrar cualquier cambio previo git pull origin main --rebase # 2. Reemplazo del tag usando la variable 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. Commit y Push git add workloads/ecommerce/frontend.yaml git commit -m "chore: release ${{ steps.vars.outputs.VERSION }} [skip ci]" || echo "Sin cambios para hacer commit" git push origin main