# NOTE: this workflow is now running on Dronecode / PX4 AWS account. # - If you want to keep the tests running in GitHub Actions you need to uncomment the "runs-on: ubuntu-latest" lines # and comment the "runs-on: [runs-on,runner=..." lines. # - If you would like to duplicate this setup try setting up "RunsOn" on your own AWS account try https://runs-on.com name: ROS Integration Tests on: push: branches: - 'main' paths-ignore: - 'docs/**' pull_request: branches: - '**' paths-ignore: - 'docs/**' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false,extras=s3-cache] container: image: px4io/px4-dev-ros2-galactic:2021-09-08 options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined env: PX4_SBOM_DISABLE: 1 steps: - uses: runs-on/action@v2 - uses: actions/checkout@v6 with: fetch-depth: 1 - name: Configure Git Safe Directory run: git config --system --add safe.directory '*' - name: Update ROS Keys run: | sudo rm /etc/apt/sources.list.d/ros2.list && \ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg && \ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null - name: Install gazebo run: | apt update && apt install -y gazebo11 libgazebo11-dev gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly libgstreamer-plugins-base1.0-dev - uses: ./.github/actions/setup-ccache id: ccache with: cache-key-prefix: ccache-ros-integration max-size: 400M - name: Cache - Restore Micro-XRCE-DDS Agent id: cache-xrce-agent uses: actions/cache@v5 with: path: /opt/Micro-XRCE-DDS-Agent key: xrce-agent-v2.2.1-fastdds-2.8.2-galactic-2021-09-08 - name: Build - Micro-XRCE-DDS Agent (v2.2.1) if: steps.cache-xrce-agent.outputs.cache-hit != 'true' run: | cd /opt git clone --recursive https://github.com/eProsima/Micro-XRCE-DDS-Agent.git cd Micro-XRCE-DDS-Agent git checkout v2.2.1 # recent versions require cmake 3.22, but px4-dev-ros2-galactic:2021-09-08 is on 3.16 sed -i 's/_fastdds_tag 2.8.x/_fastdds_tag 2.8.2/g' CMakeLists.txt mkdir build cd build cmake .. make -j2 - name: Cache - Restore PX4 ROS 2 Interface Library Workspace id: cache-px4-ros2-ws uses: actions/cache@v5 with: path: /opt/px4_ws # Bump 'v1' when the cached workspace layout changes in a way # that is not captured by the message/service hash below. key: px4-ros2-ws-v1-galactic-2021-09-08-${{ hashFiles('msg/*.msg', 'msg/versioned/*.msg', 'srv/*.srv') }} - name: Build - PX4 ROS 2 Interface Library if: steps.cache-px4-ros2-ws.outputs.cache-hit != 'true' shell: bash run: | PX4_DIR="$(pwd)" . /opt/ros/galactic/setup.bash mkdir -p /opt/px4_ws/src cd /opt/px4_ws/src # On a PR, target the branch we're merging into (main or release/X.Y). # On a direct push, fall back to the branch we're running on. BRANCH="${GITHUB_BASE_REF:-$GITHUB_REF_NAME}" REPO_URL="https://github.com/Auterion/px4-ros2-interface-lib.git" if git ls-remote --heads "$REPO_URL" "$BRANCH" | grep -q "$BRANCH"; then echo "Cloning px4-ros2-interface-lib with matching branch: $BRANCH" git clone --recursive --branch "$BRANCH" "$REPO_URL" else echo "Branch '$BRANCH' not found in px4-ros2-interface-lib, using default (main)" git clone --recursive "$REPO_URL" fi # Ignore python packages due to compilation issue (can be enabled when updating ROS) touch px4-ros2-interface-lib/px4_ros2_py/COLCON_IGNORE || true touch px4-ros2-interface-lib/examples/python/COLCON_IGNORE || true cd .. # Copy messages to ROS workspace "${PX4_DIR}/Tools/copy_to_ros_ws.sh" "$(pwd)" rm -rf src/translation_node src/px4_msgs_old colcon build --symlink-install - uses: ./.github/actions/build-gazebo-sitl - name: Core dump settings run: | ulimit -c unlimited echo "`pwd`/%e.core" > /proc/sys/kernel/core_pattern - name: Run tests shell: bash run: | . /opt/px4_ws/install/setup.bash /opt/Micro-XRCE-DDS-Agent/build/MicroXRCEAgent udp4 localhost -p 8888 -v 0 & test/ros_test_runner.py --verbose --model iris --force-color timeout-minutes: 45 - uses: ./.github/actions/save-ccache if: always() with: cache-primary-key: ${{ steps.ccache.outputs.cache-primary-key }} - name: Upload failed logs if: failure() uses: actions/upload-artifact@v7 with: name: failed-logs.zip path: | logs/**/**/**/*.log logs/**/**/**/*.ulg build/px4_sitl_default/tmp_ros_tests/rootfs/log/**/*.ulg