name: API Docs

# Trigger: include "/docs" anywhere in the commit message.
#
#   git commit -m "docs: update API examples /docs"
#
# Also available via workflow_dispatch for manual runs.

on:
  push:
    branches:
      - main
      - "claude/**"
      - "feature/**"
      - "review/**"
  workflow_dispatch: {}

# ─────────────────────────────────────────────────────────────────────────────
# Doc-build — informational only
#
# Generates Doxygen HTML from the public headers and reports warning
# statistics.  Does NOT block merges: `continue-on-error: true` ensures
# warnings or extraction issues never fail.
# ─────────────────────────────────────────────────────────────────────────────
jobs:
  doc-build:
    if: |
      github.event_name == 'workflow_dispatch' ||
      contains(github.event.head_commit.message, '/docs')
    runs-on: eulernest
    container:
      image: git.eulernest.eu/conformallab/ci-cpp:latest
      options: "--memory=800m --memory-swap=1200m"
    continue-on-error: true   # never block the merge
    steps:
      - uses: actions/checkout@v4

      - name: Generate API documentation
        run: doxygen Doxyfile 2>&1 | tee doxygen.log

      - name: Summarise warnings
        if: always()
        run: |
          if [ -f doc/doxygen/doxygen-warnings.log ]; then
            warn=$(wc -l < doc/doxygen/doxygen-warnings.log)
            echo "DOC ▸ Doxygen warnings: $warn"
            echo ""
            echo "First 20 warnings:"
            head -20 doc/doxygen/doxygen-warnings.log
          else
            echo "DOC ▸ No warning log produced — check that Doxyfile WARN_LOGFILE points to doc/doxygen/doxygen-warnings.log"
          fi

      - name: Report HTML output
        if: always()
        run: |
          if [ -d doc/doxygen/html ]; then
            files=$(find doc/doxygen/html -type f | wc -l)
            size=$(du -sh doc/doxygen/html | cut -f1)
            echo "DOC ▸ HTML output: $files files, $size total"
          fi
