diff --git a/.github/workflows/backend-image.yml b/.github/workflows/backend-image.yml new file mode 100644 index 0000000..cf290dc --- /dev/null +++ b/.github/workflows/backend-image.yml @@ -0,0 +1,75 @@ +name: backend-image + +# Construit l'image du backend (Go/Gin) 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_BACKEND_IMAGE côté control-plane Omnex. +on: + push: + branches: [main] + tags: ["v*"] + paths: + - "backend/**" + - ".github/workflows/backend-image.yml" + pull_request: + paths: + - "backend/**" + - ".github/workflows/backend-image.yml" + workflow_dispatch: + +permissions: + contents: read + +# Un seul build par branche/tag : un nouveau push annule celui en cours. +concurrency: + group: backend-image-${{ github.ref }} + cancel-in-progress: true + +env: + IMAGE: xor1234/vitrine-backend + +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: backend + file: backend/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=backend + cache-to: type=gha,mode=max,scope=backend diff --git a/.github/workflows/frontend-image.yml b/.github/workflows/frontend-image.yml new file mode 100644 index 0000000..a4621ac --- /dev/null +++ b/.github/workflows/frontend-image.yml @@ -0,0 +1,75 @@ +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