* [Tarantool-patches] [PATCH 0/2 v2] Add code coverage support @ 2023-08-01 18:46 Sergey Bronnikov via Tarantool-patches 2023-08-01 18:46 ` [Tarantool-patches] [PATCH 1/2 v2] cmake: add " Sergey Bronnikov via Tarantool-patches ` (2 more replies) 0 siblings, 3 replies; 13+ messages in thread From: Sergey Bronnikov via Tarantool-patches @ 2023-08-01 18:46 UTC (permalink / raw) To: tarantool-patches, Sergey Kaplun, max.kokryashkin From: Sergey Bronnikov <sergeyb@tarantool.org> Patch-series adds code coverage support to LuaJIT build infrastructure and Github Actions. Changes v2: - addressed comments from Max Kokryashkin and Sergey Kaplun - added integration with Coveralls Branch: https://github.com/tarantool/luajit/tree/ligurio/code-coverage Coveralls: https://coveralls.io/github/tarantool/luajit Patch v1: https://lists.tarantool.org/tarantool-patches/58297844-8590-cf70-b3d5-3ed8908aef9a@tarantool.org/T/#t Sergey Bronnikov (2): cmake: add code coverage support ci: support coveralls .github/actions/setup-linux/action.yml | 1 + .github/workflows/coverage.yml | 60 ++++++++++++++++++++++++++ CMakeLists.txt | 9 ++++ cmake/CodeCoverage.cmake | 45 +++++++++++++++++++ test/CMakeLists.txt | 7 +++ test/tarantool-c-tests/CMakeLists.txt | 6 ++- 6 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/coverage.yml create mode 100644 cmake/CodeCoverage.cmake -- 2.34.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Tarantool-patches] [PATCH 1/2 v2] cmake: add code coverage support 2023-08-01 18:46 [Tarantool-patches] [PATCH 0/2 v2] Add code coverage support Sergey Bronnikov via Tarantool-patches @ 2023-08-01 18:46 ` Sergey Bronnikov via Tarantool-patches 2023-08-02 8:06 ` Maxim Kokryashkin via Tarantool-patches 2023-08-01 18:46 ` [Tarantool-patches] [PATCH 2/2 v2] ci: support coveralls Sergey Bronnikov via Tarantool-patches 2023-08-21 11:05 ` [Tarantool-patches] [PATCH 0/2 v2] Add code coverage support Igor Munkin via Tarantool-patches 2 siblings, 1 reply; 13+ messages in thread From: Sergey Bronnikov via Tarantool-patches @ 2023-08-01 18:46 UTC (permalink / raw) To: tarantool-patches, Sergey Kaplun, max.kokryashkin From: Sergey Bronnikov <sergeyb@tarantool.org> The patch adds building code coverage report using gcovr [1] and gcov. gcovr is a better version of lcov, see [2]. There were two new CMake targets added: LuaJIT-coverage proccess *.gcno and *.gcda files with gcov, builds a detailed HTML report and prints a summary, target coverage executes LuaJIT-tests and then runs LuaJIT-coverage. Target LuaJIT-coverage is useful for building code coverage report for a custom set of regression tests. ``` $ cmake -S . -B build -DENABLE_COVERAGE=ON $ cmake --build build --parallel --target coverage <snipped> lines: 84.1% (26056 out of 30997) functions: 88.8% (2055 out of 2314) branches: 71.5% (14801 out of 20703) ``` 1. https://gcovr.com/ 2. https://gcovr.com/en/stable/faq.html#what-is-the-difference-between-lcov-and-gcovr --- CMakeLists.txt | 9 ++++++ cmake/CodeCoverage.cmake | 45 +++++++++++++++++++++++++++ test/CMakeLists.txt | 7 +++++ test/tarantool-c-tests/CMakeLists.txt | 6 +++- 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 cmake/CodeCoverage.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ef24bba..fe6582fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -116,6 +116,15 @@ if(LUAJIT_ENABLE_WARNINGS) ) endif() +set(LUAJIT_ENABLE_COVERAGE_DEFAULT OFF) +option(LUAJIT_ENABLE_COVERAGE + "Enable integration with gcovr, a code coverage program" + ${LUAJIT_ENABLE_COVERAGE_DEFAULT}) +if (LUAJIT_ENABLE_COVERAGE) + AppendFlags(CMAKE_C_FLAGS --coverage) + include(CodeCoverage) +endif(LUAJIT_ENABLE_COVERAGE) + # Auxiliary flags for main targets (libraries, binaries). AppendFlags(TARGET_C_FLAGS -D_FILE_OFFSET_BITS=64 diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake new file mode 100644 index 00000000..2be7d129 --- /dev/null +++ b/cmake/CodeCoverage.cmake @@ -0,0 +1,45 @@ +find_program(GCOVR gcovr) +find_program(GCOV gcov) + +set(COVERAGE_DIR "${PROJECT_BINARY_DIR}/coverage") +set(COVERAGE_HTML_REPORT "${COVERAGE_DIR}/luajit.html") +set(COVERAGE_XML_REPORT "${COVERAGE_DIR}/luajit.xml") + +if(NOT GCOVR OR NOT GCOV) + add_custom_target(${PROJECT_NAME}-coverage + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "LuaJIT-coverage is a dummy target" + ) + message(WARNING "Either `gcovr' or `gcov` not found, \ +so ${PROJECT_NAME}-coverage target is dummy") + return() +endif() + +file(MAKE_DIRECTORY ${COVERAGE_DIR}) +add_custom_target(${PROJECT_NAME}-coverage) +add_custom_command(TARGET ${PROJECT_NAME}-coverage + COMMENT "Building coverage report" + COMMAND + ${GCOVR} + # See https://gcovr.com/en/stable/guide/configuration.html + --root ${PROJECT_SOURCE_DIR} + --object-directory ${PROJECT_BINARY_DIR} + --filter ${PROJECT_SOURCE_DIR}/src + # Exclude DynASM files, that contain a low-level VM code for CPUs. + --exclude ".*\.dasc" + # Exclude buildvm source code, it's the project's infrastructure. + --exclude ".*/host/" + --print-summary + --output ${COVERAGE_HTML_REPORT} + --cobertura ${COVERAGE_XML_REPORT} + --html + --html-title "Tarantool LuaJIT Code Coverage Report" + --html-details + --sort-percentage + --branches + --decisions + -j ${CMAKE_BUILD_PARALLEL_LEVEL} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} +) + +message(STATUS "Code coverage HTML report: ${COVERAGE_HTML_REPORT}") +message(STATUS "Code coverage XML report: ${COVERAGE_XML_REPORT}") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 47296a22..e23d6d45 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -76,4 +76,11 @@ if(LUAJIT_USE_TEST) ${PROJECT_NAME}-test ${PROJECT_NAME}-luacheck ) + + if (LUAJIT_ENABLE_COVERAGE) + add_custom_target(coverage DEPENDS + ${PROJECT_NAME}-test + ${PROJECT_NAME}-coverage + ) + endif (LUAJIT_ENABLE_COVERAGE) endif() diff --git a/test/tarantool-c-tests/CMakeLists.txt b/test/tarantool-c-tests/CMakeLists.txt index 17255345..d74e99fc 100644 --- a/test/tarantool-c-tests/CMakeLists.txt +++ b/test/tarantool-c-tests/CMakeLists.txt @@ -45,7 +45,11 @@ foreach(test_source ${tests}) OUTPUT_NAME "${exe}${C_TEST_SUFFIX}" RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) - target_link_libraries(${exe} libtest ${LUAJIT_LIBRARY}) + set(libtest-libs libtest ${LUAJIT_LIBRARY}) + if (LUAJIT_ENABLE_COVERAGE) + set(libtest-libs ${libtest-libs} --coverage) + endif (LUAJIT_ENABLE_COVERAGE) + target_link_libraries(${exe} ${libtest-libs}) LIST(APPEND TESTS_COMPILED ${exe}) endforeach() -- 2.34.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 1/2 v2] cmake: add code coverage support 2023-08-01 18:46 ` [Tarantool-patches] [PATCH 1/2 v2] cmake: add " Sergey Bronnikov via Tarantool-patches @ 2023-08-02 8:06 ` Maxim Kokryashkin via Tarantool-patches 2023-08-02 8:18 ` Sergey Bronnikov via Tarantool-patches 0 siblings, 1 reply; 13+ messages in thread From: Maxim Kokryashkin via Tarantool-patches @ 2023-08-02 8:06 UTC (permalink / raw) To: Sergey Bronnikov; +Cc: max.kokryashkin, tarantool-patches Hi, Sergey! Thanks for the fixes! LGTM, except for a few comments below. Side note: I see that coverage job in CI is red. Why is that happening? On Tue, Aug 01, 2023 at 09:46:08PM +0300, Sergey Bronnikov via Tarantool-patches wrote: > From: Sergey Bronnikov <sergeyb@tarantool.org> > > The patch adds building code coverage report using gcovr [1] and gcov. > gcovr is a better version of lcov, see [2]. There were two new CMake > targets added: LuaJIT-coverage proccess *.gcno and *.gcda files with Typo: s/process/processes/ > gcov, builds a detailed HTML report and prints a summary, target > coverage executes LuaJIT-tests and then runs LuaJIT-coverage. Target > LuaJIT-coverage is useful for building code coverage report for a custom > set of regression tests. > > ``` > $ cmake -S . -B build -DENABLE_COVERAGE=ON > $ cmake --build build --parallel --target coverage > > <snipped> > > lines: 84.1% (26056 out of 30997) > functions: 88.8% (2055 out of 2314) > branches: 71.5% (14801 out of 20703) > ``` > > 1. https://gcovr.com/ > 2. https://gcovr.com/en/stable/faq.html#what-is-the-difference-between-lcov-and-gcovr > --- > CMakeLists.txt | 9 ++++++ > cmake/CodeCoverage.cmake | 45 +++++++++++++++++++++++++++ > test/CMakeLists.txt | 7 +++++ > test/tarantool-c-tests/CMakeLists.txt | 6 +++- > 4 files changed, 66 insertions(+), 1 deletion(-) > create mode 100644 cmake/CodeCoverage.cmake > > diff --git a/CMakeLists.txt b/CMakeLists.txt > index 6ef24bba..fe6582fa 100644 > --- a/CMakeLists.txt > +++ b/CMakeLists.txt > @@ -116,6 +116,15 @@ if(LUAJIT_ENABLE_WARNINGS) > ) > endif() > > +set(LUAJIT_ENABLE_COVERAGE_DEFAULT OFF) > +option(LUAJIT_ENABLE_COVERAGE > + "Enable integration with gcovr, a code coverage program" > + ${LUAJIT_ENABLE_COVERAGE_DEFAULT}) > +if (LUAJIT_ENABLE_COVERAGE) > + AppendFlags(CMAKE_C_FLAGS --coverage) > + include(CodeCoverage) > +endif(LUAJIT_ENABLE_COVERAGE) > + > # Auxiliary flags for main targets (libraries, binaries). > AppendFlags(TARGET_C_FLAGS > -D_FILE_OFFSET_BITS=64 > diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake > new file mode 100644 > index 00000000..2be7d129 > --- /dev/null > +++ b/cmake/CodeCoverage.cmake > @@ -0,0 +1,45 @@ > +find_program(GCOVR gcovr) > +find_program(GCOV gcov) > + > +set(COVERAGE_DIR "${PROJECT_BINARY_DIR}/coverage") > +set(COVERAGE_HTML_REPORT "${COVERAGE_DIR}/luajit.html") > +set(COVERAGE_XML_REPORT "${COVERAGE_DIR}/luajit.xml") > + > +if(NOT GCOVR OR NOT GCOV) > + add_custom_target(${PROJECT_NAME}-coverage > + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "LuaJIT-coverage is a dummy target" > + ) > + message(WARNING "Either `gcovr' or `gcov` not found, \ > +so ${PROJECT_NAME}-coverage target is dummy") Nit: Something is wrong with alignment here. > + return() > +endif() > + > +file(MAKE_DIRECTORY ${COVERAGE_DIR}) > +add_custom_target(${PROJECT_NAME}-coverage) > +add_custom_command(TARGET ${PROJECT_NAME}-coverage > + COMMENT "Building coverage report" > + COMMAND > + ${GCOVR} > + # See https://gcovr.com/en/stable/guide/configuration.html > + --root ${PROJECT_SOURCE_DIR} > + --object-directory ${PROJECT_BINARY_DIR} > + --filter ${PROJECT_SOURCE_DIR}/src > + # Exclude DynASM files, that contain a low-level VM code for CPUs. > + --exclude ".*\.dasc" > + # Exclude buildvm source code, it's the project's infrastructure. > + --exclude ".*/host/" > + --print-summary > + --output ${COVERAGE_HTML_REPORT} > + --cobertura ${COVERAGE_XML_REPORT} > + --html > + --html-title "Tarantool LuaJIT Code Coverage Report" > + --html-details > + --sort-percentage > + --branches > + --decisions > + -j ${CMAKE_BUILD_PARALLEL_LEVEL} > + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} > +) > + > +message(STATUS "Code coverage HTML report: ${COVERAGE_HTML_REPORT}") > +message(STATUS "Code coverage XML report: ${COVERAGE_XML_REPORT}") > diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt > index 47296a22..e23d6d45 100644 > --- a/test/CMakeLists.txt > +++ b/test/CMakeLists.txt > @@ -76,4 +76,11 @@ if(LUAJIT_USE_TEST) > ${PROJECT_NAME}-test > ${PROJECT_NAME}-luacheck > ) > + > + if (LUAJIT_ENABLE_COVERAGE) > + add_custom_target(coverage DEPENDS > + ${PROJECT_NAME}-test > + ${PROJECT_NAME}-coverage > + ) > + endif (LUAJIT_ENABLE_COVERAGE) > endif() > diff --git a/test/tarantool-c-tests/CMakeLists.txt b/test/tarantool-c-tests/CMakeLists.txt > index 17255345..d74e99fc 100644 > --- a/test/tarantool-c-tests/CMakeLists.txt > +++ b/test/tarantool-c-tests/CMakeLists.txt > @@ -45,7 +45,11 @@ foreach(test_source ${tests}) > OUTPUT_NAME "${exe}${C_TEST_SUFFIX}" > RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" > ) > - target_link_libraries(${exe} libtest ${LUAJIT_LIBRARY}) > + set(libtest-libs libtest ${LUAJIT_LIBRARY}) > + if (LUAJIT_ENABLE_COVERAGE) > + set(libtest-libs ${libtest-libs} --coverage) > + endif (LUAJIT_ENABLE_COVERAGE) > + target_link_libraries(${exe} ${libtest-libs}) > LIST(APPEND TESTS_COMPILED ${exe}) > endforeach() > > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 1/2 v2] cmake: add code coverage support 2023-08-02 8:06 ` Maxim Kokryashkin via Tarantool-patches @ 2023-08-02 8:18 ` Sergey Bronnikov via Tarantool-patches 2023-08-06 11:35 ` Sergey Kaplun via Tarantool-patches 0 siblings, 1 reply; 13+ messages in thread From: Sergey Bronnikov via Tarantool-patches @ 2023-08-02 8:18 UTC (permalink / raw) To: Maxim Kokryashkin, Sergey Bronnikov; +Cc: max.kokryashkin, tarantool-patches Hi, Max On 8/2/23 11:06, Maxim Kokryashkin via Tarantool-patches wrote: > Hi, Sergey! > Thanks for the fixes! > LGTM, except for a few comments below. > > Side note: I see that coverage job in CI is red. Why is that > happening? This happened because from time to time total code coverage number changes a bit. It is really annoying, to solve this we need to increase the threshold in Coveralls service. > > On Tue, Aug 01, 2023 at 09:46:08PM +0300, Sergey Bronnikov via Tarantool-patches wrote: >> From: Sergey Bronnikov <sergeyb@tarantool.org> >> >> The patch adds building code coverage report using gcovr [1] and gcov. >> gcovr is a better version of lcov, see [2]. There were two new CMake >> targets added: LuaJIT-coverage proccess *.gcno and *.gcda files with > Typo: s/process/processes/ Fixed. >> gcov, builds a detailed HTML report and prints a summary, target >> coverage executes LuaJIT-tests and then runs LuaJIT-coverage. Target >> LuaJIT-coverage is useful for building code coverage report for a custom >> set of regression tests. >> >> ``` >> $ cmake -S . -B build -DENABLE_COVERAGE=ON >> $ cmake --build build --parallel --target coverage >> >> <snipped> >> >> lines: 84.1% (26056 out of 30997) >> functions: 88.8% (2055 out of 2314) >> branches: 71.5% (14801 out of 20703) >> ``` >> >> 1. https://gcovr.com/ >> 2. https://gcovr.com/en/stable/faq.html#what-is-the-difference-between-lcov-and-gcovr >> --- >> CMakeLists.txt | 9 ++++++ >> cmake/CodeCoverage.cmake | 45 +++++++++++++++++++++++++++ >> test/CMakeLists.txt | 7 +++++ >> test/tarantool-c-tests/CMakeLists.txt | 6 +++- >> 4 files changed, 66 insertions(+), 1 deletion(-) >> create mode 100644 cmake/CodeCoverage.cmake >> >> diff --git a/CMakeLists.txt b/CMakeLists.txt >> index 6ef24bba..fe6582fa 100644 >> --- a/CMakeLists.txt >> +++ b/CMakeLists.txt >> @@ -116,6 +116,15 @@ if(LUAJIT_ENABLE_WARNINGS) >> ) >> endif() >> >> +set(LUAJIT_ENABLE_COVERAGE_DEFAULT OFF) >> +option(LUAJIT_ENABLE_COVERAGE >> + "Enable integration with gcovr, a code coverage program" >> + ${LUAJIT_ENABLE_COVERAGE_DEFAULT}) >> +if (LUAJIT_ENABLE_COVERAGE) >> + AppendFlags(CMAKE_C_FLAGS --coverage) >> + include(CodeCoverage) >> +endif(LUAJIT_ENABLE_COVERAGE) >> + >> # Auxiliary flags for main targets (libraries, binaries). >> AppendFlags(TARGET_C_FLAGS >> -D_FILE_OFFSET_BITS=64 >> diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake >> new file mode 100644 >> index 00000000..2be7d129 >> --- /dev/null >> +++ b/cmake/CodeCoverage.cmake >> @@ -0,0 +1,45 @@ >> +find_program(GCOVR gcovr) >> +find_program(GCOV gcov) >> + >> +set(COVERAGE_DIR "${PROJECT_BINARY_DIR}/coverage") >> +set(COVERAGE_HTML_REPORT "${COVERAGE_DIR}/luajit.html") >> +set(COVERAGE_XML_REPORT "${COVERAGE_DIR}/luajit.xml") >> + >> +if(NOT GCOVR OR NOT GCOV) >> + add_custom_target(${PROJECT_NAME}-coverage >> + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "LuaJIT-coverage is a dummy target" >> + ) >> + message(WARNING "Either `gcovr' or `gcov` not found, \ >> +so ${PROJECT_NAME}-coverage target is dummy") > Nit: Something is wrong with alignment here. No, it is intentionally. If you add indentation then these whitespaces will be added to a message. <snipped> >> ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 1/2 v2] cmake: add code coverage support 2023-08-02 8:18 ` Sergey Bronnikov via Tarantool-patches @ 2023-08-06 11:35 ` Sergey Kaplun via Tarantool-patches 2023-08-07 13:39 ` Sergey Bronnikov via Tarantool-patches 0 siblings, 1 reply; 13+ messages in thread From: Sergey Kaplun via Tarantool-patches @ 2023-08-06 11:35 UTC (permalink / raw) To: Sergey Bronnikov; +Cc: Sergey Bronnikov, max.kokryashkin, tarantool-patches Hi, Sergey! Thanks for the patch! LGTM, just a minor nits below. On 02.08.23, Sergey Bronnikov via Tarantool-patches wrote: > Hi, Max > > On 8/2/23 11:06, Maxim Kokryashkin via Tarantool-patches wrote: > > Hi, Sergey! > > Thanks for the fixes! > > LGTM, except for a few comments below. > > > > Side note: I see that coverage job in CI is red. Why is that > > happening? > > This happened because from time to time total code coverage number > changes a bit. > > It is really annoying, to solve this we need to increase the threshold > in Coveralls service. I see that now this job is green. Was it fixed? > > > > > > > On Tue, Aug 01, 2023 at 09:46:08PM +0300, Sergey Bronnikov via Tarantool-patches wrote: > >> From: Sergey Bronnikov <sergeyb@tarantool.org> > >> > >> The patch adds building code coverage report using gcovr [1] and gcov. > >> gcovr is a better version of lcov, see [2]. There were two new CMake > >> targets added: LuaJIT-coverage proccess *.gcno and *.gcda files with > > Typo: s/process/processes/ > Fixed. > >> gcov, builds a detailed HTML report and prints a summary, target > >> coverage executes LuaJIT-tests and then runs LuaJIT-coverage. Target > >> LuaJIT-coverage is useful for building code coverage report for a custom > >> set of regression tests. > >> > >> ``` > >> $ cmake -S . -B build -DENABLE_COVERAGE=ON > >> $ cmake --build build --parallel --target coverage > >> > >> <snipped> > >> > >> lines: 84.1% (26056 out of 30997) > >> functions: 88.8% (2055 out of 2314) > >> branches: 71.5% (14801 out of 20703) > >> ``` > >> > >> 1. https://gcovr.com/ > >> 2. https://gcovr.com/en/stable/faq.html#what-is-the-difference-between-lcov-and-gcovr > >> --- > >> CMakeLists.txt | 9 ++++++ > >> cmake/CodeCoverage.cmake | 45 +++++++++++++++++++++++++++ > >> test/CMakeLists.txt | 7 +++++ > >> test/tarantool-c-tests/CMakeLists.txt | 6 +++- > >> 4 files changed, 66 insertions(+), 1 deletion(-) > >> create mode 100644 cmake/CodeCoverage.cmake > >> > >> diff --git a/CMakeLists.txt b/CMakeLists.txt > >> index 6ef24bba..fe6582fa 100644 > >> --- a/CMakeLists.txt > >> +++ b/CMakeLists.txt > >> @@ -116,6 +116,15 @@ if(LUAJIT_ENABLE_WARNINGS) > >> ) > >> endif() > >> I suggest to add comment here, that the user should run tests _before_ coverage report, or this may be confusing (yes, I'm this user :)): | $ make LuaJIT-coverage | Building coverage report | lines: 0.0% (0 out of 23883) | functions: 0.0% (0 out of 1765) | branches: 0.0% (0 out of 17131) | Built target LuaJIT-coverage > >> +set(LUAJIT_ENABLE_COVERAGE_DEFAULT OFF) > >> +option(LUAJIT_ENABLE_COVERAGE > >> + "Enable integration with gcovr, a code coverage program" > >> + ${LUAJIT_ENABLE_COVERAGE_DEFAULT}) > >> +if (LUAJIT_ENABLE_COVERAGE) > >> + AppendFlags(CMAKE_C_FLAGS --coverage) > >> + include(CodeCoverage) > >> +endif(LUAJIT_ENABLE_COVERAGE) > >> + > >> # Auxiliary flags for main targets (libraries, binaries). > >> AppendFlags(TARGET_C_FLAGS > >> -D_FILE_OFFSET_BITS=64 > >> diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake > >> new file mode 100644 > >> index 00000000..2be7d129 > >> --- /dev/null > >> +++ b/cmake/CodeCoverage.cmake > >> @@ -0,0 +1,45 @@ > >> +find_program(GCOVR gcovr) > >> +find_program(GCOV gcov) > >> + > >> +set(COVERAGE_DIR "${PROJECT_BINARY_DIR}/coverage") > >> +set(COVERAGE_HTML_REPORT "${COVERAGE_DIR}/luajit.html") > >> +set(COVERAGE_XML_REPORT "${COVERAGE_DIR}/luajit.xml") > >> + > >> +if(NOT GCOVR OR NOT GCOV) > >> + add_custom_target(${PROJECT_NAME}-coverage > >> + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "LuaJIT-coverage is a dummy target" I suggest to split this line into several too. > >> + ) > >> + message(WARNING "Either `gcovr' or `gcov` not found, \ > >> +so ${PROJECT_NAME}-coverage target is dummy") > > Nit: Something is wrong with alignment here. > No, it is intentionally. If you add indentation then these whitespaces > will be added to a message. Works just fine with the following diff for me: =================================================================== diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake index 2be7d129..83e23d7f 100644 --- a/cmake/CodeCoverage.cmake +++ b/cmake/CodeCoverage.cmake @@ -9,8 +9,8 @@ if(NOT GCOVR OR NOT GCOV) add_custom_target(${PROJECT_NAME}-coverage COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "LuaJIT-coverage is a dummy target" ) - message(WARNING "Either `gcovr' or `gcov` not found, \ -so ${PROJECT_NAME}-coverage target is dummy") + message(WARNING "Either `gcovr' or `gcov` not found, " + "so ${PROJECT_NAME}-coverage target is dummy") return() endif() =================================================================== <snipped> > # Exclude DynASM files, that contain a low-level VM code for CPUs. > --exclude ".*\.dasc" > # Exclude buildvm source code, it's the project's infrastructure. > --exclude ".*/host/" Why don't use ${PROJECT_SOURCE_DIR} instead of .* here? <snipped> > >> -- Best regards, Sergey Kaplun ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 1/2 v2] cmake: add code coverage support 2023-08-06 11:35 ` Sergey Kaplun via Tarantool-patches @ 2023-08-07 13:39 ` Sergey Bronnikov via Tarantool-patches 2023-08-15 8:41 ` Maxim Kokryashkin via Tarantool-patches 0 siblings, 1 reply; 13+ messages in thread From: Sergey Bronnikov via Tarantool-patches @ 2023-08-07 13:39 UTC (permalink / raw) To: Sergey Kaplun; +Cc: Sergey Bronnikov, max.kokryashkin, tarantool-patches Hello, Sergey! On 8/6/23 14:35, Sergey Kaplun wrote: > Hi, Sergey! > Thanks for the patch! > LGTM, just a minor nits below. > > On 02.08.23, Sergey Bronnikov via Tarantool-patches wrote: >> Hi, Max >> >> On 8/2/23 11:06, Maxim Kokryashkin via Tarantool-patches wrote: >>> Hi, Sergey! >>> Thanks for the fixes! >>> LGTM, except for a few comments below. >>> >>> Side note: I see that coverage job in CI is red. Why is that >>> happening? >> This happened because from time to time total code coverage number >> changes a bit. >> >> It is really annoying, to solve this we need to increase the threshold >> in Coveralls service. > I see that now this job is green. Was it fixed? Actually no. I'll ask someone who has access to settings to increase threshold. > >> >> >>> On Tue, Aug 01, 2023 at 09:46:08PM +0300, Sergey Bronnikov via Tarantool-patches wrote: >>>> From: Sergey Bronnikov <sergeyb@tarantool.org> >>>> >>>> The patch adds building code coverage report using gcovr [1] and gcov. >>>> gcovr is a better version of lcov, see [2]. There were two new CMake >>>> targets added: LuaJIT-coverage proccess *.gcno and *.gcda files with >>> Typo: s/process/processes/ >> Fixed. >>>> gcov, builds a detailed HTML report and prints a summary, target >>>> coverage executes LuaJIT-tests and then runs LuaJIT-coverage. Target >>>> LuaJIT-coverage is useful for building code coverage report for a custom >>>> set of regression tests. >>>> >>>> ``` >>>> $ cmake -S . -B build -DENABLE_COVERAGE=ON >>>> $ cmake --build build --parallel --target coverage >>>> >>>> <snipped> >>>> >>>> lines: 84.1% (26056 out of 30997) >>>> functions: 88.8% (2055 out of 2314) >>>> branches: 71.5% (14801 out of 20703) >>>> ``` >>>> >>>> 1. https://gcovr.com/ >>>> 2. https://gcovr.com/en/stable/faq.html#what-is-the-difference-between-lcov-and-gcovr >>>> --- >>>> CMakeLists.txt | 9 ++++++ >>>> cmake/CodeCoverage.cmake | 45 +++++++++++++++++++++++++++ >>>> test/CMakeLists.txt | 7 +++++ >>>> test/tarantool-c-tests/CMakeLists.txt | 6 +++- >>>> 4 files changed, 66 insertions(+), 1 deletion(-) >>>> create mode 100644 cmake/CodeCoverage.cmake >>>> >>>> diff --git a/CMakeLists.txt b/CMakeLists.txt >>>> index 6ef24bba..fe6582fa 100644 >>>> --- a/CMakeLists.txt >>>> +++ b/CMakeLists.txt >>>> @@ -116,6 +116,15 @@ if(LUAJIT_ENABLE_WARNINGS) >>>> ) >>>> endif() >>>> > I suggest to add comment here, that the user should run tests _before_ > coverage report, or this may be confusing (yes, I'm this user :)): > > | $ make LuaJIT-coverage > | Building coverage report > | lines: 0.0% (0 out of 23883) > | functions: 0.0% (0 out of 1765) > | branches: 0.0% (0 out of 17131) > | Built target LuaJIT-coverage The difference for LuaJIT-coverage and coverage targets is described in commit message. Comment is already there: > add_custom_command(TARGET ${PROJECT_NAME}-coverage > COMMENT "Building coverage report" > >>>> +set(LUAJIT_ENABLE_COVERAGE_DEFAULT OFF) >>>> +option(LUAJIT_ENABLE_COVERAGE >>>> + "Enable integration with gcovr, a code coverage program" >>>> + ${LUAJIT_ENABLE_COVERAGE_DEFAULT}) >>>> +if (LUAJIT_ENABLE_COVERAGE) >>>> + AppendFlags(CMAKE_C_FLAGS --coverage) >>>> + include(CodeCoverage) >>>> +endif(LUAJIT_ENABLE_COVERAGE) >>>> + >>>> # Auxiliary flags for main targets (libraries, binaries). >>>> AppendFlags(TARGET_C_FLAGS >>>> -D_FILE_OFFSET_BITS=64 >>>> diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake >>>> new file mode 100644 >>>> index 00000000..2be7d129 >>>> --- /dev/null >>>> +++ b/cmake/CodeCoverage.cmake >>>> @@ -0,0 +1,45 @@ >>>> +find_program(GCOVR gcovr) >>>> +find_program(GCOV gcov) >>>> + >>>> +set(COVERAGE_DIR "${PROJECT_BINARY_DIR}/coverage") >>>> +set(COVERAGE_HTML_REPORT "${COVERAGE_DIR}/luajit.html") >>>> +set(COVERAGE_XML_REPORT "${COVERAGE_DIR}/luajit.xml") >>>> + >>>> +if(NOT GCOVR OR NOT GCOV) >>>> + add_custom_target(${PROJECT_NAME}-coverage >>>> + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "LuaJIT-coverage is a dummy target" > I suggest to split this line into several too. splitted > >>>> + ) >>>> + message(WARNING "Either `gcovr' or `gcov` not found, \ >>>> +so ${PROJECT_NAME}-coverage target is dummy") >>> Nit: Something is wrong with alignment here. >> No, it is intentionally. If you add indentation then these whitespaces >> will be added to a message. > Works just fine with the following diff for me: > > =================================================================== > diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake > index 2be7d129..83e23d7f 100644 > --- a/cmake/CodeCoverage.cmake > +++ b/cmake/CodeCoverage.cmake > @@ -9,8 +9,8 @@ if(NOT GCOVR OR NOT GCOV) > add_custom_target(${PROJECT_NAME}-coverage > COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "LuaJIT-coverage is a dummy target" > ) > - message(WARNING "Either `gcovr' or `gcov` not found, \ > -so ${PROJECT_NAME}-coverage target is dummy") > + message(WARNING "Either `gcovr' or `gcov` not found, " > + "so ${PROJECT_NAME}-coverage target is dummy") > return() > endif() > > =================================================================== Applied, thanks! > > <snipped> > >> # Exclude DynASM files, that contain a low-level VM code for CPUs. >> --exclude ".*\.dasc" >> # Exclude buildvm source code, it's the project's infrastructure. >> --exclude ".*/host/" > Why don't use ${PROJECT_SOURCE_DIR} instead of .* here? It is not needed here. gcovr searches *.gcda/*.gcno files in PROJECT_BINARY_DIRECTORY and additionally all paths excluded except PROJECT_SOURCE_DIR/src. So absolute path is excessive in regexes specified in --exclude options. > > <snipped> > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 1/2 v2] cmake: add code coverage support 2023-08-07 13:39 ` Sergey Bronnikov via Tarantool-patches @ 2023-08-15 8:41 ` Maxim Kokryashkin via Tarantool-patches 0 siblings, 0 replies; 13+ messages in thread From: Maxim Kokryashkin via Tarantool-patches @ 2023-08-15 8:41 UTC (permalink / raw) To: Sergey Bronnikov; +Cc: max.kokryashkin, tarantool-patches, Sergey Bronnikov Hi, Sergey! Thanks for the fixes! LGTM, except for a single comment below. On Mon, Aug 07, 2023 at 04:39:27PM +0300, Sergey Bronnikov wrote: > Hello, Sergey! > > > On 8/6/23 14:35, Sergey Kaplun wrote: > > Hi, Sergey! > > Thanks for the patch! > > LGTM, just a minor nits below. > > > > On 02.08.23, Sergey Bronnikov via Tarantool-patches wrote: > > > Hi, Max > > > > > > On 8/2/23 11:06, Maxim Kokryashkin via Tarantool-patches wrote: > > > > Hi, Sergey! > > > > Thanks for the fixes! > > > > LGTM, except for a few comments below. > > > > > > > > Side note: I see that coverage job in CI is red. Why is that > > > > happening? > > > This happened because from time to time total code coverage number > > > changes a bit. > > > > > > It is really annoying, to solve this we need to increase the threshold > > > in Coveralls service. > > I see that now this job is green. Was it fixed? > Actually no. I'll ask someone who has access to settings to increase > threshold. > > > > > > > > > > > > On Tue, Aug 01, 2023 at 09:46:08PM +0300, Sergey Bronnikov via Tarantool-patches wrote: > > > > > From: Sergey Bronnikov <sergeyb@tarantool.org> > > > > > > > > > > The patch adds building code coverage report using gcovr [1] and gcov. > > > > > gcovr is a better version of lcov, see [2]. There were two new CMake > > > > > targets added: LuaJIT-coverage proccess *.gcno and *.gcda files with > > > > Typo: s/process/processes/ > > > Fixed. > > > > > gcov, builds a detailed HTML report and prints a summary, target > > > > > coverage executes LuaJIT-tests and then runs LuaJIT-coverage. Target > > > > > LuaJIT-coverage is useful for building code coverage report for a custom > > > > > set of regression tests. > > > > > > > > > > ``` > > > > > $ cmake -S . -B build -DENABLE_COVERAGE=ON > > > > > $ cmake --build build --parallel --target coverage > > > > > > > > > > <snipped> > > > > > > > > > > lines: 84.1% (26056 out of 30997) > > > > > functions: 88.8% (2055 out of 2314) > > > > > branches: 71.5% (14801 out of 20703) > > > > > ``` > > > > > > > > > > 1. https://gcovr.com/ > > > > > 2. https://gcovr.com/en/stable/faq.html#what-is-the-difference-between-lcov-and-gcovr > > > > > --- > > > > > CMakeLists.txt | 9 ++++++ > > > > > cmake/CodeCoverage.cmake | 45 +++++++++++++++++++++++++++ > > > > > test/CMakeLists.txt | 7 +++++ > > > > > test/tarantool-c-tests/CMakeLists.txt | 6 +++- > > > > > 4 files changed, 66 insertions(+), 1 deletion(-) > > > > > create mode 100644 cmake/CodeCoverage.cmake > > > > > > > > > > diff --git a/CMakeLists.txt b/CMakeLists.txt > > > > > index 6ef24bba..fe6582fa 100644 > > > > > --- a/CMakeLists.txt > > > > > +++ b/CMakeLists.txt > > > > > @@ -116,6 +116,15 @@ if(LUAJIT_ENABLE_WARNINGS) > > > > > ) > > > > > endif() > > I suggest to add comment here, that the user should run tests _before_ > > coverage report, or this may be confusing (yes, I'm this user :)): > > > > | $ make LuaJIT-coverage > > | Building coverage report > > | lines: 0.0% (0 out of 23883) > > | functions: 0.0% (0 out of 1765) > > | branches: 0.0% (0 out of 17131) > > | Built target LuaJIT-coverage > > The difference for LuaJIT-coverage and coverage targets is described in > commit message. > > Comment is already there: > > > add_custom_command(TARGET ${PROJECT_NAME}-coverage > > COMMENT "Building coverage report" > > > > > > > > > +set(LUAJIT_ENABLE_COVERAGE_DEFAULT OFF) > > > > > +option(LUAJIT_ENABLE_COVERAGE > > > > > + "Enable integration with gcovr, a code coverage program" > > > > > + ${LUAJIT_ENABLE_COVERAGE_DEFAULT}) > > > > > +if (LUAJIT_ENABLE_COVERAGE) > > > > > + AppendFlags(CMAKE_C_FLAGS --coverage) > > > > > + include(CodeCoverage) > > > > > +endif(LUAJIT_ENABLE_COVERAGE) I believe it would be better to do that in the `test/CMakeLists.txt` instead of the main one, since coverage is semantically relevant to tests. Feel free to ignore. > > > > > + > > > > > # Auxiliary flags for main targets (libraries, binaries). > > > > > AppendFlags(TARGET_C_FLAGS > > > > > -D_FILE_OFFSET_BITS=64 > > > > > diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake > > > > > new file mode 100644 > > > > > index 00000000..2be7d129 > > > > > --- /dev/null > > > > > +++ b/cmake/CodeCoverage.cmake > > > > > @@ -0,0 +1,45 @@ > > > > > +find_program(GCOVR gcovr) > > > > > +find_program(GCOV gcov) > > > > > + > > > > > +set(COVERAGE_DIR "${PROJECT_BINARY_DIR}/coverage") > > > > > +set(COVERAGE_HTML_REPORT "${COVERAGE_DIR}/luajit.html") > > > > > +set(COVERAGE_XML_REPORT "${COVERAGE_DIR}/luajit.xml") > > > > > + > > > > > +if(NOT GCOVR OR NOT GCOV) > > > > > + add_custom_target(${PROJECT_NAME}-coverage > > > > > + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "LuaJIT-coverage is a dummy target" > > I suggest to split this line into several too. > > splitted > > > > > > > > > + ) > > > > > + message(WARNING "Either `gcovr' or `gcov` not found, \ > > > > > +so ${PROJECT_NAME}-coverage target is dummy") > > > > Nit: Something is wrong with alignment here. > > > No, it is intentionally. If you add indentation then these whitespaces > > > will be added to a message. > > Works just fine with the following diff for me: > > > > =================================================================== > > diff --git a/cmake/CodeCoverage.cmake b/cmake/CodeCoverage.cmake > > index 2be7d129..83e23d7f 100644 > > --- a/cmake/CodeCoverage.cmake > > +++ b/cmake/CodeCoverage.cmake > > @@ -9,8 +9,8 @@ if(NOT GCOVR OR NOT GCOV) > > add_custom_target(${PROJECT_NAME}-coverage > > COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "LuaJIT-coverage is a dummy target" > > ) > > - message(WARNING "Either `gcovr' or `gcov` not found, \ > > -so ${PROJECT_NAME}-coverage target is dummy") > > + message(WARNING "Either `gcovr' or `gcov` not found, " > > + "so ${PROJECT_NAME}-coverage target is dummy") > > return() > > endif() > > =================================================================== > > Applied, thanks! > > > > > > <snipped> > > > > > # Exclude DynASM files, that contain a low-level VM code for CPUs. > > > --exclude ".*\.dasc" > > > # Exclude buildvm source code, it's the project's infrastructure. > > > --exclude ".*/host/" > > Why don't use ${PROJECT_SOURCE_DIR} instead of .* here? > > > It is not needed here. gcovr searches *.gcda/*.gcno files in > PROJECT_BINARY_DIRECTORY > > and additionally all paths excluded except PROJECT_SOURCE_DIR/src. So > absolute path is excessive in regexes specified in --exclude options. > > > > > <snipped> > > > > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* [Tarantool-patches] [PATCH 2/2 v2] ci: support coveralls 2023-08-01 18:46 [Tarantool-patches] [PATCH 0/2 v2] Add code coverage support Sergey Bronnikov via Tarantool-patches 2023-08-01 18:46 ` [Tarantool-patches] [PATCH 1/2 v2] cmake: add " Sergey Bronnikov via Tarantool-patches @ 2023-08-01 18:46 ` Sergey Bronnikov via Tarantool-patches 2023-08-02 8:18 ` Maxim Kokryashkin via Tarantool-patches 2023-08-21 11:05 ` [Tarantool-patches] [PATCH 0/2 v2] Add code coverage support Igor Munkin via Tarantool-patches 2 siblings, 1 reply; 13+ messages in thread From: Sergey Bronnikov via Tarantool-patches @ 2023-08-01 18:46 UTC (permalink / raw) To: tarantool-patches, Sergey Kaplun, max.kokryashkin From: Sergey Bronnikov <sergeyb@tarantool.org> The patch adds a workflow that runs regression test suites, produces a summary about current code coverage and send code coverage data to Coveralls. Coveralls is a web-service that lets you inspect every detail of your coverage. See Tarantool's LuaJIT page on Coveralls [1]. 1. https://coveralls.io/github/tarantool/luajit --- .github/actions/setup-linux/action.yml | 1 + .github/workflows/coverage.yml | 60 ++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 .github/workflows/coverage.yml diff --git a/.github/actions/setup-linux/action.yml b/.github/actions/setup-linux/action.yml index f0171b83..71619a60 100644 --- a/.github/actions/setup-linux/action.yml +++ b/.github/actions/setup-linux/action.yml @@ -16,4 +16,5 @@ runs: run: | apt -y update apt -y install cmake gcc make ninja-build perl + pip3 install gcovr shell: bash diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 00000000..9fff06c7 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,60 @@ +name: Code coverage + +on: + push: + branches-ignore: + - '**-notest' + - 'upstream-**' + tags-ignore: + - '**' + +concurrency: + # An update of a developer branch cancels the previously + # scheduled workflow run for this branch. However, the default + # branch, and long-term branch (tarantool/release/2.11, + # tarantool/release/2.10, etc) workflow runs are never canceled. + # + # We use a trick here: define the concurrency group as 'workflow + # run ID' + # 'workflow run attempt' because it is a unique + # combination for any run. So it effectively discards grouping. + # + # XXX: we cannot use `github.sha` as a unique identifier because + # pushing a tag may cancel a run that works on a branch push + # event. + group: ${{ startsWith(github.ref, 'refs/heads/tarantool/') + && format('{0}-{1}', github.run_id, github.run_attempt) + || format('{0}-{1}', github.workflow, github.ref) }} + cancel-in-progress: true + +jobs: + coverage: + strategy: + fail-fast: false + runs-on: [self-hosted, regular, x86_64, Linux] + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + submodules: recursive + - name: setup Linux + uses: ./.github/actions/setup-linux + - name: configure + run: > + cmake -S . -B ${{ env.BUILDDIR }} + -G Ninja + -DCMAKE_BUILD_TYPE=RelWithDebInfo + -DLUAJIT_ENABLE_COVERAGE=ON + -DLUAJIT_ENABLE_GC64=ON + - name: build + run: cmake --build . --parallel + working-directory: ${{ env.BUILDDIR }} + - name: test and generate code coverage report + run: cmake --build ${{ env.BUILDDIR }} --parallel --target coverage + - name: send code coverage to coveralls.io + run: | + curl -LO https://coveralls.io/coveralls-linux.tar.gz + tar xvzf coveralls-linux.tar.gz + ./coveralls -f ./coverage/luajit.xml + working-directory: ${{ env.BUILDDIR }} + env: + COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} -- 2.34.1 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 2/2 v2] ci: support coveralls 2023-08-01 18:46 ` [Tarantool-patches] [PATCH 2/2 v2] ci: support coveralls Sergey Bronnikov via Tarantool-patches @ 2023-08-02 8:18 ` Maxim Kokryashkin via Tarantool-patches 2023-08-02 8:20 ` Sergey Bronnikov via Tarantool-patches 2023-08-06 11:41 ` Sergey Kaplun via Tarantool-patches 0 siblings, 2 replies; 13+ messages in thread From: Maxim Kokryashkin via Tarantool-patches @ 2023-08-02 8:18 UTC (permalink / raw) To: Sergey Bronnikov; +Cc: max.kokryashkin, tarantool-patches Hi, Sergey! Thanks for the patch! LGTM, except for a few nits regarding the commit message. Best regards, Maxim Kokryashkin On Tue, Aug 01, 2023 at 09:46:10PM +0300, Sergey Bronnikov via Tarantool-patches wrote: > From: Sergey Bronnikov <sergeyb@tarantool.org> > > The patch adds a workflow that runs regression test suites, produces a > summary about current code coverage and send code coverage data to Typo: s/about/of/ Typo: s/send code/sends code/ > Coveralls. Coveralls is a web-service that lets you inspect every detail Typo: s/web-service/web service/ > of your coverage. See Tarantool's LuaJIT page on Coveralls [1]. > > 1. https://coveralls.io/github/tarantool/luajit > --- > .github/actions/setup-linux/action.yml | 1 + > .github/workflows/coverage.yml | 60 ++++++++++++++++++++++++++ > 2 files changed, 61 insertions(+) > create mode 100644 .github/workflows/coverage.yml > > diff --git a/.github/actions/setup-linux/action.yml b/.github/actions/setup-linux/action.yml > index f0171b83..71619a60 100644 > --- a/.github/actions/setup-linux/action.yml > +++ b/.github/actions/setup-linux/action.yml > @@ -16,4 +16,5 @@ runs: > run: | > apt -y update > apt -y install cmake gcc make ninja-build perl > + pip3 install gcovr > shell: bash > diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml > new file mode 100644 > index 00000000..9fff06c7 > --- /dev/null > +++ b/.github/workflows/coverage.yml > @@ -0,0 +1,60 @@ > +name: Code coverage > + > +on: > + push: > + branches-ignore: > + - '**-notest' > + - 'upstream-**' > + tags-ignore: > + - '**' > + > +concurrency: > + # An update of a developer branch cancels the previously > + # scheduled workflow run for this branch. However, the default > + # branch, and long-term branch (tarantool/release/2.11, > + # tarantool/release/2.10, etc) workflow runs are never canceled. > + # > + # We use a trick here: define the concurrency group as 'workflow > + # run ID' + # 'workflow run attempt' because it is a unique > + # combination for any run. So it effectively discards grouping. > + # > + # XXX: we cannot use `github.sha` as a unique identifier because > + # pushing a tag may cancel a run that works on a branch push > + # event. > + group: ${{ startsWith(github.ref, 'refs/heads/tarantool/') > + && format('{0}-{1}', github.run_id, github.run_attempt) > + || format('{0}-{1}', github.workflow, github.ref) }} > + cancel-in-progress: true > + > +jobs: > + coverage: > + strategy: > + fail-fast: false > + runs-on: [self-hosted, regular, x86_64, Linux] > + steps: > + - uses: actions/checkout@v3 > + with: > + fetch-depth: 0 > + submodules: recursive > + - name: setup Linux > + uses: ./.github/actions/setup-linux > + - name: configure > + run: > > + cmake -S . -B ${{ env.BUILDDIR }} > + -G Ninja > + -DCMAKE_BUILD_TYPE=RelWithDebInfo > + -DLUAJIT_ENABLE_COVERAGE=ON > + -DLUAJIT_ENABLE_GC64=ON > + - name: build > + run: cmake --build . --parallel > + working-directory: ${{ env.BUILDDIR }} > + - name: test and generate code coverage report > + run: cmake --build ${{ env.BUILDDIR }} --parallel --target coverage > + - name: send code coverage to coveralls.io > + run: | > + curl -LO https://coveralls.io/coveralls-linux.tar.gz > + tar xvzf coveralls-linux.tar.gz > + ./coveralls -f ./coverage/luajit.xml > + working-directory: ${{ env.BUILDDIR }} > + env: > + COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} > -- > 2.34.1 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 2/2 v2] ci: support coveralls 2023-08-02 8:18 ` Maxim Kokryashkin via Tarantool-patches @ 2023-08-02 8:20 ` Sergey Bronnikov via Tarantool-patches 2023-08-06 11:41 ` Sergey Kaplun via Tarantool-patches 1 sibling, 0 replies; 13+ messages in thread From: Sergey Bronnikov via Tarantool-patches @ 2023-08-02 8:20 UTC (permalink / raw) To: Maxim Kokryashkin, Sergey Bronnikov; +Cc: max.kokryashkin, tarantool-patches Hi, Max On 8/2/23 11:18, Maxim Kokryashkin via Tarantool-patches wrote: > Hi, Sergey! > Thanks for the patch! > LGTM, except for a few nits regarding the commit message. > > Best regards, > Maxim Kokryashkin > > On Tue, Aug 01, 2023 at 09:46:10PM +0300, Sergey Bronnikov via Tarantool-patches wrote: >> From: Sergey Bronnikov <sergeyb@tarantool.org> >> >> The patch adds a workflow that runs regression test suites, produces a >> summary about current code coverage and send code coverage data to > Typo: s/about/of/ > Typo: s/send code/sends code/ Fixed! >> Coveralls. Coveralls is a web-service that lets you inspect every detail > Typo: s/web-service/web service/ Fixed. <snipped> ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 2/2 v2] ci: support coveralls 2023-08-02 8:18 ` Maxim Kokryashkin via Tarantool-patches 2023-08-02 8:20 ` Sergey Bronnikov via Tarantool-patches @ 2023-08-06 11:41 ` Sergey Kaplun via Tarantool-patches 2023-08-07 11:32 ` Sergey Bronnikov via Tarantool-patches 1 sibling, 1 reply; 13+ messages in thread From: Sergey Kaplun via Tarantool-patches @ 2023-08-06 11:41 UTC (permalink / raw) To: Maxim Kokryashkin; +Cc: Sergey Bronnikov, tarantool-patches, max.kokryashkin Hi, Maxim, Sergey! Thanks for the patch and the review! LGTM, just a minor comments below. On 02.08.23, Maxim Kokryashkin wrote: > Hi, Sergey! > Thanks for the patch! > LGTM, except for a few nits regarding the commit message. > > Best regards, > Maxim Kokryashkin > > On Tue, Aug 01, 2023 at 09:46:10PM +0300, Sergey Bronnikov via Tarantool-patches wrote: > > From: Sergey Bronnikov <sergeyb@tarantool.org> > > > > The patch adds a workflow that runs regression test suites, produces a > > summary about current code coverage and send code coverage data to > Typo: s/about/of/ > Typo: s/send code/sends code/ > > Coveralls. Coveralls is a web-service that lets you inspect every detail > Typo: s/web-service/web service/ > > of your coverage. See Tarantool's LuaJIT page on Coveralls [1]. > > > > 1. https://coveralls.io/github/tarantool/luajit > > --- > > .github/actions/setup-linux/action.yml | 1 + > > .github/workflows/coverage.yml | 60 ++++++++++++++++++++++++++ > > 2 files changed, 61 insertions(+) > > create mode 100644 .github/workflows/coverage.yml > > > > diff --git a/.github/actions/setup-linux/action.yml b/.github/actions/setup-linux/action.yml > > index f0171b83..71619a60 100644 > > --- a/.github/actions/setup-linux/action.yml > > +++ b/.github/actions/setup-linux/action.yml > > @@ -16,4 +16,5 @@ runs: > > run: | > > apt -y update > > apt -y install cmake gcc make ninja-build perl > > + pip3 install gcovr Should it be done in the separate action, like it is done for ASan? Because we don't need gcovr for all our linux testing. > > shell: bash > > diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml > > new file mode 100644 > > index 00000000..9fff06c7 > > --- /dev/null > > +++ b/.github/workflows/coverage.yml > > @@ -0,0 +1,60 @@ > > +name: Code coverage > > + > > +on: > > + push: > > + branches-ignore: > > + - '**-notest' > > + - 'upstream-**' > > + tags-ignore: > > + - '**' > > + > > +concurrency: > > + # An update of a developer branch cancels the previously > > + # scheduled workflow run for this branch. However, the default > > + # branch, and long-term branch (tarantool/release/2.11, > > + # tarantool/release/2.10, etc) workflow runs are never canceled. > > + # > > + # We use a trick here: define the concurrency group as 'workflow > > + # run ID' + # 'workflow run attempt' because it is a unique > > + # combination for any run. So it effectively discards grouping. > > + # > > + # XXX: we cannot use `github.sha` as a unique identifier because > > + # pushing a tag may cancel a run that works on a branch push > > + # event. > > + group: ${{ startsWith(github.ref, 'refs/heads/tarantool/') > > + && format('{0}-{1}', github.run_id, github.run_attempt) > > + || format('{0}-{1}', github.workflow, github.ref) }} > > + cancel-in-progress: true > > + > > +jobs: > > + coverage: > > + strategy: > > + fail-fast: false > > + runs-on: [self-hosted, regular, x86_64, Linux] > > + steps: > > + - uses: actions/checkout@v3 > > + with: > > + fetch-depth: 0 > > + submodules: recursive > > + - name: setup Linux > > + uses: ./.github/actions/setup-linux > > + - name: configure > > + run: > > > + cmake -S . -B ${{ env.BUILDDIR }} > > + -G Ninja > > + -DCMAKE_BUILD_TYPE=RelWithDebInfo > > + -DLUAJIT_ENABLE_COVERAGE=ON > > + -DLUAJIT_ENABLE_GC64=ON Is there a way to joing GC64/non-GC64 testsing? Same for ARM64. > > + - name: build > > + run: cmake --build . --parallel > > + working-directory: ${{ env.BUILDDIR }} > > + - name: test and generate code coverage report > > + run: cmake --build ${{ env.BUILDDIR }} --parallel --target coverage I see no test target here, so will we get the correct coverage results? Am I missing something? If yes, than comment is desirable. > > + - name: send code coverage to coveralls.io > > + run: | > > + curl -LO https://coveralls.io/coveralls-linux.tar.gz > > + tar xvzf coveralls-linux.tar.gz > > + ./coveralls -f ./coverage/luajit.xml > > + working-directory: ${{ env.BUILDDIR }} > > + env: > > + COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} > > -- > > 2.34.1 > > -- Best regards, Sergey Kaplun ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 2/2 v2] ci: support coveralls 2023-08-06 11:41 ` Sergey Kaplun via Tarantool-patches @ 2023-08-07 11:32 ` Sergey Bronnikov via Tarantool-patches 0 siblings, 0 replies; 13+ messages in thread From: Sergey Bronnikov via Tarantool-patches @ 2023-08-07 11:32 UTC (permalink / raw) To: Sergey Kaplun, Maxim Kokryashkin Cc: Sergey Bronnikov, tarantool-patches, max.kokryashkin Hi, Sergey thanks for a long-awaited review! On 8/6/23 14:41, Sergey Kaplun via Tarantool-patches wrote: > Hi, Maxim, Sergey! > Thanks for the patch and the review! > LGTM, just a minor comments below. > > On 02.08.23, Maxim Kokryashkin wrote: >> Hi, Sergey! >> Thanks for the patch! >> LGTM, except for a few nits regarding the commit message. >> >> Best regards, >> Maxim Kokryashkin >> >> On Tue, Aug 01, 2023 at 09:46:10PM +0300, Sergey Bronnikov via Tarantool-patches wrote: >>> From: Sergey Bronnikov <sergeyb@tarantool.org> >>> >>> The patch adds a workflow that runs regression test suites, produces a >>> summary about current code coverage and send code coverage data to >> Typo: s/about/of/ >> Typo: s/send code/sends code/ >>> Coveralls. Coveralls is a web-service that lets you inspect every detail >> Typo: s/web-service/web service/ >>> of your coverage. See Tarantool's LuaJIT page on Coveralls [1]. >>> >>> 1. https://coveralls.io/github/tarantool/luajit >>> --- >>> .github/actions/setup-linux/action.yml | 1 + >>> .github/workflows/coverage.yml | 60 ++++++++++++++++++++++++++ >>> 2 files changed, 61 insertions(+) >>> create mode 100644 .github/workflows/coverage.yml >>> >>> diff --git a/.github/actions/setup-linux/action.yml b/.github/actions/setup-linux/action.yml >>> index f0171b83..71619a60 100644 >>> --- a/.github/actions/setup-linux/action.yml >>> +++ b/.github/actions/setup-linux/action.yml >>> @@ -16,4 +16,5 @@ runs: >>> run: | >>> apt -y update >>> apt -y install cmake gcc make ninja-build perl >>> + pip3 install gcovr > Should it be done in the separate action, like it is done for ASan? > Because we don't need gcovr for all our linux testing. Well, added a separate GH action for that. > >>> shell: bash >>> diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml >>> new file mode 100644 >>> index 00000000..9fff06c7 >>> --- /dev/null >>> +++ b/.github/workflows/coverage.yml >>> @@ -0,0 +1,60 @@ >>> +name: Code coverage >>> + >>> +on: >>> + push: >>> + branches-ignore: >>> + - '**-notest' >>> + - 'upstream-**' >>> + tags-ignore: >>> + - '**' >>> + >>> +concurrency: >>> + # An update of a developer branch cancels the previously >>> + # scheduled workflow run for this branch. However, the default >>> + # branch, and long-term branch (tarantool/release/2.11, >>> + # tarantool/release/2.10, etc) workflow runs are never canceled. >>> + # >>> + # We use a trick here: define the concurrency group as 'workflow >>> + # run ID' + # 'workflow run attempt' because it is a unique >>> + # combination for any run. So it effectively discards grouping. >>> + # >>> + # XXX: we cannot use `github.sha` as a unique identifier because >>> + # pushing a tag may cancel a run that works on a branch push >>> + # event. >>> + group: ${{ startsWith(github.ref, 'refs/heads/tarantool/') >>> + && format('{0}-{1}', github.run_id, github.run_attempt) >>> + || format('{0}-{1}', github.workflow, github.ref) }} >>> + cancel-in-progress: true >>> + >>> +jobs: >>> + coverage: >>> + strategy: >>> + fail-fast: false >>> + runs-on: [self-hosted, regular, x86_64, Linux] >>> + steps: >>> + - uses: actions/checkout@v3 >>> + with: >>> + fetch-depth: 0 >>> + submodules: recursive >>> + - name: setup Linux >>> + uses: ./.github/actions/setup-linux >>> + - name: configure >>> + run: > >>> + cmake -S . -B ${{ env.BUILDDIR }} >>> + -G Ninja >>> + -DCMAKE_BUILD_TYPE=RelWithDebInfo >>> + -DLUAJIT_ENABLE_COVERAGE=ON >>> + -DLUAJIT_ENABLE_GC64=ON > Is there a way to joing GC64/non-GC64 testsing? > Same for ARM64. Yes, there is a thing named "parallel build" that allows reporting code coverage data from a number of CI jobs, see [1]. We definitely need this for jobs with tests that covers non-common parts of code like GC64/ARM64 etc, but in scope of other patch series. 1. https://docs.coveralls.io/parallel-builds#whats-a-parallel-build >>> + - name: build >>> + run: cmake --build . --parallel >>> + working-directory: ${{ env.BUILDDIR }} >>> + - name: test and generate code coverage report >>> + run: cmake --build ${{ env.BUILDDIR }} --parallel --target coverage > I see no test target here, so will we get the correct coverage results? > Am I missing something? If yes, than comment is desirable. - target "LuaJIT-coverage" runs gcov and gcovr and builds a code coverage report - target "coverage" connected to "test" (running tests) and "LuaJIT-coverage" (builds code coverage report) I suppose comment is not required here. > >>> + - name: send code coverage to coveralls.io >>> + run: | >>> + curl -LO https://coveralls.io/coveralls-linux.tar.gz >>> + tar xvzf coveralls-linux.tar.gz >>> + ./coveralls -f ./coverage/luajit.xml >>> + working-directory: ${{ env.BUILDDIR }} >>> + env: >>> + COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} >>> -- >>> 2.34.1 >>> ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Tarantool-patches] [PATCH 0/2 v2] Add code coverage support 2023-08-01 18:46 [Tarantool-patches] [PATCH 0/2 v2] Add code coverage support Sergey Bronnikov via Tarantool-patches 2023-08-01 18:46 ` [Tarantool-patches] [PATCH 1/2 v2] cmake: add " Sergey Bronnikov via Tarantool-patches 2023-08-01 18:46 ` [Tarantool-patches] [PATCH 2/2 v2] ci: support coveralls Sergey Bronnikov via Tarantool-patches @ 2023-08-21 11:05 ` Igor Munkin via Tarantool-patches 2 siblings, 0 replies; 13+ messages in thread From: Igor Munkin via Tarantool-patches @ 2023-08-21 11:05 UTC (permalink / raw) To: Sergey Bronnikov; +Cc: max.kokryashkin, tarantool-patches Sergey, I've checked the patchset into all long-term branches in tarantool/luajit and bumped a new version in master, release/2.11 and release/2.10. On 01.08.23, Sergey Bronnikov via Tarantool-patches wrote: > From: Sergey Bronnikov <sergeyb@tarantool.org> > > Patch-series adds code coverage support to LuaJIT build infrastructure > and Github Actions. > > Changes v2: > - addressed comments from Max Kokryashkin and Sergey Kaplun > - added integration with Coveralls > > Branch: https://github.com/tarantool/luajit/tree/ligurio/code-coverage > Coveralls: https://coveralls.io/github/tarantool/luajit > Patch v1: https://lists.tarantool.org/tarantool-patches/58297844-8590-cf70-b3d5-3ed8908aef9a@tarantool.org/T/#t > > Sergey Bronnikov (2): > cmake: add code coverage support > ci: support coveralls > > .github/actions/setup-linux/action.yml | 1 + > .github/workflows/coverage.yml | 60 ++++++++++++++++++++++++++ > CMakeLists.txt | 9 ++++ > cmake/CodeCoverage.cmake | 45 +++++++++++++++++++ > test/CMakeLists.txt | 7 +++ > test/tarantool-c-tests/CMakeLists.txt | 6 ++- > 6 files changed, 127 insertions(+), 1 deletion(-) > create mode 100644 .github/workflows/coverage.yml > create mode 100644 cmake/CodeCoverage.cmake > > -- > 2.34.1 > -- Best regards, IM ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2023-08-21 11:21 UTC | newest] Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-08-01 18:46 [Tarantool-patches] [PATCH 0/2 v2] Add code coverage support Sergey Bronnikov via Tarantool-patches 2023-08-01 18:46 ` [Tarantool-patches] [PATCH 1/2 v2] cmake: add " Sergey Bronnikov via Tarantool-patches 2023-08-02 8:06 ` Maxim Kokryashkin via Tarantool-patches 2023-08-02 8:18 ` Sergey Bronnikov via Tarantool-patches 2023-08-06 11:35 ` Sergey Kaplun via Tarantool-patches 2023-08-07 13:39 ` Sergey Bronnikov via Tarantool-patches 2023-08-15 8:41 ` Maxim Kokryashkin via Tarantool-patches 2023-08-01 18:46 ` [Tarantool-patches] [PATCH 2/2 v2] ci: support coveralls Sergey Bronnikov via Tarantool-patches 2023-08-02 8:18 ` Maxim Kokryashkin via Tarantool-patches 2023-08-02 8:20 ` Sergey Bronnikov via Tarantool-patches 2023-08-06 11:41 ` Sergey Kaplun via Tarantool-patches 2023-08-07 11:32 ` Sergey Bronnikov via Tarantool-patches 2023-08-21 11:05 ` [Tarantool-patches] [PATCH 0/2 v2] Add code coverage support Igor Munkin via Tarantool-patches
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox