diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 07e848c1..367d88e7 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -26,34 +26,49 @@ on: # github.com / du miroir gitea.com depuis le runner self-hosted. jobs: - # Le job tourne DIRECTEMENT dans le conteneur (clé "container", standard - # Gitea/GitHub Actions) plutôt que de lancer un `docker run` imbriqué - # depuis le runner — un essai précédent (docker run -v "$PWD":/app ...) - # échouait avec "Could not open requirements file" : sur un runner qui - # exécute déjà le job dans un conteneur (Docker-outside-of-Docker), "$PWD" - # ne correspond à aucun chemin que le démon Docker de l'HÔTE peut monter, - # /app se retrouvait donc vide dans le conteneur imbriqué. Avec "container", - # le checkout dépose directement les fichiers dans le système de fichiers - # du conteneur du job, aucun montage de volume à faire soi-même. + # Deux essais précédents ont échoué : + # 1. docker run -v "$PWD":/app ... imbriqué depuis le runner — sur un + # runner qui exécute déjà le job dans son propre conteneur (Docker- + # outside-of-Docker), "$PWD" ne correspond à aucun chemin que le démon + # Docker de l'HÔTE peut monter : /app se retrouvait vide. + # 2. jobs.test.container: image: python:3.13-slim — actions/checkout@v4 + # (une action Node.js) a alors besoin de Node dans CE conteneur pour + # s'exécuter, qui ne l'a pas ("command not found", voir + # nektos/act#107) : `container:` remplace tout l'environnement des + # steps, pas seulement celui des commandes qu'on y lance soi-même. + # Solution : le job tourne sur le runner PAR DÉFAUT (checkout fonctionne, + # Node y est déjà disponible), et les tests s'exécutent PENDANT un + # `docker build` (Dockerfile passé par stdin, jamais commité) — le + # transfert du contexte de build au démon Docker ne dépend JAMAIS d'un + # chemin hôte/montage de volume (protocole API, un tar envoyé tel quel), + # donc insensible au problème Docker-outside-of-Docker du point 1. test-python: runs-on: ubuntu-latest - container: - image: python:3.13-slim steps: - uses: actions/checkout@v4 - - name: Installer les dépendances Python (dev) - run: pip install --quiet -r requirements-dev.txt - - name: Tests Python (pytest) - run: python -m pytest tests/ -q + - name: Tests Python (pytest, exécutés PENDANT le build d'une image jetable) + run: | + docker build -f - -t forge-test-python:${{ gitea.sha }} . <<'DOCKERFILE' + FROM python:3.13-slim + WORKDIR /app + COPY requirements.txt requirements-dev.txt ./ + RUN pip install --no-cache-dir -r requirements-dev.txt + COPY . . + RUN python -m pytest tests/ -q + DOCKERFILE test-js: runs-on: ubuntu-latest - container: - image: node:20-slim steps: - uses: actions/checkout@v4 - name: Tests JS (node:test — logique pure de static/js/play/, voir le plan de modularisation) - run: node --test static/js/play/__tests__/*.test.js + run: | + docker build -f - -t forge-test-js:${{ gitea.sha }} . <<'DOCKERFILE' + FROM node:20-slim + WORKDIR /app + COPY static/js/play/ static/js/play/ + RUN node --test static/js/play/__tests__/*.test.js + DOCKERFILE build-and-push: needs: [test-python, test-js]