Beautiful test-run notifications — right in your messenger.
Collage PNG + caption with statistics and links. Build config.json in the Config builder, send with the GitHub Action or TypeScript CLI 6.2.2.
Generate the Allure report once, then let the Action render and send the notification:
- uses: qa-guru/allure-notifications@v6
with:
config: notifications/config.json
allure-folder: build/reports/allure-report/allureReport/awesome
allure-results-folder: build/allure-results
mode: live
env:
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
TELEGRAM_CHAT_ID: ${{ vars.TELEGRAM_CHAT_ID }}
TELEGRAM_TOPIC_ID: ${{ vars.TELEGRAM_TOPIC_ID }}Pipeline: tests → allure-results → npx allure generate (once) → Action send.
The Action never generates the report and never writes credentials to JSON.
See the complete workflow and static config.
Runnable Marketplace, native CLI, plugin, and local-Action variants live in
.github/workflows/README.md.
| Zone | Contents |
|---|---|
| Collage | 7 panels: current status · status dynamics · pyramid · durations · success rate · duration dynamics · status transitions |
| Text | environment, comment, duration, passed / failed / broken / skipped counters |
| Links | report · dashboard · testops · build from base.links |
(allure-notifications.qa.guru · qa-guru.github.io/allure-notifications)
| Axis | Support |
|---|---|
| Messengers | |
| Any CI | |
| Any language with Allure | |
| Notification locales | en · de · fr · ru · by · ua · cn · cnt · morse |
Missing a messenger or locale? Open an issue or send a PR.
- TypeScript · Quick start
- Config builder (ANB)
- config.json
- Messengers
- Visual canon
- Plugin (alternate)
- Legacy Java 5.0.8
- CI cookbook
| Version | Stack | Allure | Status |
|---|---|---|---|
| 4.* | Java | Allure 2 | Historical |
| 5.* | Java | Allure 3 | Legacy freeze at 5.0.8 (branch legacy/java-5.0.8); there is no 5.1 |
| 6.* | TypeScript | Allure 3 | Product — pin 6.2.2 (Action + CLI + builder + plugin) |
Older patch notes → GitHub Releases · migration → MIGRATION.md.
| Piece | Role |
|---|---|
| CLI | npx @qa-guru/allure-notifications@6.2.2 send --config … — primary runtime |
| Collage PNG | @napi-rs/canvas in @qa-guru/allure-notifications-core (Playwright = tests only) |
| Config builder | Web UI → full config.json + free-layout collage — apps/builder/ |
| Packages | @qa-guru/allure-notifications-config · core (palette/geometry via @qa-guru/allure-report-kit/collage) · bin allure-notifications · plugin @qa-guru/allure-notifications-plugin |
After tests finish, Allure writes a summary. The CLI finds it automatically:
- Allure 2 —
<allureFolder>/widgets/summary.json - Allure 3 —
<allureFolder>/summary.json
Summary drives notification text. In collage mode the CLI also reads *-result.json from allureResultsFolder.
npx allure generate allure-results --clean -o allure-report
npx @qa-guru/allure-notifications@6.2.2 send --config config.json --live| Flag | Behavior |
|---|---|
--dry-run |
Render collage; list messengers that would send; no network |
--mock |
Render collage; mock deliveries; no network |
--live |
Actually send (Telegram when credentials are set) |
--out <png> |
Write collage PNG to disk |
Default without --live / --mock is safe dry-run.
Web UI that exports a full config.json (base · chart · links · messengers) with a free-layout collage editor.
| Prod | allure-notifications.qa.guru |
| Project Pages | qa-guru.github.io/allure-notifications |
| Source | apps/builder/ |
| Canon | apps/builder/CANON.md |
Install as a PWA (Add to Home Screen / Install) for offline shell and standalone display. On iPad Pro 13″ (landscape):
| Preset | Size | Notes |
|---|---|---|
| SQ-1080 | 1080×1080 | Dense square canvas |
| CB-870 | 870×1080 | Telegram-oriented editor canvas (post cap 1024×1280) |
| WD-1410 | 1410×1080 | Wide canvas |
- Arrange panels in the builder → Export / Download
config.json. - Point
base.allureFolder/base.allureResultsFolderat your report and results. - Keep messenger credentials empty in JSON and provide them through environment variables.
- Send:
npx @qa-guru/allure-notifications@6.2.2 send --config <exported>.jsonSchema: packages/config (zod). Prefer Export from the Config builder.
Minimal 6.0 example — collage + free layout + one messenger:
{
"base": {
"project": "my-project",
"environment": "ci",
"comment": "Release smoke · master",
"language": "en",
"allureFolder": "allure-report/",
"allureResultsFolder": "allure-results/",
"enableChart": true,
"darkMode": true,
"chart": {
"mode": "collage",
"layout": "free",
"width": 870,
"height": 1080,
"headerHeight": 31,
"cardGap": 14,
"tilePad": 6,
"gridCols": 10,
"gridRows": 10,
"items": [
{ "type": "currentStatus", "x": 0, "y": 0, "w": 5, "h": 4 },
{ "type": "statusDynamics", "x": 5, "y": 0, "w": 5, "h": 4 },
{ "type": "testingPyramid", "x": 0, "y": 4, "w": 4, "h": 3 },
{ "type": "durations", "x": 4, "y": 4, "w": 6, "h": 3, "groupBy": "layer" },
{ "type": "successRateDistribution", "x": 0, "y": 7, "w": 3, "h": 3 },
{ "type": "durationDynamics", "x": 3, "y": 7, "w": 4, "h": 3 },
{ "type": "statusTransitions", "x": 7, "y": 7, "w": 3, "h": 3 }
],
"pyramidFallback": "suites"
},
"links": {
"report": "${ALLURE_REPORT_URL}",
"dashboard": "${ALLURE_DASHBOARD_URL}",
"testops": "",
"build": "${BUILD_URL}"
}
},
"telegram": {
"token": "",
"chat": "",
"topic": ""
},
"proxy": {
"type": "socks5",
"host": "${PROXY_HOST}",
"port": 7777,
"username": "",
"password": ""
}
}Showcase layout (7-tile readme-hero) = config/config.dogfood-telegram-full.json. SOCKS5 sample: config/config.proxy-socks5.example.json.
| Field | Notes |
|---|---|
project, environment, comment |
Shown in notification text |
links |
report, dashboard, testops, build — only non-empty links appear |
reportLink |
Deprecated — use links.report (still accepted as fallback) |
language |
en / de / fr / ru / ua / by / cn / cnt / morse |
allureFolder |
Generated Allure report directory |
allureResultsFolder |
Raw allure-results (needed for collage analytics) |
enableChart |
Attach collage / chart image |
chart.mode |
collage (only value in 6.x TS; legacy jar pie → branch legacy/java-5.0.8) |
chart.layout |
free + items is the main path. Legacy grid | stacked | row still supported |
chart.width / height |
Canvas size (px) |
chart.headerHeight / cardGap / tilePad |
Card chrome (builder defaults: 31 / 14 / 6) |
darkMode |
Chart theme |
enableSuitesPublishing |
Per-suite stats from suites.json when present |
logo, durationFormat, customData |
Optional |
Keep base and only the messenger block you need. Optional templatePath is deprecated and ignored in 6.x (no FreeMarker runtime).
Telegram — wiki: token, chat, optional topic / replyTo.
Slack — wiki: token, chat, optional replyTo.
Email — wiki: host, port, username, password, from, to, optional cc / bcc / securityProtocol.
Mattermost — wiki: url, token, chat.
Discord
botToken, channelId. Enable Developer mode → Discord developer portal → Applications → Bot token; right-click channel → Copy ID.
Loop
webhookUrl — Integrations → Incoming Webhooks → create webhook for the channel.
Rocket.Chat
url, auth_token, user_id, channel. Generate token in user settings (also yields user_id).
Zoho Cliq
token (zapikey), chat, optional bot, dataCenter (com / eu / in / au / jp / ca; default eu).
Microsoft Teams
webhookUrl from the Workflows app template “Post to a channel when a webhook request is received” (legacy Office 365 Connectors are retiring). Chart embeds as base64; payload ≤ 28 KB; ~4 req/s throttle.
Top-level proxy (type: http | socks5, host, port, optional username / password) — applied on CLI live Telegram via undici ProxyAgent / Socks5ProxyAgent (jar: Apache HttpClient). No proxychains4 required for Bot API when proxy is set. SOCKS that require auth (e.g. qa.guru proxy.qaguru.school:7777) need username/password in config — on Jenkins agents run /opt/qa-guru/bin/prepare-telegram-socks-proxy.sh first to inject microsocks creds.
Locked collage rules and reference PNG: docs/canon/CANON.md.
Allure 3 plugin — thin wrapper over the same core pipeline. CLI remains primary.
npm add allure @qa-guru/allure-notifications-plugin@6.2.2- Docs:
packages/plugin/README.md - Example:
examples/allurerc.notifications.mjs - GitHub Actions sample:
examples/github-actions/
Bugfix / security only. Source tree archived on branch legacy/java-5.0.8 (not in-tree on master).
java -DconfigFile=notifications/config.json -jar allure-notifications-5.0.8.jarRelease jar: v5.0.8 · 4.x → 5.0 notes: docs/migration-5.0.md.
docs/ci-cookbook.md · jar-era notes: docs/ci-cookbook-5.0.md.


