Skip to content

Commit

Permalink
Efc/integration testing (#157)
Browse files Browse the repository at this point in the history
* Adding dockerfiles for building tests

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Initial docker compose nightly workflow

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Using new docker compose command

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Fix zenoh bridge image branch

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Use curl for repo tar

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Use docker compose command for down too

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Setup integration testing with flag, test with workflow

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Install docker-compose in ros container

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Ommit setup-ros step and fix linting

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Revert setup ros step, use cmake -args

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Use 1.0.1 API

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Using client and router method

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Remove command in docker compose

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Working locally, commented out zenohd

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Spinning up minimal-zenoh too

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Moving docker files, trying with client mode

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Use official zenoh docker image and compose example, rename client zenoh config, update README, test build docker images

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Re-usable workflow actions, split integration testing

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Missing docker-compose installation

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Fix broken action, rename test job

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Fix shell selection, use composite

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Set nightly schedule, fix steps in unit-tests

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Remove minimal zenoh router dockerfile, add checkout to unit-tests

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Isolating tf listner components for testing

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Use correct robot name, lint

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Clean up imports and fix namespacing

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Refactor to TfHandler, added testing

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Simplifying API

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Moved integration testing to free fleet adapter, added abstract RobotAdapter

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Abstract out robot adapter, slight refactor

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Robot existense test, with a planned failure to verify that it is running

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* setup rclpy node for testing too

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Add coverage and fix lint

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Use unit test test cases

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Move tests

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Fix launch files

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Rename functions

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Not to check execution, comment out stop command test

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Use helper function for stop

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Using all statuses

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Badges

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Switch to easy-full-control branch before merging

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

* Update readme

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>

---------

Signed-off-by: Aaron Chong <aaronchongth@gmail.com>
  • Loading branch information
aaronchongth authored Nov 15, 2024
1 parent d57714b commit bdc9f87
Show file tree
Hide file tree
Showing 29 changed files with 1,053 additions and 272 deletions.
45 changes: 45 additions & 0 deletions .github/actions/build-and-test/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: build-and-test

inputs:
ros-distribution:
description: string, ROS distribution to setup
required: true
zenoh-version:
description: string, version of eclipse-zenoh to install from pip
required: true
integration-testing:
description: string, supports ON or OFF only
required: false
default: "OFF"

runs:
using: composite
steps:
- name: install dependencies
run: |
sudo apt update && sudo apt install python3-pip -y
pip3 install eclipse-zenoh==${{ inputs.zenoh-version }} pycdr2 --break-system-packages
shell: bash

- uses: ros-tooling/setup-ros@v0.7
with:
required-ros-distributions: ${{ inputs.ros-distribution }}

- name: build and test
uses: ros-tooling/action-ros-ci@v0.3
with:
package-name: free_fleet free_fleet_adapter free_fleet_examples
target-ros2-distro: ${{ inputs.ros-distribution }}
colcon-defaults: |
{
"build": {
"cmake-args": [
"-DINTEGRATION_TESTING=${{ inputs.integration-testing }}"
],
"mixin": ["coverage-pytest"]
},
"test": {
"mixin": ["coverage-pytest"]
}
}
colcon-mixin-repository: https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml
29 changes: 29 additions & 0 deletions .github/docker/integration-tests/docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
version: "3"

services:
minimal-nav2-bringup:
image: ghcr.io/open-rmf/free_fleet/minimal-nav2-bringup:jazzy-latest
stop_signal: SIGINT
network_mode: host
privileged: true
stdin_open: true
tty: true
environment:
- ROS_DOMAIN_ID=42

minimal-zenoh-bridge:
image: ghcr.io/open-rmf/free_fleet/minimal-zenoh-bridge:jazzy-latest
network_mode: host
stdin_open: true
tty: true
environment:
- ROS_DOMAIN_ID=42

minimal-zenoh-router:
image: eclipse/zenoh
restart: unless-stopped
network_mode: host
stdin_open: true
tty: true
environment:
- RUST_LOG=debug
22 changes: 22 additions & 0 deletions .github/docker/minimal-nav2-bringup/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
ARG ROS_DISTRO=jazzy
FROM docker.io/ros:$ROS_DISTRO-ros-base

RUN apt update && apt install -y curl ros-$ROS_DISTRO-nav2-bringup ros-$ROS_DISTRO-rmw-cyclonedds-cpp

RUN mkdir -p /tb3 && cd /tb3 \
&& curl -sL https://github.com/ROBOTIS-GIT/turtlebot3_simulations/archive/refs/heads/master.tar.gz -o turtlebot3_simulations.tar.gz \
&& mkdir -p /tb3/turtlebot3_simulations && tar zxf turtlebot3_simulations.tar.gz -C /tb3/turtlebot3_simulations --strip-components=1 && rm turtlebot3_simulations.tar.gz

ENV RMW_IMPLEMENTATION rmw_cyclonedds_cpp
ENV GAZEBO_MODEL_PATH "$GAZEBO_MODEL_PATH:/tb3/turtlebot3_simulations/turtlebot3_gazebo/models"

RUN rm -rf \
/var/lib/apt/lists \
/dist

# Modify existing params file to add initial pose
RUN mkdir -p /params && cd /params \
&& cp /opt/ros/$ROS_DISTRO/share/nav2_bringup/params/nav2_params.yaml . \
&& sed -z 's|amcl:\n ros__parameters:\n|amcl:\n ros__parameters:\n set_initial_pose: true\n initial_pose: {x: -2.0, y: -0.5, z: 0.0, yaw: 0.0}\n|' nav2_params.yaml > nav2_params_edited.yaml

ENTRYPOINT ["bash", "-c", ". /opt/ros/$ROS_DISTRO/setup.bash && ros2 launch nav2_bringup tb3_simulation_launch.py params_file:=/params/nav2_params_edited.yaml use_rviz:=False"]
22 changes: 22 additions & 0 deletions .github/docker/minimal-zenoh-bridge/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
ARG ROS_DISTRO=jazzy
FROM docker.io/ros:$ROS_DISTRO-ros-base
ARG ZENOH_VERSION=1.0.1
ARG FREE_FLEET_BRANCH=main

RUN apt update && apt install -y wget unzip ros-jazzy-rmw-cyclonedds-cpp

RUN mkdir -p /zenoh-bridge && cd /zenoh-bridge \
&& wget -O zenoh-plugin-ros2dds.zip https://github.com/eclipse-zenoh/zenoh-plugin-ros2dds/releases/download/$ZENOH_VERSION/zenoh-plugin-ros2dds-$ZENOH_VERSION-x86_64-unknown-linux-gnu-standalone.zip \
&& unzip zenoh-plugin-ros2dds.zip \
&& rm zenoh-plugin-ros2dds.zip

RUN cd /zenoh-bridge \
&& wget -O turtlebot3_1_client_zenoh_config.json5 https://raw.githubusercontent.com/open-rmf/free_fleet/refs/heads/$FREE_FLEET_BRANCH/free_fleet_examples/zenoh_configs/turtlebot3_1_client_zenoh_config.json5

ENV RMW_IMPLEMENTATION rmw_cyclonedds_cpp

RUN rm -rf \
/var/lib/apt/lists \
/dist

ENTRYPOINT ["bash", "-c", ". /opt/ros/$ROS_DISTRO/setup.bash && /zenoh-bridge/zenoh-bridge-ros2dds -c /zenoh-bridge/turtlebot3_1_client_zenoh_config.json5"]
30 changes: 0 additions & 30 deletions .github/workflows/build.yaml

This file was deleted.

45 changes: 45 additions & 0 deletions .github/workflows/integration-tests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: integration-tests

on: push

jobs:
integration-tests:
timeout-minutes: 10
runs-on: ubuntu-latest
container:
image: osrf/ros:${{ matrix.ros_distribution }}-desktop-noble
strategy:
matrix:
ros_distribution:
- jazzy

steps:
- name: Checkout
uses: actions/checkout@v1

- name: Install docker-compose
run: |
sudo apt update && sudo apt install docker-compose -y
- name: Start test fixture containers
run: docker-compose -f ".github/docker/integration-tests/docker-compose.yaml" up -d --build

- name: build-and-test
uses: ./.github/actions/build-and-test
with:
ros-distribution: ${{ matrix.ros_distribution }}
zenoh-version: 1.0.1
integration-testing: ON

- name: Stop test fixture containers
if: always()
run: docker-compose -f ".github/docker/integration-tests/docker-compose.yaml" down

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ros_ws/coveragepy/.coverage
flags: tests
fail_ci_if_error: true
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
79 changes: 79 additions & 0 deletions .github/workflows/nightly.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: nightly

on:
schedule:
# 2am SGT
- cron: '0 18 * * *'

jobs:
build-minimal-docker-images:
name: Push minimal docker images to GitHub Packages
runs-on: ubuntu-latest
strategy:
matrix:
ros_distribution: [jazzy]
steps:
- uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to docker
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push minimal-nav2-bringup
uses: docker/build-push-action@v5
with:
push: true
build-args: |
ROS_DISTRO=${{ matrix.ros_distribution }}
tags: ghcr.io/${{ github.repository }}/minimal-nav2-bringup:${{ matrix.ros_distribution }}-latest
context: .github/docker/minimal-nav2-bringup

- name: Build and push minimal-zenoh-bridge
uses: docker/build-push-action@v5
with:
push: true
build-args: |
ROS_DISTRO=${{ matrix.ros_distribution }}
ZENOH_VERSION=1.0.1
FREE_FLEET_BRANCH=easy-full-control
tags: ghcr.io/${{ github.repository }}/minimal-zenoh-bridge:${{ matrix.ros_distribution }}-latest
context: .github/docker/minimal-zenoh-bridge

integration-tests:
needs: build-minimal-docker-images
timeout-minutes: 10
runs-on: ubuntu-latest
container:
image: osrf/ros:${{ matrix.ros_distribution }}-desktop-noble
strategy:
matrix:
ros_distribution:
- jazzy

steps:
- name: Checkout
uses: actions/checkout@v1

- name: Install docker-compose
run: |
sudo apt update && sudo apt install docker-compose -y
- name: Start test fixture containers
run: docker-compose -f ".github/docker/integration-tests/docker-compose.yaml" up -d --build

- name: build-and-test
uses: ./.github/actions/build-and-test
with:
ros-distribution: ${{ matrix.ros_distribution }}
zenoh-version: 1.0.1
integration-testing: ON

- name: Stop test fixture containers
if: always()
run: docker-compose -f ".github/docker/integration-tests/docker-compose.yaml" down
20 changes: 11 additions & 9 deletions .github/workflows/style.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@ jobs:
container:
image: ${{ matrix.docker_image }}
steps:
- uses: actions/checkout@v3
- name: deps
shell: bash
run: |
sudo apt update && sudo apt install pycodestyle
- name: pycodestyle
shell: bash
run: |
pycodestyle .
- uses: actions/checkout@v3

- name: deps
shell: bash
run: |
sudo apt update && sudo apt install pycodestyle
- name: pycodestyle
shell: bash
run: |
pycodestyle .
24 changes: 24 additions & 0 deletions .github/workflows/unit-tests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: unit-tests

on: push

jobs:
unit-tests:
runs-on: ubuntu-latest
container:
image: osrf/ros:${{ matrix.ros_distribution }}-desktop-noble
strategy:
matrix:
ros_distribution:
- jazzy
- rolling
steps:
- name: Checkout
uses: actions/checkout@v1

- name: build-and-test
uses: ./.github/actions/build-and-test
with:
ros-distribution: ${{ matrix.ros_distribution }}
zenoh-version: 1.0.1
integration-testing: OFF
Loading

0 comments on commit bdc9f87

Please sign in to comment.