Skip to content

Stability & Testing Refinement #161

Stability & Testing Refinement

Stability & Testing Refinement #161

Workflow file for this run

name: cloudSQL CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
style-check:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
- name: Run clang-format fix
run: |
sudo apt-get update
sudo apt-get install -y clang-format
find src include tests -name "*.cpp" -o -name "*.hpp" | xargs clang-format -i
- name: Commit style fixes
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "style: automated clang-format fixes"
build-and-test:
needs: style-check
runs-on: ubuntu-latest
strategy:
matrix:
compiler: [clang++, g++]
sanitizer: [address, thread]
exclude:
- compiler: g++
sanitizer: thread # Focus TSan on Clang for faster CI
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y cmake clang clang-tidy llvm ninja-build ccache lcov || (sleep 10 && sudo apt-get update && sudo apt-get install -y cmake clang clang-tidy llvm ninja-build ccache lcov)
- name: Cache ccache
uses: actions/cache@v4
with:
path: ~/.ccache
key: ${{ runner.os }}-${{ matrix.compiler }}-${{ matrix.sanitizer }}-ccache-${{ github.sha }}
restore-keys: |
${{ runner.os }}-${{ matrix.compiler }}-${{ matrix.sanitizer }}-ccache-
- name: Configure CMake
run: |
mkdir build
cd build
export CCACHE_DIR=~/.ccache
cmake .. -G Ninja \
-DCMAKE_CXX_COMPILER=${{ matrix.compiler }} \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DUSE_SANITIZER=${{ matrix.sanitizer }} \
-DBUILD_TESTS=ON \
-DSTRICT_LINT=OFF \
-DCMAKE_CXX_CLANG_TIDY="" \
-DBUILD_COVERAGE=${{ matrix.sanitizer == 'address' && 'ON' || 'OFF' }}
- name: Build
run: |
cd build
ninja sqlEngineCore
ninja
- name: Run Tests
run: |
cd build
./cloudSQL_tests
./lock_manager_tests
./server_tests
./transaction_manager_tests
./statement_tests
./recovery_tests
./recovery_manager_tests
./buffer_pool_tests
- name: Generate Coverage Report
if: matrix.sanitizer == 'address' && matrix.compiler == 'clang++'
run: |
cd build
lcov --directory . --capture --output-file coverage.info --gcov-tool "$GITHUB_WORKSPACE/.github/scripts/llvm-gcov.sh" --ignore-errors inconsistent
lcov --remove coverage.info '/usr/*' '*/tests/*' '*/CMakeFiles/*' '*/_deps/*' --output-file filtered_coverage.info --ignore-errors inconsistent,unused
genhtml filtered_coverage.info --output-directory out_coverage --ignore-errors inconsistent
- name: Upload Coverage
if: matrix.sanitizer == 'address' && matrix.compiler == 'clang++'
uses: actions/upload-artifact@v4
with:
name: code-coverage-report
path: build/out_coverage
- name: Upload Binaries
if: matrix.sanitizer == 'address'
uses: actions/upload-artifact@v4
with:
name: cloudsql-bin-${{ matrix.compiler }}
path: build/cloudSQL