Skip to content
Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

en ru fr

Allure notifications

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.

GitHub Marketplace Action

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.

Notification example

Telegram notification example: collage + statistics + links

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

Omni-tool

(allure-notifications.qa.guru · qa-guru.github.io/allure-notifications)

Axis Support
Messengers Telegram · Slack · Email · Mattermost · Discord · Loop · Rocket.Chat · Zoho Cliq · Microsoft Teams
Any CI local · GitHub Actions · GitLab CI · AWS CI · Azure DevOps · Jenkins · Bamboo · Bitbucket Pipelines · TeamCity · CircleCI · Buildkite · …and any runner that can execute the CLI
Any language with Allure Java · Kotlin · Groovy · JavaScript · TypeScript · Python · C# · PHP · Ruby · Go · Rust · Dart · frameworks list
Notification locales en · de · fr · ru · by · ua · cn · cnt · morse

Missing a messenger or locale? Open an issue or send a PR.

Table of contents

TypeScript · Quick start

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.

Config builder (ANB)

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

Allure Notifications Builder — desktop

Install as a PWA (Add to Home Screen / Install) for offline shell and standalone display. On iPad Pro 13″ (landscape):

Allure Notifications Builder — iPad Pro 13 landscape

Canvas presets

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

Export → CLI

  1. Arrange panels in the builder → Export / Download config.json.
  2. Point base.allureFolder / base.allureResultsFolder at your report and results.
  3. Keep messenger credentials empty in JSON and provide them through environment variables.
  4. Send:
npx @qa-guru/allure-notifications@6.2.2 send --config <exported>.json

config.json

Schema: 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.

base fields

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

Messengers

Keep base and only the messenger block you need. Optional templatePath is deprecated and ignored in 6.x (no FreeMarker runtime).

Telegramwiki: token, chat, optional topic / replyTo.

Slackwiki: token, chat, optional replyTo.

Emailwiki: host, port, username, password, from, to, optional cc / bcc / securityProtocol.

Mattermostwiki: 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.

Visual canon

Locked collage rules and reference PNG: docs/canon/CANON.md.

Plugin (alternate)

Allure 3 plugin — thin wrapper over the same core pipeline. CLI remains primary.

npm add allure @qa-guru/allure-notifications-plugin@6.2.2

Legacy Java 5.0.8

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.jar

Release jar: v5.0.8 · 4.x → 5.0 notes: docs/migration-5.0.md.

CI cookbook

docs/ci-cookbook.md · jar-era notes: docs/ci-cookbook-5.0.md.

About

ts-app, that draws piechart from results and sends it with link to build to messenger

Topics

Resources

Stars

579 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages