Skip to content

Commit e0fe350

Browse files
HanSur94claude
andcommitted
ci: add MATLAB example smoke tests for dashboard/widget examples
Add a matlab-examples job using matlab-actions/setup-matlab that runs all 26 MATLAB-only examples (dashboard engine, widgets, themes, dock, sensor detail). Runs on weekly schedule and workflow_dispatch since MATLAB CI minutes are limited. This catches errors like the addWidget/Widgets{end} bug on page 2 that Octave CI can't test due to the @-folder limitation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent ec0614a commit e0fe350

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

.github/workflows/examples.yml

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ on:
55
branches: [main]
66
pull_request:
77
branches: [main]
8+
schedule:
9+
- cron: '0 7 * * 1' # Weekly Monday 07:00 UTC — MATLAB examples
10+
workflow_dispatch:
811

912
jobs:
1013
build-mex:
@@ -150,3 +153,79 @@ jobs:
150153
printf "Failed:%b\n" "$FAIL_LIST"
151154
exit 1
152155
fi
156+
157+
matlab-examples:
158+
name: MATLAB Example Smoke Tests
159+
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
160+
runs-on: ubuntu-latest
161+
steps:
162+
- uses: actions/checkout@v6
163+
164+
- name: Setup MATLAB
165+
uses: matlab-actions/setup-matlab@v2
166+
167+
- name: Run MATLAB-only examples
168+
uses: matlab-actions/run-command@v2
169+
with:
170+
command: |
171+
install();
172+
cd('examples');
173+
174+
examples = {
175+
% DashboardEngine examples (require abstract classdef — MATLAB only)
176+
'example_dashboard_engine'
177+
'example_dashboard_all_widgets'
178+
'example_dashboard_groups'
179+
'example_dashboard_info'
180+
'example_dashboard_advanced'
181+
% Individual widget examples
182+
'example_widget_fastsense'
183+
'example_widget_number'
184+
'example_widget_status'
185+
'example_widget_text'
186+
'example_widget_gauge'
187+
'example_widget_table'
188+
'example_widget_rawaxes'
189+
'example_widget_timeline'
190+
'example_widget_group'
191+
'example_widget_barchart'
192+
'example_widget_heatmap'
193+
'example_widget_histogram'
194+
'example_widget_scatter'
195+
'example_widget_image'
196+
'example_widget_multistatus'
197+
% Other MATLAB-only examples
198+
'example_themes'
199+
'example_mixed_tiles'
200+
'example_dock'
201+
'example_dock_many_tabs'
202+
'example_sensor_detail_basic'
203+
'example_sensor_detail_dashboard'
204+
};
205+
206+
passed = 0;
207+
failed = 0;
208+
failList = {};
209+
for i = 1:numel(examples)
210+
name = examples{i};
211+
fprintf('Running %s... ', name);
212+
try
213+
feval(name);
214+
close all force;
215+
fprintf('OK\n');
216+
passed = passed + 1;
217+
catch e
218+
fprintf('FAILED\n %s\n', e.message);
219+
failed = failed + 1;
220+
failList{end+1} = name;
221+
end
222+
end
223+
224+
fprintf('\n=== %d/%d examples passed ===\n', passed, numel(examples));
225+
if failed > 0
226+
fprintf('\nFailed:\n');
227+
for i = 1:numel(failList)
228+
fprintf(' - %s\n', failList{i});
229+
end
230+
error('ExampleSmokeTests:failed', '%d example(s) failed', failed);
231+
end

0 commit comments

Comments
 (0)