
Few CI improvements witch will reduce occupation CI queue and eliminate stale runs. 1. Kill CI jobs on PRs once PR branch gets a new push. This will prevent situation happened today - a huge job triggered twice in less than an hour and occupied all **org** (for all repositories) runners queue for the rest of the day (see pic). This completely blocked valkey-glide team. 2. Distribute nightly croned jobs on time to prevent them running together. Keep in mind, cron's TZ is UTC, so midnight tasks incur developers located in other timezones. This must be backported to all release branches (`valkey-x.y` and `x.y`)  --------- Signed-off-by: Yury-Fridlyand <yury.fridlyand@improving.com>
151 lines
4.6 KiB
YAML
151 lines
4.6 KiB
YAML
name: CI
|
|
|
|
on: [push, pull_request]
|
|
|
|
concurrency:
|
|
group: ci-${{ github.head_ref || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
test-ubuntu-latest:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
- name: make
|
|
# Fail build if there are warnings
|
|
# build with TLS just for compilation coverage
|
|
run: make all-with-unit-tests SERVER_CFLAGS='-Werror' BUILD_TLS=yes
|
|
- name: test
|
|
run: |
|
|
sudo apt-get install tcl8.6 tclx
|
|
./runtest --verbose --tags -slow --dump-logs
|
|
- name: module api test
|
|
run: CFLAGS='-Werror' ./runtest-moduleapi --verbose --dump-logs
|
|
- name: validate commands.def up to date
|
|
run: |
|
|
touch src/commands/ping.json
|
|
make commands.def
|
|
dirty=$(git diff)
|
|
if [[ ! -z $dirty ]]; then echo $dirty; exit 1; fi
|
|
- name: unit tests
|
|
run: |
|
|
./src/valkey-unit-tests
|
|
|
|
test-sanitizer-address:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
- name: make
|
|
# build with TLS module just for compilation coverage
|
|
run: make SANITIZER=address SERVER_CFLAGS='-Werror' BUILD_TLS=module
|
|
- name: testprep
|
|
run: sudo apt-get install tcl8.6 tclx -y
|
|
- name: test
|
|
run: ./runtest --verbose --tags -slow --dump-logs
|
|
- name: module api test
|
|
run: CFLAGS='-Werror' ./runtest-moduleapi --verbose --dump-logs
|
|
|
|
test-rdma:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
- name: make
|
|
run: |
|
|
sudo apt-get install librdmacm-dev libibverbs-dev
|
|
make BUILD_RDMA=module
|
|
- name: clone-rxe-kmod
|
|
run: |
|
|
mkdir -p tests/rdma/rxe
|
|
git clone https://github.com/pizhenwei/rxe.git tests/rdma/rxe
|
|
make -C tests/rdma/rxe
|
|
- name: clear-kernel-log
|
|
run: sudo dmesg -c > /dev/null
|
|
- name: test
|
|
run: sudo ./runtest-rdma --install-rxe
|
|
- name: show-kernel-log
|
|
run: sudo dmesg -c
|
|
|
|
build-debian-old:
|
|
runs-on: ubuntu-latest
|
|
container: debian:buster
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
- name: make
|
|
run: |
|
|
apt-get update && apt-get install -y build-essential
|
|
make SERVER_CFLAGS='-Werror'
|
|
|
|
build-macos-latest:
|
|
runs-on: macos-latest
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
- name: make
|
|
run: make SERVER_CFLAGS='-Werror'
|
|
|
|
build-32bit:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
- name: make
|
|
run: |
|
|
sudo apt-get update && sudo apt-get install libc6-dev-i386
|
|
make SERVER_CFLAGS='-Werror' 32bit
|
|
|
|
build-libc-malloc:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
- name: make
|
|
run: make SERVER_CFLAGS='-Werror' MALLOC=libc
|
|
|
|
build-almalinux8-jemalloc:
|
|
runs-on: ubuntu-latest
|
|
container: almalinux:8
|
|
steps:
|
|
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
|
|
- name: make
|
|
run: |
|
|
dnf -y install epel-release gcc make procps-ng which
|
|
make -j SERVER_CFLAGS='-Werror'
|
|
|
|
format-yaml:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
|
|
|
- name: Set up Go
|
|
uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1
|
|
with:
|
|
go-version: "1.22.4"
|
|
|
|
- name: Setup YAML formatter
|
|
run: |
|
|
go install github.com/google/yamlfmt/cmd/yamlfmt@latest
|
|
|
|
- name: Run yamlfmt
|
|
id: yamlfmt
|
|
run: |
|
|
yamlfmt -lint -conf .config/format.yml .
|
|
# Capture the diff output
|
|
DIFF=$(git diff)
|
|
if [ ! -z "$DIFF" ]; then
|
|
# Encode the diff in Base64 to ensure it's handled as a single line
|
|
ENCODED_DIFF=$(echo "$DIFF" | base64 -w 0)
|
|
echo "diff=$ENCODED_DIFF" >> $GITHUB_OUTPUT
|
|
fi
|
|
shell: bash
|
|
|
|
- name: Check for formatting changes
|
|
if: ${{ steps.yamlfmt.outputs.diff }}
|
|
run: |
|
|
echo "ERROR: YAML file is not formatted properly. Here is the diff: "
|
|
# Decode the Base64 diff to display it
|
|
echo "${{ steps.clang-format.outputs.diff }}" | base64 --decode
|
|
exit 1
|
|
shell: bash
|