ci: disable bluetooth testing (consistently flaky)
What changed, and why it matters
This commit only changes internal continuous-integration (CI) scripts. It disables flaky Bluetooth tests by passing a --skipble flag and makes minor shell-script cleanups. There is no change to the actual Jade firmware, wallet application, or any code that end users run.
No security action required. This is a CI/test-configuration change. If desired, verify that disabling Bluetooth CI coverage does not mask regressions in the Bluetooth OTA path through other test stages.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff modifies three CI helper scripts. ci_flash.sh now hardcodes BUILD_DIR=build, accepts a second argument via SKIP_ARGS, and appends –skipble when bt-agent is unavailable or passed explicitly. gitlab/flash.yml now invokes ci_flash.sh with –skipble for esp32 and esp32s3 jobs. ota_delta_ci.sh only changes its shebang from #!/bin/bash to #!/usr/bin/env bash. No firmware, cryptographic, or user-facing code is touched.
Changed components
ci_flash.shgitlab/flash.ymlota_delta_ci.shInspect captured patch +11 / −11
diff --git a/ci_flash.sh b/ci_flash.sh
index 2950944..754f006 100755
--- a/ci_flash.sh
+++ b/ci_flash.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
set -eo pipefail
if [[ -z ${JADESERIALPORT} ]]; then
@@ -14,7 +14,8 @@ if [[ -z ${JADESERIALPORT} ]]; then
fi
TARGET_CHIP=${1:-esp32}
-BUILD_DIR=${2:-build}
+BUILD_DIR=build
+SKIP_ARGS=$2
if [ "$TARGET_CHIP" = "esp32" ]; then
python ${IDF_PATH}/components/esptool_py/esptool/esptool.py --chip ${TARGET_CHIP} --port ${JADESERIALPORT} --baud 2000000 --before default_reset erase_flash
@@ -72,18 +73,17 @@ fi
pip install --require-hashes -r requirements.txt
# NOTE: tools/fwprep.py should have run in the build step and produced the compressed firmware file
-SKIP_ARGS=""
if [ ! -x /usr/bin/bt-agent ]; then
echo "bt-agent not available, skipping bluetooth OTA"
- SKIP_ARGS=" --skipble"
+ SKIP_ARGS="--skipble"
fi
FW_FULL=$(ls ${BUILD_DIR}/*_fw.bin)
-python jade_ota.py --push-mnemonic --log=INFO --serialport=${JADESERIALPORT} --fwfile=${FW_FULL}${SKIP_ARGS}
+python jade_ota.py --push-mnemonic --log=INFO --serialport=${JADESERIALPORT} --fwfile=${FW_FULL} ${SKIP_ARGS}
sleep 5
python -c "from jadepy import JadeAPI; jade = JadeAPI.create_serial(device=\"${JADESERIALPORT}\", timeout=5) ; jade.connect(); jade.drain(); jade.disconnect()"
-python test_jade.py --log=INFO --serialport=${JADESERIALPORT}${SKIP_ARGS}
+python test_jade.py --log=INFO --serialport=${JADESERIALPORT} ${SKIP_ARGS}
# check if gcov is enabled and run collection tool
if fgrep -qs "CONFIG_APPTRACE_GCOV_ENABLE=y" ${BUILD_DIR}/sdkconfig sdkconfig; then
diff --git a/gitlab/flash.yml b/gitlab/flash.yml
index a371c0c..eb93672 100644
--- a/gitlab/flash.yml
+++ b/gitlab/flash.yml
@@ -39,9 +39,9 @@ flash_qemu_psram_unamalgamated:
script:
- mv $(echo $CI_JOB_NAME | sed "s/^${CI_JOB_STAGE}/build_test/") build
- cp -a build/sdkconfig ./
- - ./ci_flash.sh esp32
+ - ./ci_flash.sh esp32 --skipble
# FIXME: re-enable once gitlab is known to properly kill processes
- #- ./tools/flock.sh $JADESERIALPORT ./ci_flash.sh esp32
+ #- ./tools/flock.sh $JADESERIALPORT ./ci_flash.sh esp32 --skipble
# FIXME: Remove gcov from ./ci_flash.sh and then skip submodules here
# FIXME: Fix v1.0 flashing
allow_failure: true
@@ -118,9 +118,9 @@ flash_jade_ota_delta_v1_1_ci:
- . $HOME/esp/esp-idf-5.4/export.sh
- mv $(echo $CI_JOB_NAME | sed "s/^${CI_JOB_STAGE}/build_test/") build
- cp build/sdkconfig ./
- - ./ci_flash.sh esp32s3
+ - ./ci_flash.sh esp32s3 --skipble
# FIXME: re-enable once gitlab is known to properly kill processes
- #- ./tools/flock.sh $JADESERIALPORT ./ci_flash.sh esp32s3
+ #- ./tools/flock.sh $JADESERIALPORT ./ci_flash.sh esp32s3 --skipble
flash_jade_v2_ci:
extends: .flash_jade_v2_template
diff --git a/ota_delta_ci.sh b/ota_delta_ci.sh
index 9198e43..93e580f 100755
--- a/ota_delta_ci.sh
+++ b/ota_delta_ci.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
set -eo pipefail
if [[ -z ${JADESERIALPORT} ]]; then
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.