You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -7,7 +7,8 @@ repository and how it affects day-to-day development.
7
7
8
8
There are currently two GitHub Actions workflows:
9
9
10
-
-`ci`: continuous integration for build, lint, and test validation
10
+
-`ci`: continuous integration for lint, build, unit/package tests, launch
11
+
smoke, firmware compile, and docs validation
11
12
-`docs`: continuous deployment for the MkDocs documentation site
12
13
13
14
At the moment, Omniseer does **not** have a release pipeline for firmware,
@@ -37,39 +38,78 @@ This means CI acts as a gate for the default branch and for incoming PRs.
37
38
38
39
### What it does
39
40
40
-
The CI job currently performs the following checks:
41
-
42
-
1. Installs the ROS 2 `kilted` build and test dependencies needed by the
43
-
selected package set
44
-
2. Runs Ruff against the Python packages in `ros_ws/src/analysis` and
45
-
`ros_ws/src/bringup`
46
-
3. Builds the main validated ROS package subset:
47
-
-`omniseer_msgs`
48
-
-`yolo_msgs`
49
-
-`omniseer_description`
50
-
-`analysis`
51
-
-`bringup`
52
-
4. Builds `omniseer_vision_bridge` only when the RKNN and RGA SDKs are
53
-
available in the runner environment
54
-
5. Runs the current ROS test subset:
55
-
-`omniseer_description`
56
-
-`analysis`
57
-
-`bringup`
58
-
6. Builds and runs the portable native vision tests:
59
-
-`image_buffer_pool_test`
60
-
-`jsonl_telemetry_test`
61
-
-`rolling_telemetry_test`
41
+
The workflow is split into focused jobs:
42
+
43
+
| Job | Purpose |
44
+
| --- | --- |
45
+
|`lint`| Run Ruff against the Python helper/operator packages |
46
+
|`ros-core`| Install ROS workspace deps, build the validated package set, run unit/package tests, and conditionally build `omniseer_vision_bridge` when the RKNN/RGA SDKs are available |
47
+
|`bringup-smoke`| Launch headless simulation and verify the core sim/hardware boundary topics and type contracts |
48
+
|`vision-host`| Build and run the portable native vision tests |
49
+
|`firmware-build`| Run a compile-only PlatformIO build for the Teensy firmware target |
50
+
|`docs-build`| Build the MkDocs site in strict mode on every PR/push |
51
+
52
+
The validated ROS package set in `ros-core` now includes:
53
+
54
+
-`omniseer_gz_assets`
55
+
-`omniseer_msgs`
56
+
-`yolo_msgs`
57
+
-`omniseer_description`
58
+
-`analysis`
59
+
-`bringup`
60
+
-`robot_io_adapters`
61
+
-`robot_diag_control`
62
+
-`robot_diag_control_cpp`
63
+
64
+
The ROS test subset now includes:
65
+
66
+
-`omniseer_description`
67
+
-`analysis`
68
+
-`bringup`
69
+
-`robot_io_adapters`
70
+
-`robot_diag_control`
71
+
-`robot_diag_control_cpp`
72
+
73
+
The `bringup-smoke` job intentionally checks a narrow, stable contract instead
74
+
of trying to prove the full robot stack. It uses a dedicated minimal world and
75
+
CI-safe geometry path so the check does not depend on optional Gazebo models or
76
+
STL-heavy collision geometry. Today it verifies that headless sim bringup
77
+
publishes:
78
+
79
+
-`/clock`
80
+
-`/imu`
81
+
-`/scan`
82
+
-`/range`
83
+
-`/mecanum_drive_controller/odometry`
84
+
85
+
It also checks the expected message types on that boundary and fails if the
86
+
headless sim graph exits before those topics come up.
87
+
88
+
### Workflow hygiene
89
+
90
+
The CI workflow now includes a few guardrails that matter once hardware work
91
+
starts:
92
+
93
+
-`concurrency` cancels superseded runs on the same branch or PR
94
+
- each job has an explicit timeout
95
+
- ROS, vision, firmware, and smoke-test logs are uploaded as artifacts
96
+
- ROS dependency installation is driven from package manifests through
97
+
`scripts/ci/install_ros_workspace_deps.sh`
62
98
63
99
### Why this helps
64
100
65
101
This workflow gives quick feedback when a change breaks:
66
102
67
103
- ROS package metadata or dependency declarations
68
104
- message generation for the selected interface packages
69
-
- Python linting in the helper packages
70
-
- the frontier-selection and `omniseer_description` C++ tests
71
-
- the package-level XML and test wiring in `analysis` and `bringup`
105
+
- Python linting in the helper and operator packages
106
+
- the C++ adapter and gateway test suites
107
+
- the package-level XML and test wiring in `analysis`, `bringup`, and the
108
+
operator tooling
109
+
- the core sim/hardware boundary wiring before real hardware is in the loop
110
+
- compile-time firmware regressions on the main MCU target
72
111
- the portable part of the native vision runtime
112
+
- docs regressions that would otherwise only show up at deploy time
73
113
74
114
In practice, this reduces the chance that a broken branch reaches `master`
75
115
without anyone noticing.
@@ -84,7 +124,7 @@ It does **not** currently guarantee:
84
124
- camera or sensor availability
85
125
- RKNN/RGA-backed execution inside the default GitHub runner image
86
126
- firmware flashing or micro-ROS deployment
87
-
- Gazebo or robot end-to-end runtime validation
127
+
-long-duration Gazebo or robot end-to-end runtime validation
88
128
- release packaging or artifact publishing
89
129
90
130
Those would require additional jobs, richer runners, or hardware-aware test
@@ -108,7 +148,7 @@ The job:
108
148
109
149
1. Checks out the repository with full history
110
150
2. Installs MkDocs and the Material theme
111
-
3. Builds the site
151
+
3. Builds the site in strict mode
112
152
4. Deploys the generated documentation to the `gh-pages` branch
113
153
114
154
This is the current "CD" piece of the repository.
@@ -121,24 +161,56 @@ benefits:
121
161
- PRs get an automatic build/test signal without requiring every reviewer to
122
162
reproduce the same checks locally
123
163
- dependency drift in ROS packages is more likely to fail early
124
-
- lightweight regressions in Python helpers and portable vision utilities are
125
-
caught before merge
164
+
- lightweight regressions in Python helpers, operator tools, and portable
165
+
vision utilities are caught before merge
166
+
- the sim/hardware boundary gets a fast smoke signal before hardware
167
+
integration starts absorbing debugging time
168
+
- firmware compile breaks show up before anyone plugs in a board
126
169
- docs changes can be published without a manual deployment step
127
170
128
171
The local equivalents of the current CI checks are:
0 commit comments