Add POSIX ACL/xattr tooling (acl, attr), zstd/lz4/xxhash dev libs and build rsync 3.4.1 from source so drop-in parity tests can run inside CI. Bump all workflow/agent image references v10 -> v11.
138 lines
4.4 KiB
YAML
138 lines
4.4 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main, dev]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
container: gitea.tap-tap.win/taptap/fastsync-ci:v11
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
|
|
- name: clang-format check
|
|
run: find src/ tests/ -name '*.c' -o -name '*.h' | xargs clang-format --dry-run --Werror
|
|
|
|
- name: cppcheck
|
|
run: cppcheck --enable=warning,style,performance,portability --suppress=missingIncludeSystem --error-exitcode=1 --inline-suppr src/ tests/
|
|
|
|
# Fast PR gate: build + unit tests + a representative subset of integration
|
|
# tests (marked `ci`), parallelized with pytest-xdist. Only the full coverage
|
|
# jobs below (sanitizers/fuzz/coverage/valgrind and the FULL integration
|
|
# suite) run on merge to dev/main, so PR CI stays well under ~3 minutes.
|
|
build-and-test:
|
|
runs-on: ubuntu-latest
|
|
container: gitea.tap-tap.win/taptap/fastsync-ci:v11
|
|
needs: lint
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
|
|
- name: Configure
|
|
run: cmake -B build -S . -DSTRICT_WARNINGS=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build -j$(nproc)
|
|
|
|
- name: Unit Tests
|
|
run: ctest --test-dir build --output-on-failure -j$(nproc)
|
|
|
|
- name: Integration Tests (PR smoke subset)
|
|
if: github.event_name == 'pull_request'
|
|
run: python3 -m pytest tests/integration/ -n 4 --dist=load -m ci --durations=25 --tb=short -q
|
|
|
|
- name: Integration Tests (full suite)
|
|
if: github.event_name == 'push'
|
|
run: python3 -m pytest tests/integration/ -n 4 --dist=load -m "not setpriv" --durations=25 --tb=short -q
|
|
|
|
sanitizers:
|
|
runs-on: ubuntu-latest
|
|
container: gitea.tap-tap.win/taptap/fastsync-ci:v11
|
|
needs: lint
|
|
if: github.event_name == 'push'
|
|
strategy:
|
|
matrix:
|
|
sanitizer: [address, undefined]
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
|
|
- name: Configure
|
|
run: cmake -B build-${{ matrix.sanitizer }} -S . -DSANITIZER=${{ matrix.sanitizer }}
|
|
|
|
- name: Build
|
|
run: cmake --build build-${{ matrix.sanitizer }} -j$(nproc)
|
|
|
|
- name: Unit Tests
|
|
run: ctest --test-dir build-${{ matrix.sanitizer }} --output-on-failure
|
|
|
|
fuzz-build:
|
|
runs-on: ubuntu-latest
|
|
container: gitea.tap-tap.win/taptap/fastsync-ci:v11
|
|
needs: lint
|
|
if: github.event_name == 'push'
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
|
|
- name: Configure (clang + fuzz)
|
|
run: CC=clang CXX=clang++ cmake -B build-fuzz -S . -DENABLE_FUZZ=ON
|
|
|
|
- name: Build fuzz targets
|
|
run: cmake --build build-fuzz -j$(nproc)
|
|
|
|
- name: Smoke fuzz targets
|
|
run: |
|
|
for target in build-fuzz/fuzz_*; do
|
|
[ -x "$target" ] || continue
|
|
timeout 10s "$target" -runs=100 -max_total_time=5
|
|
done
|
|
|
|
coverage:
|
|
runs-on: ubuntu-latest
|
|
container: gitea.tap-tap.win/taptap/fastsync-ci:v11
|
|
needs: lint
|
|
if: github.event_name == 'push'
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
|
|
- name: Configure
|
|
run: cmake -B build -S . -DENABLE_COVERAGE=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build -j$(nproc)
|
|
|
|
- name: Unit Tests
|
|
run: ctest --test-dir build --output-on-failure
|
|
|
|
- name: Coverage Report
|
|
run: |
|
|
lcov --capture --directory build --output-file coverage.info --branch-coverage --ignore-errors negative
|
|
lcov --remove coverage.info '/usr/*' '*/tests/*' '*/_deps/*' --output-file coverage.info --branch-coverage --ignore-errors unused,negative
|
|
lcov --list coverage.info
|
|
|
|
valgrind:
|
|
runs-on: ubuntu-latest
|
|
container: gitea.tap-tap.win/taptap/fastsync-ci:v11
|
|
needs: lint
|
|
if: github.event_name == 'push'
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
|
|
- name: Configure
|
|
run: cmake -B build -S . -DSTRICT_WARNINGS=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build -j$(nproc)
|
|
|
|
- name: Valgrind Memcheck
|
|
run: valgrind --leak-check=full --show-leak-kinds=definite --error-exitcode=1 ./build/tests
|
|
env:
|
|
FASTSYNC_UNDER_VALGRIND: "1"
|