chore(repo): add PR stats and ages to weekly issue report (#36851)
## Current Behavior <!-- This is the behavior we have today --> 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 <!-- This is the behavior we should expect with the changes in this PR --> 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) <!-- Please link the issue being fixed so it gets closed when this is merged. --> Fixes #
C
Craigory Coppola committed
56f48eeef458df96b5f737bb36de5abcb65ece16
Parent: 490b4d6
Committed by GitHub <noreply@github.com>
on 8/30/2026, 3:05:07 PM