Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 19 additions & 31 deletions .claude/skills/release/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,21 +96,16 @@ Rules:

## Step 5 — Generate Slack release notes

Produce a ready-to-paste Slack message. Be **verbose** — explain how each feature works with a short example where helpful, and link to the relevant documentation page.
Produce a ready-to-paste Slack message. Keep it **short and scannable**: the notes announce the release, the changelog and docs hold the detail.

Documentation base URL: `https://marketsquare.github.io/robotframework-dashboard/`

Key doc pages and their slugs:
- `filtering.html` — filters, tag modes (AND/OR/NOT), custom filters, versions
- `log-linking.html` — log URL support, `--uselogs` flag
- `basic-command-line-interface-cli.html` — CLI flags, `--customfilters`, output import
- `listener-integration.html` — listener, standalone push script
- `customization.html` — layout, undo/redo, GridStack
- `performance.html` — benchmarking, scale data
- `graphs-tables.html` — charts, data tables, horizontal scrolling
- `settings.html` — settings modal, themes, widget toggles

**Shout out external contributors** — scan all PR entries for authors who are *not* `@timdegroot1996` and call them out by name with a :pray: in the relevant bullet or in a dedicated thanks line.
Rules:
- **One-line summary** under the title, naming the theme of the release (e.g. "A small performance release: …").
- **Section headers without emoji**: `Added`, `Fixed`, `Changed`, `Resources`, in that order, only the non-empty ones. No `---` separators.
- **One bullet per change**: `*<Short name>* — <one or two sentences on what changed and why it matters to the user>`. No code examples, no per-bullet docs links, no PR numbers.
- **No timings in the bullets.** When a release is about performance, put the headline gains in the summary line or a single closing bullet as percentages or "N× faster" measured on a large dashboard, and state the dataset size once (e.g. "on a dashboard with 504 runs and 208k test results"). Never list raw millisecond numbers.
- **Fixed bullets** are plain sentences describing the user-visible symptom that is gone.
- **Thank external contributors inline**: scan the PR authors and co-authors for anyone who is *not* `@timdegroot1996` and end the bullet their work landed in with `Thanks @name for …!` (no emoji).
- **Resources** always has the same four lines.

Format:

Expand All @@ -119,25 +114,18 @@ Format:

<one-line summary of the release theme>

---

*:new: Added*
*Added*
• *<Feature name>* — <one or two sentences>.

• *<Feature name>* — <2–3 sentences explaining what it does and why it's useful. Include a short code example if applicable.> → <docs link>
*Changed*
• *<Change name>* — <one or two sentences>. Thanks @contributor for <what they did>!

*:wrench: Fixed*

• <fix description>. Thanks *@contributor* for the fix! :pray:

*:arrows_counterclockwise: Changed*

• <change description>

---
*Fixed*
• <what the user no longer runs into>.

*:bookmark: Resources*
Full changelog: <compare URL>
PyPI: <pypi URL>
*Resources*
Full changelog: https://github.com/MarketSquare/robotframework-dashboard/compare/vPREVIOUS...vX.Y.Z
PyPI: https://pypi.org/project/robotframework-dashboard/X.Y.Z/
Docs: https://marketsquare.github.io/robotframework-dashboard/
Example dashboard: https://marketsquare.github.io/robotframework-dashboard/example/robot_dashboard.html
```
Expand Down Expand Up @@ -183,6 +171,6 @@ The user merges the release PR (squash, `Release X.Y.Z (#PR)`), uploads to PyPI
- [ ] `example/robot_dashboard.html` — regenerated
- [ ] `example/robot_results.db` — regenerated
- [ ] `CHANGELOG.md` — new section added at the top
- [ ] Slack release notes produced
- [ ] Slack release notes produced (short format, no timings, contributors thanked inline)
- [ ] After the merge: `vX.Y.Z` tag pushed on the merge commit, GitHub Release created
- [ ] `gh workflow run deploy.yml` after the tag push; `/`, `/vX.Y.Z/` and `versions.json` on the docs site show the new version
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

---

## [2.4.1](https://github.com/MarketSquare/robotframework-dashboard/releases/tag/v2.4.1) - 2026-09-28

### Changed
- Much faster filtering on large dashboards — suites, tests and keywords are matched to the filtered runs with a set lookup instead of a scan per row, and the millisecond/timezone versions of the data are computed once per setting instead of on every filter change. On a dashboard with 504 runs and 208k tests, applying the default filter went from 1.2 s to 0.4 s and applying all runs from 9.8 s to 3.6 s
- Faster Most Failed, Most Flaky and Messages timelines — their rows are grouped once by test and run instead of scanning every row for every cell, and the rules of a `--messageconfig` are compiled once
- The Overview page only draws the donut of a run card when the card scrolls into view, so updating an Overview with hundreds of run cards went from about 4 s to under 0.1 s
- Faster Tables page — the column types are set up front instead of DataTables checking every cell on every update (3.9 s to 2.4 s with all runs)
- Faster initial load — the embedded data is decompressed in parallel with the browser's native `DecompressionStream`, and the pako library is no longer needed (also not in `--offlinedependencies` mode). The dashboard now needs Chrome 80+, Firefox 113+ or Safari 16.4+. Loading the 504 run dashboard went from 3.8 s to 2.3 s

### Fixed
- The donut charts of the Overview run cards were never freed when the cards were rebuilt, so the page used more memory with every filter change
- The Messages timeline with a `--messageconfig` relied on an undeclared variable and a block-scoped function that break in strict JavaScript

---

## [2.4.0](https://github.com/MarketSquare/robotframework-dashboard/releases/tag/v2.4.0) - 2026-09-26

### Added
Expand Down
5 changes: 2 additions & 3 deletions docs/performance.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The process has three distinct stages — each with its own time and size cost:
|---|---|
| **XML processing** | `OutputProcessor` uses `robot.api.ExecutionResult` to parse each `output.xml` and insert its data into the SQLite database. |
| **Dashboard generation** | `DashboardGenerator` reads all data from the database, compresses it (JSON → zlib → base64), inlines all JS/CSS, and writes a single self-contained `.html` file. |
| **Browser rendering** | The browser decompresses the embedded data and renders charts using Chart.js. Render time scales with the number of displayed runs and active data views. |
| **Browser rendering** | The browser decompresses the embedded data with its native `DecompressionStream` (Chrome 80+, Firefox 113+, Safari 16.4+) and renders charts using Chart.js. Render time scales with the number of displayed runs and active data views. |

## Baseline Results

Expand Down Expand Up @@ -88,8 +88,7 @@ Very large dashboards (500+ runs with many unique tests) may reach 5–10 MB. Th
The time it takes for the dashboard to finish drawing after the page opens is driven by Chart.js — not by data size or HTML file size. Key factors:

- **Default quantity is 20 runs per project** — renders near-instantly on any hardware. The amount filter is applied per project (run name / `project_` tag), so a dashboard with several projects renders more runs than the quantity itself.
- **50 runs** — expect a couple of seconds while Chart.js draws all graphs.
- **100+ runs** — rendering can approach **~10 seconds or more!**. The exact time depends on:
- **Hundreds of runs** — expect a few seconds. As a reference, a dashboard with 504 runs, 208k test results and 138k keyword results loads in about 2.3 seconds with the default quantity, and applying a filter that shows all 504 runs takes about 3.6 seconds on the Dashboard page, 2.4 seconds on the Tables page and under 0.1 seconds on the Overview page. The exact time depends on:
- The **size of your test suite** — more tests and suites mean more data points per chart.
- Whether **"All Suites"** or **"All Tests"** is selected in their respective sections — these views render one data series per unique suite/test name, which scales with the breadth of your suite.

Expand Down
347 changes: 198 additions & 149 deletions example/robot_dashboard.html

Large diffs are not rendered by default.

Binary file modified example/robot_results.db
Binary file not shown.
2 changes: 1 addition & 1 deletion robotframework_dashboard/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "Robotdashboard 2.4.0"
__version__ = "Robotdashboard 2.4.1"
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

setup(
name="robotframework-dashboard",
version="2.4.0",
version="2.4.1",
description="Output processor and dashboard generator for Robot Framework output files",
long_description="""# 📊 Robot Framework Dashboard

Expand Down
2 changes: 1 addition & 1 deletion tests/robot/resources/cli_output/version.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
|_| \_\\___/|____/ \___/ |_| |____/_/ \_|____/|_| |_|____/ \___/_/ \_|_| \_|____/

======================================================================================
Robotdashboard 2.4.0
Robotdashboard 2.4.1