diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 000000000..969390a2e --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,4 @@ +--- +Checks: 'bugprone-use-after-move,bugprone-dangling-handle,performance-move-const-arg,performance-unnecessary-copy-initialization,-clang-diagnostic-unused-command-line-argument' +WarningsAsErrors: '' +HeaderFilterRegex: '.*' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 11670d901..d1cad8045 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -356,3 +356,32 @@ jobs: exit 1 fi shell: bash + + clang-tidy: + name: Run clang-tidy checks + runs-on: ubuntu-22.04 + steps: + - name: Checkout Actions Repository + uses: actions/checkout@v4 + + - name: Install clang-tidy 20 + run: | + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 20 + sudo apt-get install -y clang-tidy-20 + + - name: Install dependencies + run: | + sudo apt update -y + sudo bash -x dependencies.sh -y + + - name: Generate compile_commands.json + run: | + mkdir build + cd build + cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. + + - name: Run clang-tidy + run: make tidy + shell: bash diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..ecaa79753 --- /dev/null +++ b/Makefile @@ -0,0 +1,3 @@ +.PHONY: tidy +tidy: + @find mooncake-transfer-engine -name "*.cpp" | head -5 | xargs -P $(shell nproc) -I {} clang-tidy-20 -p build --warnings-as-errors='*' {} diff --git a/mooncake-transfer-engine/include/common.h b/mooncake-transfer-engine/include/common.h index 3cfcf8fec..769e393ec 100644 --- a/mooncake-transfer-engine/include/common.h +++ b/mooncake-transfer-engine/include/common.h @@ -482,7 +482,7 @@ class RWSpinlock { const static int64_t kExclusiveLock = INT64_MIN / 2; std::atomic lock_; - uint64_t padding_[15]; + [[maybe_unused]] uint64_t padding_[15]; }; class TicketLock { @@ -501,7 +501,7 @@ class TicketLock { private: std::atomic next_ticket_; std::atomic now_serving_; - uint64_t padding_[14]; + [[maybe_unused]] uint64_t padding_[14]; }; class SimpleRandom { diff --git a/mooncake-transfer-engine/include/common/base/status.h b/mooncake-transfer-engine/include/common/base/status.h index 4015a9cad..a3c8dded4 100644 --- a/mooncake-transfer-engine/include/common/base/status.h +++ b/mooncake-transfer-engine/include/common/base/status.h @@ -253,7 +253,7 @@ inline Status::Status(Status&& s) : Status() { *this = std::move(s); } inline Status& Status::operator=(Status&& s) { if (this != &s) { - code_ = std::move(s.code_); + code_ = s.code_; s.code_ = Code::kOk; delete[] message_; message_ = nullptr; diff --git a/mooncake-transfer-engine/tests/transfer_metadata_test.cpp b/mooncake-transfer-engine/tests/transfer_metadata_test.cpp index d8fd0d889..a22b0bc98 100644 --- a/mooncake-transfer-engine/tests/transfer_metadata_test.cpp +++ b/mooncake-transfer-engine/tests/transfer_metadata_test.cpp @@ -37,8 +37,6 @@ class TransferMetadataTest : public ::testing::Test { const char* env = std::getenv("MC_METADATA_SERVER"); if (env) metadata_server = env; - else - metadata_server = metadata_server; LOG(INFO) << "metadata_server: " << metadata_server; env = std::getenv("MC_LOCAL_SERVER_NAME"); @@ -116,7 +114,7 @@ TEST_F(TransferMetadataTest, RpcMetaEntryTest) { int re = metadata_client->addRpcMetaEntry("test_server", desc); ASSERT_EQ(re, 0); TransferMetadata::RpcMetaDesc desc1; - re = metadata_client->getRpcMetaEntry("test_server", desc1); + ASSERT_EQ(metadata_client->getRpcMetaEntry("test_server", desc1), 0); ASSERT_EQ(desc.ip_or_host_name, desc1.ip_or_host_name); ASSERT_EQ(desc.rpc_port, desc1.rpc_port); re = metadata_client->removeRpcMetaEntry("test_server");