+ run: scan-build-18 ./configure --with-rrsync --disable-md2man
+ - name: scan-build (pinned clang-18)
+ # Informational: no --status-bugs, so existing findings don't fail the
+ # build; the report is summarised and uploaded for triage. Re-add
+ # --status-bugs here (and 'set -o pipefail; ...; exit $status') to gate
+ # once the tree is at zero for clang-18.
+ run: |
+ scan-build-18 -o "$PWD/scan-report" make check-progs -j"$(nproc)" 2>&1 | tee scan-build.out
+ echo '## scan-build (clang-18, pinned)' >>"$GITHUB_STEP_SUMMARY"
+ grep -E 'scan-build: .* bugs? found|scan-build: No bugs found' scan-build.out >>"$GITHUB_STEP_SUMMARY" || true
+ - name: upload report
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: scan-build-report-clang18
+ path: scan-report
+ if-no-files-found: ignore
+
+ # INFORMATIONAL run: whatever clang ubuntu-latest currently ships. Newer
+ # clang releases enable extra, FP-heavy checkers that the gate deliberately
+ # avoids, so this is NOT a gate (no --status-bugs). It surfaces what the
+ # newest analyzer sees -- useful for spotting genuine new findings before a
+ # gate bump -- without blocking merges. continue-on-error keeps a noisy or
+ # broken run from affecting the workflow's required status.
+ informational-latest:
+ runs-on: ubuntu-latest
+ name: scan-build (latest clang, informational)
+ continue-on-error: true
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: prep
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y clang clang-tools acl libacl1-dev attr libattr1-dev liblz4-dev libzstd-dev libxxhash-dev libpopt-dev openssl
+ - name: configure (under scan-build)