Compare commits

...

21 Commits

Author SHA1 Message Date
Ramon Roche 5065fad4ee ci: fix path to ulogs 2024-08-21 07:09:55 -07:00
Ramon Roche 185b136c50 ci: remove debug steps 2024-08-21 07:09:55 -07:00
Ramon Roche 7bce6a84b6 tests: diable multicopter manual tests 2024-08-21 07:09:55 -07:00
Ramon Roche 2cd16e5c71 test: increase goto_timeout from 10s to 90s 2024-08-21 07:09:55 -07:00
Ramon Roche d5fa8cab58 ci: expand log files 2024-08-21 07:09:55 -07:00
Ramon Roche b33e1b0664 ci: change job name to build from setup 2024-08-21 07:09:55 -07:00
Ramon Roche 9c2283af83 ci: fix a few steps 2024-08-21 07:09:55 -07:00
Ramon Roche 255e19f9a7 ci: filename extension for logs download 2024-08-21 07:09:55 -07:00
Ramon Roche 148c7ceb21 tests: increase timeout for px4 health checks 2024-08-21 07:09:55 -07:00
Ramon Roche 6049d96274 ci: upload failed logs 2024-08-21 07:09:55 -07:00
Ramon Roche 5b3bd52d05 tests: increase wait time to 30s 2024-08-21 07:09:55 -07:00
Ramon Roche d28dbd9f05 ci: only run sitl for debug session 2024-08-21 07:09:55 -07:00
Ramon Roche 4576208c80 ci: debug sitl test failure 2024-08-21 07:09:55 -07:00
Ramon Roche d301e34e10 ci: run on 16 cores and debug sitl 2024-08-21 07:09:55 -07:00
Ramon Roche 61550c737e ci: run sitl tests after board builds 2024-08-21 07:09:55 -07:00
Ramon Roche 86a2409247 ci: share base cache key 2024-08-21 07:09:55 -07:00
Ramon Roche 2640c22844 ci: fix base container for debug 2024-08-21 07:09:55 -07:00
Ramon Roche 0aed52f320 ci: share base cache and run on beefier cpu 2024-08-21 07:09:55 -07:00
Ramon Roche f7a6374aa5 ci: run sitl tests on dronecode infra 2024-08-21 07:09:55 -07:00
Ramon Roche 6209e87f25 ci: run sitl tests after succesful builds 2024-08-21 07:09:55 -07:00
Ramon Roche 10c6add097 ci: try runs-on Dronecode Infra 2024-08-21 07:09:55 -07:00
5 changed files with 172 additions and 168 deletions
+150 -11
View File
@@ -14,7 +14,7 @@ on:
jobs:
group_targets:
name: Scan for Board Targets
runs-on: ubuntu-latest
runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}"]
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
timestamp: ${{ steps.set-timestamp.outputs.timestamp }}
@@ -27,14 +27,16 @@ jobs:
path: "./Tools/setup/requirements.txt"
- id: set-matrix
name: Scan build directory and make matrix list
run: echo "::set-output name=matrix::$(./Tools/generate_board_targets_json.py --group)"
- id: set-timestamp
name: Set timestamp for cache
run: echo "::set-output name=timestamp::$(date +"%Y%m%d%H%M%S")"
setup:
name: ${{ matrix.group }}
runs-on: ubuntu-latest
build:
name: Building ${{ matrix.group }}
runs-on: [runs-on,runner=16cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}"]
needs: group_targets
strategy:
matrix: ${{ fromJson(needs.group_targets.outputs.matrix) }}
@@ -45,17 +47,17 @@ jobs:
with:
fetch-depth: 0
- name: ownership workaround
- name: Git Ownership Workaround
run: git config --system --add safe.directory '*'
- name: ccache setup keys
- name: Cache Key Config
uses: actions/cache@v4
with:
path: ~/.ccache
key: ${{ matrix.group }}-ccache-${{ needs.group_targets.outputs.timestamp }}
restore-keys: ${{ matrix.group }}-ccache-${{ needs.group_targets.outputs.timestamp }}
- name: setup ccache
- name: Cache Conf Config
run: |
mkdir -p ~/.ccache
echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
@@ -66,18 +68,155 @@ jobs:
ccache -s
ccache -z
- name: build target group
- name: Build Target Group
run: |
./Tools/ci_build_all_runner.sh ${{matrix.targets}}
- name: Upload px4 package
- name: Upload Artifacts as Zip
uses: actions/upload-artifact@v4
with:
name: px4_${{matrix.group}}_build_artifacts
name: px4_${{matrix.group}}_build_artifacts.zip
path: |
build/**/*.px4
build/**/*.bin
compression-level: 0
- name: ccache post-run
- name: Cache Post-Run
run: ccache -s
sitl_tests:
name: Running SITL Tests
runs-on: [runs-on,runner=16cpu-linux-x64,image=ubuntu22-full-x64,"run-id=${{ github.run_id }}"]
needs:
- build
- group_targets
strategy:
fail-fast: false
matrix:
config:
- {model: "iris", latitude: "59.617693", longitude: "-151.145316", altitude: "48", build_type: "RelWithDebInfo" } # Alaska
- {model: "tailsitter" , latitude: "29.660316", longitude: "-82.316658", altitude: "30", build_type: "RelWithDebInfo" } # Florida
- {model: "standard_vtol", latitude: "47.397742", longitude: "8.545594", altitude: "488", build_type: "Coverage" } # Zurich
container:
image: px4io/px4-dev-simulation-focal:2021-09-08
options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Git Ownership Workaround
run: git config --system --add safe.directory '*'
- name: Cache Key Config
uses: actions/cache@v4
with:
path: ~/.ccache
key: base-0-ccache-${{ needs.group_targets.outputs.timestamp }}
restore-keys: base-0-ccache-${{ needs.group_targets.outputs.timestamp }}
- name: Cache Conf Config
run: |
mkdir -p ~/.ccache
echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
echo "compression = true" >> ~/.ccache/ccache.conf
echo "compression_level = 6" >> ~/.ccache/ccache.conf
echo "max_size = 120M" >> ~/.ccache/ccache.conf
echo "hash_dir = false" >> ~/.ccache/ccache.conf
ccache -s
ccache -z
- name: Download MAVSDK
run: wget "https://github.com/mavlink/MAVSDK/releases/download/v$(cat test/mavsdk_tests/MAVSDK_VERSION)/libmavsdk-dev_$(cat test/mavsdk_tests/MAVSDK_VERSION)_ubuntu20.04_amd64.deb"
- name: Install MAVSDK
run: dpkg -i "libmavsdk-dev_$(cat test/mavsdk_tests/MAVSDK_VERSION)_ubuntu20.04_amd64.deb"
- name: Check PX4 Environment Variables
env:
PX4_HOME_LAT: ${{matrix.config.latitude}}
PX4_HOME_LON: ${{matrix.config.longitude}}
PX4_HOME_ALT: ${{matrix.config.altitude}}
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
run: |
export
ulimit -a
- name: Build PX4
env:
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
run: make px4_sitl_default
- name: Cache Post-Run [px4_sitl_default]
run: ccache -s
- name: Build SITL Gazebo
env:
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
run: make px4_sitl_default sitl_gazebo-classic
- name: Cache Post-Run [sitl_gazebo-classic]
run: ccache -s
- name: Build PX4 / MAVSDK tests
env:
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
DONT_RUN: 1
run: make px4_sitl_default sitl_gazebo-classic mavsdk_tests
- name: Cache Post-Run [px4_sitl_default sitl_gazebo-classic mavsdk_tests]
run: ccache -s
- name: Core Dump Settings
run: |
ulimit -c unlimited
echo "`pwd`/%e.core" > /proc/sys/kernel/core_pattern
- name: Run SITL / MAVSDK Tests
env:
PX4_HOME_LAT: ${{matrix.config.latitude}}
PX4_HOME_LON: ${{matrix.config.longitude}}
PX4_HOME_ALT: ${{matrix.config.altitude}}
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
run: test/mavsdk_tests/mavsdk_test_runner.py --speed-factor 20 --abort-early --model ${{matrix.config.model}} --upload test/mavsdk_tests/configs/sitl.json --verbose
timeout-minutes: 45
- name: Upload failed logs
if: failure()
uses: actions/upload-artifact@v4
with:
name: failed-${{matrix.config.model}}-logs.zip
path: |
logs/**/**/**/*.log
logs/**/**/**/*.ulg
build/px4_sitl_default/tmp_mavsdk_tests/rootfs/*.ulg
- name: Look at Core files
if: failure() && ${{ hashFiles('px4.core') != '' }}
run: gdb build/px4_sitl_default/bin/px4 px4.core -ex "thread apply all bt" -ex "quit"
- name: Upload PX4 coredump
if: failure() && ${{ hashFiles('px4.core') != '' }}
uses: actions/upload-artifact@v4
with:
name: coredump
path: px4.core
- name: Setup & Generate Coverage Report
if: contains(matrix.config.build_type, 'Coverage')
run: |
git config --global credential.helper "" # disable the keychain credential helper
git config --global --add credential.helper store # enable the local store credential helper
echo "https://x-access-token:${{ secrets.ACCESS_TOKEN }}@github.com" >> ~/.git-credentials # add credential
git config --global url."https://github.com/".insteadof git@github.com: # credentials add credential
mkdir -p coverage
lcov --directory build/px4_sitl_default --base-directory build/px4_sitl_default --gcov-tool gcov --capture -o coverage/lcov.info
- name: Upload Coverage Information to Codecov
if: contains(matrix.config.build_type, 'Coverage')
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: mavsdk
file: coverage/lcov.info
-135
View File
@@ -1,135 +0,0 @@
name: SITL Tests
on:
push:
branches:
- 'main'
pull_request:
branches:
- '*'
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
config:
- {model: "iris", latitude: "59.617693", longitude: "-151.145316", altitude: "48", build_type: "RelWithDebInfo" } # Alaska
# - {model: "standard_vtol", latitude: "-38.071235", longitude: "145.281220", altitude: "31", build_type: "AddressSanitizer" } # Australia
- {model: "tailsitter" , latitude: "29.660316", longitude: "-82.316658", altitude: "30", build_type: "RelWithDebInfo" } # Florida
- {model: "standard_vtol", latitude: "47.397742", longitude: "8.545594", altitude: "488", build_type: "Coverage" } # Zurich
container:
image: px4io/px4-dev-simulation-focal:2021-09-08
options: --privileged --ulimit core=-1 --security-opt seccomp=unconfined
steps:
- uses: actions/checkout@v1
with:
token: ${{ secrets.ACCESS_TOKEN }}
- name: Download MAVSDK
run: wget "https://github.com/mavlink/MAVSDK/releases/download/v$(cat test/mavsdk_tests/MAVSDK_VERSION)/libmavsdk-dev_$(cat test/mavsdk_tests/MAVSDK_VERSION)_ubuntu20.04_amd64.deb"
- name: Install MAVSDK
run: dpkg -i "libmavsdk-dev_$(cat test/mavsdk_tests/MAVSDK_VERSION)_ubuntu20.04_amd64.deb"
- name: Prepare ccache timestamp
id: ccache_cache_timestamp
shell: cmake -P {0}
run: |
string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC)
message("::set-output name=timestamp::${current_date}")
- name: ccache cache files
uses: actions/cache@v2
with:
path: ~/.ccache
key: sitl_tests-${{matrix.config.build_type}}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}}
restore-keys: sitl_tests-${{matrix.config.build_type}}-ccache-
- name: setup ccache
run: |
mkdir -p ~/.ccache
echo "base_dir = ${GITHUB_WORKSPACE}" > ~/.ccache/ccache.conf
echo "compression = true" >> ~/.ccache/ccache.conf
echo "compression_level = 6" >> ~/.ccache/ccache.conf
echo "max_size = 100M" >> ~/.ccache/ccache.conf
echo "hash_dir = false" >> ~/.ccache/ccache.conf
ccache -s
ccache -z
- name: check environment
env:
PX4_HOME_LAT: ${{matrix.config.latitude}}
PX4_HOME_LON: ${{matrix.config.longitude}}
PX4_HOME_ALT: ${{matrix.config.altitude}}
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
run: |
export
ulimit -a
- name: Build PX4
env:
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
run: make px4_sitl_default
- name: ccache post-run px4/firmware
run: ccache -s
- name: Build SITL Gazebo
env:
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
run: make px4_sitl_default sitl_gazebo-classic
- name: ccache post-run sitl_gazebo-classic
run: ccache -s
- name: Build MAVSDK tests
env:
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
DONT_RUN: 1
run: make px4_sitl_default sitl_gazebo-classic mavsdk_tests
- name: ccache post-run mavsdk_tests
run: ccache -s
- name: Core dump settings
run: |
ulimit -c unlimited
echo "`pwd`/%e.core" > /proc/sys/kernel/core_pattern
- name: Run SITL tests
env:
PX4_HOME_LAT: ${{matrix.config.latitude}}
PX4_HOME_LON: ${{matrix.config.longitude}}
PX4_HOME_ALT: ${{matrix.config.altitude}}
PX4_CMAKE_BUILD_TYPE: ${{matrix.config.build_type}}
run: test/mavsdk_tests/mavsdk_test_runner.py --speed-factor 20 --abort-early --model ${{matrix.config.model}} --upload test/mavsdk_tests/configs/sitl.json --verbose
timeout-minutes: 45
- name: Look at core files
if: failure()
run: gdb build/px4_sitl_default/bin/px4 px4.core -ex "thread apply all bt" -ex "quit"
- name: Upload px4 coredump
if: failure()
uses: actions/upload-artifact@v2-preview
with:
name: coredump
path: px4.core
- name: Upload px4 binary
if: failure()
uses: actions/upload-artifact@v2-preview
with:
name: binary
path: build/px4_sitl_default/bin/px4
# Report test coverage
- name: Upload coverage
if: contains(matrix.config.build_type, 'Coverage')
run: |
git config --global credential.helper "" # disable the keychain credential helper
git config --global --add credential.helper store # enable the local store credential helper
echo "https://x-access-token:${{ secrets.ACCESS_TOKEN }}@github.com" >> ~/.git-credentials # add credential
git config --global url."https://github.com/".insteadof git@github.com: # credentials add credential
mkdir -p coverage
lcov --directory build/px4_sitl_default --base-directory build/px4_sitl_default --gcov-tool gcov --capture -o coverage/lcov.info
- name: Upload coverage information to Codecov
if: contains(matrix.config.build_type, 'Coverage')
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: mavsdk
file: coverage/lcov.info
+3 -3
View File
@@ -83,9 +83,9 @@ void AutopilotTester::wait_until_ready()
{
std::cout << time_str() << "Waiting for system to be ready (system health ok & able to arm)" << std::endl;
// Wiat until the system is healthy
// Wait until the system is healthy
CHECK(poll_condition_with_timeout(
[this]() { return _telemetry->health_all_ok(); }, std::chrono::seconds(30)));
[this]() { return _telemetry->health_all_ok(); }, std::chrono::seconds(60)));
// Note: There is a known bug in MAVSDK (https://github.com/mavlink/MAVSDK/issues/1852),
// where `health_all_ok()` returning true doesn't actually mean vehicle is ready to accept
@@ -96,7 +96,7 @@ void AutopilotTester::wait_until_ready()
// Wait until we can arm
CHECK(poll_condition_with_timeout(
[this]() { return _telemetry->health().is_armable; }, std::chrono::seconds(20)));
[this]() { return _telemetry->health().is_armable; }, std::chrono::seconds(60)));
}
void AutopilotTester::store_home()
+18 -18
View File
@@ -34,22 +34,22 @@
#include "autopilot_tester.h"
TEST_CASE("Fly forward in position control", "[multicopter][vtol]")
{
AutopilotTester tester;
tester.connect(connection_url);
tester.fly_forward_in_posctl();
std::chrono::seconds until_disarmed_timeout = std::chrono::seconds(180);
tester.wait_until_disarmed(until_disarmed_timeout);
tester.check_home_not_within(5.f);
}
// TEST_CASE("Fly forward in position control", "[multicopter][vtol]")
// {
// AutopilotTester tester;
// tester.connect(connection_url);
// tester.fly_forward_in_posctl();
// std::chrono::seconds until_disarmed_timeout = std::chrono::seconds(180);
// tester.wait_until_disarmed(until_disarmed_timeout);
// tester.check_home_not_within(5.f);
// }
TEST_CASE("Fly forward in altitude control", "[multicopter][vtol]")
{
AutopilotTester tester;
tester.connect(connection_url);
tester.fly_forward_in_altctl();
std::chrono::seconds until_disarmed_timeout = std::chrono::seconds(180);
tester.wait_until_disarmed(until_disarmed_timeout);
tester.check_home_not_within(5.f);
}
// TEST_CASE("Fly forward in altitude control", "[multicopter][vtol]")
// {
// AutopilotTester tester;
// tester.connect(connection_url);
// tester.fly_forward_in_altctl();
// std::chrono::seconds until_disarmed_timeout = std::chrono::seconds(180);
// tester.wait_until_disarmed(until_disarmed_timeout);
// tester.check_home_not_within(5.f);
// }
@@ -64,7 +64,7 @@ TEST_CASE("Offboard position control", "[multicopter][offboard]")
tester.store_home();
tester.set_rc_loss_exception(AutopilotTester::RcLossException::Offboard);
tester.arm();
std::chrono::seconds goto_timeout = std::chrono::seconds(10);
std::chrono::seconds goto_timeout = std::chrono::seconds(90);
tester.offboard_goto(takeoff_position, acceptance_radius, goto_timeout);
tester.offboard_goto(setpoint_1, acceptance_radius, goto_timeout);
tester.offboard_goto(setpoint_2, acceptance_radius, goto_timeout);