feat: add large summary handling with artifact upload
When the dependency review summary exceeds GitHub's size limit (1024k), upload it as an artifact and provide a link in the comment. This ensures users can still access the full review details even when the summary is too large to display directly.
This commit is contained in:
+100219
-1302
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+2911
File diff suppressed because it is too large
Load Diff
Generated
+1378
-461
File diff suppressed because it is too large
Load Diff
@@ -25,6 +25,7 @@
|
|||||||
"author": "GitHub",
|
"author": "GitHub",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@actions/artifact": "^2.3.2",
|
||||||
"@actions/core": "^1.11.1",
|
"@actions/core": "^1.11.1",
|
||||||
"@actions/github": "^6.0.1",
|
"@actions/github": "^6.0.1",
|
||||||
"@octokit/plugin-retry": "^6.1.0",
|
"@octokit/plugin-retry": "^6.1.0",
|
||||||
|
|||||||
+40
@@ -24,6 +24,8 @@ import {getRefs} from './git-refs'
|
|||||||
import {groupDependenciesByManifest} from './utils'
|
import {groupDependenciesByManifest} from './utils'
|
||||||
import {commentPr, MAX_COMMENT_LENGTH} from './comment-pr'
|
import {commentPr, MAX_COMMENT_LENGTH} from './comment-pr'
|
||||||
import {getDeniedChanges} from './deny'
|
import {getDeniedChanges} from './deny'
|
||||||
|
import * as artifact from '@actions/artifact'
|
||||||
|
import * as fs from 'fs'
|
||||||
|
|
||||||
async function delay(ms: number): Promise<void> {
|
async function delay(ms: number): Promise<void> {
|
||||||
return new Promise(resolve => setTimeout(resolve, ms))
|
return new Promise(resolve => setTimeout(resolve, ms))
|
||||||
@@ -61,6 +63,41 @@ async function getComparison(
|
|||||||
return comparison
|
return comparison
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function handleLargeSummary(
|
||||||
|
summaryContent: string
|
||||||
|
): Promise<string> {
|
||||||
|
const MAX_SUMMARY_SIZE = 1024 * 1024 // 1024k in bytes
|
||||||
|
if (Buffer.byteLength(summaryContent, 'utf8') <= MAX_SUMMARY_SIZE) {
|
||||||
|
return summaryContent
|
||||||
|
}
|
||||||
|
|
||||||
|
const artifactClient = new artifact.DefaultArtifactClient()
|
||||||
|
const artifactName = 'dependency-review-summary'
|
||||||
|
const files = ['summary.md']
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Write the summary to a file
|
||||||
|
await fs.promises.writeFile('summary.md', summaryContent)
|
||||||
|
|
||||||
|
// Upload the artifact
|
||||||
|
await artifactClient.uploadArtifact(artifactName, files, '.', {
|
||||||
|
retentionDays: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
// Return a minimal summary with a link to the artifact
|
||||||
|
return `# Dependency Review Summary
|
||||||
|
|
||||||
|
The full dependency review summary is too large to display here. Please download the artifact named "${artifactName}" to view the complete report.
|
||||||
|
|
||||||
|
[View full job summary](${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID})`
|
||||||
|
} catch (error) {
|
||||||
|
core.warning(
|
||||||
|
`Failed to handle large summary: ${error instanceof Error ? error.message : 'Unknown error'}`
|
||||||
|
)
|
||||||
|
return summaryContent
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function run(): Promise<void> {
|
async function run(): Promise<void> {
|
||||||
try {
|
try {
|
||||||
const config = await readConfig()
|
const config = await readConfig()
|
||||||
@@ -179,6 +216,9 @@ async function run(): Promise<void> {
|
|||||||
let rendered = core.summary.stringify()
|
let rendered = core.summary.stringify()
|
||||||
core.setOutput('comment-content', rendered)
|
core.setOutput('comment-content', rendered)
|
||||||
|
|
||||||
|
// Handle large summaries by uploading as artifact
|
||||||
|
rendered = await handleLargeSummary(rendered)
|
||||||
|
|
||||||
// if the summary is oversized, replace with minimal version
|
// if the summary is oversized, replace with minimal version
|
||||||
if (rendered.length >= MAX_COMMENT_LENGTH) {
|
if (rendered.length >= MAX_COMMENT_LENGTH) {
|
||||||
core.debug(
|
core.debug(
|
||||||
|
|||||||
Reference in New Issue
Block a user