11import { join } from "path" ;
2+ import { outputFile } from "fs-extra" ;
3+ import { dump } from "js-yaml" ;
4+ import { file } from "tmp-promise" ;
25import type { BaseLogger } from "../common/logging" ;
36import type { QueryLanguage } from "../common/query-language" ;
47import type { CodeQLCliServer } from "../codeql-cli/cli" ;
58import type { QlPackDetails } from "./ql-pack-details" ;
69import { getQlPackFilePath } from "../common/ql" ;
7- import { isSarifResultsQueryKind } from "../common/query-metadata " ;
10+ import type { SuiteInstruction } from "../packaging/suite-instruction " ;
811
912export async function resolveCodeScanningQueryPack (
1013 logger : BaseLogger ,
@@ -25,20 +28,30 @@ export async function resolveCodeScanningQueryPack(
2528
2629 // Resolve queries
2730 void logger . log ( `Resolving queries for pack: ${ packName } ` ) ;
28- const suitePath = join (
29- packDir ,
30- "codeql-suites" ,
31- `${ language } -code-scanning.qls` ,
32- ) ;
31+
32+ const suiteFile = await file ( {
33+ postfix : ".qls" ,
34+ } ) ;
35+ const suitePath = suiteFile . path ;
36+ const suiteYaml : SuiteInstruction [ ] = [
37+ {
38+ import : `codeql-suites/${ language } -code-scanning.qls` ,
39+ from : `${ downloadedPack . name } @${ downloadedPack . version } ` ,
40+ } ,
41+ // Exclude any non-problem queries
42+ {
43+ exclude : {
44+ kind : [ "diagnostic" , "metric" ] ,
45+ } ,
46+ } ,
47+ ] ;
48+ await outputFile ( suitePath , dump ( suiteYaml ) , "utf8" ) ;
49+
3350 const resolvedQueries = await cliServer . resolveQueries ( suitePath ) ;
3451
35- const problemQueries = await filterToOnlyProblemQueries (
36- logger ,
37- cliServer ,
38- resolvedQueries ,
39- ) ;
52+ await suiteFile . cleanup ( ) ;
4053
41- if ( problemQueries . length === 0 ) {
54+ if ( resolvedQueries . length === 0 ) {
4255 throw Error (
4356 `No problem queries found in published query pack: ${ packName } .` ,
4457 ) ;
@@ -48,28 +61,11 @@ export async function resolveCodeScanningQueryPack(
4861 const qlPackFilePath = await getQlPackFilePath ( packDir ) ;
4962
5063 const qlPackDetails : QlPackDetails = {
51- queryFiles : problemQueries ,
64+ queryFiles : resolvedQueries ,
5265 qlPackRootPath : packDir ,
5366 qlPackFilePath,
5467 language,
5568 } ;
5669
5770 return qlPackDetails ;
5871}
59-
60- async function filterToOnlyProblemQueries (
61- logger : BaseLogger ,
62- cliServer : CodeQLCliServer ,
63- queries : string [ ] ,
64- ) : Promise < string [ ] > {
65- const problemQueries : string [ ] = [ ] ;
66- for ( const query of queries ) {
67- const queryMetadata = await cliServer . resolveMetadata ( query ) ;
68- if ( isSarifResultsQueryKind ( queryMetadata . kind ) ) {
69- problemQueries . push ( query ) ;
70- } else {
71- void logger . log ( `Skipping non-problem query ${ query } ` ) ;
72- }
73- }
74- return problemQueries ;
75- }
0 commit comments