From 12f59ca48ed881781dbbe6e41d3cd7f3ce5d1ae0 Mon Sep 17 00:00:00 2001 From: Tao He Date: Wed, 30 Sep 2020 14:49:25 +0800 Subject: [PATCH] Enable github CI. Signed-off-by: Tao He --- .github/workflows/build-test.yml | 95 ++++++++++++++++++++++++++++++++ CMakeLists.txt | 12 +++- tst/CMakeLists.txt | 3 +- 3 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/build-test.yml diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml new file mode 100644 index 0000000..4c42855 --- /dev/null +++ b/.github/workflows/build-test.yml @@ -0,0 +1,95 @@ +name: Build and Test + +on: + # Trigger the workflow on push or pull request, but only for the master branch + push: + branches: + - ci + - master + pull_request: + branches: + - master + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-20.04] + steps: + - uses: actions/checkout@v2 + with: + submodules: true + + - name: Cache for cccahe + uses: actions/cache@v2 + with: + path: ~/.ccache + key: ${{ runner.os }}-ccache + restore-keys: | + ${{ runner.os }}-ccache + + - name: Install dependencies for Linux + if: runner.os == 'Linux' + run: | + sudo apt update -y + sudo apt install -y ca-certificates \ + ccache \ + cmake \ + libboost-all-dev \ + libcurl4-openssl-dev \ + libgrpc-dev \ + libgrpc++-dev \ + libprotobuf-dev \ + libssl-dev \ + libz-dev \ + lsb-release \ + protobuf-compiler-grpc \ + screenfetch \ + wget + + # install etcd + wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz + tar zxvf etcd-v3.4.13-linux-amd64.tar.gz + sudo mv etcd-v3.4.13-linux-amd64/etcd /usr/local/bin/ + sudo mv etcd-v3.4.13-linux-amd64/etcdctl /usr/local/bin/ + + lsb_release -a + screenfetch + + - name: Install cpprestsdk + run: | + mkdir -p build + cd build + git clone https://github.com/microsoft/cpprestsdk.git + mkdir -p cpprestsdk/build + cd cpprestsdk/build + cmake .. -DBUILD_TESTS=OFF \ + -DBUILD_SAMPLES=OFF \ + -DCPPREST_EXCLUDE_WEBSOCKETS=ON \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + make -j2 + sudo make install + + - name: Build + run: | + mkdir -p build + cd build + cmake .. -DBUILD_TESTS=ON \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache + make -j2 + sudo make install + + - name: Test + run: | + cd build + /usr/local/bin/etcd & + ./bin/etcd_test + + # note: no need to clean up on CI env + + - name: Check ccache + run: | + ccache --show-stats diff --git a/CMakeLists.txt b/CMakeLists.txt index 63d434a..542a725 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,8 +3,10 @@ project (etcd-cpp-api) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set (etcd-cpp-api_VERSION_MAJOR 0) -set (etcd-cpp-api_VERSION_MINOR 1) +set(etcd-cpp-api_VERSION_MAJOR 0) +set(etcd-cpp-api_VERSION_MINOR 1) + +option(BUILD_TESTS "Build test cases" OFF) find_library(CPPREST_LIB NAMES cpprest) find_path(CPPREST_INCLUDE_DIR NAMES cpprest/http_client.h) @@ -36,7 +38,6 @@ set(GRPC_LIBRARIES ${GPR_LIBRARY} ${GRPC_LIBRARY} ${GRPC_GRPC++_LIBRARY}) include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/GenerateProtobuf.cmake) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/proto) -enable_testing() include_directories(SYSTEM ${CPPREST_INCLUDE_DIR} ${Boost_INCLUDE_DIR} ${PROTOBUF_INCLUDE_DIRS} @@ -44,9 +45,14 @@ include_directories(SYSTEM ${CPPREST_INCLUDE_DIR} include_directories(${CMAKE_CURRENT_SOURCE_DIR}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wpedantic -Werror -Wno-string-compare -std=c++11") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) + add_subdirectory(src) if (BUILD_TESTS) + enable_testing() add_subdirectory(tst) endif () diff --git a/tst/CMakeLists.txt b/tst/CMakeLists.txt index 600e30c..a4e0ee2 100644 --- a/tst/CMakeLists.txt +++ b/tst/CMakeLists.txt @@ -8,7 +8,8 @@ add_executable(etcd_test LockTest.cpp ) set_property(TARGET etcd_test PROPERTY CXX_STANDARD 11) -target_include_directories(etcd_test PRIVATE ${CMAKE_SOURCE_DIR}/proto) +target_include_directories(etcd_test PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../proto/gen) +target_include_directories(etcd_test PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/../proto/gen/proto) target_link_libraries(etcd_test etcd-cpp-api)