Merge pull request 'ci+quality: structural gates (CI: 3 new; local: 7 new + .clang-tidy)' (#18) from ci/structural-tests into main
Some checks failed
C++ Tests / test-fast (push) Has started running
C++ Tests / test-cgal (push) Has been cancelled
API Docs / doc-build (push) Has been cancelled
Doxygen → Codeberg Pages / publish (push) Has been cancelled
Markdown link check / check (push) Has been cancelled
Mirror to Codeberg / mirror (push) Has been cancelled

This commit is contained in:
2026-05-26 09:14:45 +00:00
87 changed files with 2584 additions and 6 deletions

View File

@@ -96,3 +96,19 @@ jobs:
passed=$(( ${total:-0} - ${failed:-0} - ${skipped:-0} ))
echo "CGAL ▸ TOTAL ${total:-0} | PASSED $passed | FAILED ${failed:-0} | SKIPPED ${skipped:-0}"
fi
# ── Structural gate: doc/api/tests.md totals match ctest reality ───
# Single source of truth for test counts (see doc/release-policy.md).
# Reuses the already-built ./build dir via BUILD_DIR env var, so this
# adds ~5 s on top of the existing CGAL job.
- name: Verify test-count consistency (doc/api/tests.md)
run: BUILD_DIR=build bash scripts/check-test-counts.sh
# ── Structural gate: end-to-end smoke (try_it.sh) ──────────────────
# The user-facing quick-start script: configure + build + run the
# full ctest + run the Euclidean example on a bundled mesh. If
# this regresses, README quick-start instructions are broken.
# try_it.sh creates its own build-try/ — accept the ~3 min cost as
# the price of guaranteeing the documented workflow stays working.
- name: End-to-end smoke test (scripts/try_it.sh)
run: bash scripts/try_it.sh

View File

@@ -0,0 +1,40 @@
name: Markdown link check
# Verify every internal markdown link in the repo resolves to an existing
# file (or anchor). External http(s) links are also probed but with a
# loose timeout — flaky third-party hosts must not break our CI.
#
# Trigger: PRs that touch any *.md file, plus a weekly cron so external
# link rot is caught even when nobody is editing docs.
on:
pull_request:
paths:
- "**/*.md"
- ".gitea/workflows/markdown-links.yml"
push:
branches:
- main
paths:
- "**/*.md"
- ".gitea/workflows/markdown-links.yml"
schedule:
- cron: "0 5 * * 1" # Monday 05:00 UTC weekly link-rot check
workflow_dispatch: {}
jobs:
check:
runs-on: eulernest
container:
image: git.eulernest.eu/conformallab/ci-cpp:latest
steps:
- uses: actions/checkout@v4
# ── Pure-python internal link check (no external network needed) ────
# We use the same logic that found the 2 broken links before the
# reviewer meeting: parse every [text](path) link, check that the
# target file exists relative to the source file's directory. Skips
# http(s)://, mailto:, and pure-anchor (#fragment) links.
- name: Internal link check (all *.md files)
run: python3 scripts/check-markdown-links.py