summaryrefslogtreecommitdiffstats
path: root/run-make-check.sh
blob: 627430387398502c10ac189437d9f17e22e5feb4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env bash
#
# Ceph distributed storage system
#
# Copyright (C) 2014 Red Hat <contact@redhat.com>
#
# Author: Loic Dachary <loic@dachary.org>
#
#  This library is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Lesser General Public
#  License as published by the Free Software Foundation; either
#  version 2.1 of the License, or (at your option) any later version.
#

#
# To just look at what this script will do, run it like this:
#
# $ DRY_RUN=echo ./run-make-check.sh
#

source src/script/run-make.sh

set -e

function in_jenkins() {
    test -n "$JENKINS_HOME"
}

function run() {
    # to prevent OSD EMFILE death on tests, make sure ulimit >= 1024
    $DRY_RUN ulimit -n $(ulimit -Hn)
    if [ $(ulimit -n) -lt 1024 ];then
        echo "***ulimit -n too small, better bigger than 1024 for test***"
        return 1
    fi

    # increase the aio-max-nr, which is by default 65536. we could reach this
    # limit while running seastar tests and bluestore tests.
    local m=16
    if [ $(nproc) -gt $m ]; then
        m=$(nproc)
    fi
    $DRY_RUN sudo /sbin/sysctl -q -w fs.aio-max-nr=$((65536 * $(nproc)))

    CHECK_MAKEOPTS=${CHECK_MAKEOPTS:-$DEFAULT_MAKEOPTS}
    if in_jenkins; then
        if ! ctest $CHECK_MAKEOPTS --no-compress-output --output-on-failure --test-output-size-failed 1024000 -T Test; then
            # do not return failure, as the jenkins publisher will take care of this
            rm -fr ${TMPDIR:-/tmp}/ceph-asok.*
        fi
    else
        if ! $DRY_RUN ctest $CHECK_MAKEOPTS --output-on-failure; then
            rm -fr ${TMPDIR:-/tmp}/ceph-asok.*
            return 1
        fi
    fi
}

function main() {
    if [[ $EUID -eq 0 ]] ; then
        echo "For best results, run this script as a normal user configured"
        echo "with the ability to run commands as root via sudo."
    fi
    echo -n "Checking hostname sanity... "
    if $DRY_RUN hostname --fqdn >/dev/null 2>&1 ; then
        echo "OK"
    else
        echo "NOT OK"
        echo "Please fix 'hostname --fqdn', otherwise 'make check' will fail"
        return 1
    fi
    # uses run-make.sh to install-deps
    FOR_MAKE_CHECK=1 prepare
    local cxx_compiler=g++
    local c_compiler=gcc
    for i in $(seq 14 -1 10); do
        if type -t clang-$i > /dev/null; then
            cxx_compiler="clang++-$i"
            c_compiler="clang-$i"
            break
        fi
    done
    # Init defaults after deps are installed.
    local cmake_opts
    cmake_opts+=" -DCMAKE_CXX_COMPILER=$cxx_compiler -DCMAKE_C_COMPILER=$c_compiler"
    cmake_opts+=" -DCMAKE_CXX_FLAGS_DEBUG=-Werror"
    cmake_opts+=" -DENABLE_GIT_VERSION=OFF"
    cmake_opts+=" -DWITH_GTEST_PARALLEL=ON"
    cmake_opts+=" -DWITH_FIO=ON"
    cmake_opts+=" -DWITH_CEPHFS_SHELL=ON"
    cmake_opts+=" -DWITH_GRAFANA=ON"
    cmake_opts+=" -DWITH_SPDK=ON"
    cmake_opts+=" -DWITH_RBD_MIRROR=ON"
    if [ $WITH_SEASTAR ]; then
        cmake_opts+=" -DWITH_SEASTAR=ON"
    fi
    if [ $WITH_ZBD ]; then
        cmake_opts+=" -DWITH_ZBD=ON"
    fi
    if [ $WITH_RBD_RWL ]; then
        cmake_opts+=" -DWITH_RBD_RWL=ON"
    fi
    cmake_opts+=" -DWITH_RBD_SSD_CACHE=ON"
    in_jenkins && echo "CI_DEBUG: Our cmake_opts are: $cmake_opts
                        CI_DEBUG: Running ./configure"
    configure "$cmake_opts" "$@"
    in_jenkins && echo "CI_DEBUG: Running 'build tests'"
    build tests
    echo "make check: successful build on $(git rev-parse HEAD)"
    FOR_MAKE_CHECK=1 run
}

main "$@"