From d4ea5fdd2ec8df18488c4744f6a6d4a3c6cba6ab Mon Sep 17 00:00:00 2001 From: Tarik Moussa Date: Sun, 31 May 2026 02:00:39 +0200 Subject: [PATCH] =?UTF-8?q?ci:=20remove=20/ci-all=20=E2=80=94=20Pi=20canno?= =?UTF-8?q?t=20sustain=20parallel=20Docker=20containers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Pi runner (3-4 GB RAM, swap heavily loaded) OOMs when /ci-all triggers test-cgal + quality-gates + doc-build + links simultaneously: four Docker containers start at once after test-fast completes, each consuming 150-400 MB, exhausting available RAM. Fix: /ci-all removed from all three workflow files. Each keyword now triggers exactly one job — no parallel container competition. Safe workflow: one keyword per commit. Typical sequence: git commit -m 'fix: ... /test-cgal' → CGAL tests (~5 min) git commit -m 'chore: /quality-gates' → style checks (~30 s) CLAUDE.md: CI table updated with Pi-runner warning note. Co-Authored-By: Claude Sonnet 4.6 --- .gitea/workflows/cpp-tests.yml | 14 ++++++-------- .gitea/workflows/doc-build.yaml | 3 +-- .gitea/workflows/markdown-links.yml | 3 +-- CLAUDE.md | 5 +++++ 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/.gitea/workflows/cpp-tests.yml b/.gitea/workflows/cpp-tests.yml index 4bc4977..851bd76 100644 --- a/.gitea/workflows/cpp-tests.yml +++ b/.gitea/workflows/cpp-tests.yml @@ -3,11 +3,13 @@ name: C++ Tests # Trigger keywords in commit message (checked via head_commit.message): # /test-cgal — full CGAL test suite (277 tests, ~5 min build) # /quality-gates — license, codespell, shellcheck, CGAL conventions -# /ci-all — all of the above + /docs + /links (across all workflows) +# +# ⚠ /ci-all was removed: the Pi runner (3-4 GB RAM) cannot sustain +# multiple Docker containers simultaneously. Use one keyword per commit. # # Examples: # git commit -m "fix: correct angle formula /test-cgal" -# git commit -m "release prep /ci-all" +# git commit -m "chore: update headers /quality-gates" # # test-fast always runs on every push — it is fast (< 5 s) and cheap. @@ -76,9 +78,7 @@ jobs: # ───────────────────────────────────────────────────────────────────────────── test-cgal: needs: test-fast - if: | - contains(github.event.head_commit.message, '/test-cgal') || - contains(github.event.head_commit.message, '/ci-all') + if: contains(github.event.head_commit.message, '/test-cgal') runs-on: eulernest container: image: git.eulernest.eu/conformallab/ci-cpp:latest @@ -133,9 +133,7 @@ jobs: # Cheap (~30 s): license headers, CGAL conventions, codespell, shellcheck. # ───────────────────────────────────────────────────────────────────────────── quality-gates: - if: | - contains(github.event.head_commit.message, '/quality-gates') || - contains(github.event.head_commit.message, '/ci-all') + if: contains(github.event.head_commit.message, '/quality-gates') runs-on: eulernest container: image: git.eulernest.eu/conformallab/ci-cpp:latest diff --git a/.gitea/workflows/doc-build.yaml b/.gitea/workflows/doc-build.yaml index b66cfaa..d9e8387 100644 --- a/.gitea/workflows/doc-build.yaml +++ b/.gitea/workflows/doc-build.yaml @@ -27,8 +27,7 @@ jobs: doc-build: if: | github.event_name == 'workflow_dispatch' || - contains(github.event.head_commit.message, '/docs') || - contains(github.event.head_commit.message, '/ci-all') + contains(github.event.head_commit.message, '/docs') runs-on: eulernest container: image: git.eulernest.eu/conformallab/ci-cpp:latest diff --git a/.gitea/workflows/markdown-links.yml b/.gitea/workflows/markdown-links.yml index 8bce97f..c7e6192 100644 --- a/.gitea/workflows/markdown-links.yml +++ b/.gitea/workflows/markdown-links.yml @@ -27,8 +27,7 @@ jobs: if: | github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || - contains(github.event.head_commit.message, '/links') || - contains(github.event.head_commit.message, '/ci-all') + contains(github.event.head_commit.message, '/links') runs-on: eulernest container: image: git.eulernest.eu/conformallab/ci-cpp:latest diff --git a/CLAUDE.md b/CLAUDE.md index 3f1df6e..ad9906b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -270,6 +270,11 @@ Three jobs in `.gitea/workflows/cpp-tests.yml`: | `doc-build` | *(none)* | Doxygen | `/docs` in commit message or `workflow_dispatch` | **active** | | `markdown-links` | *(none)* | python3 | `/links` in commit message, weekly cron, `workflow_dispatch` | **active** | +> **⚠ Pi runner limit:** use **one keyword per commit**. The Pi (3-4 GB RAM) cannot run +> multiple Docker containers simultaneously. `/ci-all` was removed for this reason. +> Typical workflow: one commit with `/test-cgal`, then if green a separate commit with +> `/quality-gates`. + Runner: `eulernest` — self-hosted Raspberry Pi, ARM64, Ubuntu 22.04. Docker image: `git.eulernest.eu/conformallab/ci-cpp:latest`. `test-cgal` and `quality-gates` both need `test-fast` to pass first (`needs: test-fast`). `quality-gates` runs four required structural gates: `license-headers.sh`, `cgal-conventions.py`, `codespell.sh`, `shellcheck.sh --strict`. Seven more gates (clang-format, cmake-format, cppcheck, sanitizers, clang-tidy, multi-compiler, reproducible-build) are local-only — see `scripts/quality/README.md`.