name: frontend-image # Construit l'image du frontend (SPA Vite/React + nginx) et la pousse sur Docker Hub. # - push sur main -> tags :latest et :sha- # - tag vX.Y.Z -> tag :X.Y.Z (en plus du :sha-) # - pull request -> build seul, rien n'est poussé # # Secrets à créer dans GitHub (Settings > Secrets and variables > Actions) : # DOCKERHUB_USERNAME compte Docker Hub qui possède le dépôt d'images # DOCKERHUB_TOKEN access token Docker Hub (droits Read & Write), jamais le mot de passe # # L'image est celle à renseigner dans VITRINE_FRONTEND_IMAGE côté control-plane Omnex. on: push: branches: [main] tags: ["v*"] paths: - "frontend/**" - ".github/workflows/frontend-image.yml" pull_request: paths: - "frontend/**" - ".github/workflows/frontend-image.yml" workflow_dispatch: permissions: contents: read # Un seul build par branche/tag : un nouveau push annule celui en cours. concurrency: group: frontend-image-${{ github.ref }} cancel-in-progress: true env: IMAGE: xor1234/vitrine-frontend jobs: build: runs-on: ubuntu-latest timeout-minutes: 20 steps: - uses: actions/checkout@v4 - uses: docker/setup-buildx-action@v3 # Pas de login sur les pull requests : les secrets n'y sont pas exposés # (forks) et rien n'est poussé. - name: Login Docker Hub if: github.event_name != 'pull_request' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Tags et labels de l'image id: meta uses: docker/metadata-action@v5 with: images: ${{ env.IMAGE }} tags: | type=raw,value=latest,enable={{is_default_branch}} type=sha,format=short type=semver,pattern={{version}} - name: Build et push uses: docker/build-push-action@v6 with: context: frontend file: frontend/Dockerfile platforms: linux/amd64 push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha,scope=frontend cache-to: type=gha,mode=max,scope=frontend