From 69a2fd2d2d52595eb90b532c6f874af583d81063 Mon Sep 17 00:00:00 2001 From: "Dr. Michael Lauer" Date: Fri, 16 Oct 2026 14:34:04 +0200 Subject: [PATCH 1/2] build: support ESP32-S31 and servers without broadcaster role --- .github/tests/server-build/.gitignore | 5 +++ .github/tests/server-build/CMakeLists.txt | 6 +++ .../tests/server-build/main/CMakeLists.txt | 1 + .github/tests/server-build/main/main.cpp | 9 +++++ .github/tests/server-build/sdkconfig.defaults | 7 ++++ .../server-build/sdkconfig.no-broadcaster | 1 + .github/workflows/s31-build.yml | 39 +++++++++++++++++++ CMakeLists.txt | 1 + src/NimBLEServer.cpp | 6 ++- 9 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 .github/tests/server-build/.gitignore create mode 100644 .github/tests/server-build/CMakeLists.txt create mode 100644 .github/tests/server-build/main/CMakeLists.txt create mode 100644 .github/tests/server-build/main/main.cpp create mode 100644 .github/tests/server-build/sdkconfig.defaults create mode 100644 .github/tests/server-build/sdkconfig.no-broadcaster create mode 100644 .github/workflows/s31-build.yml diff --git a/.github/tests/server-build/.gitignore b/.github/tests/server-build/.gitignore new file mode 100644 index 00000000..6006c87e --- /dev/null +++ b/.github/tests/server-build/.gitignore @@ -0,0 +1,5 @@ +build*/ +sdkconfig +sdkconfig.old +managed_components/ +dependencies.lock diff --git a/.github/tests/server-build/CMakeLists.txt b/.github/tests/server-build/CMakeLists.txt new file mode 100644 index 00000000..d29bd3ba --- /dev/null +++ b/.github/tests/server-build/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.16) +get_filename_component(NIMBLE_CPP_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE) +set(EXTRA_COMPONENT_DIRS "${NIMBLE_CPP_ROOT}") +set(COMPONENTS main) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(nimble_server_build) diff --git a/.github/tests/server-build/main/CMakeLists.txt b/.github/tests/server-build/main/CMakeLists.txt new file mode 100644 index 00000000..d13d789e --- /dev/null +++ b/.github/tests/server-build/main/CMakeLists.txt @@ -0,0 +1 @@ +idf_component_register(SRCS "main.cpp" REQUIRES esp-nimble-cpp) diff --git a/.github/tests/server-build/main/main.cpp b/.github/tests/server-build/main/main.cpp new file mode 100644 index 00000000..44b6fb17 --- /dev/null +++ b/.github/tests/server-build/main/main.cpp @@ -0,0 +1,9 @@ +#include "NimBLEDevice.h" + +// Compile/link probe: exercise the server even when advertising is disabled. +extern "C" void app_main() { + NimBLEDevice::init("server-build-probe"); + auto* server = NimBLEDevice::createServer(); + server->advertiseOnDisconnect(false); + server->createService("180f"); +} diff --git a/.github/tests/server-build/sdkconfig.defaults b/.github/tests/server-build/sdkconfig.defaults new file mode 100644 index 00000000..f04f0215 --- /dev/null +++ b/.github/tests/server-build/sdkconfig.defaults @@ -0,0 +1,7 @@ +CONFIG_BT_ENABLED=y +CONFIG_BT_NIMBLE_ENABLED=y +CONFIG_BT_NIMBLE_ROLE_CENTRAL=n +CONFIG_BT_NIMBLE_ROLE_OBSERVER=n +CONFIG_BT_NIMBLE_ROLE_PERIPHERAL=y +CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y +CONFIG_COMPILER_OPTIMIZATION_PERF=y diff --git a/.github/tests/server-build/sdkconfig.no-broadcaster b/.github/tests/server-build/sdkconfig.no-broadcaster new file mode 100644 index 00000000..b3dceb69 --- /dev/null +++ b/.github/tests/server-build/sdkconfig.no-broadcaster @@ -0,0 +1 @@ +CONFIG_BT_NIMBLE_ROLE_BROADCASTER=n diff --git a/.github/workflows/s31-build.yml b/.github/workflows/s31-build.yml new file mode 100644 index 00000000..ab33bb61 --- /dev/null +++ b/.github/workflows/s31-build.yml @@ -0,0 +1,39 @@ +name: S31 and server role builds + +on: + workflow_dispatch: + pull_request: + push: + branches: [master] + +jobs: + server-build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + target: [esp32s3, esp32s31] + broadcaster: [enabled, disabled] + # ESP-IDF v6.1; S31 still requires --preview. Stable 5.x jobs stay unchanged. + container: espressif/idf@sha256:81893c71bb5e570088901f21def8684c25cd2a9020281bd01b843a7655edb18c + steps: + - uses: actions/checkout@v5 + with: + path: esp-nimble-cpp + - name: Build server role probe + env: + IDF_TARGET: ${{ matrix.target }} + BROADCASTER: ${{ matrix.broadcaster }} + shell: bash + run: | + . "${IDF_PATH}/export.sh" + cd esp-nimble-cpp/.github/tests/server-build + defaults="sdkconfig.defaults" + if [ "$BROADCASTER" = disabled ]; then defaults="$defaults;sdkconfig.no-broadcaster"; fi + idf.py --preview -D "SDKCONFIG_DEFAULTS=$defaults" build + python - "$BROADCASTER" <<'PYTHON' + import sys + from pathlib import Path + enabled = "CONFIG_BT_NIMBLE_ROLE_BROADCASTER=y" in Path("sdkconfig").read_text().splitlines() + assert enabled == (sys.argv[1] == "enabled"), "role override was not applied" + PYTHON diff --git a/CMakeLists.txt b/CMakeLists.txt index f3bff50c..f5d73069 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,7 @@ idf_component_register( REQUIRED_IDF_TARGETS "esp32" "esp32s3" + "esp32s31" "esp32c2" "esp32c3" "esp32c5" diff --git a/src/NimBLEServer.cpp b/src/NimBLEServer.cpp index 660a0313..0e39a5d8 100644 --- a/src/NimBLEServer.cpp +++ b/src/NimBLEServer.cpp @@ -55,7 +55,7 @@ NimBLEServer::NimBLEServer() m_svcChanged{false}, m_deleteCallbacks{false}, m_registerAppServicesFirst{false}, -# if !MYNEWT_VAL(BLE_EXT_ADV) +# if !MYNEWT_VAL(BLE_EXT_ADV) && MYNEWT_VAL(BLE_ROLE_BROADCASTER) m_advertiseOnDisconnect{false}, # endif m_pServerCallbacks{&defaultCallbacks}, @@ -363,7 +363,11 @@ bool NimBLEServer::disconnect(const NimBLEConnInfo& connInfo, uint8_t reason) co * @param [in] enable true == advertise, false == don't advertise. */ void NimBLEServer::advertiseOnDisconnect(bool enable) { +# if MYNEWT_VAL(BLE_ROLE_BROADCASTER) m_advertiseOnDisconnect = enable; +# else + (void)enable; +# endif } // advertiseOnDisconnect # endif From 330ec2495dd2a3b79132b1578f07de989153b316 Mon Sep 17 00:00:00 2001 From: "Dr. Michael Lauer" Date: Fri, 16 Oct 2026 14:50:37 +0200 Subject: [PATCH 2/2] ci: restrict build workflow credentials to read access --- .github/workflows/s31-build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/s31-build.yml b/.github/workflows/s31-build.yml index ab33bb61..95d0ae7a 100644 --- a/.github/workflows/s31-build.yml +++ b/.github/workflows/s31-build.yml @@ -6,6 +6,9 @@ on: push: branches: [master] +permissions: + contents: read + jobs: server-build: runs-on: ubuntu-latest @@ -19,6 +22,7 @@ jobs: steps: - uses: actions/checkout@v5 with: + persist-credentials: false path: esp-nimble-cpp - name: Build server role probe env: