Skip to content

[#12] Add initial CI workflows #36

[#12] Add initial CI workflows

[#12] Add initial CI workflows #36

Workflow file for this run

name: CI
env:
WORKSPACE_DIR: ${{ github.workspace }}
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
types: [ opened, ready_for_review, reopened, synchronize ]
jobs:
changes:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
permissions:
pull-requests: read
outputs:
source-code: ${{ steps.filter.outputs.source-code }}
markdown: ${{ steps.filter.outputs.markdown }}
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Check for changed file types
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
source-code:
- '!**/*.md'
markdown:
- '**/*.md'
preflight-check:
needs: changes
if: ${{ needs.changes.outputs.source-code == 'true' }}
timeout-minutes: 10
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Check format of all commit messages
run: ./scripts/ci/check-commit-msg.sh
- name: Check license header
run: ./scripts/ci/check-spdx-license-header.sh
static-code-analysis:
needs: preflight-check
if: ${{ needs.changes.outputs.source-code == 'true' }}
timeout-minutes: 10
runs-on: ubuntu-latest
steps:
- name: Checkout sources
uses: actions/checkout@v4
- name: Install clang toolchain
uses: ./.github/actions/install-clang
- name: Display clang-format and clang-tidy versions
run: |
clang-format --version
clang-tidy --version
- name: Run clang-format
run: git ls-files | grep -E "\.(c|cc|cpp|cxx|inl|h|hh|hpp|hxx)$" | xargs clang-format -i -style=file --Werror --dry-run
# - name: Run clang-tidy
# run: |
# git fetch origin main
# ./scripts/check-clang-tidy.sh warning-as-error diff-to-main
colcon-build-test-clang:
needs: [preflight-check, static-code-analysis]
runs-on: ubuntu-latest
container:
image: ros:rolling
steps:
- name: Install dependencies
run: |
apt-get update
apt-get install -y \
python3-colcon-common-extensions \
python3-colcon-mixin \
python3-vcstool \
python3-rosdep \
libacl1-dev \
software-properties-common \
curl \
wget
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Setup workspace
run: |
mkdir -p $WORKSPACE_DIR/src/{rmw_iceoryx2,test_interface_files}
cd $WORKSPACE_DIR
sed 's|git@github.com:|https://github.com/|g' ./src/rmw_iceoryx2/deps.repos > _deps.repos
vcs import src < _deps.repos
- name: Checkout test_interface_files
uses: actions/checkout@v4
with:
repository: ros2/test_interface_files
path: src/test_interface_files
ref: rolling
- name: Checkout rmw_iceoryx2
uses: actions/checkout@v4
with:
path: src/rmw_iceoryx2
- name: Install clang toolchain
uses: ./src/rmw_iceoryx2/.github/actions/install-clang
- name: Build and test with colcon
run: |
cd $WORKSPACE_DIR
. /opt/ros/rolling/setup.sh
# Build
colcon build \
--cmake-args \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DBUILD_TESTING=On \
--symlink-install \
--packages-select \
test_interface_files \
iceoryx_platform \
iceoryx_hoofs \
iceoryx2_cxx \
rmw_iceoryx2_cxx_test_msgs \
rmw_iceoryx2_cxx
# Test
. install/setup.sh
colcon test \
--packages-select rmw_iceoryx2_cxx \
--event-handlers console_direct+ \
--return-code-on-test-failure
- name: Process test results
if: always()
run: |
cd $WORKSPACE_DIR
colcon test-result --verbose
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: |
${{ env.WORKSPACE_DIR }}/build/*/test_results/*/*.xml
${{ env.WORKSPACE_DIR }}/log/**/test*.log