Updates from Gitea, step 5: the daily check's announcement, the docs, ADR 0009

The announcement was cut at the notification's 48 bytes; it now reads
"v0.11.0 is out: see Settings > Firmware". README: Updates from Gitea
and its limits. ADR 0009: the device trusts the two ISRG roots. R1.md:
what was built and the checks on the device, with what wasn't checked.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
This commit is contained in:
2026-10-06 16:16:32 +02:00
co-authored by Claude Sonnet 5.5
parent 4ef41347ab
commit d490a18b9a
8 changed files with 90 additions and 8 deletions
+3
View File
@@ -510,6 +510,9 @@ static void updateCommand(const String& args) {
args.startsWith("damage cut") ? update->damageNextDownload(n, -1) : update->damageNextDownload(-1, n);
console.printf("update: the next download will be %s at byte %ld\n", args.startsWith("damage cut") ? "cut" : "damaged", n);
} else if (args == "daily") { // forget today's check: the daily one runs again at once, if it may
update->forgetToday();
console.println("update: the daily check will run at the next tick if Wi-Fi, the clock and memory allow");
} else if (args.startsWith("pretend ")) { // update pretend v0.9.0 | off: what the comparisons take as running
update->pretendVersion(args.substring(8) == "off" ? "" : args.substring(8).c_str());
console.printf("update: running %s\n", update->runningVersion().c_str());
+1 -1
View File
@@ -28,7 +28,7 @@ std::string whyNotConnected(NetworkClientSecure& tls, const std::string& host) {
std::string HttpsGet::open(const std::string& host, const std::string& path, const char* accept) {
close();
if (time(nullptr) < kClockSetAfter) return "The clock isn't set yet: certificates can't be checked";
if (time(nullptr) < kClockSetAfter) return "The clock isn't set: can't check certificates";
if (esp_get_free_heap_size() < kNeedFree) return "Not enough memory for a secure connection";
tls_.setCACert(kTrustedRootsPem);
+2 -2
View File
@@ -285,7 +285,7 @@ void UpdateService::serve() {
if (r == Request::BackgroundCheck && gitea_.latest(latest) &&
release::shouldAnnounce(latest, runningVersion(), failedVersion(), announced_)) {
announced_ = latest.tag;
notify("Update " + latest.tag + " available: see Settings > Firmware", NotificationLevel::Info);
notify(latest.tag + " is out: see Settings > Firmware", NotificationLevel::Info); // 48 bytes at most
}
break;
}
@@ -307,7 +307,7 @@ void UpdateService::serve() {
}
// A check or a list someone asked for that failed says so; the daily one stays quiet.
if ((r == Request::Check || r == Request::List) && gitea_.status() == GiteaReleases::Status::Failed)
notify("Releases: " + gitea_.error(), NotificationLevel::Warning);
notify(gitea_.error(), NotificationLevel::Warning);
// IRC comes back, unless the device is about to restart into an update.
if (held_ && phase_ != Phase::Installed && holdMemory) holdMemory(false);
held_ = false;
+1
View File
@@ -69,6 +69,7 @@ class UpdateService : public Service {
void requestProbe(const std::string& host, const std::string& path) { probeHost_ = host; probePath_ = path; probeResult_ = "..."; request_ = Request::Probe; }
std::string probeResult() const { return probeResult_; }
void damageNextDownload(long cutAfter, long flipAt) { damageCut_ = cutAfter; damageFlip_ = flipAt; }
void forgetToday() { store_.putInt("rel_day", 0); nextCheckMs_ = 0; announced_.clear(); } // the daily check runs at the next tick
#endif
// The main loop calls this once it has drawn a frame (part of Probation).