Post React Compiler report as a sticky PR comment instead of a CI job
Review feedback: as a lint-matrix job it never fails and the report is buried in the job summary. A dedicated workflow now runs the report on every same-repo PR and posts it via sticky-pull-request-comment. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -29,7 +29,6 @@ jobs:
|
|||||||
'typecheck:ios',
|
'typecheck:ios',
|
||||||
'typecheck:android',
|
'typecheck:android',
|
||||||
'typecheck:web',
|
'typecheck:web',
|
||||||
'react-compiler:report',
|
|
||||||
]
|
]
|
||||||
steps:
|
steps:
|
||||||
- name: ⬇️ Check out Git repository
|
- name: ⬇️ Check out Git repository
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
name: React Compiler report
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
# Permissions are granted per-job below; anything unlisted defaults to none.
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
report:
|
||||||
|
name: React Compiler report
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
# Fork guard: posting the sticky comment needs pull-requests: write, which
|
||||||
|
# the GITHUB_TOKEN of a fork-originated run never gets.
|
||||||
|
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
# Needed by sticky-pull-request-comment to post the report.
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- name: ⬇️ Check out Git repository
|
||||||
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
|
||||||
|
- name: 🔧 Install node
|
||||||
|
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||||
|
with:
|
||||||
|
node-version-file: package.json
|
||||||
|
cache: pnpm
|
||||||
|
- name: 📦 pnpm install
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
- name: ⚛️ Generate React Compiler report
|
||||||
|
env:
|
||||||
|
REACT_COMPILER_REPORT_PATH: ${{ runner.temp }}/react-compiler-report.md
|
||||||
|
run: pnpm react-compiler:report
|
||||||
|
- name: 💬 Drop a comment
|
||||||
|
uses: marocchino/sticky-pull-request-comment@5770ad5eb8f42dd2c4f34da00c94c5381e49af88 # v3.0.5
|
||||||
|
with:
|
||||||
|
header: react-compiler-report
|
||||||
|
path: ${{ runner.temp }}/react-compiler-report.md
|
||||||
+2
-1
@@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
Reports which components and hooks React Compiler skipped optimizing, grouped by
|
Reports which components and hooks React Compiler skipped optimizing, grouped by
|
||||||
the compiler's own diagnostic category. Run with `pnpm react-compiler:report`;
|
the compiler's own diagnostic category. Run with `pnpm react-compiler:report`;
|
||||||
also runs in the Lint workflow, where it writes the report to the job summary.
|
the React Compiler report workflow also runs it on every pull request and posts
|
||||||
|
the report as a sticky PR comment.
|
||||||
|
|
||||||
## updateExtensions.sh
|
## updateExtensions.sh
|
||||||
|
|
||||||
|
|||||||
@@ -21,11 +21,19 @@
|
|||||||
* Runs under Node's type stripping, so keep the syntax erasable - no enums, no
|
* Runs under Node's type stripping, so keep the syntax erasable - no enums, no
|
||||||
* namespaces, and type-only imports must say `import type`.
|
* namespaces, and type-only imports must say `import type`.
|
||||||
*
|
*
|
||||||
* Prints the same report to stdout and, under GitHub Actions, to the job
|
* Prints the report to stdout, and writes a markdown version to the job
|
||||||
* summary. Always exits 0 - this is a metric, not a gate.
|
* summary under GitHub Actions and to REACT_COMPILER_REPORT_PATH when set
|
||||||
|
* (the React Compiler report workflow posts that file as a sticky PR
|
||||||
|
* comment). Always exits 0 - this is a metric, not a gate.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {appendFileSync, readdirSync, readFileSync, statSync} from 'node:fs'
|
import {
|
||||||
|
appendFileSync,
|
||||||
|
readdirSync,
|
||||||
|
readFileSync,
|
||||||
|
statSync,
|
||||||
|
writeFileSync,
|
||||||
|
} from 'node:fs'
|
||||||
import {dirname, join, relative, resolve} from 'node:path'
|
import {dirname, join, relative, resolve} from 'node:path'
|
||||||
import {fileURLToPath} from 'node:url'
|
import {fileURLToPath} from 'node:url'
|
||||||
|
|
||||||
@@ -179,11 +187,15 @@ for (const [file, message] of unreadable) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The markdown report goes to the job summary when running under GitHub
|
||||||
|
* Actions, and to REACT_COMPILER_REPORT_PATH when set - the React Compiler
|
||||||
|
* report workflow posts that file as a sticky PR comment.
|
||||||
|
*/
|
||||||
const summaryPath = process.env.GITHUB_STEP_SUMMARY
|
const summaryPath = process.env.GITHUB_STEP_SUMMARY
|
||||||
if (summaryPath) {
|
const reportPath = process.env.REACT_COMPILER_REPORT_PATH
|
||||||
appendFileSync(
|
if (summaryPath || reportPath) {
|
||||||
summaryPath,
|
const markdown = [
|
||||||
[
|
|
||||||
`## React Compiler`,
|
`## React Compiler`,
|
||||||
``,
|
``,
|
||||||
`**${headline}** ${subhead}`,
|
`**${headline}** ${subhead}`,
|
||||||
@@ -207,12 +219,12 @@ if (summaryPath) {
|
|||||||
...[...optedOut]
|
...[...optedOut]
|
||||||
.sort()
|
.sort()
|
||||||
.map(
|
.map(
|
||||||
key =>
|
key => `- \`${key}\` - CompileSkip: opted out via ${OPT_OUT_DIRECTIVE}`,
|
||||||
`- \`${key}\` - CompileSkip: opted out via ${OPT_OUT_DIRECTIVE}`,
|
|
||||||
),
|
),
|
||||||
``,
|
``,
|
||||||
`</details>`,
|
`</details>`,
|
||||||
``,
|
``,
|
||||||
].join('\n'),
|
].join('\n')
|
||||||
)
|
if (summaryPath) appendFileSync(summaryPath, markdown)
|
||||||
|
if (reportPath) writeFileSync(reportPath, markdown)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user