From 325e7755ad0ec93a63e5efe7a4de86d4e017f04b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Tue, 6 Oct 2026 17:01:04 +0200 Subject: [PATCH 1/3] R1 plan: the CI timings, measured from the jobs' own start and end times The first full run took 11.4 minutes, not 17: that was the waiting time. A pull request takes about 8.7, a release build alone 5.5, a push to main 1.1. Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT --- docs/milestones/R1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/milestones/R1.md b/docs/milestones/R1.md index 25d70b7..774e6e9 100644 --- a/docs/milestones/R1.md +++ b/docs/milestones/R1.md @@ -27,7 +27,7 @@ Until now the tests, the builds, the signing and the flashing all happened on on ### As built - **One workflow, `.gitea/workflows/ci.yml`, one job**, on the runner `runner0` (label `ubuntu`). The job asks for a `python:3.12-slim` container, installs git, a compiler, openssl and PlatformIO, and runs the same scripts as a developer's machine. No Docker inside the job. -- **The cache is a Docker volume**, `roro9stack-pio`, mounted at `/pio`; the runner's `config.yaml` allows it under `container.valid_volumes`. A first run downloads about 1 GB and rebuilds the framework (17 minutes); with the volume filled, tests and both builds take about 6. +- **The cache is a Docker volume**, `roro9stack-pio`, mounted at `/pio`; the runner's `config.yaml` allows it under `container.valid_volumes`. A first run downloads about 1 GB and rebuilds the framework. Measured from the jobs' own start and end times: the first full run on an empty cache took 11.4 minutes (tests and both builds); the first run in a container, 8.1; a pull request now takes about 8.7 (tests, coverage and both builds), a release build alone 5.5, and a push to `main` (tests and coverage) 1.1. (An earlier version of this note said 17 minutes: that was the waiting time, not the job's.) - **No JavaScript actions**, so the image needs no Node and nothing is fetched from GitHub: the checkout is four git commands. - **`scripts/_docker.sh`** runs the command in place when `RORO_NO_DOCKER` is set (a CI job is already in a build container), and in the project's image otherwise. The Debug Build's token is made on the spot in CI and goes with the container. - **`scripts/release_build.sh `** builds a tag's own sources with today's tools, signs, verifies against the public key in those sources, and writes the files and the release's text. **`scripts/release_publish.py`** creates the Gitea release or completes it; run twice, it replaces what's there. Both run the same on a developer's machine. -- 2.53.0 From 148611ff4ca6fd2fe8a5c054852f5b720609fc4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Tue, 6 Oct 2026 17:01:04 +0200 Subject: [PATCH 2/3] Updates: the Debug Build message fits on one line of the screen "A Debug Build keeps its console: update it from your PC" ran off the edge of the release page. It now reads "Debug Build: update from the PC". Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT --- src/apps/firmware_page.cpp | 4 ++-- src/services/update_service.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps/firmware_page.cpp b/src/apps/firmware_page.cpp index b72ef2c..73cedd8 100644 --- a/src/apps/firmware_page.cpp +++ b/src/apps/firmware_page.cpp @@ -80,7 +80,7 @@ bool FirmwarePage::installable(std::string& why) const { std::string running = update_.runningVersion(); if (!shown_.usable()) why = "Nothing to install in it"; else if (!release::versionNewer(shown_.tag, running) && !versionOlder(shown_.tag, running)) why = "That's the version running"; - else if (release::isDebugBuild(running)) why = "A Debug Build keeps its console: update it from your PC"; + else if (release::isDebugBuild(running)) why = "Debug Build: update from the PC"; // it keeps its console (Q171) else if (wifi_.state() != WifiController::State::Connected) why = "Not connected to Wi-Fi"; else return true; return false; @@ -203,7 +203,7 @@ void FirmwarePage::drawRelease(Canvas& c) { c.setFont(&fonts::small); c.setTextDatum(top_left); c.setTextColor(theme::kMuted); - c.drawString(ok ? "Enter: install c: check again" : (why + " c: check again").c_str(), 4, area.y + area.h - 9); + c.drawString(ok ? "Enter: install c: check again" : (why + " c: check").c_str(), 4, area.y + area.h - 9); } void FirmwarePage::drawOlder(Canvas& c) { diff --git a/src/services/update_service.cpp b/src/services/update_service.cpp index cae2f5d..7c20159 100644 --- a/src/services/update_service.cpp +++ b/src/services/update_service.cpp @@ -217,7 +217,7 @@ std::string UpdateService::failedVersion() const { std::string UpdateService::requestInstall(const std::string& tag, bool force) { if (phase_ != Phase::Idle || giteaBusy()) return "Busy with something else"; - if (!force && release::isDebugBuild(runningVersion())) return "A Debug Build keeps its console: update it from your PC"; + if (!force && release::isDebugBuild(runningVersion())) return "Debug Build: update from the PC"; // short: it is drawn in one line at the screen's foot if (wifi_.state() != WifiController::State::Connected) return "No Wi-Fi"; release::Release r; if (!gitea_.find(tag, r)) return "Look for releases first"; -- 2.53.0 From 12006bdf944da75a6874e46c5b57d00da43b2f58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Martin?= Date: Tue, 6 Oct 2026 17:01:04 +0200 Subject: [PATCH 3/3] CI: the release badge follows a tag, not only a push to main After v0.11.0 was published the badge still said v0.10.0 until the next push to main. Tag runs run the tests and coverage already; they now publish the badges too. Co-Authored-By: Claude Sonnet 5.5 Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT --- .gitea/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index d41473a..2531c73 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -59,9 +59,10 @@ jobs: if: github.event_name == 'pull_request' || github.ref_type == 'tag' run: scripts/ci.sh builds - # The README's badges are files on a branch of their own, replaced at each push to main. + # The README's badges are files on a branch of their own, replaced at each push to main and + # at each tag (the release badge says which tag is the latest) - name: Publish the badges - if: github.event_name == 'push' && github.ref == 'refs/heads/main' + if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref_type == 'tag') env: GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | -- 2.53.0