@@ -627,6 +627,13 @@ async function testFailedSarifUpload(
627627 return result ;
628628}
629629
630+ const singleLanguageMatrix = JSON . stringify ( {
631+ language : "javascript" ,
632+ category : "/language:javascript" ,
633+ "build-mode" : "none" ,
634+ runner : "ubuntu-latest" ,
635+ } ) ;
636+
630637async function mockRiskAssessmentEnv ( matrix : string ) {
631638 process . env [ "GITHUB_JOB" ] = "analyze" ;
632639 process . env [ "GITHUB_REPOSITORY" ] = "github/codeql-action-fake-repository" ;
@@ -655,16 +662,9 @@ async function mockRiskAssessmentEnv(matrix: string) {
655662}
656663
657664test ( "tryUploadSarifIfRunFailed - uploads as artifact for risk assessments" , async ( t ) => {
658- const matrix = JSON . stringify ( {
659- language : "javascript" ,
660- category : "/language:javascript" ,
661- "build-mode" : "none" ,
662- runner : "ubuntu-latest" ,
663- } ) ;
664-
665- const [ uploadArtifact ] = await mockRiskAssessmentEnv ( matrix ) ;
666-
667665 const logger = new RecordingLogger ( ) ;
666+ const [ uploadArtifact ] = await mockRiskAssessmentEnv ( singleLanguageMatrix ) ;
667+
668668 const config = createTestConfig ( {
669669 analysisKinds : [ AnalysisKind . RiskAssessment ] ,
670670 codeQLCmd : "codeql-for-testing" ,
@@ -680,7 +680,7 @@ test("tryUploadSarifIfRunFailed - uploads as artifact for risk assessments", asy
680680 ) ;
681681
682682 const expectedName = debugArtifacts . sanitizeArtifactName (
683- `sarif-artifact-${ debugArtifacts . getArtifactSuffix ( matrix ) } ` ,
683+ `sarif-artifact-${ debugArtifacts . getArtifactSuffix ( singleLanguageMatrix ) } ` ,
684684 ) ;
685685 t . is ( result . upload_failed_run_skipped_because , undefined ) ;
686686 t . is ( result . upload_failed_run_error , undefined ) ;
@@ -693,3 +693,62 @@ test("tryUploadSarifIfRunFailed - uploads as artifact for risk assessments", asy
693693 ) ,
694694 ) ;
695695} ) ;
696+
697+ const skippedUploadTest = test . macro ( {
698+ exec : async (
699+ t : ExecutionContext < unknown > ,
700+ config : Partial < configUtils . Config > ,
701+ expectedSkippedReason : string ,
702+ ) => {
703+ const logger = new RecordingLogger ( ) ;
704+ const [ uploadArtifact ] = await mockRiskAssessmentEnv ( singleLanguageMatrix ) ;
705+ const features = createFeatures ( [ ] ) ;
706+
707+ const result = await initActionPostHelper . tryUploadSarifIfRunFailed (
708+ createTestConfig ( config ) ,
709+ parseRepositoryNwo ( "github/codeql-action-fake-repository" ) ,
710+ features ,
711+ logger ,
712+ ) ;
713+
714+ t . is ( result . upload_failed_run_skipped_because , expectedSkippedReason ) ;
715+ t . assert ( uploadArtifact . notCalled ) ;
716+ } ,
717+
718+ title : ( providedTitle : string = "" ) =>
719+ `tryUploadSarifIfRunFailed - skips upload ${ providedTitle } ` ,
720+ } ) ;
721+
722+ test (
723+ "without CodeQL command" ,
724+ skippedUploadTest ,
725+ // No codeQLCmd
726+ {
727+ analysisKinds : [ AnalysisKind . RiskAssessment ] ,
728+ languages : [ "javascript" ] ,
729+ } satisfies Partial < configUtils . Config > ,
730+ "CodeQL command not found" ,
731+ ) ;
732+
733+ test (
734+ "if no language is configured" ,
735+ skippedUploadTest ,
736+ // No explicit language configuration
737+ {
738+ analysisKinds : [ AnalysisKind . RiskAssessment ] ,
739+ codeQLCmd : "codeql-for-testing" ,
740+ } satisfies Partial < configUtils . Config > ,
741+ "Unexpectedly, the configuration is not for a single language." ,
742+ ) ;
743+
744+ test (
745+ "if multiple languages is configured" ,
746+ skippedUploadTest ,
747+ // Multiple explicit languages configured
748+ {
749+ analysisKinds : [ AnalysisKind . RiskAssessment ] ,
750+ codeQLCmd : "codeql-for-testing" ,
751+ languages : [ "javascript" , "python" ] ,
752+ } satisfies Partial < configUtils . Config > ,
753+ "Unexpectedly, the configuration is not for a single language." ,
754+ ) ;
0 commit comments