Integrating fast_float to optionally replace strtod #4020
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 -j4 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-ubuntu-latest-fast-float: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: make | |
# Fail build if there are warnings | |
# build with TLS and FAST_FLOAT just for compilation coverage | |
run: make -j4 all-with-unit-tests SERVER_CFLAGS='-Werror' BUILD_TLS=yes USE_FAST_FLOAT=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: unit tests | |
run: | | |
./src/valkey-unit-tests | |
test-ubuntu-latest-cmake: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: cmake and make | |
run: | | |
sudo apt-get install -y cmake libssl-dev | |
mkdir -p build-release | |
cd build-release | |
cmake -DCMAKE_BUILD_TYPE=Release .. -DBUILD_TLS=yes -DBUILD_UNIT_TESTS=yes | |
make -j$(nproc) | |
- name: test | |
run: | | |
sudo apt-get install -y tcl8.6 tclx | |
ln -sf $(pwd)/build-release/bin/valkey-server $(pwd)/src/valkey-server | |
ln -sf $(pwd)/build-release/bin/valkey-cli $(pwd)/src/valkey-cli | |
ln -sf $(pwd)/build-release/bin/valkey-benchmark $(pwd)/src/valkey-benchmark | |
ln -sf $(pwd)/build-release/bin/valkey-server $(pwd)/src/valkey-check-aof | |
ln -sf $(pwd)/build-release/bin/valkey-server $(pwd)/src/valkey-check-rdb | |
ln -sf $(pwd)/build-release/bin/valkey-server $(pwd)/src/valkey-sentinel | |
./runtest --verbose --tags -slow --dump-logs | |
- name: unit tests | |
run: | | |
./build-release/bin/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 -j4 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 -j4 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 -j4 SERVER_CFLAGS='-Werror' | |
build-macos-latest: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: make | |
run: make -j3 all-with-unit-tests SERVER_CFLAGS='-Werror' | |
build-macos-latest-fast-float: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: make | |
run: make -j3 all-with-unit-tests SERVER_CFLAGS='-Werror' USE_FAST_FLOAT=yes | |
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 -j4 SERVER_CFLAGS='-Werror' 32bit | |
build-32bit-fast-float: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: make | |
run: "# Fast float requires C++ 32-bit libraries to compile on 64-bit ubuntu machine i.e. \"-cross\" suffixed version. \n# Cross-compiling c++ to 32-bit also requires multilib support for g++ compiler i.e. \"-multilib\" suffixed version of g++.\n# g++-multilib should generally include libstdc++.*cross version as well, but also added explicitly just in case. \nsudo apt-get update && sudo apt-get install libc6-dev-i386 libstdc++-11-dev-i386-cross gcc-multilib g++-multilib\nmake -j4 SERVER_CFLAGS='-Werror' 32bit USE_FAST_FLOAT=yes\n#magic___^_^___line\n" | |
build-libc-malloc: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: make | |
run: make -j4 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 -j4 SERVER_CFLAGS='-Werror' | |
build-almalinux8-jemalloc-fast-float: | |
runs-on: ubuntu-latest | |
container: almalinux:8 | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
- name: make | |
run: | | |
dnf -y install epel-release gcc gcc-c++ make procps-ng which | |
make -j4 SERVER_CFLAGS='-Werror' USE_FAST_FLOAT=yes | |
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 |