phpro / grumphp

A PHP code-quality tool
MIT License
4.15k stars 434 forks source link

Set path and/or full filename in triggered_by #1157

Open evs-xsarus opened 1 month ago

evs-xsarus commented 1 month ago
Q A
Version 2.5.0
Bug? no
New feature? yes
Question? no
Documentation? no
Related tickets comma-separated list of related tickets

Due to the use of dockers, my grump config only uses shell tasks , example:

grumphp:
    process_timeout: 512
    tasks:
        magento_composer:
            scripts:
                - ["-c", "/usr/local/bin/composer2 --working-dir=./magento validate"]
            metadata:
                task: shell
        magento_stan-check:
            scripts:
                - ["-c", "/usr/local/bin/composer2 --working-dir=./magento stan-check"]
            metadata:
                task: shell

        integrations_composer:
            scripts:
                - ["-c", "/usr/local/bin/composer2 --working-dir=./integrations validate"]
            metadata:
                task: shell
        integrations_cs-check:
            scripts:
                - ["-c", "/usr/local/bin/composer2 --working-dir=./integrations cs-check"]
            metadata:
                task: shell

Most of these tasks start properly when PHP files are changed as per documentation https://github.com/phpro/grumphp/blob/v2.x/doc/tasks/shell.md for triggered_by .

Sadly, the composer validate is not triggered if only composer.json/composer.lock is changed. I can add these:

        magento_composer:
            scripts:
                - ["-c", "/usr/local/bin/composer2 --working-dir=./magento validate"]
            metadata:
                task: shell
            triggered_by: [json, lock]

But that means the task will run even if a non-related json or lock file is changed.

To avoid this, specifying a complete filename should help as in this example:

            triggered_by: [composer.lock, composer.json]

or even with wildcards:

            triggered_by: [composer.*]

As you can see in my example, I've duplicate tasks but for different folders. The path should be definable too in triggered by, full example:

        magento_composer:
            scripts:
                - ["-c", "/usr/local/bin/composer2 --working-dir=./magento validate"]
            metadata:
                task: shell
            triggered_by: ['./magento/composer.*']
veewee commented 4 days ago

Hello @evs-xsarus,

That would be possible. We do a similir thing for the ComposerRequireChecker task. However : since we are now filtering triggered_by as extensions, it would be considered a BC break. Maybe an alternate solution could be to introduce a new parameter for this specific case? Something like triggered_by_filenames (which will use the $files->names() filter)?

Feel free to propose changes in a PR.