This commit is contained in:
Ludy87 2025-08-19 14:45:28 +02:00
commit 0795f7f3c0
No known key found for this signature in database
GPG Key ID: 92696155E0220F94
5 changed files with 73 additions and 7 deletions

View File

@ -324,7 +324,8 @@ jobs:
runs-on: ubuntu-latest
# Required permissions
permissions:
pull-requests: read
contents: read # required by actions/checkout
pull-requests: read # required by dorny/paths-filter
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3

46
__tests__/outputs.test.ts Normal file
View File

@ -0,0 +1,46 @@
import {ChangeStatus} from '../src/file'
import {exportResults} from '../src/main'
import * as core from '@actions/core'
jest.mock('@actions/core', () => ({
setOutput: jest.fn(),
startGroup: jest.fn(),
endGroup: jest.fn(),
info: jest.fn()
}))
describe('all_changed and any_changed outputs', () => {
beforeEach(() => {
jest.clearAllMocks()
})
test('reports true when all filters changed', () => {
const results = {
src: [{filename: 'src/file.ts', status: ChangeStatus.Modified}],
docs: [{filename: 'docs/readme.md', status: ChangeStatus.Added}]
}
exportResults(results, 'none')
expect(core.setOutput).toHaveBeenCalledWith('all_changed', true)
expect(core.setOutput).toHaveBeenCalledWith('any_changed', true)
})
test('reports false for all_changed when some filters unchanged', () => {
const results = {
src: [{filename: 'src/file.ts', status: ChangeStatus.Modified}],
docs: []
}
exportResults(results, 'none')
expect(core.setOutput).toHaveBeenCalledWith('all_changed', false)
expect(core.setOutput).toHaveBeenCalledWith('any_changed', true)
})
test('reports false for any_changed when no filter changed', () => {
const results = {
src: [],
docs: []
}
exportResults(results, 'none')
expect(core.setOutput).toHaveBeenCalledWith('all_changed', true)
expect(core.setOutput).toHaveBeenCalledWith('any_changed', false)
})
})

View File

@ -47,9 +47,19 @@ inputs:
predicate-quantifier:
description: |
Optional parameter to override the default behavior of file matching algorithm.
By default, files that match at least one pattern defined by the filters will be included.
This parameter allows overriding the "at least one" behavior so that all patterns must match.
Supported values are 'some' and 'every'.
By default files that match at least one pattern defined by the filters will be included.
This parameter allows to override the "at least one pattern" behavior to make it so that
all of the patterns have to match or otherwise the file is excluded.
An example scenario where this is useful if you would like to match all
.ts files in a sub-directory but not .md files.
The filters below will match markdown files despite the exclusion syntax UNLESS
you specify 'every' as the predicate-quantifier parameter. When you do that,
it will only match the .ts files in the subdirectory as expected.
backend:
- 'pkg/a/b/c/**'
- '!**/*.jpeg'
- '!**/*.md'
required: false
default: 'some'
outputs:

7
dist/index.js vendored
View File

@ -564,6 +564,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.run = exports.exportResults = void 0;
const fs = __importStar(__nccwpck_require__(7147));
const core = __importStar(__nccwpck_require__(2186));
const github = __importStar(__nccwpck_require__(5438));
@ -606,6 +607,7 @@ async function run() {
core.setFailed(getErrorMessage(error));
}
}
exports.run = run;
function isPathInput(text) {
return !(text.includes('\n') || text.includes(':'));
}
@ -793,6 +795,7 @@ function exportResults(results, format) {
core.info('Cannot set changes output variable - name already used by filter output');
}
}
exports.exportResults = exportResults;
function serializeExport(files, format) {
const fileNames = files.map(file => file.filename);
switch (format) {
@ -816,7 +819,9 @@ function getErrorMessage(error) {
return error.message;
return String(error);
}
run();
if (require.main === require.cache[eval('__filename')]) {
run();
}
/***/ }),

View File

@ -228,7 +228,7 @@ async function getChangedFilesFromApi(token: string, pullRequest: PullRequestEve
}
}
function exportResults(results: FilterResults, format: ExportFormat): void {
export function exportResults(results: FilterResults, format: ExportFormat): void {
core.info('Results:')
const changes: string[] = []
let anyChanged = false
@ -295,4 +295,8 @@ function getErrorMessage(error: unknown): string {
return String(error)
}
run()
if (require.main === module) {
run()
}
export {run}