fix(install): l'apt de l'offre ffmpeg lit /dev/null — dpkg avalait la… #32
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Publie l'image all-in-one GPU sur GHCR (ghcr.io/<owner>/transcria-allinone). | |
| # | |
| # Permet le parcours « docker pull + une commande » : le testeur évite le build lourd | |
| # (CUDA 12.6 + torch + NeMo + compilation llama.cpp). AUCUN modèle n'est embarqué (poids | |
| # téléchargés au runtime) → image redistribuable. Licences : projet Apache-2.0, llama.cpp MIT, | |
| # NeMo Apache-2.0, opencode MIT, torch BSD, base nvidia/cuda redistribuable. | |
| # | |
| # Déclenchement (opt-in, à la main de l'utilisateur) : | |
| # * push d'un tag `v*` (ex. v0.1.0-beta.5) → build + push `:vX.Y.Z-…` et `:latest` ; | |
| # * `workflow_dispatch` (bouton Actions) → idem, tag dérivé de la ref. | |
| # La poussée GHCR utilise le GITHUB_TOKEN du dépôt (permission packages: write). | |
| # | |
| # ⚠ Coût : l'image est volumineuse (~19 Go). On libère l'espace disque du runner avant build. | |
| # Si le build échoue par manque d'espace/temps, utiliser un runner plus gros (larger runner) | |
| # ou builder/pousser depuis une machine GPU locale (voir docs/DOCKER.md § Publication). | |
| name: publish-allinone-image | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| workflow_dispatch: | |
| jobs: | |
| build-push: | |
| runs-on: ubuntu-22.04 | |
| # 0.3.6 : les étages CUDA épinglés (llama.cpp + audio.cpp + parakeet.cpp) dépassent | |
| # 3 h sur le runner 2 cœurs (kill vécu à 180 min pile). Ils viennent désormais du | |
| # CACHE REGISTRE (refs :buildcache*, semées depuis une machine locale via | |
| # `docker buildx build --target <étage> --cache-to type=registry,...` — cf. | |
| # docs/DOCKER.md § Publication). Le timeout large ne sert que si le cache est froid | |
| # (bump d'un SHA épinglé) ; run nominal ≈ 1 h. | |
| timeout-minutes: 350 | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Libérer de l'espace disque (build CUDA volumineux) | |
| run: | | |
| sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc \ | |
| /usr/local/share/boost "$AGENT_TOOLSDIRECTORY" || true | |
| df -h / | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login GHCR | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| # owner en minuscules (GHCR exige un namespace minuscule ; le nom de propriétaire peut | |
| # contenir des majuscules). | |
| - name: Métadonnées image | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ghcr.io/${{ github.repository_owner }}/transcria-allinone | |
| tags: | | |
| type=ref,event=tag | |
| type=raw,value=latest | |
| - name: Build & push (Dockerfile.allinone-gpu) | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| file: Dockerfile.allinone-gpu | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| # Attestation supply-chain (signal de sérieux pour un projet promu) : provenance | |
| # SLSA (mode=max = inclut les étapes de build + source) + SBOM. GHCR publie alors | |
| # un index OCI (image amd64 + manifestes d'attestation) ; `docker pull <tag>` résout | |
| # toujours l'image — seules des entrées « unknown/unknown » apparaissent dans l'UI. | |
| provenance: mode=max | |
| sbom: true | |
| # Cache registre : étages CUDA épinglés semés localement (llama/runtimes) + | |
| # cache général entretenu par la CI elle-même à chaque publish réussi. | |
| cache-from: | | |
| type=registry,ref=ghcr.io/martossien/transcria-allinone:buildcache | |
| type=registry,ref=ghcr.io/martossien/transcria-allinone:buildcache-runtimes | |
| type=registry,ref=ghcr.io/martossien/transcria-allinone:buildcache-llama | |
| cache-to: type=registry,ref=ghcr.io/martossien/transcria-allinone:buildcache,mode=max | |
| # ── Images de BOT de réunion (vague 4 — L3 du plan UI_REUNIONS) ────────────────────────── | |
| # Publiées à CHAQUE tag applicatif : supprime le build Docker local de l'expérience | |
| # utilisateur (le meeting-runner tire par tag/digest — cf. runner.yaml `images:`). | |
| # Légères (pas de CUDA) : job séparé, parallèle, sans le nettoyage disque du job GPU. | |
| build-push-bots: | |
| runs-on: ubuntu-22.04 | |
| timeout-minutes: 60 | |
| permissions: | |
| contents: read | |
| packages: write | |
| strategy: | |
| matrix: | |
| bot: | |
| - { name: transcria-bot, dockerfile: Dockerfile.bot } | |
| - { name: transcria-zoom-sdk, dockerfile: Dockerfile.zoom-sdk } | |
| - { name: transcria-visio, dockerfile: Dockerfile.visio } | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login GHCR | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Métadonnées image | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ghcr.io/${{ github.repository_owner }}/${{ matrix.bot.name }} | |
| tags: | | |
| type=ref,event=tag | |
| type=raw,value=latest | |
| - name: Build & push (${{ matrix.bot.dockerfile }}) | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| file: ${{ matrix.bot.dockerfile }} | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| provenance: mode=max | |
| sbom: true | |
| cache-from: type=registry,ref=ghcr.io/martossien/${{ matrix.bot.name }}:buildcache | |
| cache-to: type=registry,ref=ghcr.io/martossien/${{ matrix.bot.name }}:buildcache,mode=max |