Skip to content

chore(repo): add PR stats and ages to weekly issue report - #36851

Merged
AgentEnder merged 5 commits into
masterfrom
weekly-slack-report-pr-data-6e2dd3e0
Aug 30, 2026
Merged

chore(repo): add PR stats and ages to weekly issue report#36851
AgentEnder merged 5 commits into
masterfrom
weekly-slack-report-pr-data-6e2dd3e0

Conversation

@AgentEnder

@AgentEnder AgentEnder commented Aug 30, 2026

Copy link
Copy Markdown
Member

Current Behavior

The weekly report only covers issues. There is no PR data, no age data, and no row for everything or for unscoped items. It only goes to Slack, as one section block.

The job also runs for 4 to 6 hours after the message is sent. The Cache node_modules step is lookup-only and nothing reads it, but its post step still saves on every miss: globbing **/node_modules over the pnpm checkout takes over four hours, then it tars a 943 MB archive that the cache quota evicts before the next run. The last three scheduled runs were cancelled at the job limit.

Issue Report for Aug 29 2026 [view unlabeled](https://github.com/nrwl/nx/issues/?q=...)
```
Totals, Issues: 279 (-2) Bugs: 220 (+2)

Previous Report: Aug 23 2026
Untriaged: 52 (-3)
Closed since Aug 23 2026: 33 (+3)
| Scope           | Issues  | Bugs | Closed |
| --------------- | ------- | ---- | ------ |
| scope: core     | 75 (+2) | 63   | 5 (+1) |
| scope: bundlers | 29 (-1) | 23   | 5      |
| scope: js       | 14      | 12   | 5      |
| scope: release  | 14      | 11   | 1      |
| scope: angular  | 13      | 9    | 0      |```

Expected Behavior

Issues get avg / p95 age columns. PRs get their own table: open, created / merged / closed since the last report, avg / p95 age. Both tables start with Everything and Unscoped rows. Scope rows with no activity in a table are dropped, a missing previous value shows no delta instead of (+total), and the footer links to the nx package health page on npm-burst.

The same report is written to the workflow's job summary as real markdown (headings, tables, links), so there is a readable copy outside Slack.

PRs come from the same issues endpoints we already paginate, we were filtering them out. In Slack the title is a header block, the notes and the footer are context blocks, and each table sits under a bold label in its own section blocks to stay under the 3000 character limit. The payload passes blocks.validate.

The cache step is gone; setup-node already caches the pnpm store and the install takes under a minute. The job should finish in about 90 seconds.

workflow_dispatch gets two inputs, both on by default: skip_slack and skip_cache_upload. A manual run neither pings the channel nor moves the window the next scheduled run diffs against unless you untick one. Unticking only skip_cache_upload uploads the new-shape cache and sets the baseline for the new columns quietly. The job summary is always written, so that is where to look at a test run.

Output from a run against live data, with last week's cache, as it prints to the log:

# Issue & PR Report for Aug 29 2026

Previous Report: Aug 23 2026
Closed, created and merged counts are since Aug 23 2026. Ages are for open items, in days.

[view unlabeled issues](https://github.com/nrwl/nx/issues?q=...) · [view unlabeled PRs](https://github.com/nrwl/nx/pulls?q=...)

## Issues

| Scope                    | Issues | Bugs | Closed    | Avg Age | P95 Age |
| ------------------------ | ------ | ---- | --------- | ------- | ------- |
| Everything               | 279    | 220  | 33 (-152) | 291d    | 1060d   |
| Unscoped                 | 52     | 29   | 9 (-23)   | 28d     | 54d     |
| scope: core              | 75     | 63   | 5 (-44)   | 421d    | 1290d   |
| scope: bundlers          | 29     | 23   | 5 (-16)   | 292d    | 542d    |
| scope: js                | 14     | 12   | 5 (-7)    | 237d    | 533d    |
| scope: release           | 14     | 11   | 1 (-20)   | 332d    | 960d    |
| scope: angular           | 13     | 9    | 0 (-10)   | 351d    | 567d    |
| scope: node              | 12     | 10   | 0 (-3)    | 504d    | 2500d   |
| scope: misc              | 12     | 10   | 1 (-8)    | 665d    | 2278d   |
| scope: linter            | 8      | 7    | 0 (-3)    | 302d    | 641d    |
| scope: react             | 7      | 7    | 0 (-1)    | 235d    | 459d    |
| scope: nx-cloud          | 6      | 6    | 0 (-2)    | 141d    | 256d    |
| scope: module federation | 6      | 6    | 1 (-2)    | 133d    | 184d    |
| scope: react-native      | 6      | 6    | 0 (-2)    | 238d    | 483d    |
| scope: docs              | 5      | 1    | 3 (-3)    | 172d    | 308d    |
| scope: java              | 5      | 4    | 0 (-1)    | 208d    | 237d    |
| scope: nextjs            | 4      | 2    | 1         | 760d    | 2102d   |
| scope: storybook         | 4      | 4    | 1 (-2)    | 266d    | 348d    |
| scope: dotnet            | 3      | 3    | 0         | 219d    | 289d    |
| scope:gradle             | 2      | 1    | 1 (-2)    | 96d     | 172d    |
| scope: self-hosted cache | 2      | 2    | 0 (-1)    | 69d     | 73d     |
| scope: devkit            | 2      | 2    | 0         | 234d    | 274d    |
| scope: vue               | 1      | 1    | 0         | 81d     | 81d     |
| scope: repo              | 1      | 1    | 0         | 104d    | 104d    |
| scope: powerpack         | 1      | 1    | 0         | 127d    | 127d    |
| scope: testing tools     | 1      | 1    | 1 (-4)    | 185d    | 185d    |
| scope: console           | 1      | 1    | 0         | 242d    | 242d    |

## Pull requests

| Scope          | Open | Created   | Merged    | Closed   | Avg Age | P95 Age |
| -------------- | ---- | --------- | --------- | -------- | ------- | ------- |
| Everything     | 169  | 74 (-458) | 69 (-335) | 14 (-90) | 71d     | 190d    |
| Unscoped       | 168  | 74 (-458) | 69 (-334) | 14 (-89) | 70d     | 190d    |
| scope: release | 1    | 0         | 0         | 0 (-1)   | 114d    | 114d    |

[nx package health on npm-burst](https://npm-burst.com/package/nx/health/)

The big negative deltas on the closed / created / merged columns are an artifact of that run: the "previous" report was a cold run over the whole of July and August. In steady state both windows are a week.

Related Issue(s)

Fixes #

The weekly Slack report now carries a second table with pull request
data per scope label (open, created / merged / closed since the last
report, average and p95 age of open PRs), and the issue table gains
average and p95 age columns. Both tables start with Everything and
Unscoped rows, which were missing before.

PRs come from the same issues endpoints the scraper already paginates;
they were being filtered out. Merged / closed PRs are re-checked against
merged_at / closed_at because the endpoint's `since` filters on
updated_at.

The message is now one Slack section block per table chunk to stay under
the 3000 character block limit, with the table header repeated in
continuation chunks. Scope rows with no activity in a table are omitted,
a missing previous value renders no delta instead of a delta from zero,
and the footer links to the nx package health page on npm-burst.
@netlify

netlify Bot commented Aug 30, 2026

Copy link
Copy Markdown

Deploy Preview for nx-docs ready!

Name Link
🔨 Latest commit d7cca30
🔍 Latest deploy log https://app.netlify.com/projects/nx-docs/deploys/6a93adf7425a7c00083be207
😎 Deploy Preview https://deploy-preview-36851--nx-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify

netlify Bot commented Aug 30, 2026

Copy link
Copy Markdown

Deploy Preview for nx-dev ready!

Name Link
🔨 Latest commit d7cca30
🔍 Latest deploy log https://app.netlify.com/projects/nx-dev/deploys/6a93adf73171b9000812949d
😎 Deploy Preview https://deploy-preview-36851--nx-dev.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@polygraph-app
polygraph-app Bot marked this pull request as ready for review August 30, 2026 03:29
@polygraph-app
polygraph-app Bot requested a review from a team as a code owner August 30, 2026 03:29
@polygraph-app
polygraph-app Bot requested a review from lourw August 30, 2026 03:29
@nx-cloud

nx-cloud Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

View your CI Pipeline Execution ↗ for commit 3b7f6b2

Command Status Duration Result
nx run-many -t check-imports check-lock-files c... ✅ Succeeded 3s View ↗
nx affected --targets=lint,oxlint,test,build,e2... ✅ Succeeded <1s View ↗
nx-cloud record -- pnpm nx-cloud conformance:check ✅ Succeeded 55s View ↗
nx build workspace-plugin ✅ Succeeded <1s View ↗
nx-cloud record -- nx sync:check ✅ Succeeded 18s View ↗
nx-cloud record -- nx format:check ✅ Succeeded 1s View ↗

☁️ Nx Cloud last updated this comment at 2026-08-30 04:18:01 UTC

The formatter now returns a structured report that renders two ways:
Slack sections for the webhook payload, and plain markdown that is
written to GITHUB_STEP_SUMMARY (and printed to the log). The summary
gets real headings, links and tables instead of fenced text.

Slack rendering gains a bold title, a bold label above each table, and
a top-level `text` fallback so notifications show the report title.
… dry run

The Slack message now uses a header block for the title, a context
block for the notes, one section per unlabeled-items link (the encoded
label filters run over 1500 characters each, so two in one section
breaks the 3000 character limit), a divider before each table, and a
context block for the footer link.

workflow_dispatch gets a dry_run input, on by default, that skips the
Slack message and the cached-data upload. A manual run would otherwise
overwrite the artifact the next scheduled run diffs against, moving its
"since" window to the day of the test. The job summary is still written.
skip_slack and skip_cache_upload replace dry_run, both on by default.
A manual run can then upload the new-shape cache to set the baseline
for the new columns without posting to Slack.
…orkflow

The step was lookup-only and nothing read its result, so it never
restored anything. Its post step still saved on every miss: globbing
`**/node_modules` across the pnpm checkout took over four hours before
a 14 minute tar of a 943 MB archive that the cache quota evicted before
the next run. setup-node already caches the pnpm store.
@AgentEnder
AgentEnder merged commit 56f48ee into master Aug 30, 2026
20 checks passed
@AgentEnder
AgentEnder deleted the weekly-slack-report-pr-data-6e2dd3e0 branch August 30, 2026 15:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants