From e3335c8fe99a808ad35f3a7898c31714a8d68b0d Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Thu, 20 Aug 2026 23:37:10 +0200 Subject: [PATCH 1/9] chore: prepare Timing 2.2.3 dependency metadata (#5) --- library.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library.json b/library.json index a09f141..dcce8f9 100644 --- a/library.json +++ b/library.json @@ -16,14 +16,14 @@ "type": "git", "url": "https://github.com/Flowduino/ESPressio-Timing.git" }, - "version": "2.2.2", + "version": "2.2.3", "license": "Apache-2.0", "frameworks": "arduino", "platforms": "*", "dependencies": [ { "name": "Flowduino ESPressio-Units", - "version": ">=0.2.1 <1.0.0", + "version": ">=0.2.2 <1.0.0", "url": "https://github.com/Flowduino/ESPressio-Units.git", "platforms": "*" }, From 88485d8828eda9181cc163d13d4e2e48309d7ce1 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Thu, 20 Aug 2026 23:37:23 +0200 Subject: [PATCH 2/9] chore: prepare Timing 2.2.3 Arduino metadata (#5) --- library.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library.properties b/library.properties index 0f36c96..3dfacd4 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Flowduino ESPressio-Timing -version=2.2.2 +version=2.2.3 author=Simon J. Stuart maintainer=Flowduino.com sentence=Generic high-resolution clocks with synchronization, discipline, and Observer notifications @@ -8,4 +8,4 @@ category=Timing url=https://github.com/Flowduino/ESPressio-Timing architectures=* includes=ESPressio_Timing.hpp -depends=Flowduino ESPressio-Units (>=0.2.1 && <1.0.0),ESPressio-Observable (>=3.0.1 && <4.0.0) +depends=Flowduino ESPressio-Units (>=0.2.2 && <1.0.0),ESPressio-Observable (>=3.0.1 && <4.0.0) From efcfa8aa04ad71d8f64f5d2204e72ea2906c6efa Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Thu, 20 Aug 2026 23:37:49 +0200 Subject: [PATCH 3/9] docs: record Timing 2.2.3 dependency refresh (#5) --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1a5113..19ee0eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## 2.2.3 — 2026-08-20 + +### Changed +- Raised the required ESPressio Units baseline from 0.2.1 to 0.2.2 following the Serializable 0.10.1 dependency refresh. +- Preserved the ESPressio Observable baseline at `>=3.0.1 <4.0.0`. +- Preserved Timing's architecture in which Serializable time representations are supplied through opt-in Serializable Unit types rather than a direct Timing -> Serializable dependency. +- Updated package metadata and current dependency documentation for Timing 2.2.3. + +### Compatibility +- No Timing public API or runtime behaviour changes are introduced by this dependency-maintenance release. + ## 2.2.2 — 2026-08-20 ### Changed From af1d5e47f39ecece632cb753874447d9bb3657a7 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Thu, 20 Aug 2026 23:38:00 +0200 Subject: [PATCH 4/9] docs: refresh Timing dependency chart for 2.2.3 (#5) --- ESPRESSIO_DEPENDENCY_CHART.md | 384 +++++----------------------------- 1 file changed, 48 insertions(+), 336 deletions(-) diff --git a/ESPRESSIO_DEPENDENCY_CHART.md b/ESPRESSIO_DEPENDENCY_CHART.md index 923cded..a5401c2 100644 --- a/ESPRESSIO_DEPENDENCY_CHART.md +++ b/ESPRESSIO_DEPENDENCY_CHART.md @@ -2,362 +2,74 @@ ![ESPressio Library Dependency Chart](ESPRESSIO_DEPENDENCY_CHART.png) -## Purpose +## ESPressio Timing 2.2.3 -This document describes the dependency relationships between the current ESPressio libraries. - -The chart is hierarchical: libraries with no **required** ESPressio dependencies are positioned at the top, while libraries that build on progressively more of the ESPressio ecosystem appear lower in the hierarchy. - -### Relationship notation - -- **Solid arrow** — a required ESPressio library dependency. -- **Dashed arrow** — an opt-in relationship. The dependency is required only when the consuming application selects the associated feature, integration, type, or header. -- Arrows point from the **dependent library** to the **library it consumes**. - -This distinction is important to the ESPressio architecture. Optional integrations are intentionally kept out of the normal/core include path wherever possible so that a project does not acquire unrelated ESPressio dependencies simply by consuming a library. - ---- - -## ESPressio Units 0.2.0 - -**Required ESPressio dependencies: none.** - -ESPressio Units is a foundational library providing strongly typed physical quantities and unit representations. Its ordinary Unit types are deliberately independent of the rest of the ESPressio ecosystem. - -### ESPressio Units → ESPressio Serializable — opt-in - -The ordinary Unit headers do **not** require ESPressio Serializable. - -Serializable counterparts are supplied through separate `*_Serializable.hpp` sibling headers, together with the `ESPressio_SerializableUnits.hpp` batch header. - -The relationship therefore exists only when an application explicitly selects a Serializable Unit type. - -This preserves both use cases: - -```text -ordinary Unit type - -> ESPressio Units only - -Serializable Unit type - -> ESPressio Units - -> ESPressio Serializable -``` - ---- - -## ESPressio Observable >= 3.0.0 - -**Required ESPressio dependencies: none represented in this chart.** - -ESPressio Observable is a foundational synchronous observation/notification mechanism. - -It is consumed by higher-level libraries when lifecycle or state changes need to be observable without forcing those notifications through the asynchronous ESPressio Event system. - -In the current dependency hierarchy it is directly consumed by: - -- ESPressio Timing; -- ESPressio Threads; -- ESPressio Event. - ---- - -## ESPressio Serializable 0.9.0 - -**Required ESPressio dependencies: none represented in this chart.** - -ESPressio Serializable is the foundational serialization framework. - -It remains intentionally optional for libraries that can operate entirely with non-Serializable types. - -Current opt-in relationships shown in the chart are: - -- ESPressio Units → Serializable, when Serializable Unit variants are selected; -- ESPressio Event → Serializable, when Serializable Events or Event Transport are used. - -ESPressio Timing can operate with Serializable Unit time representations because its clock types are generic, but Timing itself does not directly depend upon ESPressio Serializable. The Serializable relationship is provided by the selected ESPressio Units time type. - ---- - -## ESPressio Sockets 0.2.0 - -**Required ESPressio dependencies: none.** - -The core ESPressio Sockets library deliberately has no mandatory dependency on another ESPressio library. - -It provides socket/network infrastructure and then exposes integrations through opt-in headers. - -### ESPressio Sockets → ESPressio Event — opt-in - -Socket Event Transport adapters implement the ESPressio Event transport abstraction. - -This relationship is activated only when an Event Transport header is used, for example the UDP, TCP, TLS, WebSocket, or MQTT Event Transport adapters. - -A project using only the core socket facilities does not require ESPressio Event. - -Because Event Transport operates on Serializable Events, the relevant Event/Serializable requirements are then inherited through that selected integration rather than imposed by the Sockets core. - -### ESPressio Sockets → ESPressio Timing — opt-in - -Version 0.2.0 adds socket-based System Clock synchronization implementations. - -The Timing relationship is activated only when the clock-synchronization headers are selected. - -These implementations provide network mechanisms such as: - -- UDP request/response synchronization; -- UDP broadcast/multicast synchronization; -- TCP synchronization; -- WebSocket synchronization; -- SNTP reference acquisition. - -ESPressio Timing continues to own clock discipline, synchronization calculations, System Clock state, and Observer notifications. ESPressio Sockets only supplies the network-side synchronization mechanism. - ---- - -## ESPressio Timing 2.2.0 - -**Required ESPressio dependencies:** - -- ESPressio Units >= 0.2.0; -- ESPressio Observable >= 3.0.0. - -### ESPressio Timing → ESPressio Units — required - -Timing uses ESPressio Units for its strongly typed time representations. - -Timing 2.x is generic over the selected time representation, allowing the implementing application to use ordinary Unit time types, Serializable Unit variants, or another compatible representation. - -This is why Timing itself does not need a direct Serializable dependency. - -### ESPressio Timing → ESPressio Observable — required - -Timing exposes logical clock and synchronization lifecycle notifications through ESPressio Observable. - -This includes particularly important System Clock synchronization notifications, allowing observers to inspect relevant synchronization state and values such as the before/after clock difference. - -The synchronous Observer layer also provides the source notifications consumed by the optional Timing Event Bridge implemented in ESPressio Event. - ---- - -## ESPressio Threads 3.1.0 - -**Required ESPressio dependencies:** - -- ESPressio Timing >= 2.0.0; -- ESPressio Observable >= 3.0.0. - -### ESPressio Threads → ESPressio Timing — required - -Threads uses Timing for its time-related execution and scheduling infrastructure. - -This establishes Timing—and therefore Timing's own required Units and Observable relationships—beneath Threads in the hierarchy. - -### ESPressio Threads → ESPressio Observable — required - -Threads uses Observable for synchronous infrastructure notifications. - -This includes notifications associated with singleton/infrastructure behavior such as Garbage Collection and other logical lifecycle operations where observers need to react directly. - -These Observer notifications deliberately exist independently of ESPressio Event. - -ESPressio Event can optionally bridge them into asynchronous Events, but Threads itself does not require Event. - ---- - -## ESPressio ESP-Now 0.2.0 - -**Required ESPressio dependencies:** - -- ESPressio Timing >= 2.1.0. - -### ESPressio ESP-Now → ESPressio Timing — required - -The library provides ESP-NOW-based distributed System Clock synchronization. - -ESPressio ESP-Now gathers the transport-specific timing measurements and submits completed synchronization samples into ESPressio Timing. - -Timing remains responsible for the actual clock synchronization and discipline. - -### ESPressio ESP-Now → ESPressio Event — opt-in - -`ESPNowEventTransport` provides an ESP-NOW implementation of the ESPressio Event transport abstraction. - -The Event dependency is deliberately opt-in. - -Applications using ESPressio ESP-Now only for ESP-NOW communication and/or System Clock synchronization do not need ESPressio Event. - -When `ESPNowEventTransport` is selected, the application also acquires the Serializable requirements associated with ESPressio Event Transport. - ---- - -## ESPressio Event 5.4.0 - -**Required ESPressio dependencies:** - -- ESPressio Threads >= 3.1.0; -- ESPressio Observable >= 3.0.0; -- ESPressio Timing >= 2.2.0. - -Event currently sits at the deepest point in the core ESPressio dependency hierarchy represented here. - -### ESPressio Event → ESPressio Threads — required - -Event uses ESPressio Threads for its asynchronous Event processing/execution infrastructure. - -Because Threads itself requires Timing and Observable, those relationships also exist transitively beneath Event. - -### ESPressio Event → ESPressio Observable — required - -Observable is used directly by Event and by the Observer/Event bridge architecture. - -This direct dependency allows ESPressio Event to convert synchronous Observer notifications from other ESPressio subsystems into asynchronous Event dispatches without requiring those source libraries to depend upon Event. - -### ESPressio Event → ESPressio Timing — required - -Timing is a direct Event dependency because the optional System Clock Event Bridge compiles against Timing's public Observer API. - -The bridge subscribes to Timing Observer notifications and emits corresponding asynchronous Timing Event types. - -The same architectural pattern is used for the Threads infrastructure Event Bridges. - -Importantly, the dependency direction remains: - -```text -ESPressio Event - -> ESPressio Timing / Threads - -not - -ESPressio Timing / Threads - -> ESPressio Event -``` - -This prevents foundational/runtime libraries from acquiring an Event dependency merely to make asynchronous bridging possible. - -### ESPressio Event → ESPressio Serializable — opt-in - -Ordinary Event usage does not require ESPressio Serializable. - -Serializable Event support and Event Transport are explicitly opt-in. - -When those facilities are selected, Serializable provides the representation required to encode an Event for transport beyond the local Event dispatcher. - -This preserves the lightweight local-only case: +Timing has two required ESPressio dependencies: ```text -ordinary local Event - -> no Serializable requirement +ESPressio Timing 2.2.3 + -> ESPressio Units >= 0.2.2 < 1.0.0 + -> ESPressio Observable >= 3.0.1 < 4.0.0 ``` -while supporting: +Timing deliberately has **no direct ESPressio Serializable dependency**. +Applications may choose Serializable time representations through the opt-in +Serializable Unit types supplied by Units 0.2.2: ```text -Serializable / remotely transported Event - -> ESPressio Serializable +Timing + -> Units + - - -> Serializable >= 0.10.1 < 1.0.0 ``` ---- - -## Dependency hierarchy summary +This keeps the dependency cascade one-way and avoids making serialization part +of the Timing core. -The required-dependency hierarchy can be summarized as: +## Current coordinated ecosystem ```text -FOUNDATIONAL -├── ESPressio Units -├── ESPressio Observable -├── ESPressio Serializable -└── ESPressio Sockets - | - | optional integrations only - v - -RUNTIME -└── ESPressio Timing - ├── Units - └── Observable - -EXECUTION / COMMUNICATION -├── ESPressio Threads -│ ├── Timing -│ └── Observable -│ -└── ESPressio ESP-Now - └── Timing - -EVENT INFRASTRUCTURE -└── ESPressio Event - ├── Threads - ├── Timing - └── Observable +Observable 3.0.1 +Serializable 0.10.1 +Units 0.2.2 + | + v +Timing 2.2.3 + | + +--> Threads 3.1.3 + | + +--> ESP-Now 0.5.1 + | + - - -> Event 5.8.1 (Event transport integration) + +Threads 3.1.3 + | + v +Event 5.8.1 + +Serial 0.5.1 remains a downstream opt-in diagnostics/operator layer. ``` -The opt-in cross-cutting relationships are: - -```text -Units - - - -> Serializable - Serializable Unit variants +Security 0.2.0, Command 0.3.0 and Sockets 0.5.0 remain separate branches of +the integration graph except where their explicit opt-in adapters are selected. -Event - - - -> Serializable - Serializable Events / Event Transport - -ESP-Now - - - -> Event - ESP-NOW Event Transport - -Sockets - - - -> Event - socket Event Transports - -Sockets - - - -> Timing - socket/SNTP clock synchronization -``` +## Dependency-direction rule ---- +A dependency should cascade downstream. An upstream/foundational library should +not depend back on a downstream implementation merely to host integration code. -## Architectural principle - -The dependency graph follows a general ESPressio design rule: - -> A foundational library should expose the synchronous or transport-neutral abstraction it owns; higher-level integration libraries should opt into that abstraction rather than forcing the foundational library to depend upward. - -Examples include: +The known Event/ESP-Now reciprocal optional relationship is therefore considered +an architectural exception to resolve: ```text -Timing - exposes Observer notifications - -Event - optionally bridges those notifications into Events -``` - -```text -Timing - exposes transport-neutral clock synchronization +ESP-Now - - -> Event + ESPNowEventTransport -ESP-Now / Sockets - provide concrete synchronization transports +Event - - -> ESP-Now + ESPNowTransportEventBridge ``` -```text -Event - exposes transport-neutral Event Transport - -ESP-Now / Sockets - provide concrete Event transports -``` - -and: - -```text -Units - provides ordinary Unit types - -Units + Serializable - optionally provides Serializable Unit variants -``` +The preferred resolution is to keep Event upstream and transport-neutral and +move the ESP-Now-specific Observer-to-Event bridge downstream into ESP-Now's +Event integration (or a dedicated downstream integration package). -This keeps the individual libraries independently useful while allowing progressively richer ESPressio compositions without imposing unnecessary dependencies on applications that do not use those integrations. +No new reciprocal dependency should be introduced. From fc8784d21d4b54ade409cb39dfeef480e817a902 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Thu, 20 Aug 2026 23:47:20 +0200 Subject: [PATCH 5/9] ci: refresh Timing 2.2.3 README on feature branch (#5) --- .github/workflows/readme-refresh.yml | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 .github/workflows/readme-refresh.yml diff --git a/.github/workflows/readme-refresh.yml b/.github/workflows/readme-refresh.yml new file mode 100644 index 0000000..4c8bc86 --- /dev/null +++ b/.github/workflows/readme-refresh.yml @@ -0,0 +1,42 @@ +name: Refresh dependency README + +on: + push: + branches: + - feature/5-units-0.2.2-dependency-refresh + +permissions: + contents: write + +jobs: + refresh: + if: github.actor != 'github-actions[bot]' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: feature/5-units-0.2.2-dependency-refresh + - name: Refresh current-version documentation + shell: python + run: | + from pathlib import Path + path = Path('README.md') + text = path.read_text() + replacements = { + 'The latest stable version is **2.2.2**.': 'The current version is **2.2.3**.', + '- **ESPressio Units >= 0.2.1 < 1.0.0**': '- **ESPressio Units >= 0.2.2 < 1.0.0**', + 'Version 2.2.2 is a dependency-maintenance release. It retains the Timing 2.2.1 public API and behaviour while updating the active ESPressio dependency baselines to the latest validated patch releases within their current major release lines.': 'Version 2.2.3 is a dependency-maintenance release. It retains the Timing 2.2.x public API and behaviour while updating the required ESPressio Units baseline to 0.2.2, which in turn carries the optional Serializable 0.10.1 integration. Timing itself remains independent of ESPressio Serializable.', + } + for old, new in replacements.items(): + if old not in text: + raise SystemExit(f'missing expected README text: {old}') + text = text.replace(old, new, 1) + path.write_text(text) + - name: Commit README + run: | + if git diff --quiet -- README.md; then exit 0; fi + git config user.name 'github-actions[bot]' + git config user.email '41898282+github-actions[bot]@users.noreply.github.com' + git add -- README.md + git commit -m 'docs: refresh Timing 2.2.3 README (#5)' + git push origin HEAD:feature/5-units-0.2.2-dependency-refresh From b55841d3f33f3155a98a434fe16880c455e569d9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 20 Aug 2026 21:47:29 +0000 Subject: [PATCH 6/9] docs: refresh Timing 2.2.3 README (#5) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fbc0460..3aa1d31 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,14 @@ High-resolution system, stopwatch, and RTC clock abstractions with a generic pub ## Latest Stable Version -The latest stable version is **2.2.2**. +The current version is **2.2.3**. ### Current ESPressio dependencies -- **ESPressio Units >= 0.2.1 < 1.0.0** +- **ESPressio Units >= 0.2.2 < 1.0.0** - **ESPressio Observable >= 3.0.1 < 4.0.0** -Version 2.2.2 is a dependency-maintenance release. It retains the Timing 2.2.1 public API and behaviour while updating the active ESPressio dependency baselines to the latest validated patch releases within their current major release lines. +Version 2.2.3 is a dependency-maintenance release. It retains the Timing 2.2.x public API and behaviour while updating the required ESPressio Units baseline to 0.2.2, which in turn carries the optional Serializable 0.10.1 integration. Timing itself remains independent of ESPressio Serializable. ## Version 2.2.0 From 81c3ee576c9934868a8303fb304f36d8aa553080 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Thu, 20 Aug 2026 23:47:56 +0200 Subject: [PATCH 7/9] chore: remove temporary README refresh workflow (#5) --- .github/workflows/readme-refresh.yml | 42 ---------------------------- 1 file changed, 42 deletions(-) delete mode 100644 .github/workflows/readme-refresh.yml diff --git a/.github/workflows/readme-refresh.yml b/.github/workflows/readme-refresh.yml deleted file mode 100644 index 4c8bc86..0000000 --- a/.github/workflows/readme-refresh.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Refresh dependency README - -on: - push: - branches: - - feature/5-units-0.2.2-dependency-refresh - -permissions: - contents: write - -jobs: - refresh: - if: github.actor != 'github-actions[bot]' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - ref: feature/5-units-0.2.2-dependency-refresh - - name: Refresh current-version documentation - shell: python - run: | - from pathlib import Path - path = Path('README.md') - text = path.read_text() - replacements = { - 'The latest stable version is **2.2.2**.': 'The current version is **2.2.3**.', - '- **ESPressio Units >= 0.2.1 < 1.0.0**': '- **ESPressio Units >= 0.2.2 < 1.0.0**', - 'Version 2.2.2 is a dependency-maintenance release. It retains the Timing 2.2.1 public API and behaviour while updating the active ESPressio dependency baselines to the latest validated patch releases within their current major release lines.': 'Version 2.2.3 is a dependency-maintenance release. It retains the Timing 2.2.x public API and behaviour while updating the required ESPressio Units baseline to 0.2.2, which in turn carries the optional Serializable 0.10.1 integration. Timing itself remains independent of ESPressio Serializable.', - } - for old, new in replacements.items(): - if old not in text: - raise SystemExit(f'missing expected README text: {old}') - text = text.replace(old, new, 1) - path.write_text(text) - - name: Commit README - run: | - if git diff --quiet -- README.md; then exit 0; fi - git config user.name 'github-actions[bot]' - git config user.email '41898282+github-actions[bot]@users.noreply.github.com' - git add -- README.md - git commit -m 'docs: refresh Timing 2.2.3 README (#5)' - git push origin HEAD:feature/5-units-0.2.2-dependency-refresh From 584fd1d57ed104f1405b8cfc6b99136ea4f59162 Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 00:09:58 +0200 Subject: [PATCH 8/9] ci: validate Timing 2.2.3 dependency refresh (#5) --- .../workflows/dependency-refresh-tests.yml | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 .github/workflows/dependency-refresh-tests.yml diff --git a/.github/workflows/dependency-refresh-tests.yml b/.github/workflows/dependency-refresh-tests.yml new file mode 100644 index 0000000..feb0d92 --- /dev/null +++ b/.github/workflows/dependency-refresh-tests.yml @@ -0,0 +1,73 @@ +name: Dependency Refresh Tests + +on: + push: + branches: + - feature/5-units-0.2.2-dependency-refresh + pull_request: + branches: + - main + +jobs: + host-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Configure + run: cmake -S tests -B build + - name: Build + run: cmake --build build --parallel + - name: Test + run: ctest --test-dir build --output-on-failure + + esp32-compile: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + path: project/ESPressio-Timing + - uses: actions/checkout@v4 + with: + repository: Flowduino/ESPressio-Units + ref: feature/2-serializable-0.10.1-dependency-refresh + path: project/dependencies/ESPressio-Units + - uses: actions/checkout@v4 + with: + repository: Flowduino/ESPressio-Observable + ref: 3.0.1 + path: project/dependencies/ESPressio-Observable + - uses: actions/setup-python@v5 + with: + python-version: '3.x' + - name: Install PlatformIO + run: pip install platformio + - name: Create consumer project + shell: bash + run: | + mkdir -p project/compile/src + cat > project/compile/platformio.ini <<'EOF' + [env:esp32] + platform = espressif32 + board = esp32dev + framework = arduino + build_flags = -std=gnu++17 + build_unflags = -std=gnu++11 + lib_ldf_mode = deep+ + lib_deps = + ../dependencies/ESPressio-Observable + ../dependencies/ESPressio-Units + ../ESPressio-Timing + EOF + cat > project/compile/src/main.cpp <<'EOF' + #include + #include + + void setup() { + auto& clock = ESPressio::Timing::SystemClock<>::GetInstance(); + (void)clock.GetTime(); + } + + void loop() {} + EOF + - name: Compile Timing against Units 0.2.2 candidate + run: pio run -d project/compile From 3cea2372e68c754fcf887d476de24146eeff07ce Mon Sep 17 00:00:00 2001 From: Simon J Stuart Date: Fri, 21 Aug 2026 00:25:04 +0200 Subject: [PATCH 9/9] ci: enable RTTI and validate released Units 0.2.2 (#5) --- .github/workflows/dependency-refresh-tests.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dependency-refresh-tests.yml b/.github/workflows/dependency-refresh-tests.yml index feb0d92..a1c4512 100644 --- a/.github/workflows/dependency-refresh-tests.yml +++ b/.github/workflows/dependency-refresh-tests.yml @@ -29,7 +29,7 @@ jobs: - uses: actions/checkout@v4 with: repository: Flowduino/ESPressio-Units - ref: feature/2-serializable-0.10.1-dependency-refresh + ref: 0.2.2 path: project/dependencies/ESPressio-Units - uses: actions/checkout@v4 with: @@ -50,8 +50,12 @@ jobs: platform = espressif32 board = esp32dev framework = arduino - build_flags = -std=gnu++17 - build_unflags = -std=gnu++11 + build_flags = + -std=gnu++17 + -frtti + build_unflags = + -std=gnu++11 + -fno-rtti lib_ldf_mode = deep+ lib_deps = ../dependencies/ESPressio-Observable @@ -69,5 +73,5 @@ jobs: void loop() {} EOF - - name: Compile Timing against Units 0.2.2 candidate + - name: Compile Timing against released Units 0.2.2 run: pio run -d project/compile