1+ import * as core from "@actions/core" ;
12import test , { ExecutionContext } from "ava" ;
23import * as sinon from "sinon" ;
34
45import * as actionsUtil from "./actions-util" ;
56import { AnalysisKind } from "./analyses" ;
7+ import * as apiClient from "./api-client" ;
68import * as codeql from "./codeql" ;
79import * as configUtils from "./config-utils" ;
10+ import * as debugArtifacts from "./debug-artifacts" ;
811import { EnvVar } from "./environment" ;
912import { Feature } from "./feature-flags" ;
1013import * as initActionPostHelper from "./init-action-post-helper" ;
@@ -16,6 +19,7 @@ import {
1619 createFeatures ,
1720 createTestConfig ,
1821 makeVersionInfo ,
22+ RecordingLogger ,
1923 setupTests ,
2024} from "./testing-utils" ;
2125import * as uploadLib from "./upload-lib" ;
@@ -622,3 +626,61 @@ async function testFailedSarifUpload(
622626 }
623627 return result ;
624628}
629+
630+ test ( "tryUploadSarifIfRunFailed - uploads as artifact for risk assessments" , async ( t ) => {
631+ process . env [ "GITHUB_JOB" ] = "analyze" ;
632+ process . env [ "GITHUB_REPOSITORY" ] = "github/codeql-action-fake-repository" ;
633+ process . env [ "GITHUB_WORKSPACE" ] =
634+ "/home/runner/work/codeql-action-fake-repository/codeql-action-fake-repository" ;
635+
636+ const logger = new RecordingLogger ( ) ;
637+ const config = createTestConfig ( {
638+ analysisKinds : [ AnalysisKind . RiskAssessment ] ,
639+ codeQLCmd : "codeql-for-testing" ,
640+ languages : [ "javascript" ] ,
641+ } ) ;
642+ const features = createFeatures ( [ ] ) ;
643+
644+ sinon
645+ . stub ( apiClient , "getGitHubVersion" )
646+ . resolves ( { type : util . GitHubVariant . GHES , version : "3.0.0" } ) ;
647+
648+ const uploadArtifact = sinon . stub ( ) . resolves ( ) ;
649+ const artifactClient = { uploadArtifact } ;
650+ sinon
651+ . stub ( debugArtifacts , "getArtifactUploaderClient" )
652+ . value ( ( ) => artifactClient ) ;
653+
654+ const matrix = JSON . stringify ( {
655+ language : "javascript" ,
656+ category : "/language:javascript" ,
657+ "build-mode" : "none" ,
658+ runner : "ubuntu-latest" ,
659+ } ) ;
660+ sinon . stub ( core , "getInput" ) . withArgs ( "matrix" ) . returns ( matrix ) ;
661+
662+ const codeqlObject = await codeql . getCodeQLForTesting ( ) ;
663+ sinon . stub ( codeqlObject , "databaseExportDiagnostics" ) . resolves ( ) ;
664+ sinon . stub ( codeqlObject , "diagnosticsExport" ) . resolves ( ) ;
665+
666+ sinon . stub ( codeql , "getCodeQL" ) . resolves ( codeqlObject ) ;
667+
668+ const result = await initActionPostHelper . tryUploadSarifIfRunFailed (
669+ config ,
670+ parseRepositoryNwo ( "github/codeql-action-fake-repository" ) ,
671+ features ,
672+ logger ,
673+ ) ;
674+
675+ const expectedName = `sarif-artifact-${ debugArtifacts . getArtifactSuffix ( matrix ) } ` ;
676+ t . is ( result . upload_failed_run_skipped_because , undefined ) ;
677+ t . is ( result . upload_failed_run_error , undefined ) ;
678+ t . is ( result . sarifID , expectedName ) ;
679+ t . assert (
680+ uploadArtifact . calledOnceWith (
681+ expectedName ,
682+ sinon . match . array ,
683+ sinon . match . string ,
684+ ) ,
685+ ) ;
686+ } ) ;
0 commit comments