From 7b47280cacdf34e46de2d29c1eb201d6c4aa5925 Mon Sep 17 00:00:00 2001 From: Scott Crooks Date: Fri, 11 Apr 2025 19:43:02 +0200 Subject: [PATCH] feat: adding any and all boolean outputs This adds two boolean outputs `any` and `all` so that someone can track whether (1) any filter has at least one changed file, or (2) all filters have at least one changed file Closes #266 Signed-off-by: Scott Crooks --- action.yml | 4 ++++ dist/index.js | 6 ++++++ src/main.ts | 6 ++++++ 3 files changed, 16 insertions(+) diff --git a/action.yml b/action.yml index e7d24f5..0740b84 100644 --- a/action.yml +++ b/action.yml @@ -45,6 +45,10 @@ inputs: required: false default: '100' outputs: + all_changed: + description: Boolean value indicating if all of the filters contained at least one changed file + any_changed: + description: Boolean value indicating if any of the filters contained at least one changed file changes: description: JSON array with names of all filters matching any of changed files runs: diff --git a/dist/index.js b/dist/index.js index cc7d7d4..e33d580 100644 --- a/dist/index.js +++ b/dist/index.js @@ -745,11 +745,14 @@ async function getChangedFilesFromApi(token, pullRequest) { function exportResults(results, format) { core.info('Results:'); const changes = []; + let anyChanged = false; + let allChanged = true; for (const [key, files] of Object.entries(results)) { const value = files.length > 0; core.startGroup(`Filter ${key} = ${value}`); if (files.length > 0) { changes.push(key); + anyChanged = true; core.info('Matching files:'); for (const file of files) { core.info(`${file.filename} [${file.status}]`); @@ -757,6 +760,7 @@ function exportResults(results, format) { } else { core.info('Matching files: none'); + allChanged = false; } core.setOutput(key, value); core.setOutput(`${key}_count`, files.length); @@ -764,6 +768,8 @@ function exportResults(results, format) { const filesValue = serializeExport(files, format); core.setOutput(`${key}_files`, filesValue); } + core.setOutput('all_changed', allChanged); + core.setOutput('any_changed', anyChanged); core.endGroup(); } if (results['changes'] === undefined) { diff --git a/src/main.ts b/src/main.ts index 8320287..1ee81f7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -231,17 +231,21 @@ async function getChangedFilesFromApi(token: string, pullRequest: PullRequestEve function exportResults(results: FilterResults, format: ExportFormat): void { core.info('Results:') const changes = [] + let anyChanged = false + let allChanged = true for (const [key, files] of Object.entries(results)) { const value = files.length > 0 core.startGroup(`Filter ${key} = ${value}`) if (files.length > 0) { changes.push(key) + anyChanged = true core.info('Matching files:') for (const file of files) { core.info(`${file.filename} [${file.status}]`) } } else { core.info('Matching files: none') + allChanged = false } core.setOutput(key, value) @@ -250,6 +254,8 @@ function exportResults(results: FilterResults, format: ExportFormat): void { const filesValue = serializeExport(files, format) core.setOutput(`${key}_files`, filesValue) } + core.setOutput('all_changed', allChanged) + core.setOutput('any_changed', anyChanged) core.endGroup() }