diff --git a/.gitea/docker/Dockerfile.ci-cpp b/.gitea/docker/Dockerfile.ci-cpp index d9278a1..34ae917 100644 --- a/.gitea/docker/Dockerfile.ci-cpp +++ b/.gitea/docker/Dockerfile.ci-cpp @@ -2,6 +2,8 @@ FROM --platform=linux/arm64 ubuntu:22.04 # Node.js 20 from NodeSource (Ubuntu Jammy ships v12 which is too old # for actions/checkout@v4 — static class blocks require Node.js >= 16). +# +# libboost-dev — header-only Boost required by CGAL 6.x (-DWITH_CGAL=ON) RUN apt-get update -qq && \ apt-get install -y --no-install-recommends \ curl ca-certificates && \ @@ -11,6 +13,7 @@ RUN apt-get update -qq && \ cmake \ build-essential \ git \ + libboost-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /workspace diff --git a/.gitea/workflows/cpp-tests.yml b/.gitea/workflows/cpp-tests.yml index 5a55840..84ee042 100644 --- a/.gitea/workflows/cpp-tests.yml +++ b/.gitea/workflows/cpp-tests.yml @@ -6,10 +6,16 @@ on: - main - dev - "claude/**" + - "feature/**" pull_request: +# ───────────────────────────────────────────────────────────────────────────── +# Job 1 — test-fast +# Pure-math tests (Clausen, ImLi₂, Hyper-ideal Geometrie). +# Kein CGAL, kein Boost. Läuft auf ALLEN Branches in < 1 s. +# ───────────────────────────────────────────────────────────────────────────── jobs: - test: + test-fast: runs-on: eulernest container: image: git.eulernest.eu/conformallab/ci-cpp:latest @@ -17,10 +23,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Configure (tests-only mode) + - name: Configure (tests-only) run: cmake -S code -B build -DCMAKE_BUILD_TYPE=Release - - name: Build test binary + - name: Build run: cmake --build build --target conformallab_tests -j$(nproc) - name: Run tests @@ -29,7 +35,7 @@ jobs: --output-on-failure --output-junit test-results.xml - - name: Show test summary + - name: Zusammenfassung if: always() run: | if [ -f test-results.xml ]; then @@ -37,5 +43,56 @@ jobs: failed=$(grep -o 'failures="[0-9]*"' test-results.xml | grep -o '[0-9]*' | head -1) skipped=$(grep -o 'skipped="[0-9]*"' test-results.xml | grep -o '[0-9]*' | head -1) passed=$(( ${total:-0} - ${failed:-0} - ${skipped:-0} )) - echo "TOTAL: ${total:-0} | PASSED: $passed | FAILED: ${failed:-0} | SKIPPED: ${skipped:-0}" + echo "FAST ▸ TOTAL ${total:-0} | PASSED $passed | FAILED ${failed:-0} | SKIPPED ${skipped:-0}" + fi + +# ───────────────────────────────────────────────────────────────────────────── +# Job 2 — test-cgal +# Vollständige CGAL-Test-Suite (Phase 3–7, 158 Tests). +# Läuft nur auf main, dev und Pull Requests — nicht auf Feature-Branches. +# Startet erst nach erfolgreichem test-fast. +# +# Boost-Install-Schritt: solange das Docker-Image noch kein libboost-dev +# enthält, wird es hier zur Laufzeit nachinstalliert (~15 s). +# Nach dem nächsten Image-Rebuild (Dockerfile bereits aktualisiert) wird +# dieser Schritt zum No-Op. +# ───────────────────────────────────────────────────────────────────────────── + test-cgal: + needs: test-fast + if: > + github.ref == 'refs/heads/main' || + github.ref == 'refs/heads/dev' || + github.event_name == 'pull_request' + runs-on: eulernest + container: + image: git.eulernest.eu/conformallab/ci-cpp:latest + + steps: + - uses: actions/checkout@v4 + + - name: Boost installieren (Übergang bis Image-Rebuild) + run: apt-get update -qq && apt-get install -y --no-install-recommends libboost-dev + + - name: Configure (WITH_CGAL) + run: cmake -S code -B build -DWITH_CGAL=ON -DCMAKE_BUILD_TYPE=Release + + - name: Build CGAL-Tests + run: cmake --build build --target conformallab_cgal_tests -j$(nproc) + + - name: Run CGAL-Tests + run: > + ctest --test-dir build + -R "^cgal\." + --output-on-failure + --output-junit cgal-results.xml + + - name: Zusammenfassung + if: always() + run: | + if [ -f cgal-results.xml ]; then + total=$(grep -o 'tests="[0-9]*"' cgal-results.xml | grep -o '[0-9]*' | head -1) + failed=$(grep -o 'failures="[0-9]*"' cgal-results.xml | grep -o '[0-9]*' | head -1) + skipped=$(grep -o 'skipped="[0-9]*"' cgal-results.xml | grep -o '[0-9]*' | head -1) + passed=$(( ${total:-0} - ${failed:-0} - ${skipped:-0} )) + echo "CGAL ▸ TOTAL ${total:-0} | PASSED $passed | FAILED ${failed:-0} | SKIPPED ${skipped:-0}" fi