1- import * as fs from "fs";
2-
31import * as core from "@actions/core" ;
42
53import * as actionsUtil from "./actions-util" ;
@@ -18,6 +16,7 @@ import {
1816 isThirdPartyAnalysis ,
1917} from "./status-report" ;
2018import * as upload_lib from "./upload-lib" ;
19+ import { uploadSarif } from "./upload-sarif" ;
2120import {
2221 ConfigurationError ,
2322 checkActionVersion ,
@@ -32,60 +31,6 @@ interface UploadSarifStatusReport
3231 extends StatusReportBase ,
3332 upload_lib . UploadStatusReport { }
3433
35- /**
36- * Searches for SARIF files for the given `analysis` in the given `sarifPath`.
37- * If any are found, then they are uploaded to the appropriate endpoint for the given `analysis`.
38- *
39- * @param logger The logger to use.
40- * @param features Information about FFs.
41- * @param sarifPath The path to a SARIF file or directory containing SARIF files.
42- * @param pathStats Information about `sarifPath`.
43- * @param checkoutPath The checkout path.
44- * @param analysis The configuration of the analysis we should upload SARIF files for.
45- * @param category The SARIF category to use for the upload.
46- * @returns The result of uploading the SARIF file(s) or `undefined` if there are none.
47- */
48- async function findAndUpload(
49- logger: Logger,
50- features: Features,
51- sarifPath: string,
52- pathStats: fs.Stats,
53- checkoutPath: string,
54- analysis: analyses.AnalysisConfig,
55- category?: string,
56- ): Promise<upload_lib.UploadResult | undefined> {
57- let sarifFiles: string[] | undefined;
58-
59- if (pathStats.isDirectory()) {
60- sarifFiles = upload_lib.findSarifFilesInDir(
61- sarifPath,
62- analysis.sarifPredicate,
63- );
64- } else if (
65- pathStats.isFile() &&
66- (analysis.sarifPredicate(sarifPath) ||
67- (analysis.kind === analyses.AnalysisKind.CodeScanning &&
68- !analyses.CodeQuality.sarifPredicate(sarifPath)))
69- ) {
70- sarifFiles = [sarifPath];
71- } else {
72- return undefined;
73- }
74-
75- if (sarifFiles.length !== 0) {
76- return await upload_lib.uploadSpecifiedFiles(
77- sarifFiles,
78- checkoutPath,
79- category,
80- features,
81- logger,
82- analysis,
83- );
84- }
85-
86- return undefined;
87- }
88-
8934async function sendSuccessStatusReport (
9035 startedAt : Date ,
9136 uploadStats : upload_lib . UploadStatusReport ,
@@ -144,56 +89,37 @@ async function run() {
14489 const sarifPath = actionsUtil . getRequiredInput ( "sarif_file" ) ;
14590 const checkoutPath = actionsUtil . getRequiredInput ( "checkout_path" ) ;
14691 const category = actionsUtil . getOptionalInput ( "category" ) ;
147- const pathStats = fs.lstatSync(sarifPath, { throwIfNoEntry: false });
148-
149- if (pathStats === undefined) {
150- throw new ConfigurationError(`Path does not exist: ${sarifPath}.`);
151- }
15292
153- const sarifIds: Array<{ analysis: string; id: string }> = [];
154- const uploadResult = await findAndUpload(
93+ const uploadResults = await uploadSarif (
15594 logger ,
15695 features ,
157- sarifPath,
158- pathStats,
15996 checkoutPath ,
160- analyses.CodeScanning ,
97+ sarifPath ,
16198 category ,
16299 ) ;
163- if (uploadResult !== undefined) {
164- core.setOutput("sarif-id", uploadResult.sarifID);
165- sarifIds.push( {
166- analysis: analyses.AnalysisKind.CodeScanning,
167- id: uploadResult.sarifID ,
168- } );
100+
101+ // Fail if we didn't upload anything.
102+ if ( Object . keys ( uploadResults ) . length === 0 ) {
103+ throw new ConfigurationError (
104+ `No SARIF files found to upload in " ${ sarifPath } ".` ,
105+ ) ;
169106 }
170107
171- // If there are `.quality.sarif` files in `sarifPath`, then upload those to the code quality service.
172- const qualityUploadResult = await findAndUpload(
173- logger,
174- features,
175- sarifPath,
176- pathStats,
177- checkoutPath,
178- analyses.CodeQuality,
179- actionsUtil.fixCodeQualityCategory(logger, category),
180- );
181- if (qualityUploadResult !== undefined) {
182- sarifIds.push({
183- analysis: analyses.AnalysisKind.CodeQuality,
184- id: qualityUploadResult.sarifID,
185- });
108+ const codeScanningResult =
109+ uploadResults [ analyses . AnalysisKind . CodeScanning ] ;
110+ if ( codeScanningResult !== undefined ) {
111+ core . setOutput ( "sarif-id" , codeScanningResult . sarifID ) ;
186112 }
187- core.setOutput("sarif-ids", JSON.stringify(sarifIds ));
113+ core . setOutput ( "sarif-ids" , JSON . stringify ( uploadResults ) ) ;
188114
189115 // We don't upload results in test mode, so don't wait for processing
190116 if ( isInTestMode ( ) ) {
191117 core . debug ( "In test mode. Waiting for processing is disabled." ) ;
192118 } else if ( actionsUtil . getRequiredInput ( "wait-for-processing" ) === "true" ) {
193- if (uploadResult !== undefined) {
119+ if ( codeScanningResult !== undefined ) {
194120 await upload_lib . waitForProcessing (
195121 getRepositoryNwo ( ) ,
196- uploadResult .sarifID,
122+ codeScanningResult . sarifID ,
197123 logger ,
198124 ) ;
199125 }
@@ -202,7 +128,7 @@ async function run() {
202128 }
203129 await sendSuccessStatusReport (
204130 startedAt ,
205- uploadResult ?.statusReport || {},
131+ codeScanningResult ?. statusReport || { } ,
206132 logger ,
207133 ) ;
208134 } catch ( unwrappedError ) {
0 commit comments