php-cs-fixer-ga
php-cs-fixer-ga copied to clipboard
Check only changed files in PR
Is there any option to validate only the changed files in PR ?
Not yet
You can do it with one more extra step:
steps:
- uses: actions/checkout@v3
- name: Get Changed Files @ all
id: all-changes
uses: tj-actions/changed-files@v35
with:
files: |
lib/**
tests/**
...
- name: PHP-CS-Fixer
uses: docker://oskarstark/php-cs-fixer-ga
if: ${{ steps.all-changes.outputs.all_changed_files }}
with:
args: --config=.php-cs-fixer.base.php --diff --dry-run ${{ join(steps.all-changes.outputs.all_changed_files, ' ') }}
At this point you can create a specific config without finder.
.php-cs-fixer.base.php
<?php
$fixer = (new PhpCsFixer\Config())
->setRules([
'no_spaces_after_function_name' => true,
'no_spaces_inside_parenthesis' => true,
])
->setRiskyAllowed(true)
->setCacheFile('.php-cs-fixer.cache')
;
return $fixer;
.php-cs-fixer.dist.php
<?php
$fixer = require __DIR__ .'/.php-cs-fixer.base.php';
$fixer->setFinder((new PhpCsFixer\Finder())
->in(__DIR__.'/lib')
->in(__DIR__.'/tests')
->append([__FILE__]));
return $fixer;
Not yet
@OskarStark still "not yet"?
After seeing @connorhu answer I have made the following setup according to the php-cs-fixer documentation.
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v38
with:
separator: ','
- name: PHP CS Fixer
run: |
CHANGED_FILES=$(echo "${{ steps.changed-files.outputs.all_changed_and_modified_files }}" | tr "," "\n")
if ! echo "${CHANGED_FILES}" | grep -qE "^(\\.php-cs-fixer(\\.dist)?\\.php|composer\\.lock)$"; then EXTRA_ARGS=$(printf -- '--path-mode=intersection\n--\n%s' "${CHANGED_FILES}"); else EXTRA_ARGS=''; fi
vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --dry-run --diff --using-cache=no ${EXTRA_ARGS}
Note: I'm not using this action but php-cs-fixer as dev dependency.
Would you send a PR adding your solution to the README file?
@OskarStark Here you go: #98