Allow "additive" queries in workflow by prefixing with "+"

See discussion on https://github.com/github/code-scanning/issues/1446
This commit is contained in:
Sam Partington 2020-08-27 17:11:56 +01:00
parent 8229390c1d
commit 82000c26c8
7 changed files with 159 additions and 22 deletions

27
lib/config-utils.js generated
View file

@ -370,19 +370,26 @@ async function getLanguages() {
}
return parsedLanguages;
}
/**
* Returns true if queries were provided in the workflow file
* (and thus added), otherwise false
*/
async function addQueriesFromWorkflowIfRequired(codeQL, languages, resultMap, tempDir) {
const queryUses = core.getInput('queries');
let queryUses = core.getInput('queries');
if (queryUses) {
queryUses = queryUses.trim();
queryUses = queryUses.replace(/^\+/, ''); // "+" means "don't override config file" - see shouldAddConfigFileQueries
for (const query of queryUses.split(',')) {
await parseQueryUses(languages, codeQL, resultMap, query, tempDir);
}
return true;
}
return false;
}
// Returns true if either no queries were provided in the workflow.
// or if the queries in the workflow were provided in "additive" mode,
// indicating that they shouldn't override the config queries but
// should instead be added in addition
function shouldAddConfigFileQueries() {
const queryUses = core.getInput('queries');
if (queryUses) {
return queryUses.trimStart().substr(0, 1) === '+';
}
return true;
}
/**
* Get the default config for when the user has not supplied one.
@ -444,8 +451,10 @@ async function loadConfig(configFile, tempDir, toolCacheDir, codeQL) {
}
// If queries were provided using `with` in the action configuration,
// they should take precedence over the queries in the config file
const addedQueriesFromAction = await addQueriesFromWorkflowIfRequired(codeQL, languages, queries, tempDir);
if (!addedQueriesFromAction && QUERIES_PROPERTY in parsedYAML) {
// unless they're prefixed with "+", in which case they supplement those
// in the config file.
await addQueriesFromWorkflowIfRequired(codeQL, languages, queries, tempDir);
if (shouldAddConfigFileQueries() && QUERIES_PROPERTY in parsedYAML) {
if (!(parsedYAML[QUERIES_PROPERTY] instanceof Array)) {
throw new Error(getQueriesInvalid(configFile));
}