Skip to content

fix(install): l'apt de l'offre ffmpeg lit /dev/null — dpkg avalait la… #32

fix(install): l'apt de l'offre ffmpeg lit /dev/null — dpkg avalait la…

fix(install): l'apt de l'offre ffmpeg lit /dev/null — dpkg avalait la… #32

Workflow file for this run

# 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