Skip to content

Fix ci build without code changes #227

Fix ci build without code changes

Fix ci build without code changes #227

Workflow file for this run

name: Test ubuntu latest
on:
pull_request:
branches: [ "**" ]
push:
branches: [ master ]
workflow_dispatch:
# Prevent duplicate runs on the same branch/PR and cancel superseded jobs
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
# Allow the 'unstable' Redis build to be non-blocking
continue-on-error: ${{ matrix.redis_version == 'unstable' }}
strategy:
matrix:
redis_version: ["7.2", "7.4", "unstable"]
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain (stable) with clippy and rustfmt
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- name: Install build dependencies (autotools, pkg-config, SSL, build-essential)
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
autoconf automake libtool pkg-config \
libssl-dev
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Checkout submodules
run: git submodule update --init --recursive
- name: install libclang for bindgen
run: |
sudo apt-get update
# Install multiple versions to ensure we have libclang
sudo apt-get install -y libclang-dev llvm-dev clang libclang-18-dev llvm-18-dev
sudo ldconfig
echo "=== Installed packages ==="
dpkg -l | grep -E "(clang|llvm)" | head -10
- name: Debug and setup libclang
run: |
echo "=== Finding libclang ==="
# Try multiple approaches to find libclang
echo "1. Checking llvm-config..."
if command -v llvm-config >/dev/null 2>&1; then
LLVM_LIBDIR=$(llvm-config --libdir)
echo "llvm-config --libdir: $LLVM_LIBDIR"
if [ -f "$LLVM_LIBDIR/libclang.so" ]; then
echo "Found libclang at: $LLVM_LIBDIR"
echo "LIBCLANG_PATH=$LLVM_LIBDIR" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$LLVM_LIBDIR" >> $GITHUB_ENV
echo "SUCCESS: Using llvm-config path"
exit 0
fi
fi
echo "2. Searching /usr/lib..."
CLANG_FILES=$(find /usr/lib -name "libclang*.so*" 2>/dev/null | head -5)
if [ -n "$CLANG_FILES" ]; then
CLANG_DIR=$(echo "$CLANG_FILES" | head -1 | xargs dirname)
echo "Found libclang files in: $CLANG_DIR"
echo "LIBCLANG_PATH=$CLANG_DIR" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$CLANG_DIR" >> $GITHUB_ENV
echo "SUCCESS: Using /usr/lib path"
exit 0
fi
echo "3. Searching /usr/lib/x86_64-linux-gnu..."
if [ -f "/usr/lib/x86_64-linux-gnu/libclang.so" ]; then
echo "Found libclang at: /usr/lib/x86_64-linux-gnu"
echo "LIBCLANG_PATH=/usr/lib/x86_64-linux-gnu" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu" >> $GITHUB_ENV
echo "SUCCESS: Using x86_64-linux-gnu path"
exit 0
fi
echo "ERROR: Could not find libclang anywhere!"
echo "Available files:"
find /usr -name "*clang*" 2>/dev/null | head -10
exit 1
- name: Verify libclang setup
run: |
echo "=== Verifying libclang setup ==="
echo "LIBCLANG_PATH: $LIBCLANG_PATH"
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
if [ -n "$LIBCLANG_PATH" ]; then
echo "Checking libclang at $LIBCLANG_PATH:"
ls -la $LIBCLANG_PATH/libclang* || echo "No libclang files found"
else
echo "ERROR: LIBCLANG_PATH not set!"
exit 1
fi
- name: format
run: cargo fmt -- --check
- name: clippy
run: |
echo "=== Clippy step environment ==="
# Try to find libclang directly in this step
echo "Searching for libclang..."
CLANG_PATH=""
# Method 1: Try llvm-config
if command -v llvm-config >/dev/null 2>&1; then
LLVM_LIBDIR=$(llvm-config --libdir)
echo "llvm-config --libdir: $LLVM_LIBDIR"
if [ -f "$LLVM_LIBDIR/libclang.so" ]; then
CLANG_PATH="$LLVM_LIBDIR"
echo "Found libclang via llvm-config: $CLANG_PATH"
fi
fi
# Method 2: Search /usr/lib
if [ -z "$CLANG_PATH" ]; then
CLANG_FILES=$(find /usr/lib -name "libclang*.so*" 2>/dev/null | head -1)
if [ -n "$CLANG_FILES" ]; then
CLANG_PATH=$(echo "$CLANG_FILES" | xargs dirname)
echo "Found libclang via search: $CLANG_PATH"
fi
fi
# Method 3: Try standard Ubuntu location
if [ -z "$CLANG_PATH" ]; then
if [ -f "/usr/lib/x86_64-linux-gnu/libclang.so" ]; then
CLANG_PATH="/usr/lib/x86_64-linux-gnu"
echo "Found libclang at standard location: $CLANG_PATH"
fi
fi
if [ -z "$CLANG_PATH" ]; then
echo "ERROR: Could not find libclang!"
find /usr -name "*clang*" 2>/dev/null | head -10
exit 1
fi
echo "Using LIBCLANG_PATH: $CLANG_PATH"
export LIBCLANG_PATH="$CLANG_PATH"
export LD_LIBRARY_PATH="$CLANG_PATH:$LD_LIBRARY_PATH"
echo "LIBCLANG_PATH: $LIBCLANG_PATH"
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
ls -la $LIBCLANG_PATH/libclang* || echo "No libclang found at $LIBCLANG_PATH"
echo ""
MODULE_NAME=MRTESTSCLIPPY cargo clippy --all-targets --all-features
make clean
- name: install rltest
run: python3 -m pip install git+https://github.com/RedisLabsModules/RLTest@60e3290 gevent
- name: install redis
run: |
git clone https://github.com/redis/redis
cd redis
git checkout ${{ matrix.redis_version }}
BUILD_TLS=yes make valgrind install
- name: install valgrind
run: |
sudo apt-get update --fix-missing
sudo apt-get install valgrind
- name: Build the dependencies
run: make build_deps
- name: Default tests
run: |
# Find libclang for this step
CLANG_PATH=""
if command -v llvm-config >/dev/null 2>&1; then
LLVM_LIBDIR=$(llvm-config --libdir)
if [ -f "$LLVM_LIBDIR/libclang.so" ]; then
CLANG_PATH="$LLVM_LIBDIR"
fi
fi
if [ -z "$CLANG_PATH" ]; then
CLANG_FILES=$(find /usr/lib -name "libclang*.so*" 2>/dev/null | head -1)
if [ -n "$CLANG_FILES" ]; then
CLANG_PATH=$(echo "$CLANG_FILES" | xargs dirname)
fi
fi
if [ -z "$CLANG_PATH" ] && [ -f "/usr/lib/x86_64-linux-gnu/libclang.so" ]; then
CLANG_PATH="/usr/lib/x86_64-linux-gnu"
fi
export LIBCLANG_PATH="$CLANG_PATH"
export LD_LIBRARY_PATH="$CLANG_PATH:$LD_LIBRARY_PATH"
make run_tests
- name: SSL tests
run: |
# Find libclang for this step
CLANG_PATH=""
if command -v llvm-config >/dev/null 2>&1; then
LLVM_LIBDIR=$(llvm-config --libdir)
if [ -f "$LLVM_LIBDIR/libclang.so" ]; then
CLANG_PATH="$LLVM_LIBDIR"
fi
fi
if [ -z "$CLANG_PATH" ]; then
CLANG_FILES=$(find /usr/lib -name "libclang*.so*" 2>/dev/null | head -1)
if [ -n "$CLANG_FILES" ]; then
CLANG_PATH=$(echo "$CLANG_FILES" | xargs dirname)
fi
fi
if [ -z "$CLANG_PATH" ] && [ -f "/usr/lib/x86_64-linux-gnu/libclang.so" ]; then
CLANG_PATH="/usr/lib/x86_64-linux-gnu"
fi
export LIBCLANG_PATH="$CLANG_PATH"
export LD_LIBRARY_PATH="$CLANG_PATH:$LD_LIBRARY_PATH"
make run_tests_ssl
- name: Valgrind tests
run: |
# Find libclang for this step
CLANG_PATH=""
if command -v llvm-config >/dev/null 2>&1; then
LLVM_LIBDIR=$(llvm-config --libdir)
if [ -f "$LLVM_LIBDIR/libclang.so" ]; then
CLANG_PATH="$LLVM_LIBDIR"
fi
fi
if [ -z "$CLANG_PATH" ]; then
CLANG_FILES=$(find /usr/lib -name "libclang*.so*" 2>/dev/null | head -1)
if [ -n "$CLANG_FILES" ]; then
CLANG_PATH=$(echo "$CLANG_FILES" | xargs dirname)
fi
fi
if [ -z "$CLANG_PATH" ] && [ -f "/usr/lib/x86_64-linux-gnu/libclang.so" ]; then
CLANG_PATH="/usr/lib/x86_64-linux-gnu"
fi
export LIBCLANG_PATH="$CLANG_PATH"
export LD_LIBRARY_PATH="$CLANG_PATH:$LD_LIBRARY_PATH"
make run_tests_valgrind