From a51bb3dee2c79ed05dbb8ac430e7135fa309fcf9 Mon Sep 17 00:00:00 2001 From: Enrico Seiler Date: Fri, 27 Sep 2024 12:32:09 +0200 Subject: [PATCH 1/2] [INFRA] Add Coverage CI --- .github/workflows/ci_coverage.yml | 93 +++++++++++++++++++++++++++++++ .github/workflows/ci_lint.yml | 11 +++- cmake/test/config.cmake | 2 + cmake/test/coverage.cmake | 25 +++++++++ 4 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/ci_coverage.yml create mode 100644 cmake/test/coverage.cmake diff --git a/.github/workflows/ci_coverage.yml b/.github/workflows/ci_coverage.yml new file mode 100644 index 0000000..9ae9f3c --- /dev/null +++ b/.github/workflows/ci_coverage.yml @@ -0,0 +1,93 @@ +# SPDX-FileCopyrightText: 2006-2024 Knut Reinert & Freie Universität Berlin +# SPDX-FileCopyrightText: 2016-2024 Knut Reinert & MPI für molekulare Genetik +# SPDX-License-Identifier: CC0-1.0 + +name: Coverage + +on: + push: + branches: + - 'main' + pull_request: + types: + - unlabeled + workflow_dispatch: + +concurrency: + group: coverage-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: ${{ github.event_name != 'push' }} + +env: + SEQAN3_NO_VERSION_CHECK: 1 + TZ: Europe/Berlin + +defaults: + run: + shell: bash -Eeuxo pipefail {0} + +jobs: + build: + runs-on: ubuntu-latest + name: ${{ matrix.compiler }} + if: github.repository_owner == 'seqan' || github.event_name == 'workflow_dispatch' || github.event.label.name == 'lint' + strategy: + fail-fast: false + matrix: + compiler: ["gcc-14"] + container: + image: ghcr.io/seqan/${{ matrix.compiler }} + volumes: + - /home/runner:/home/runner + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Load ccache + uses: actions/cache@v4 + with: + path: /home/runner/.ccache + save-always: true + key: ccache-${{ runner.os }}-${{ github.workflow }}-${{ matrix.compiler }}-${{ github.ref }} + + - name: Configure tests + run: | + mkdir build && cd build + cmake .. -DCMAKE_BUILD_TYPE=Coverage + make gtest_main + + - name: Build tests + working-directory: build + run: | + ccache -z + make -k tests + ccache -svvx + + - name: Run tests + working-directory: build + run: ctest . -j --output-on-failure --test-dir test + + - name: Generate coverage report + run: | + gcovr --root ${GITHUB_WORKSPACE} \ + ${GITHUB_WORKSPACE}/build \ + --filter ${GITHUB_WORKSPACE}/include \ + --filter ${GITHUB_WORKSPACE}/src \ + --exclude-lines-by-pattern '^\s*$' \ + --exclude-lines-by-pattern '^\s*};$' \ + --exclude-lines-by-pattern '^\s*\.[^\s]* = .*[\n,]$' \ + --exclude-lines-by-pattern '^\s*\.[^\s]* = .*}\);$' \ + --exclude-lines-by-pattern '^\s*\.[^\s]* =(\s+\".*\")+' \ + --exclude-unreachable-branches \ + --exclude-throw-branches \ + --exclude-noncode-lines \ + -j \ + --cobertura \ + --output ${GITHUB_WORKSPACE}/build/coverage_report.xml + + - name: Submit coverage report + uses: codecov/codecov-action@v3.1.5 + with: + files: build/coverage_report.xml + fail_ci_if_error: false diff --git a/.github/workflows/ci_lint.yml b/.github/workflows/ci_lint.yml index 70f61a5..457670d 100644 --- a/.github/workflows/ci_lint.yml +++ b/.github/workflows/ci_lint.yml @@ -34,12 +34,21 @@ jobs: steps: - name: "Cancel macOS" run: echo "Cancelling macOS" + cancel_coverage: + name: Cancel running Workflows + concurrency: + group: coverage-${{ github.event.pull_request.number }} + cancel-in-progress: true + runs-on: ubuntu-latest + steps: + - name: "Cancel Coverage" + run: echo "Cancelling Coverage" lint: name: Lint concurrency: group: lint-${{ github.event.pull_request.number }} cancel-in-progress: true - needs: [cancel_linux, cancel_macos] + needs: [cancel_linux, cancel_macos, cancel_coverage] runs-on: ubuntu-latest timeout-minutes: 15 steps: diff --git a/cmake/test/config.cmake b/cmake/test/config.cmake index 31ea3c0..f411a7d 100644 --- a/cmake/test/config.cmake +++ b/cmake/test/config.cmake @@ -2,6 +2,8 @@ # SPDX-FileCopyrightText: 2016-2024 Knut Reinert & MPI für molekulare Genetik # SPDX-License-Identifier: CC0-1.0 +include (test/coverage) + CPMGetPackage (googletest) list (APPEND CMAKE_CTEST_ARGUMENTS "--output-on-failure") # Must be before `enable_testing ()`. diff --git a/cmake/test/coverage.cmake b/cmake/test/coverage.cmake new file mode 100644 index 0000000..9651cd4 --- /dev/null +++ b/cmake/test/coverage.cmake @@ -0,0 +1,25 @@ +# SPDX-FileCopyrightText: 2006-2024, Knut Reinert & Freie Universität Berlin +# SPDX-FileCopyrightText: 2016-2024, Knut Reinert & MPI für molekulare Genetik +# SPDX-License-Identifier: BSD-3-Clause + +# Add a custom build type: Coverage +set (CMAKE_CXX_FLAGS_COVERAGE + "${CMAKE_CXX_FLAGS_DEBUG} --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path" + CACHE STRING "Flags used by the C++ compiler during coverage builds." FORCE +) +set (CMAKE_C_FLAGS_COVERAGE + "${CMAKE_C_FLAGS_DEBUG} --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path" + CACHE STRING "Flags used by the C compiler during coverage builds." FORCE +) +set (CMAKE_EXE_LINKER_FLAGS_COVERAGE + "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -Wl,-lgcov" + CACHE STRING "Flags used for linking binaries during coverage builds." FORCE +) +set (CMAKE_SHARED_LINKER_FLAGS_COVERAGE + "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} -Wl,-lgcov" + CACHE STRING "Flags used by the shared libraries linker during coverage builds." FORCE +) + +mark_as_advanced (CMAKE_CXX_FLAGS_COVERAGE CMAKE_C_FLAGS_COVERAGE CMAKE_EXE_LINKER_FLAGS_COVERAGE + CMAKE_SHARED_LINKER_FLAGS_COVERAGE +) From 53c3cd197ff5748a11ddfcf9c6908f13779ef220 Mon Sep 17 00:00:00 2001 From: Enrico Seiler Date: Fri, 27 Sep 2024 12:40:09 +0200 Subject: [PATCH 2/2] [DOC] Update README badges --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c73fb5a..69558e1 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,13 @@ -## Needle +## Needle [![build status][1]][2] [![codecov][3]][4] [![install with bioconda][5]][6] -### A fast and space-efficient pre-filter for estimating the quantification of very large collections of nucleotide sequences +[1]: https://img.shields.io/github/actions/workflow/status/seqan/needle/ci_linux.yml?branch=main&style=flat&logo=github&label=CI "Open GitHub actions page" +[2]: https://github.com/seqan/needle/actions?query=branch%3Amain +[3]: https://codecov.io/gh/seqan/needle/graph/badge.svg?token=W109QS58E0 "Open Codecov page" +[4]: https://codecov.io/gh/seqan/needle +[5]: https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg?style=flat +[6]: #install-with-bioconda-linux -[![Build Status](https://github.com/seqan/app-template/workflows/App%20CI/badge.svg)](https://github.com/seqan/needle/actions?query=branch%3Amaster+workflow%3A%22App+CI%22) [![codecov](https://codecov.io/gh/seqan/needle/branch/master/graph/badge.svg?token=SJVMYRUKW2)](https://codecov.io/gh/seqan/needle) [![install with bioconda](https://img.shields.io/badge/install%20with-bioconda-brightgreen.svg?style=flat)](#install-with-bioconda-linux) +### A fast and space-efficient pre-filter for estimating the quantification of very large collections of nucleotide sequences Needle is a tool for semi-quantitative analysis of very large collections of nucleotide sequences. Needle stores its data in multiple interleaved Bloom filter, a fast and space efficient probabilistic data structure and uses a windowing scheme (also called minimisers) to reduce the amount of data to store. How many interleaved Bloom filter are used is defined by the user. Each interleaved Bloom filter has a so called expression threshold and stores minimisers with an occurrence greater than or equal to its own expression threshold and smaller than the next biggest expression threshold (if there is no bigger expression threshold, all greater than or equal to the threshold are stored). These expression thresholds are then used during the query (called estimate) to approximate the expression values of given transcripts.