Corrige la CI (suite) : exécute les tests pendant un docker build, pas dans un container de job
Build and deploy / test-python (push) Failing after 13s
Build and deploy / test-js (push) Successful in 7s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped

"container: image: python:3.13-slim" (tentative précédente) casse
actions/checkout@v4 : c'est une action Node.js, qui a besoin de Node
dans l'environnement d'exécution des steps — "container:" remplace CET
environnement en entier par l'image donnée, qui n'a pas Node
("command not found", nektos/act#107), pas seulement l'environnement
des commandes qu'on y lance soi-même.

Nouvelle approche : le job tourne sur le runner par défaut (checkout
fonctionne normalement, Node y est déjà disponible), et les tests
s'exécutent PENDANT un `docker build` (Dockerfile jetable passé par
stdin, jamais commité, un par langage) plutôt que dans un conteneur
lancé après coup — le transfert du contexte de build vers le démon
Docker passe par le protocole API (tar), jamais par un chemin hôte à
monter, donc insensible au problème Docker-outside-of-Docker qui avait
fait échouer le tout premier essai (docker run -v "$PWD":/app).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-08-30 16:08:59 +02:00
co-authored by Claude Sonnet 5
parent 8e8a159e88
commit d474303a55
+33 -18
View File
@@ -26,34 +26,49 @@ on:
# github.com / du miroir gitea.com depuis le runner self-hosted. # github.com / du miroir gitea.com depuis le runner self-hosted.
jobs: jobs:
# Le job tourne DIRECTEMENT dans le conteneur (clé "container", standard # Deux essais précédents ont échoué :
# Gitea/GitHub Actions) plutôt que de lancer un `docker run` imbriqué # 1. docker run -v "$PWD":/app ... imbriqué depuis le runner — sur un
# depuis le runner — un essai précédent (docker run -v "$PWD":/app ...) # runner qui exécute déjà le job dans son propre conteneur (Docker-
# échouait avec "Could not open requirements file" : sur un runner qui # outside-of-Docker), "$PWD" ne correspond à aucun chemin que le démon
# exécute déjà le job dans un conteneur (Docker-outside-of-Docker), "$PWD" # Docker de l'HÔTE peut monter : /app se retrouvait vide.
# ne correspond à aucun chemin que le démon Docker de l'HÔTE peut monter, # 2. jobs.test.container: image: python:3.13-slim — actions/checkout@v4
# /app se retrouvait donc vide dans le conteneur imbriqué. Avec "container", # (une action Node.js) a alors besoin de Node dans CE conteneur pour
# le checkout dépose directement les fichiers dans le système de fichiers # s'exécuter, qui ne l'a pas ("command not found", voir
# du conteneur du job, aucun montage de volume à faire soi-même. # 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: test-python:
runs-on: ubuntu-latest runs-on: ubuntu-latest
container:
image: python:3.13-slim
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Installer les dépendances Python (dev) - name: Tests Python (pytest, exécutés PENDANT le build d'une image jetable)
run: pip install --quiet -r requirements-dev.txt run: |
- name: Tests Python (pytest) docker build -f - -t forge-test-python:${{ gitea.sha }} . <<'DOCKERFILE'
run: python -m pytest tests/ -q 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: test-js:
runs-on: ubuntu-latest runs-on: ubuntu-latest
container:
image: node:20-slim
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Tests JS (node:test — logique pure de static/js/play/, voir le plan de modularisation) - 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: build-and-push:
needs: [test-python, test-js] needs: [test-python, test-js]