Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds sanitizers to Github Actions #724

Merged
merged 3 commits into from
Nov 25, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions .github/clang_suite_installation.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#! /bin/bash

#######################################
# Installs clang suite packages.
# Arguments:
# Version of the clang suite package.
# Returns:
# 0 if no error was detected, non-zero otherwise.
#######################################
function install_clang_suite() {
local version=$1

apt install -y \
clang-${version} \
lldb-${version} \
lld-${version} \
clang-format-${version} \
clang-tidy-${version} \
libc++-${version}-dev \
libc++abi-${version}-dev
}

#######################################
# Setups alternatives for clang suite.
# Arguments:
# Version of the clang suite package.
# Returns:
# 0 if no error was detected, 2 otherwise.
#######################################
function update_clang_suite_alternatives() {
local version=$1
local priority=$2

update-alternatives \
--install /usr/bin/clang clang /usr/bin/clang-${version} ${priority}\
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-${version} \
--slave /usr/bin/asan_symbolize asan_symbolize /usr/bin/asan_symbolize-${version} \
--slave /usr/bin/c-index-test c-index-test /usr/bin/c-index-test-${version} \
--slave /usr/bin/clang-check clang-check /usr/bin/clang-check-${version} \
--slave /usr/bin/clang-cl clang-cl /usr/bin/clang-cl-${version} \
--slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-${version} \
--slave /usr/bin/clang-format clang-format /usr/bin/clang-format-${version} \
--slave /usr/bin/clang-format-diff clang-format-diff /usr/bin/clang-format-diff-${version} \
--slave /usr/bin/clang-import-test clang-import-test /usr/bin/clang-import-test-${version} \
--slave /usr/bin/clang-include-fixer clang-include-fixer /usr/bin/clang-include-fixer-${version} \
--slave /usr/bin/clang-offload-bundler clang-offload-bundler /usr/bin/clang-offload-bundler-${version} \
--slave /usr/bin/clang-query clang-query /usr/bin/clang-query-${version} \
--slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-${version} \
--slave /usr/bin/clang-reorder-fields clang-reorder-fields /usr/bin/clang-reorder-fields-${version} \
--slave /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-${version} \
--slave /usr/bin/lldb lldb /usr/bin/lldb-${version} \
--slave /usr/bin/lldb-server lldb-server /usr/bin/lldb-server-${version}
}


#######################################
# Modify clang suite version and priority as required.
#######################################
CLANG_SUITE_VERSION=8
CLANG_SUITE_ALTERNATIVE_PRIORITY=10

install_clang_suite ${CLANG_SUITE_VERSION}
update_clang_suite_alternatives ${CLANG_SUITE_VERSION} ${CLANG_SUITE_ALTERNATIVE_PRIORITY}
4 changes: 1 addition & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,7 @@ jobs:
path: dsim-repos-index
token: ${{ secrets.MALIPUT_TOKEN }}
# use setup-ros action to get vcs, rosdep, and colcon
- uses: ros-tooling/[email protected]
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
- uses: ros-tooling/[email protected]
# install drake_vendor prereqs using dsim-repos-index/tools/prereqs.lib
- name: install drake_vendor prereqs
shell: bash
Expand Down
126 changes: 126 additions & 0 deletions .github/workflows/sanitizers.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
name: clang

on:
push:
branches:
- master
pull_request:

env:
PACKAGE_NAME: delphyne
ROS_DISTRO: dashing
ROS_WS: maliput_ws

jobs:
compile_and_test:
name: Compile and test with sanitizer
runs-on: ubuntu-18.04
container:
image: ubuntu:18.04
strategy:
matrix:
sanitizer: [none, asan, ubsan]
include:
- sanitizer: none
COMPILER_FLAG: ''
- sanitizer: asan
COMPILER_FLAG: ' -DADDRESS_SANITIZER=On'
- sanitizer: ubsan
COMPILER_FLAG: ' -DUNDEFINED_SANITIZER=On'
env:
CC: clang
CXX: clang++
LINKER_PATH: /usr/bin/llvm-ld
steps:
- uses: actions/checkout@v2
with:
path: ${{ env.ROS_WS }}/src/${{ env.PACKAGE_NAME }}
# clone private dependencies
- uses: actions/checkout@v2
with:
repository: ToyotaResearchInstitute/maliput
path: ${{ env.ROS_WS }}/src/maliput
token: ${{ secrets.MALIPUT_TOKEN }}
- uses: actions/checkout@v2
with:
repository: ToyotaResearchInstitute/maliput-dragway
path: ${{ env.ROS_WS }}/src/maliput_dragway
token: ${{ secrets.MALIPUT_TOKEN }}
- uses: actions/checkout@v2
with:
repository: ToyotaResearchInstitute/maliput-multilane
path: ${{ env.ROS_WS }}/src/maliput_multilane
token: ${{ secrets.MALIPUT_TOKEN }}
- uses: actions/checkout@v2
with:
repository: ToyotaResearchInstitute/malidrive
path: ${{ env.ROS_WS }}/src/malidrive
token: ${{ secrets.MALIPUT_TOKEN }}
- uses: actions/checkout@v2
with:
repository: ToyotaResearchInstitute/drake-vendor
path: ${{ env.ROS_WS }}/src/drake_vendor
token: ${{ secrets.MALIPUT_TOKEN }}
- uses: actions/checkout@v2
with:
repository: ToyotaResearchInstitute/dsim-repos-index
path: dsim-repos-index
token: ${{ secrets.MALIPUT_TOKEN }}
# use setup-ros action to get vcs, rosdep, and colcon
- uses: ros-tooling/[email protected]
# install drake_vendor prereqs using dsim-repos-index/tools/prereqs.lib
- name: install drake_vendor prereqs
shell: bash
working-directory: ${{ env.ROS_WS }}/src/drake_vendor
run: ${GITHUB_WORKSPACE}/dsim-repos-index/tools/prereqs-install -t drake .
# install delphyne prereqs using dsim-repos-index/tools/prereqs.lib
- name: install delphyne prereqs
shell: bash
working-directory: ${{ env.ROS_WS }}/src/delphyne
run: ${GITHUB_WORKSPACE}/dsim-repos-index/tools/prereqs-install -t ignition .
- name: clang 8 install
shell: bash
run: ${{ env.ROS_WS }}/src/${PACKAGE_NAME}/.github/clang_suite_installation.sh
# clone public dependencies
- name: vcs import
shell: bash
working-directory: ${{ env.ROS_WS }}
run: vcs import src < src/${PACKAGE_NAME}/.github/dependencies.repos
- run: colcon graph
shell: bash
working-directory: ${{ env.ROS_WS }}
- name: rosdep install
shell: bash
working-directory: ${{ env.ROS_WS }}
run: |
rosdep update;
rosdep install -i -y --rosdistro ${ROS_DISTRO} \
--skip-keys "ignition-transport5 ignition-msgs2 ignition-math6 ignition-common3 pybind11" \
--from-paths src
- name: colcon build libraries
shell: bash
working-directory: ${{ env.ROS_WS }}
run: |
. /opt/ros/${ROS_DISTRO}/setup.bash;
colcon build --packages-up-to ${PACKAGE_NAME} \
--cmake-args -DCMAKE_LINKER=${LINKER_PATH} \
--event-handlers=console_direct+ \
${COMPILER_FLAG} \
--cmake-args -DBUILD_TESTING=OFF
- name: colcon build tests
shell: bash
working-directory: ${{ env.ROS_WS }}
run: |
. /opt/ros/${ROS_DISTRO}/setup.bash;
colcon build --packages-select ${PACKAGE_NAME} \
--cmake-args -DCMAKE_LINKER=${LINKER_PATH} \
--event-handlers=console_direct+ \
${COMPILER_FLAG} \
--cmake-args -DBUILD_TESTING=ON;
- name: colcon test
shell: bash
working-directory: ${{ env.ROS_WS }}
run: |
. /opt/ros/${ROS_DISTRO}/setup.bash;
colcon test --packages-select ${PACKAGE_NAME} --event-handlers=console_direct+;
colcon test-result --verbose;