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

[20542] Nightly sanitizer job for Fast DDS supported branches #4524

Closed
wants to merge 1 commit into from
Closed
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
247 changes: 36 additions & 211 deletions .github/workflows/address-sanitizers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,22 @@ name: Address Sanitizer analysis
on:
workflow_dispatch:
inputs:
label:
description: 'ID associated to the workflow'
required: true
type: string
colcon_meta:
description: 'Optional Path of the colcon meta file'
required: false
type: string
cmake_args:
description: 'Optional CMake Compilation Flags'
required: false
type: string
ctest_args:
description: 'Optional CTest Testing Flags'
required: false
type: string
discovery_server_branch:
description: 'Branch or tag of Discovery Server repository (https://github.com/eProsima/Discovery-Server)'
required: true
Expand All @@ -20,229 +36,38 @@ on:
- '**.txt'
- '!**/CMakeLists.txt'

schedule:
- cron: '0 1 * * *'

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
asan-test:

address-sanitizer:
uses: ./.github/workflows/reusable-sanitizer.yml
if: ${{ (
!contains(github.event.pull_request.labels.*.name, 'skip-ci') &&
!contains(github.event.pull_request.labels.*.name, 'no-test') &&
!contains(github.event.pull_request.labels.*.name, 'conflicts')
) }}

runs-on: ubuntu-22.04

env:
FASTDDS_BRANCH: ${{ github.head_ref || github.event.inputs.fastdds_branch || 'master' }}

steps:
- name: Add ci-pending label if PR
if: ${{ github.event_name == 'pull_request' }}
uses: eProsima/eProsima-CI/external/add_labels@v0
with:
labels: ci-pending
number: ${{ github.event.number }}
repo: eProsima/Fast-DDS

# https://github.com/actions/runner-images/issues/9491
- name: Fix kernel mmap rnd bits
run: sudo sysctl vm.mmap_rnd_bits=28

- name: Install apt packages
uses: eProsima/eProsima-CI/ubuntu/install_apt_packages@v0
with:
packages: curl grep libasio-dev libtinyxml2-dev python3 python3-pip software-properties-common wget

- name: Get minimum supported version of CMake
uses: eProsima/eProsima-CI/external/get-cmake@v0
with:
cmakeVersion: '3.22.6'

- name: Setup CCache
uses: eProsima/eProsima-CI/external/setup-ccache-action@v0

- name: Install colcon
uses: eProsima/eProsima-CI/ubuntu/install_colcon@v0

- name: Install Python dependencies
uses: eProsima/eProsima-CI/ubuntu/install_python_packages@v0
with:
packages: vcstool setuptools gcovr tomark xmltodict jsondiff pandas

- name: Get fastrtps.repos file
uses: eProsima/eProsima-CI/ubuntu/get_file_from_repo@v0
with:
source_repository: eProsima/Fast-DDS
source_repository_branch: ${{ env.FASTDDS_BRANCH }}
file_name: fastrtps.repos
file_result: fastrtps.repos

- name: Fetch Fast DDS & dependencies
uses: eProsima/eProsima-CI/ubuntu/vcs_import@v0
with:
vcs_repos_file: fastrtps.repos
destination_workspace: src

- name: Checkout Fast DDS branch
run: |
cd ./src/fastrtps
git checkout ${{ env.FASTDDS_BRANCH }}

- name: Fetch Fast DDS ASan dependencies
uses: eProsima/eProsima-CI/multiplatform/vcs_import@v0
with:
vcs_repos_file: ${{ github.workspace }}/src/fastrtps/.github/workflows/config/asan.repos
destination_workspace: src
skip_existing: 'true'

- name: Build workspace
run: |
cat src/fastrtps/.github/workflows/config/asan_colcon.meta
colcon build \
--event-handlers=console_direct+ \
--metas src/fastrtps/.github/workflows/config/asan_colcon.meta

- name: Run tests Fast DDS
run: |
source install/setup.bash && \
colcon test \
--packages-select fastrtps \
--event-handlers=console_direct+ \
--return-code-on-test-failure \
--ctest-args \
--label-exclude xfail \
--timeout 300
continue-on-error: true

- name: Upload Logs
uses: actions/upload-artifact@v1
with:
name: asan-logs
path: log/
if: always()

- name: Report ASAN errors
if: always()
run: |
bash src/fastrtps/.github/workflows/utils/specific_errors_filter.sh "==ERROR:" log/latest_test/fastrtps/stdout_stderr.log _tmp_specific_error_file.log
python3 src/fastrtps/.github/workflows/utils/log_parser.py --log-file log/latest_test/fastrtps/stdout_stderr.log --specific-error-file _tmp_specific_error_file.log --output-file $GITHUB_STEP_SUMMARY --sanitizer asan


asan-discovery-server-test:

with:
label: ${{ inputs.label || 'address-sanitizer' }}
colcon_meta: ${{ inputs.colcon_meta || 'src/fastrtps/.github/workflows/config/asan_colcon.meta' }}
cmake_args: ${{ inputs.cmake_args || '' }}
ctest_args: ${{ inputs.ctest_args || '--label-exclude xfail --timeout 300' }}
fastdds_branch: ${{ github.head_ref || inputs.fastdds_branch || 'master' }}
asan_report: 'true'

discovery-server-address-sanitizer:
uses: ./.github/workflows/reusable-sanitizer.yml
if: ${{ (
!contains(github.event.pull_request.labels.*.name, 'skip-ci') &&
!contains(github.event.pull_request.labels.*.name, 'no-test') &&
!contains(github.event.pull_request.labels.*.name, 'conflicts')
) }}

runs-on: ubuntu-22.04

env:
FASTDDS_BRANCH: ${{ github.head_ref || github.event.inputs.fastdds_branch || 'master' }}
DEFAULT_DISCOVERY_SERVER_BRANCH: ${{ github.event.inputs.discovery_server_branch || 'master' }}

steps:
- name: Add ci-pending label if PR
if: ${{ github.event_name == 'pull_request' }}
uses: eProsima/eProsima-CI/external/add_labels@v0
with:
labels: ci-pending
number: ${{ github.event.number }}
repo: eProsima/Fast-DDS

# https://github.com/actions/runner-images/issues/9491
- name: Fix kernel mmap rnd bits
run: sudo sysctl vm.mmap_rnd_bits=28

- name: Install apt packages
uses: eProsima/eProsima-CI/ubuntu/install_apt_packages@v0
with:
packages: curl grep libasio-dev libtinyxml2-dev python3 python3-pip software-properties-common wget

- name: Get minimum supported version of CMake
uses: eProsima/eProsima-CI/external/get-cmake@v0
with:
cmakeVersion: '3.22.6'

- name: Setup CCache
uses: eProsima/eProsima-CI/external/setup-ccache-action@v0

- name: Install colcon
uses: eProsima/eProsima-CI/ubuntu/install_colcon@v0

- name: Install Python dependencies
uses: eProsima/eProsima-CI/ubuntu/install_python_packages@v0
with:
packages: vcstool setuptools gcovr tomark xmltodict jsondiff pandas

- name: Get fastrtps.repos file
uses: eProsima/eProsima-CI/ubuntu/get_file_from_repo@v0
with:
source_repository: eProsima/Fast-DDS
source_repository_branch: ${{ env.FASTDDS_BRANCH }}
file_name: fastrtps.repos
file_result: fastrtps.repos

- name: Fetch Fast DDS & dependencies
uses: eProsima/eProsima-CI/ubuntu/vcs_import@v0
with:
vcs_repos_file: fastrtps.repos
destination_workspace: src

- name: Checkout Fast DDS branch
run: |
cd ./src/fastrtps
git checkout ${{ env.FASTDDS_BRANCH }}

- name: Sync eProsima/Discovery-Server repository
uses: actions/checkout@v4
with:
path: src/discovery_server
repository: eProsima/Discovery-Server
ref: ${{ env.DEFAULT_DISCOVERY_SERVER_BRANCH }}

- name: Fetch Fast DDS ASan dependencies
uses: eProsima/eProsima-CI/multiplatform/vcs_import@v0
with:
vcs_repos_file: ${{ github.workspace }}/src/fastrtps/.github/workflows/config/asan.repos
destination_workspace: src
skip_existing: 'true'

- name: Build workspace
run: |
cat src/fastrtps/.github/workflows/config/asan_colcon.meta
colcon build \
--event-handlers=console_direct+ \
--metas src/fastrtps/.github/workflows/config/asan_colcon.meta

- name: Run tests Fast DDS
run: |
source install/setup.bash && \
colcon test \
--packages-select discovery-server \
--event-handlers=console_direct+ \
--return-code-on-test-failure \
--ctest-args \
--label-exclude xfail \
--timeout 300
continue-on-error: true

- name: Upload Logs
uses: actions/upload-artifact@v1
with:
name: asan-ds-logs
path: log/
if: always()

- name: Report ASAN errors
if: always()
run: |
bash src/fastrtps/.github/workflows/utils/specific_errors_filter.sh "==ERROR:" log/latest_test/discovery-server/stdout_stderr.log _tmp_specific_error_file.log
python3 src/fastrtps/.github/workflows/utils/log_parser.py --log-file log/latest_test/discovery-server/stdout_stderr.log --specific-error-file _tmp_specific_error_file.log --output-file $GITHUB_STEP_SUMMARY --sanitizer=asan
with:
label: ${{ inputs.label || 'discovery-server-address-sanitizer' }}
colcon_meta: ${{ inputs.colcon_meta || 'src/fastrtps/.github/workflows/config/asan_colcon.meta' }}
cmake_args: ${{ inputs.cmake_args || '' }}
ctest_args: ${{ inputs.ctest_args || '--label-exclude xfail --timeout 300' }}
fastdds_branch: ${{ github.head_ref || inputs.fastdds_branch || 'master' }}
discovery_server_branch: ${{ inputs.discovery_server_branch || 'master' }}
asan_discovery_server_report: 'true'
65 changes: 65 additions & 0 deletions .github/workflows/nightly-sanitizer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Sanitizer analysis (nightly)

on:
workflow_dispatch:
schedule:
- cron: '0 1 * * *'

jobs:
nightly-address-sanitizer:
strategy:
fail-fast: false
matrix:
fastdds-branch:
- 'master'
- '2.13.x'
- '2.12.x'
- '2.10.x'
- '2.6.x'
uses: ./.github/workflows/reusable-sanitizer.yml
with:
label: 'nightly-address-sanitizer-${{ matrix.fastdds-branch }}'
colcon_meta: 'src/fastrtps/.github/workflows/config/asan_colcon.meta'
cmake_args: ''
ctest_args: '--label-exclude xfail --timeout 300'
fastdds_branch: '${{ matrix.fastdds-branch }}'
asan_report: 'true'

nightly-discovery-server-address-sanitizer:
strategy:
fail-fast: false
matrix:
fastdds-branch:
- 'master'
- '2.13.x'
- '2.12.x'
- '2.10.x'
- '2.6.x'
uses: ./.github/workflows/reusable-sanitizer.yml
with:
label: 'nightly-discovery-server-address-sanitizer-${{ matrix.fastdds-branch }}'
colcon_meta: 'src/fastrtps/.github/workflows/config/asan_colcon.meta'
cmake_args: ''
ctest_args: '--label-exclude xfail --timeout 300'
fastdds_branch: '${{ matrix.fastdds-branch }}'
asan_discovery_server_report: 'true'

nightly-thread-sanitizer:
strategy:
fail-fast: false
matrix:
fastdds-branch:
- 'master'
- '2.13.x'
- '2.12.x'
- '2.10.x'
- '2.6.x'
uses: ./.github/workflows/reusable-sanitizer.yml
with:
label: 'nightly-thread-sanitizer-${{ matrix.fastdds-branch }}'
colcon_meta: 'src/fastrtps/.github/workflows/config/tsan_colcon.meta'
cmake_args: '-DCMAKE_BUILD_TYPE=Debug'
ctest_args: '-timeout 30 -V -E DDSSQLFilterValueTests'
fastdds_branch: '${{ matrix.fastdds-branch }}'
tsan_report: 'true'

Loading
Loading