Skip to content

ci: account for the telegram warning in the build summariser - #2353

Merged
widgetii merged 1 commit into
masterfrom
ci/build-summary-telegram-anchor
Sep 1, 2026
Merged

ci: account for the telegram warning in the build summariser#2353
widgetii merged 1 commit into
masterfrom
ci/build-summary-telegram-anchor

Conversation

@widgetii

@widgetii widgetii commented Sep 1, 2026

Copy link
Copy Markdown
Member

Problem

master is red on a merge gate. #2351 added a ::warning:: annotation for a Telegram upload
that failed all three attempts, and landed while lint.yml's build summariser agrees with
build.yml
check was failing:

$ python3 .github/scripts/build-summary.py --self-test
build-summary: build.yml emits an annotation nothing here reads: 'Telegram upload of ${NORFW}
  failed after 3 attempts (last result: ${HTTP}). The image itself is unaffected -- it went to
  the publish job in the previous step."'
build-summary: build.yml's matrix job emits 8 annotations, 7 are classified
exit 1

That check is not in branch protection's required contexts, so nothing stopped the merge. It
now fails on master and on every branch cut from it.

Why the gate fired

--self-test's drift check requires every ::error::/::warning:: in build.yml's buildroot
job to map either to a grammar or to an explicit ignore. It exists so that rewording an
annotation fails a merge gate instead of silently reducing the nightly Build summary to
reporting nothing. It was working as designed — the annotation is new and genuinely unclassified.

The change

The anchor goes in IGNORED_ANCHORS, not GRAMMARS. The image the notification announces
reached the publish job a step earlier, so a failure to send says nothing about the board that
emitted it and belongs in no cause bucket — the same reason the size-report and kconfig-graph
hiccups already listed there are not summarised. parse_annotations drops it, so the report is
unchanged; only the floor check's accounting moves, 7 classified to 8.

Verification

$ python3 .github/scripts/build-summary.py --self-test
build-summary: self-test ok (4 grammars, 8 annotations in build.yml, 99 fixture boards)

$ python3 .github/scripts/lint-workflow-shell.py --self-test
self-test passed

$ python3 .github/scripts/ci-matrix.py --self-test
ci-matrix: self-test ok (99 boards, 133 packages, 56 cases)

Scope

CI reporting only. ci-matrix.py --stdin selects 0 boards for this path — it changes no
image bytes and reaches no camera, so there is no hardware evidence to give.

#2351 added a ::warning:: for a Telegram upload that failed all three attempts,
and landed with the summariser's drift gate red. build-summary.py --self-test
requires every annotation build.yml's matrix job emits to map either to a
grammar or to an explicit ignore, so that a reworded ::error:: cannot quietly
empty the nightly report. It now fails on master, and on every branch cut from
it.

The anchor goes in IGNORED_ANCHORS rather than GRAMMARS. The image the
notification announces reached the publish job a step earlier, so a failure to
send says nothing about the board that emitted it and belongs in no cause
bucket -- the same reason the size-report and kconfig-graph hiccups already
listed there are not summarised.
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)

Grey Divider

Great, no issues found!

Qodo reviewed your code and found no material issues that require review

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Account for Telegram warnings in build summary drift checks

🐞 Bug fix ⚙️ Configuration changes 🕐 Less than 5 minutes

Grey Divider

AI Description

• Classifies Telegram upload warnings as intentionally ignored by build-summary drift checks.
• Keeps notification failures out of board cause buckets and nightly summaries.
• Restores self-test accounting for all eight buildroot annotations.
Diagram

graph TD
  A["build.yml"] --> B["Telegram warning"] --> C["Drift gate"] --> D["Ignored anchors"] --> E["Self-test passes"]
  B --> F["Annotation parser"] --> G["Summary unchanged"]
Loading
High-Level Assessment

The explicit ignored-anchor approach is appropriate. Treating the warning as a grammar would incorrectly create a board failure category, while removing the drift check would weaken protection against silently unclassified build annotations.

Files changed (1) +8 / -4

Bug fix (1) +8 / -4
build-summary.pyClassify Telegram upload warnings as intentionally ignored +8/-4

Classify Telegram upload warnings as intentionally ignored

• Adds the Telegram upload warning prefix to 'IGNORED_ANCHORS', allowing the drift self-test to account for all buildroot annotations. Comments clarify that notification failures do not affect published images and must not enter board cause buckets.

.github/scripts/build-summary.py

@widgetii
widgetii merged commit 14ec32c into master Sep 1, 2026
16 checks passed
@widgetii
widgetii deleted the ci/build-summary-telegram-anchor branch September 1, 2026 22:16
widgetii added a commit that referenced this pull request Sep 2, 2026
#2351 merged with `build summariser agrees with build.yml` red. Branch
protection required only CI Gate, qodo-gate and GCC Gate, so every context
lint.yml and shell-tests.yml report was advisory. Master was left failing its
own drift gate, and every branch cut from it carried the same red check until
#2353 repaired it. The check was not broken; it was simply not something anyone
had to satisfy.

Each workflow grows one umbrella job -- Lint Gate and Shell Tests Gate -- the
shape build.yml's CI Gate and gcc-compat.yml's GCC Gate already use. Branch
protection then names a single stable context per workflow, and a job added
later is covered without a settings change, which is the argument build.yml
makes for not listing the ~99 per-board contexts individually.

Both refuse `skipped` as well as failure. Upstream the per-job guard is a
tautology, so a skipped job means the guard changed or the job left `needs`;
either way the context would go green having checked nothing, which is the
failure it exists to prevent.

Requiring the two new contexts is a branch-protection change that no file in
the tree can make, and follows this commit.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant