Skip to content

Install Astral uv in sbuild chroot to satisfy RediSearch PR #6715 test deps #145

Install Astral uv in sbuild chroot to satisfy RediSearch PR #6715 test deps

Install Astral uv in sbuild chroot to satisfy RediSearch PR #6715 test deps #145

Workflow file for this run

name: Build and Test APT unstable
on:
pull_request:
branches:
- unstable
push:
branches:
- unstable
workflow_call:
jobs:
build-source-package:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
dist: ${{ fromJSON(vars.BUILD_DISTS || '["bookworm"]') }}
arch: ${{ fromJSON(vars.BUILD_ARCHS || '["amd64"]') }}
exclude: ${{ fromJSON(vars.BUILD_EXCLUDE || '[]') }}
steps:
- uses: actions/checkout@v4
with:
ref: unstable
- name: Install dependencies
run: |
sudo apt-get update && \
sudo apt-get install \
debhelper dput tcl-tls libsystemd-dev pkgconf cmake clang libssl-dev llvm libclang-dev
- name: Determine version
run: |
VERSION="unstable"
echo "VERSION=${VERSION}" >> $GITHUB_ENV
- name: Get source tarball
run: |
curl --silent -L "https://github.com/redis/redis/archive/refs/heads/${VERSION}.tar.gz" -o redis_${VERSION}.orig.tar.gz
- name: Build source package
run: |
mkdir -p redis-${VERSION}
tar --extract --gunzip --file redis_${VERSION}.orig.tar.gz --strip-components=1 -C redis-${VERSION}
sed -i 's/INSTALL_BIN=\$(PREFIX)\/bin/INSTALL_BIN=\$(DESTDIR)\$(PREFIX)\/bin/' redis-${VERSION}/src/Makefile
echo "===== Updating all Redis module versions to 'master' ====="
find redis-${VERSION}/modules -name "Makefile" -type f | while read -r makefile; do
echo "Processing $makefile"
echo " Before change:"
grep "MODULE_VERSION" "$makefile" || echo " No MODULE_VERSION found"
# Update the MODULE_VERSION to 'master'
sed -i 's/MODULE_VERSION = .*/MODULE_VERSION = master/g' "$makefile"
echo " After change:"
grep "MODULE_VERSION" "$makefile" || echo " No MODULE_VERSION found after update"
echo "-----------------------------------"
done
echo "===== Module version updates completed ====="
cp -pr debian redis-${VERSION}
sed -i "s/@RELEASE@/${{ matrix.dist }}/g" redis-${VERSION}/debian/changelog
( cd redis-${VERSION} && dpkg-buildpackage -S )
- name: Upload source package artifact
uses: actions/upload-artifact@v4
with:
name: source-${{ matrix.dist }}-${{ matrix.arch }}
path: |
redis_*.tar.xz
redis_*.dsc
redis_*.orig.tar.gz
build-binary-package:
runs-on: ${{ (matrix.arch == 'arm64' || matrix.arch == 'armhf') && 'ubuntu24-arm64-4-16' || 'ubuntu-22.04' }}
strategy:
fail-fast: false
matrix:
dist: ${{ fromJSON(vars.BUILD_DISTS || '["bookworm"]') }}
arch: ${{ fromJSON(vars.BUILD_ARCHS || '["amd64"]') }}
exclude: ${{ fromJSON(vars.BUILD_EXCLUDE || '[]') }}
needs: build-source-package
steps:
- uses: actions/checkout@v4
with:
ref: unstable
- name: Determine build architecture
run: |
case ${{ matrix.arch }} in
i386)
BUILD_ARCH=i386
;;
arm64)
BUILD_ARCH=arm64
;;
armhf)
BUILD_ARCH=armhf
;;
*)
BUILD_ARCH=amd64
;;
esac
echo "BUILD_ARCH=${BUILD_ARCH}" >> $GITHUB_ENV
- name: Install dependencies
run: |
sudo apt-get update && \
sudo apt-get install -y \
sbuild debhelper \
wget make cmake clang-format lcov git openssl libssl-dev unzip rsync pkg-config
sudo sbuild-adduser $USER
- name: Prepare sbuild environment
run: sudo ./setup_sbuild.sh ${{ matrix.dist }} ${{ env.BUILD_ARCH }}
- name: Get source package
uses: actions/download-artifact@v4
with:
name: source-${{ matrix.dist }}-${{ matrix.arch }}
- name: Build binary package
run: |
sudo sbuild \
--nolog \
--no-run-lintian \
--host ${{ matrix.arch }} \
--build ${{ env.BUILD_ARCH }} \
--dist ${{ matrix.dist }} \
--build-dep-resolver=apt \
--chroot-setup-commands="apt-get update && apt-get install -y build-essential" \
*.dsc
- name: Upload binary package artifact
uses: actions/upload-artifact@v4
with:
name: binary-${{ matrix.dist }}-${{ matrix.arch }}
path: |
*.deb
smoke-test-packages:
runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu24-arm64-4-16' || 'ubuntu-latest' }}
needs: build-binary-package
strategy:
fail-fast: false
matrix:
image: ${{ fromJSON(vars.SMOKE_TEST_IMAGES || '["debian:bookworm"]') }}
arch: ${{ fromJSON(vars.BUILD_ARCHS || '["amd64","arm64"]') }}
container: ${{ matrix.image }}
steps:
- name: Extract distribution from image
id: extract_dist
run: |
IMAGE="${{ matrix.image }}"
DIST=$(echo "$IMAGE" | cut -d':' -f2)
echo "distribution=$DIST" >> $GITHUB_OUTPUT
- name: Get binary packages
uses: actions/download-artifact@v4
with:
name: binary-${{ steps.extract_dist.outputs.distribution }}-${{ matrix.arch }}
- name: Install packages
run: |
apt-get update
IMAGE=${{ matrix.image }}
dist=$(echo "$IMAGE" | cut -d':' -f2)
apt install --yes ./*.deb
- name: Run redis-server smoke test
run: |
/usr/bin/redis-server /etc/redis/redis.conf --daemonize yes
sleep 3
redis-benchmark -P 10
- name: Verify installed modules
shell: bash
run: |
modules=$(redis-cli module list)
echo "Installed modules:"
echo "$modules"
missing_modules=()
module_output="$modules"
for module in "bf" "search" "timeseries" "ReJSON"; do
if [[ ! "$module_output" =~ $module ]]; then
missing_modules+=("$module")
fi
done
if [ ${#missing_modules[@]} -eq 0 ]; then
echo "All required modules are installed"
else
echo "The following modules are missing: ${missing_modules[*]}"
exit 1
fi
- name: Test RedisBloom
shell: bash
run: |
redis-cli BF.ADD popular_keys "redis:hash"
redis-cli BF.ADD popular_keys "redis:set"
[ "$(redis-cli BF.EXISTS popular_keys "redis:hash")" = "1" ] || { echo "RedisBloom test failed: 'redis:hash' not found"; exit 1; }
[ "$(redis-cli BF.EXISTS popular_keys "redis:list")" = "0" ] || { echo "RedisBloom test failed: 'redis:list' found unexpectedly"; exit 1; }
echo "RedisBloom test passed successfully"
- name: Test RediSearch
shell: bash
run: |
redis-cli FT.CREATE redis_commands ON HASH PREFIX 1 cmd: SCHEMA name TEXT SORTABLE description TEXT
redis-cli HSET cmd:set name "SET" description "Set the string value of a key"
redis-cli HSET cmd:get name "GET" description "Get the value of a key"
result=$(redis-cli FT.SEARCH redis_commands "value")
if echo "$result" | grep -q "Set the string value of a key" && echo "$result" | grep -q "Get the value of a key"; then
echo "RediSearch test passed successfully"
else
echo "RediSearch test failed: expected commands not found in search results"
exit 1
fi
- name: Test RedisTimeSeries
shell: bash
run: |
redis-cli TS.CREATE redis:cpu:usage RETENTION 86400
redis-cli TS.ADD redis:cpu:usage "*" 80
redis-cli TS.ADD redis:cpu:usage "*" 65
redis-cli TS.ADD redis:cpu:usage "*" 70
values=$(redis-cli TS.RANGE redis:cpu:usage - + COUNT 3 | awk 'NR % 2 == 0')
echo "Extracted values:"
echo "$values"
for expected in 80 65 70; do
if ! echo "$values" | grep -q "^$expected\$"; then
echo "Value $expected not found in output"
exit 1
fi
done
echo "RedisTimeSeries test passed successfully"
- name: Test ReJSON
shell: bash
run: |
redis-cli JSON.SET redis:config $ '{"maxmemory":"2gb","maxmemory-policy":"allkeys-lru"}'
result=$(redis-cli JSON.GET redis:config $.maxmemory-policy)
cleaned_result=$(echo $result | tr -d '[]"')
if [ "$cleaned_result" = "allkeys-lru" ]; then
echo "ReJSON test passed successfully"
else
echo "ReJSON test failed: expected 'allkeys-lru', got $result"
exit 1
fi
- name: Run redis-sentinel smoke test
run: |
/usr/bin/redis-sentinel /etc/redis/sentinel.conf --daemonize yes
sleep 3
echo ping | redis-cli -p 26379