A filter rule that mixed positive and bare negation patterns under the
default ('some') predicate quantifier matched nearly every file in a PR.
Each pattern was compiled into its own picomatch matcher and combined
via Array.prototype.some, so a standalone '!**/*.md' (true for any
non-markdown file) flipped the whole rule into a near-universal match.
Group bare string patterns into a single matcher with gitignore-style
semantics: a file matches when it matches at least one positive pattern
and does not match any negation pattern. The 'every' quantifier path is
unchanged, since per-pattern matching under .every() already produces
correct subtractive semantics with negations. The '!(extglob)' single-
string form is preserved by detecting only '!' not followed by '('.
Apply the same gitignore-style grouping to status-tagged array patterns
so 'added: ["src/**", "!**/*.md"]' behaves correctly. Reject rules made
up entirely of negation patterns (no positive include) so the failure
is loud rather than a silent permanent no-match.
Closesdorny/paths-filter#260
* Detect commit hashes from merge_group event
* Apply suggestion from @masaru-iritani
Co-authored-by: Masaru Iritani <25241373+masaru-iritani@users.noreply.github.com>
* refactor: update PullRequest type usage in getChangedFilesFromApi and related functions
* Run `npm run pack`
---------
Co-authored-by: Sascha Bratton <sascha@brattonbratton.com>
Setting the new 'predicate-quantifier' configuration parameter to 'every'
makes it so that all the patterns have to match a file for it to be
considered changed.
This can be leveraged to ensure that you only build & test software changes
that have real impact on the behavior of the code, e.g. you can set up your
build to run when Typescript/Rust/etc. files are changed but markdown
changes in the diff will be ignored and you consume less resources to build.
The default behavior does not change by the introduction of this feature
so upgrading can be done safely knowing that existing workflows will not
break.
Signed-off-by: Peter Somogyvari <peter.somogyvari@accenture.com>