





























@@ -1,10 +1,14 @@
11#!/usr/bin/env node
223+// Generates release dependency evidence artifacts and summaries.
34import { execFileSync } from "node:child_process";
45import { appendFile, mkdir, readFile, rm, writeFile } from "node:fs/promises";
56import path from "node:path";
67import process from "node:process";
789+/**
10+ * Dependency evidence reports generated for release artifacts.
11+ */
812export const DEPENDENCY_EVIDENCE_REPORTS = [
913{
1014name: "npm advisory vulnerability gate",
@@ -70,13 +74,19 @@ function runCommand(command, args, { rootDir, execFileSyncImpl = execFileSync })
7074});
7175}
727677+/**
78+ * Resolves the release tag when the release ref is a SHA or tag.
79+ */
7380export function resolveReleaseTag({ releaseRef, packageVersion }) {
7481if (/^[0-9a-fA-F]{40}$/u.test(releaseRef)) {
7582return `v${packageVersion}`;
7683}
7784return releaseRef;
7885}
798687+/**
88+ * Resolves the previous reachable release tag for dependency diffs.
89+ */
8090export function resolvePreviousReleaseTag({
8191 rootDir = process.cwd(),
8292 execFileSyncImpl = execFileSync,
@@ -114,6 +124,9 @@ export function resolvePreviousReleaseTag({
114124);
115125}
116126127+/**
128+ * Creates the dependency evidence manifest payload.
129+ */
117130export function createDependencyEvidenceManifest({
118131 generatedAt = new Date().toISOString(),
119132 releaseTag,
@@ -149,6 +162,9 @@ async function readJson(filePath) {
149162return JSON.parse(await readFile(filePath, "utf8"));
150163}
151164165+/**
166+ * Reads generated reports and collects summary counts.
167+ */
152168export async function collectDependencyEvidenceSummaryCounts(evidenceDir) {
153169const [vulnerability, transitiveRisk, ownershipSurface, dependencyChanges] = await Promise.all([
154170readJson(reportPath(evidenceDir, "dependency-vulnerability-gate.json")),
@@ -171,6 +187,9 @@ export async function collectDependencyEvidenceSummaryCounts(evidenceDir) {
171187};
172188}
173189190+/**
191+ * Renders the dependency evidence Markdown summary.
192+ */
174193export function renderDependencyEvidenceSummary({ releaseTag, releaseSha, baseRef, counts }) {
175194return `${[
176195 "# Dependency release evidence",
@@ -199,6 +218,9 @@ export function renderDependencyEvidenceSummary({ releaseTag, releaseSha, baseRe
199218 ].join("\n")}\n`;
200219}
201220221+/**
222+ * Renders the GitHub Actions step summary for dependency evidence.
223+ */
202224export function renderDependencyEvidenceStepSummary({ evidenceArtifactName, baseRef, counts }) {
203225return `${[
204226 "### Dependency release evidence",
@@ -267,6 +289,9 @@ function runEvidenceReports({ rootDir, outputDir, baseRef, execFileSyncImpl }) {
267289);
268290}
269291292+/**
293+ * Generates dependency evidence reports, manifest, and summaries for a release.
294+ */
270295export async function generateDependencyReleaseEvidence({
271296 rootDir = process.cwd(),
272297 outputDir,
@@ -402,6 +427,9 @@ function parseArgs(argv) {
402427return options;
403428}
404429430+/**
431+ * Runs the dependency release evidence generator CLI.
432+ */
405433export async function main(argv = process.argv.slice(2)) {
406434await generateDependencyReleaseEvidence(parseArgs(argv));
407435return 0;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。