Skip to content

Commit

Permalink
Add CI using GitHub Actions (#256)
Browse files Browse the repository at this point in the history
  • Loading branch information
immel-f committed Oct 18, 2022
1 parent 700a962 commit ebc31ab
Show file tree
Hide file tree
Showing 18 changed files with 404 additions and 93 deletions.
35 changes: 34 additions & 1 deletion .clang-tidy
Original file line number Diff line number Diff line change
@@ -1,5 +1,38 @@
# clang tidy file installed by mrt_tools. Do not modify: This file will be overwritten.
Checks: '-*,mrt*,bugprone-*,-bugprone-exception-escape,clang-analyzer-apiModeling*,clang-analyzer-core*,-clang-analyzer-core.UndefinedBinaryOperatorResult,clang-analyzer-deadcode*,clang-analyzer-unix*,clang-analyzer-cplusplus*,-clang-analyzer-cplusplus.NewDelete,cppcoreguidelines-*,-cppcoreguidelines-pro-bounds-array-to-pointer-decay,-cppcoreguidelines-owning-memory,-cppcoreguidelines-pro-type-vararg,-cppcoreguidelines-avoid-magic-numbers,-cppcoreguidelines-avoid-c-arrays,google-explicit-constructor,google-global-names-in-headers,google-readability-casting,google-readability-namespace-comments,google-global-names-in-headers,google-build-namespaces,performance-*,readability-*,-readability-uppercase-literal-suffix,-readability-magic-numbers,modernize-*,-modernize-use-trailing-return-type,-modernize-use-nodiscard,-modernize-concat-nested-namespaces,-modernize-avoid-c-arrays,misc-*,-misc-non-private-member-variables-in-classes'
Checks: >
-*,
mrt*,
bugprone-*,
-bugprone-exception-escape,
clang-analyzer-apiModeling*,
clang-analyzer-core*,
-clang-analyzer-core.UndefinedBinaryOperatorResult,
clang-analyzer-deadcode*,
clang-analyzer-unix*,
clang-analyzer-cplusplus*,
-clang-analyzer-cplusplus.NewDelete,
cppcoreguidelines-*,
-cppcoreguidelines-pro-bounds-array-to-pointer-decay,
-cppcoreguidelines-owning-memory,
-cppcoreguidelines-pro-type-vararg,
-cppcoreguidelines-avoid-magic-numbers,
-cppcoreguidelines-avoid-c-arrays,
google-explicit-constructor,
google-global-names-in-headers,
google-readability-namespace-comments,
google-build-namespaces,
performance-*,
readability-*,
-readability-uppercase-literal-suffix,
-readability-magic-numbers,
-readability-identifier-length,
modernize-*,
-modernize-use-trailing-return-type,
-modernize-use-nodiscard,
-modernize-concat-nested-namespaces,
-modernize-avoid-c-arrays,
misc-*,
-misc-non-private-member-variables-in-classes
HeaderFilterRegex: '^(?!\/usr)(?!\/opt).*\/src\/.*'
AnalyzeTemporaryDtors: false
CheckOptions:
Expand Down
34 changes: 34 additions & 0 deletions .github/lcov_merge.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/bin/bash
set -ex
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
LANELET2_ROOT=$(dirname $SCRIPT_DIR)
WORKSPACE_ROOT=$(dirname $(dirname $LANELET2_ROOT))

src_dirs=""
for d in ${LANELET2_ROOT}/*/ ; do
[ "$(basename $d)" = ".github" ] && continue
[ "$(basename $d)" = "lanelet2" ] && continue
src_dirs="${src_dirs} ${d}*"
done

lcov_filtered_files=""
for d in ${LANELET2_ROOT}/*/ ; do
[ "$(basename $d)" = ".github" ] && continue
[ "$(basename $d)" = "lanelet2" ] && continue
pkg="$(basename $d)"
build_dir="${WORKSPACE_ROOT}/build/${pkg}"

file="${build_dir}/mrt_coverage/full_coverage.lcov"
if [ -f "$file" ]; then
filtered_path="${build_dir}/mrt_coverage/full_coverage_filtered.lcov"

set -f
lcov -o ${filtered_path} -e ${file}${src_dirs}
set +f

lcov_filtered_files="${lcov_filtered_files} -a ${filtered_path}"
fi;
done

mkdir -p "${WORKSPACE_ROOT}/lcov"
lcov -o "${WORKSPACE_ROOT}/lcov/full_coverage.lcov" ${lcov_filtered_files}
38 changes: 38 additions & 0 deletions .github/lint.bash
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash
set -ex
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
LANELET2_ROOT=$(dirname $SCRIPT_DIR)

export BUILD_DIR=/tmp/lanelet2_build_lint_$(id -u)

# setup mrt_cmake_modules, otherwise assume it's installed
set +x
source /opt/ros/*/setup.bash
set -x
if [[ -e $LANELET2_ROOT/../mrt_cmake_modules ]]; then
mkdir -p $BUILD_DIR/mrt_cmake_modules
pushd $BUILD_DIR/mrt_cmake_modules
cmake $LANELET2_ROOT/../mrt_cmake_modules -DCMAKE_INSTALL_PREFIX=$BUILD_DIR/mrt_cmake_modules
make install
popd
fi

# make sure cmake finds everything
export CMAKE_PREFIX_PATH=$BUILD_DIR/mrt_cmake_modules:${CMAKE_PREFIX_PATH}
export AMENT_PREFIX_PATH=${LANELET2_ROOT}

# generate a compile_commands.json by configuring all lanelet2 packages in a big project
CMAKE_ROOT=${LANELET2_ROOT}/CMakeLists.txt
echo "cmake_minimum_required(VERSION 3.12)" > ${CMAKE_ROOT}
echo "project(lanelet2)" >> ${CMAKE_ROOT}
export LANELET2_PACKAGES_TOPOLOGICAL="lanelet2_core lanelet2_io lanelet2_projection lanelet2_traffic_rules lanelet2_routing lanelet2_maps lanelet2_validation lanelet2_matching lanelet2_python lanelet2_examples"
for pkg in $LANELET2_PACKAGES_TOPOLOGICAL; do
echo "add_subdirectory($pkg)" >> ${CMAKE_ROOT};
echo "set(${pkg}_LIBRARIES $pkg)" >> ${CMAKE_ROOT};
done
pushd $BUILD_DIR
cmake $LANELET2_ROOT -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DCATKIN_ENABLE_TESTING=1
popd

# run clang-tidy
find . -name "*.cpp" -print0 | xargs -0 -I{} -P$(nproc --all) clang-tidy-11 -p $BUILD_DIR {}
178 changes: 178 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
name: Lanelet2 CI

on:
push:
branches:
- "**"
tags:
- "**"
# Run tests for any PRs.
pull_request:

jobs:
formatting:
runs-on: ubuntu-latest
steps:
- name: Setup docker buildx
id: buildx
uses: docker/setup-buildx-action@v2

- name: Setup docker cache
uses: actions/cache@v3
with:
path: /tmp/.docker-cache
key: ${{runner.os}}-docker-humble

- name: Build dependencies
uses: docker/build-push-action@v3
with:
builder: ${{ steps.buildx.outputs.name }}
tags: lanelet2_src
cache-from: type=local,src=/tmp/.docker-cache
cache-to: type=local,dest=/tmp/.docker-cache
load: true
build-args: |
DEV=1
DISTRIBUTION=22.04
ROS_DISTRO=humble
ROS=ros2
target: lanelet2_src

- name: Run clang formatting check
run: |
set -ex
docker run -i --rm lanelet2_src find . -name "*.cpp" -o -name "*.h" -execdir clang-format-11 -n -Werror --style=file {} +
lint:
needs: formatting
runs-on: ubuntu-latest
steps:
- name: Setup docker buildx
id: buildx
uses: docker/setup-buildx-action@v2

- name: Setup docker cache
uses: actions/cache@v3
with:
path: /tmp/.docker-cache
key: ${{runner.os}}-docker-humble

- name: Build dependencies
uses: docker/build-push-action@v3
with:
builder: ${{ steps.buildx.outputs.name }}
tags: lanelet2_src
cache-from: type=local,src=/tmp/.docker-cache
cache-to: type=local,dest=/tmp/.docker-cache
load: true
build-args: |
DEV=1
DISTRIBUTION=22.04
ROS_DISTRO=humble
ROS=ros2
target: lanelet2_src
- name: Run clang-tidy
run: docker run -i --rm lanelet2_src /home/developer/workspace/src/lanelet2/.github/lint.bash

test:
needs: formatting
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
rosdistro: [noetic, galactic, humble]
include:
- rosdistro: noetic
os: 20.04
ros: ros
- rosdistro: galactic
os: 20.04
ros: ros2
- rosdistro: humble
os: 22.04
ros: ros2
steps:
- name: Setup docker buildx
id: buildx
uses: docker/setup-buildx-action@v2

- name: Setup docker cache
uses: actions/cache@v3
with:
path: /tmp/.docker-cache
key: ${{runner.os}}-docker-${{ matrix.rosdistro }}

- name: Build dependencies
uses: docker/build-push-action@v3
with:
builder: ${{ steps.buildx.outputs.name }}
tags: lanelet2_base:${{ matrix.rosdistro }}
cache-from: type=local,src=/tmp/.docker-cache
cache-to: type=local,dest=/tmp/.docker-cache
build-args: |
DEV=1
DISTRIBUTION=${{ matrix.os }}
ROS_DISTRO=${{ matrix.rosdistro }}
ROS=${{ matrix.ros }}
target: lanelet2_deps

- name: Build Lanelet2
uses: docker/build-push-action@v3
if: ${{ matrix.rosdistro == 'noetic' }}
with:
builder: ${{ steps.buildx.outputs.name }}
tags: lanelet2:${{ matrix.rosdistro }}
cache-from: type=local,src=/tmp/.docker-cache
load: true
build-args: |
DEV=1
DISTRIBUTION=${{ matrix.os }}
ROS_DISTRO=${{ matrix.rosdistro }}
ROS=${{ matrix.ros }}
target: lanelet2

- name: Build Lanelet2 (skip lcov)
uses: docker/build-push-action@v3
if: ${{ matrix.rosdistro == 'humble' || matrix.rosdistro == 'galactic' }}
with:
builder: ${{ steps.buildx.outputs.name }}
tags: lanelet2:${{ matrix.rosdistro }}
cache-from: type=local,src=/tmp/.docker-cache
load: true
build-args: |
DEV=0
DISTRIBUTION=${{ matrix.os }}
ROS_DISTRO=${{ matrix.rosdistro }}
ROS=${{ matrix.ros }}
target: lanelet2

- name: Run Lanelet2 Tests
run: |
set -ex;
if [ "${{matrix.ros}}" = "ros" ]; then
export TEST_CMD="catkin build --no-status --catkin-make-args run_tests && source /opt/ros/${{matrix.rosdistro}}/setup.bash && catkin_test_results --verbose";
else
export TEST_CMD="colcon test --return-code-on-test-failure";
fi;
docker run -i --name lanelet2_test_${{ matrix.rosdistro }} lanelet2:${{ matrix.rosdistro }} /bin/bash -c "$TEST_CMD";
- name: Extract and Merge lcov Files
if: ${{ matrix.rosdistro == 'noetic' }}
run: |
docker commit lanelet2_test_${{ matrix.rosdistro }} lanelet2_${{ matrix.rosdistro }}_post_run;
docker run -i --name lanelet2_test_${{ matrix.rosdistro }}_lcov lanelet2_${{ matrix.rosdistro }}_post_run /home/developer/workspace/src/lanelet2/.github/lcov_merge.bash;
mkdir -p ./lcov;
docker cp lanelet2_test_${{ matrix.rosdistro }}_lcov:$(docker inspect --format='{{.Config.WorkingDir}}' lanelet2_test_${{ matrix.rosdistro }}_lcov)/lcov/full_coverage.lcov ./lcov/full_coverage.lcov;
- name: Cleanup Docker Container
run: |
docker rm -f lanelet2_test_${{ matrix.rosdistro }};
docker rm -f lanelet2_test_${{ matrix.rosdistro }}_lcov;
- name: Report code coverage
uses: immel-f/github-actions-report-lcov@v0.1.9
if: ${{ matrix.rosdistro == 'noetic' }}
with:
coverage-files: ./lcov/full_coverage.lcov
artifact-name: code-coverage-report
github-token: ${{ secrets.GITHUB_TOKEN }}
24 changes: 24 additions & 0 deletions .github/workflows/stale.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '30 1 * * *'

jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write

steps:
- uses: actions/stale@v6
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This issue is stale because it has been open for 90 days with no activity. Is this issue still work in progress? If yes, mark it as "WIP" or comment, otherwise it will be closed in 30 days.'
stale-pr-message: 'This PR is stale because it has been open for 90 days with no activity. Is this PR still work in progress? If yes, mark it as "WIP" or comment, otherwise it will be closed in 30 days.'
close-issue-message: 'This issue was closed because it has been stalled for 30 days with no activity.'
close-pr-message: 'This PR was closed because it has been stalled for 30 days with no activity.'
days-before-stale: 90
days-before-close: 30
exempt-pr-labels: 'WIP'
exempt-issue-labels: 'WIP'
2 changes: 1 addition & 1 deletion CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
* fabian.poggenhans@kit.edu frank.bieder@kit.edu
* fabian.poggenhans@kit.edu fabian.immel@kit.edu
lanelet2_projection/* jan-hendrik.pauls@kit.edu
Loading

1 comment on commit ebc31ab

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LCOV of commit [ebc31ab] during Lanelet2 CI #1

Summary coverage rate:
  lines......: 91.6% (12694 of 13852 lines)
  functions..: 81.5% (5435 of 6670 functions)
  branches...: no data found
File coverage rate:
                                                                                                                                 |Lines       |Functions  |Branches    
  Filename                                                                                                                       |Rate     Num|Rate    Num|Rate     Num
  =====================================================================================================================================================================
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/Attribute.h                                         |86.5%     37|90.5%    21|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/Exceptions.h                                        |11.1%      9|33.3%     3|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/LaneletMap.h                                        |82.8%     29|70.0%    70|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/BoundingBox.h                              | 100%      7| 100%    19|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/GeometryHelper.h                           |98.1%     54|98.5%    67|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/LineString.h                               | 100%      1| 100%    10|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/Point.h                                    | 100%     15|49.3%   148|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/Polygon.h                                  | 100%     14| 100%    16|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/RegulatoryElement.h                        | 100%      4| 100%     3|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/impl/Area.h                                |94.5%     73|92.5%    40|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/impl/Lanelet.h                             |84.4%     90|83.3%    42|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/impl/LaneletMap.h                          | 100%     24|22.7%   176|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/impl/LineString.h                          |93.9%    396|93.4%   271|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/geometry/impl/Polygon.h                             |96.3%     27|72.0%    25|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/Area.h                                   |71.0%    100|88.0%    50|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/BasicRegulatoryElements.h                | 100%     13| 100%     6|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/BoundingBox.h                            | 100%     34| 100%    13|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/CompoundLineString.h                     |93.1%     58|88.5%   104|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/CompoundPolygon.h                        | 100%     12| 100%    11|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/Lanelet.h                                |90.7%     86|87.5%    72|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/LaneletOrArea.h                          |95.1%     41| 100%    29|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/LaneletSequence.h                        |70.6%     51|86.8%    38|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/LineString.h                             |84.9%    159|88.8%   187|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/LineStringOrPolygon.h                    |86.8%     38|73.0%    37|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/Point.h                                  |92.9%     56|95.0%    40|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/Polygon.h                                |72.2%     36|81.5%    27|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/Primitive.h                              |92.9%     56|83.9%   168|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/RegulatoryElement.h                      |77.4%     93|84.1%    63|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/primitives/Traits.h                                 | 100%     16|83.5%    79|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/utility/CompoundIterator.h                          |95.7%     70| 100%    14|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/utility/HybridMap.h                                 |96.2%    105|79.7%    79|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/utility/ReverseAndForwardIterator.h                 | 100%     19|94.9%    39|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/utility/TransformIterator.h                         | 100%     11|96.3%    82|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/utility/Units.h                                     | 100%      8| 100%     5|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/include/lanelet2_core/utility/Utilities.h                                 |99.0%    103|86.2%   515|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/src/Attribute.cpp                                                         |94.9%     78| 100%    27|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/src/BasicRegulatoryElements.cpp                                           |75.6%    275|67.0%    94|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/src/Lanelet.cpp                                                           | 100%    170|96.8%    31|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/src/LaneletMap.cpp                                                        |79.8%    524|60.7%   501|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/src/LaneletSequence.cpp                                                   |89.5%     19|75.0%     8|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/src/LineStringGeometry.cpp                                                |85.7%    105|40.0%    40|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/src/PolygonTriangulationGeometry.cpp                                      |87.6%    209|95.3%    43|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/src/RegulatoryElement.cpp                                                 |60.6%     94|56.8%    37|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/src/RegulatoryElementGeometry.cpp                                         |82.6%     46|89.5%    19|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/lanelet_map_test_case.h                                              | 100%     40| 100%    36|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_area.cpp                                                        | 100%    188| 100%    51|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_attribute.cpp                                                   | 100%     80| 100%    22|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_lanelet.cpp                                                     | 100%    267| 100%    60|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_lanelet_map.cpp                                                 | 100%    205| 100%    95|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_lanelet_map_geometry.cpp                                        | 100%    113| 100%    57|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_lanelet_or_area.cpp                                             | 100%     33| 100%     9|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_lanelet_sequence.cpp                                            | 100%     54| 100%    17|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_linestring.cpp                                                  | 100%    357| 100%   239|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_point.cpp                                                       | 100%     81| 100%    18|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_polygon.cpp                                                     |99.4%    169| 100%   105|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_core/test/test_regulatory_element.cpp                                          | 100%    179| 100%    48|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_examples/include/lanelet2_examples/internal/ExampleHelpers.h                   | 100%     27| 100%     7|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_examples/src/01_dealing_with_lanelet_primitives/main.cpp                       | 100%    181| 100%     8|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_examples/src/02_regulatory_elements/main.cpp                                   | 100%     41| 100%     5|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_examples/src/03_lanelet_map/main.cpp                                           | 100%     73| 100%     6|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_examples/src/04_reading_and_writing/main.cpp                                   |97.1%     34| 100%     8|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_examples/src/05_traffic_rules/main.cpp                                         | 100%     49| 100%     2|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_examples/src/06_routing/main.cpp                                               | 100%     62| 100%     4|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_examples/src/07_matching/main.cpp                                              | 100%     90| 100%     9|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/Io.h                                                    | 100%      4|    -     0|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/Projection.h                                            | 100%     18|90.9%    11|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/io_handlers/BinHandler.h                                | 100%      4| 100%     4|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/io_handlers/Factory.h                                   | 100%     12| 100%    12|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/io_handlers/IoHandler.h                                 |85.7%      7|75.0%     4|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/io_handlers/OsmFile.h                                   |96.2%     26|92.9%    28|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/io_handlers/OsmHandler.h                                | 100%      4| 100%     4|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/io_handlers/Parser.h                                    | 0.0%      2| 0.0%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/io_handlers/Serialize.h                                 |94.6%    277|95.3%    86|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/include/lanelet2_io/io_handlers/Writer.h                                    | 0.0%      4| 0.0%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/src/BinHandler.cpp                                                          |90.0%     20| 100%     2|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/src/Factory.cpp                                                             |87.3%     79|92.3%    13|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/src/Io.cpp                                                                  |91.1%     45|86.7%    15|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/src/OsmFile.cpp                                                             |97.5%    198| 100%    25|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/src/OsmHandlerLoad.cpp                                                      |77.5%    258|83.3%    48|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/src/OsmHandlerWrite.cpp                                                     |74.3%    179|86.2%    29|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/test/TestBinHandler.cpp                                                     | 100%     70| 100%    26|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/test/TestLanelet2Io.cpp                                                     | 100%     15| 100%     4|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/test/TestOsmFile.cpp                                                        | 100%     53| 100%    10|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/test/TestOsmHandler.cpp                                                     | 100%     89| 100%    20|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/test/TestSetup.h                                                            |98.8%     86|93.9%    33|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_io/test/TestSimpleUsage.cpp                                                    | 100%      8| 100%     2|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_matching/include/lanelet2_matching/LaneletMatching.h                           | 100%     11| 100%    10|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_matching/include/lanelet2_matching/Utilities.h                                 | 100%      4| 100%     2|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_matching/src/LaneletMatching.cpp                                               | 100%     38| 100%    12|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_matching/src/Utilities.cpp                                                     | 100%     33| 100%     5|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_matching/test/lanelet2_matching.cpp                                            |97.0%    133| 100%    26|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_projection/include/lanelet2_projection/Mercator.h                              | 100%     24| 100%     5|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_projection/src/UTM.cpp                                                         |93.3%     45| 100%     3|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_projection/test/test_Mercator.cpp                                              | 100%     16| 100%     4|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_projection/test/test_UTM.cpp                                                   | 100%     41| 100%    15|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_python/include/lanelet2_python/internal/converter.h                            |55.3%     85|28.4%   190|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_python/python_api/core.cpp                                                     |87.7%    660|46.3%   227|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_python/python_api/geometry.cpp                                                 |79.5%    331|57.9%   145|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_python/python_api/io.cpp                                                       |74.3%     35|66.7%     9|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_python/python_api/matching.cpp                                                 |96.4%     84| 100%    13|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_python/python_api/projection.cpp                                               | 100%     11| 100%     2|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_python/python_api/routing.cpp                                                  |77.4%    190|20.0%    25|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_python/python_api/traffic_rules.cpp                                            |75.4%     65|25.8%    31|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/Forward.h                                     |81.4%     43| 100%     7|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/LaneletPath.h                                 |88.0%     25|90.0%    20|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/Route.h                                       | 100%      3| 100%     6|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/RoutingCost.h                                 |87.9%     33|86.7%    15|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/RoutingGraph.h                                | 100%      4|50.0%     4|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/RoutingGraphContainer.h                       |97.0%     33| 100%     7|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/Types.h                                       | 100%      2| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/internal/Graph.h                              |92.4%     79|95.5%    44|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/internal/GraphUtils.h                         | 100%    146| 100%    71|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/internal/RouteBuilder.h                       | 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/internal/RoutingGraphVisualization.h          |96.0%     50|81.8%    11|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/include/lanelet2_routing/internal/ShortestPath.h                       | 100%     35|89.0%    91|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/src/LaneletPath.cpp                                                    |88.4%    215| 100%    28|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/src/Route.cpp                                                          |78.1%    256|84.8%    46|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/src/RouteBuilder.cpp                                                   |99.1%    228| 100%    51|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/src/RoutingCost.cpp                                                    |88.2%     17| 100%     7|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/src/RoutingGraph.cpp                                                   |83.5%    514|83.7%   153|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/src/RoutingGraphBuilder.cpp                                            |98.4%    245| 100%    38|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/test/test_lanelet_or_area_path.cpp                                     | 100%    152| 100%    26|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/test/test_relations.cpp                                                | 100%    393| 100%    81|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/test/test_route.cpp                                                    | 100%    254|91.2%   171|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/test/test_routing.cpp                                                  | 100%    373| 100%   104|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/test/test_routing_graph_container.cpp                                  | 100%     66| 100%    14|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/test/test_routing_map.h                                                | 100%    419| 100%    16|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_routing/test/test_routing_visualization.cpp                                    |98.4%     64| 100%    20|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_traffic_rules/include/lanelet2_traffic_rules/GermanTrafficRules.h              |72.7%     11|77.8%     9|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_traffic_rules/include/lanelet2_traffic_rules/TrafficRules.h                    | 100%      2|66.7%     3|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_traffic_rules/include/lanelet2_traffic_rules/TrafficRulesFactory.h             | 100%      8| 100%     8|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_traffic_rules/src/GenericTrafficRules.cpp                                      |92.7%    193|95.0%    40|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_traffic_rules/src/GermanTrafficRules.cpp                                       |94.1%     17| 100%     3|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_traffic_rules/src/TrafficRulesFactory.cpp                                      |72.2%     18|50.0%     4|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_traffic_rules/test/lanelet2_traffic_rules.cpp                                  | 100%    408| 100%   145|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/BasicValidator.h                        | 100%      2|50.0%     4|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/Issue.h                                 |61.1%     36| 100%     5|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/Validation.h                            | 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/ValidatorFactory.h                      | 100%      7| 100%    17|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/validators/mapping/BoolTags.h           | 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/validators/mapping/CurvatureTooBig.h    | 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/validators/mapping/DuplicatedPoints.h   | 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/validators/mapping/MandatoryTags.h      | 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/validators/mapping/PointsTooClose.h     | 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/validators/mapping/UnknownTagValue.h    | 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/validators/mapping/UnknownTags.h        | 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/include/lanelet2_validation/validators/routing/RoutingGraphIsValid.h| 100%      1| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/src/Cli.cpp                                                         |76.4%     55| 100%     3|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/src/Validation.cpp                                                  |91.3%     92|90.0%    20|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/src/ValidatorFactory.cpp                                            |93.2%     44|88.9%    27|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/src/validators/CheckTags.cpp                                        |92.7%    151| 100%    44|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/src/validators/CurvatureTooBig.cpp                                  |85.7%     14| 100%     2|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/src/validators/DuplicatedPoints.cpp                                 |75.0%     20|66.7%     3|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/src/validators/PointsTooClose.cpp                                   | 100%     11| 100%     1|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/src/validators/RoutingGraphIsValid.cpp                              | 100%      3|50.0%     2|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/test/lanelet2_validation.cpp                                        | 100%     46| 100%    10|    -      0
  /home/developer/workspace/src/lanelet2/lanelet2_validation/tools/lanelet2_validate/main.cpp                                    | 0.0%      3| 0.0%     1|    -      0

Please sign in to comment.