@@ -12,11 +12,17 @@ _commands:
12
12
steps :
13
13
- restore_cache :
14
14
name : Restore Cache << parameters.key >>
15
- key : " << parameters.key >>-v1\
16
- -{{ arch }}\
17
- -{{ .Branch }}\
18
- -{{ .Environment.CIRCLE_PR_NUMBER }}\
19
- -{{ checksum \" << parameters.workspace >>/checksum.txt\" }}"
15
+ keys :
16
+ - " << parameters.key >>-v1\
17
+ -{{ arch }}\
18
+ -{{ .Branch }}\
19
+ -{{ .Environment.CIRCLE_PR_NUMBER }}\
20
+ -{{ checksum \" << parameters.workspace >>/lockfile.txt\" }}"
21
+ - " << parameters.key >>-v1\
22
+ -{{ arch }}\
23
+ -main\
24
+ -<no value>\
25
+ -{{ checksum \" << parameters.workspace >>/lockfile.txt\" }}"
20
26
save_to_cache :
21
27
description : " Save To Cache"
22
28
parameters :
@@ -36,10 +42,12 @@ _commands:
36
42
-{{ arch }}\
37
43
-{{ .Branch }}\
38
44
-{{ .Environment.CIRCLE_PR_NUMBER }}\
39
- -{{ checksum \" << parameters.workspace >>/checksum .txt\" }}\
45
+ -{{ checksum \" << parameters.workspace >>/lockfile .txt\" }}\
40
46
-{{ epoch }}"
41
47
paths :
42
- - << parameters.path >>
48
+ - << parameters.path >>/build
49
+ - << parameters.path >>/install
50
+ - << parameters.path >>/log
43
51
when : << parameters.when >>
44
52
install_dependencies :
45
53
description : " Install Dependencies"
@@ -54,13 +62,13 @@ _commands:
54
62
working_directory : << parameters.workspace >>
55
63
command : |
56
64
. << parameters.underlay >>/install/setup.sh
57
- cat << parameters.underlay >>/checksum .txt > checksum .txt
58
- vcs export --exact src | \
59
- (echo vcs_export && cat) >> checksum .txt
60
- sha256sum $PWD/checksum .txt >> checksum .txt
65
+ cat << parameters.underlay >>/lockfile .txt > lockfile .txt
66
+ vcs export --exact << parameters.underlay >>/ src | \
67
+ (echo vcs_export && cat) >> lockfile .txt
68
+ sha256sum $PWD/lockfile .txt >> lockfile .txt
61
69
apt-get update
62
70
rosdep update
63
-
71
+
64
72
# workarround for OMPL and rosdep
65
73
# https://github.com/ompl/ompl/issues/753
66
74
# Prevent searching $ROS_WS/install given it's too big for rosdep
@@ -85,8 +93,8 @@ _commands:
85
93
awk -F'[][]' '{print $2}' | \
86
94
tr -d \, | xargs -n1 | sort -u | xargs)
87
95
dpkg -s $dependencies | \
88
- (echo workspace_dependencies && cat) >> checksum .txt
89
- sha256sum $PWD/checksum .txt >> checksum .txt
96
+ (echo workspace_dependencies && cat) >> lockfile .txt
97
+ sha256sum $PWD/lockfile .txt >> lockfile .txt
90
98
setup_workspace :
91
99
description : " Setup Workspace"
92
100
parameters :
@@ -103,7 +111,7 @@ _commands:
103
111
type : boolean
104
112
steps :
105
113
- store_artifacts :
106
- path : << parameters.workspace >>/checksum .txt
114
+ path : << parameters.workspace >>/lockfile .txt
107
115
- restore_from_cache :
108
116
key : << parameters.key >>
109
117
workspace : << parameters.workspace >>
@@ -114,21 +122,55 @@ _commands:
114
122
name : Build Workspace | << parameters.workspace >>
115
123
working_directory : << parameters.workspace >>
116
124
command : |
117
- BUILD_UNFINISHED=$(colcon list --packages-skip-build-finished)
118
- BUILD_FAILED=$(colcon list --packages-select-build-failed)
119
- if [ -n "$BUILD_UNFINISHED" ] || [ -n "$BUILD_FAILED" ]
125
+ colcon cache lock
126
+
127
+ BUILD_UNFINISHED=$(
128
+ colcon list \
129
+ --names-only \
130
+ --packages-skip-build-finished \
131
+ | xargs)
132
+ echo BUILD_UNFINISHED: $BUILD_UNFINISHED
133
+
134
+ BUILD_FAILED=$(
135
+ colcon list \
136
+ --names-only \
137
+ --packages-select-build-failed \
138
+ | xargs)
139
+ echo BUILD_FAILED: $BUILD_FAILED
140
+
141
+ BUILD_INVALID=$(
142
+ colcon list \
143
+ --names-only \
144
+ --packages-select-cache-invalid \
145
+ --packages-select-cache-key build \
146
+ | xargs)
147
+ echo BUILD_INVALID: $BUILD_INVALID
148
+
149
+ BUILD_PACKAGES=""
150
+ if [ -n "$BUILD_UNFINISHED" ] || \
151
+ [ -n "$BUILD_FAILED" ] || \
152
+ [ -n "$BUILD_INVALID" ]
120
153
then
121
- . << parameters.underlay >>/install/setup.sh
122
- rm -rf build install log
123
- colcon build \
124
- --mixin << parameters.mixins >>
125
- else
126
- echo "Skipping Build"
154
+ BUILD_PACKAGES=$(
155
+ colcon list \
156
+ --names-only \
157
+ --packages-above \
158
+ $BUILD_UNFINISHED \
159
+ $BUILD_FAILED \
160
+ $BUILD_INVALID \
161
+ | xargs)
127
162
fi
163
+ echo BUILD_PACKAGES: $BUILD_PACKAGES
164
+
165
+ . << parameters.underlay >>/install/setup.sh
166
+ colcon build \
167
+ --packages-select ${BUILD_PACKAGES} \
168
+ --mixin << parameters.mixins >>
128
169
- save_to_cache :
129
170
key : << parameters.key >>
130
171
path : << parameters.workspace >>
131
172
workspace : << parameters.workspace >>
173
+ when : always
132
174
- run :
133
175
name : Copy Build Logs
134
176
working_directory : << parameters.workspace >>
@@ -139,28 +181,72 @@ _commands:
139
181
test_workspace :
140
182
description : " Test Workspace"
141
183
parameters :
184
+ key :
185
+ type : string
142
186
workspace :
143
187
type : string
188
+ cache_test :
189
+ type : boolean
144
190
steps :
145
191
- run :
146
192
name : Test Workspace | << parameters.workspace >>
147
193
working_directory : << parameters.workspace >>
148
194
command : |
149
- . install/setup.sh
195
+ TEST_FAILURES=$(
196
+ colcon list \
197
+ --names-only \
198
+ --packages-select-test-failures \
199
+ | xargs)
200
+ echo TEST_FAILURES: $TEST_FAILURES
201
+
202
+ TEST_INVALID=$(
203
+ colcon list \
204
+ --names-only \
205
+ --packages-select-cache-invalid \
206
+ --packages-select-cache-key test \
207
+ | xargs)
208
+ echo TEST_INVALID: $TEST_INVALID
209
+
210
+ TEST_PACKAGES=""
211
+ if [ -n "$TEST_FAILURES" ] || \
212
+ [ -n "$TEST_INVALID" ]
213
+ then
214
+ TEST_PACKAGES=$(
215
+ colcon list \
216
+ --names-only \
217
+ --packages-above \
218
+ $TEST_FAILURES \
219
+ $TEST_INVALID)
220
+ fi
221
+ if ( ! << parameters.cache_test >> )
222
+ then
223
+ TEST_PACKAGES=$(
224
+ colcon list \
225
+ --names-only)
226
+ fi
150
227
TEST_PACKAGES=$(
151
- colcon list --names-only | \
152
- circleci tests split \
153
- --split-by=timings \
154
- --timings-type=classname \
155
- --show-counts | \
156
- xargs)
228
+ echo $TEST_PACKAGES \
229
+ | circleci tests split \
230
+ --split-by=timings \
231
+ --timings-type=classname \
232
+ --show-counts \
233
+ | xargs)
234
+ echo TEST_PACKAGES: $TEST_PACKAGES
235
+
236
+ . install/setup.sh
157
237
set -o xtrace
158
238
colcon test \
159
- --packages-select ${TEST_PACKAGES} \
160
- --retest-until-pass ${RETEST_UNTIL_PASS} \
161
- --ctest-args --test-regex "test_.*"
239
+ --packages-select ${TEST_PACKAGES}
162
240
colcon test-result \
163
241
--verbose
242
+ - when :
243
+ condition : << parameters.cache_test >>
244
+ steps :
245
+ - save_to_cache :
246
+ key : << parameters.key >>
247
+ path : << parameters.workspace >>
248
+ workspace : << parameters.workspace >>
249
+ when : always
164
250
- run :
165
251
name : Copy Test Logs
166
252
working_directory : << parameters.workspace >>
@@ -211,16 +297,16 @@ _steps:
211
297
run :
212
298
name : Pre Checkout
213
299
command : |
214
- mkdir -p $ROS_WS && cd $ROS_WS
300
+ mkdir -p $ROS_WS/src && cd $ROS_WS
215
301
ln -s /opt/ros/$ROS_DISTRO install
216
302
echo $CACHE_NONCE | \
217
- (echo cache_nonce && cat) >> checksum .txt
218
- sha256sum $PWD/checksum .txt >> checksum .txt
303
+ (echo cache_nonce && cat) >> lockfile .txt
304
+ sha256sum $PWD/lockfile .txt >> lockfile .txt
219
305
TZ=utc stat -c '%y' /ros_entrypoint.sh | \
220
- (echo ros_entrypoint && cat) >> checksum.txt
221
- sha256sum $PWD/checksum.txt >> checksum.txt
222
- rm -rf $OVERLAY_WS/*
306
+ (echo ros_entrypoint && cat) >> lockfile.txt
307
+ sha256sum $PWD/lockfile.txt >> lockfile.txt
223
308
mv ~/.ccache $CCACHE_DIR
309
+ rm -rf $OVERLAY_WS/src
224
310
on_checkout : &on_checkout
225
311
checkout :
226
312
path : src/navigation2
@@ -233,11 +319,9 @@ _steps:
233
319
$OVERLAY_WS/src/navigation2/tools/underlay.repos \
234
320
$UNDERLAY_WS/underlay.repos >/dev/null 2>&1
235
321
then
236
- echo "Cleaning Underlay"
237
- rm -rf $UNDERLAY_WS/*
322
+ echo "Importing Underlay"
238
323
cp $OVERLAY_WS/src/navigation2/tools/underlay.repos \
239
324
$UNDERLAY_WS/underlay.repos
240
- mkdir -p $UNDERLAY_WS/src
241
325
vcs import $UNDERLAY_WS/src \
242
326
< $UNDERLAY_WS/underlay.repos
243
327
fi
@@ -292,7 +376,9 @@ _steps:
292
376
when : always
293
377
test_overlay_workspace : &test_overlay_workspace
294
378
test_workspace :
379
+ key : overlay_ws
295
380
workspace : /opt/overlay_ws
381
+ cache_test : << parameters.cache_test >>
296
382
collect_overlay_coverage : &collect_overlay_coverage
297
383
run :
298
384
name : Collect Code Coverage
@@ -360,6 +446,9 @@ commands:
360
446
- *restore_overlay_workspace
361
447
test_build :
362
448
description : " Test Build"
449
+ parameters :
450
+ cache_test :
451
+ type : boolean
363
452
steps :
364
453
- *test_overlay_workspace
365
454
report_coverage :
@@ -378,14 +467,14 @@ _environments:
378
467
ROS_WS : " /opt/ros_ws"
379
468
UNDERLAY_WS : " /opt/underlay_ws"
380
469
OVERLAY_WS : " /opt/overlay_ws"
470
+ UNDERLAY_MIXINS : " release ccache"
381
471
CCACHE_DIR : " /tmp/.ccache"
382
472
CCACHE_LOGFILE : " /tmp/ccache.log"
383
473
CCACHE_MAXSIZE : " 200M"
384
474
MAKEFLAGS : " -j 2 -l 2 "
385
475
COLCON_DEFAULTS_FILE : " /tmp/defaults.yaml"
386
476
RCUTILS_LOGGING_BUFFERED_STREAM : " 0"
387
477
RCUTILS_LOGGING_USE_STDOUT : " 0"
388
- RETEST_UNTIL_PASS : " 2"
389
478
DEBIAN_FRONTEND : " noninteractive"
390
479
391
480
executors :
@@ -397,7 +486,6 @@ executors:
397
486
<< : *common_environment
398
487
CACHE_NONCE : " Debug"
399
488
OVERLAY_MIXINS : " debug ccache coverage-gcc"
400
- UNDERLAY_MIXINS : " release ccache"
401
489
release_exec :
402
490
docker :
403
491
- image : rosplanning/navigation2:main.release
@@ -406,11 +494,13 @@ executors:
406
494
<< : *common_environment
407
495
CACHE_NONCE : " Release"
408
496
OVERLAY_MIXINS : " release ccache"
409
- UNDERLAY_MIXINS : " release ccache"
410
497
411
498
_jobs :
412
499
job_test : &job_test
413
500
parameters :
501
+ cache_test :
502
+ type : boolean
503
+ default : false
414
504
rmw :
415
505
default : " rmw_cyclonedds_cpp"
416
506
type : string
@@ -433,14 +523,16 @@ jobs:
433
523
executor : debug_exec
434
524
steps :
435
525
- restore_build
436
- - test_build
526
+ - test_build :
527
+ cache_test : << parameters.cache_test >>
437
528
- report_coverage
438
529
release_test :
439
530
<< : *job_test
440
531
executor : release_exec
441
532
steps :
442
533
- restore_build
443
- - test_build
534
+ - test_build :
535
+ cache_test : << parameters.cache_test >>
444
536
rebuild_dockerhub :
445
537
executor : release_exec
446
538
steps :
@@ -454,10 +546,12 @@ workflows:
454
546
- debug_test :
455
547
requires :
456
548
- debug_build
549
+ cache_test : true
457
550
- release_build
458
551
- release_test :
459
552
requires :
460
553
- release_build
554
+ cache_test : true
461
555
nightly :
462
556
jobs :
463
557
- debug_build
0 commit comments