Files
github-actions-magento2/coding-standard-baseline/action.yml
T
Tjitse 76fcd70226 Fix PHPcs baseline test failure when there are no files to check (#115)
* fix: baseline coding standard fail when there are no files

* feat: also scan graphql/css/less/js files with phpcs
2023-09-12 09:44:52 +02:00

153 lines
5.8 KiB
YAML
Executable File

name: "M2 Coding Standard"
author: "Mage-OS"
description: "A Github Action that runs the Magento Coding Standard."
inputs:
php_version:
type: string
required: true
default: "8.2"
description: "PHP version used to do the coding standard check (default: 8.2)."
composer_version:
type: string
required: true
default: "2"
description: "The version of composer to use (default: 2)."
version:
type: string
required: false
default: "*"
description: "The version of the coding standard to use (default: latest)."
severity:
type: string
required: false
default: "5"
description: "The minimum severity required to display an error or warning (default: 5)"
warning_severity:
type: string
required: false
default: "8"
description: "The minimum severity required to display a warning (default: 8)."
error_severity:
type: string
required: false
default: "8"
description: "The minimum severity required to display an error (default: 8)."
baseline_version:
type: string
required: false
default: "*"
description: "The version of phpcs baseline to use (default: latest)."
runs:
using: composite
steps:
- name: Checkout head
uses: actions/checkout@v4
with:
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Get all changed files
uses: tj-actions/changed-files@v39
id: changed-files-phpcs
with:
files_yaml: |
app:
- '**/*.php'
- '**/*.phtml'
- '**/*.graphqls'
- '**/*.less'
- '**/*.css'
- '**/*.html'
- '**/*.xml'
- '**/*.js'
- name: Inform if no files have changed
if: steps.changed-files-phpcs.outputs.app_any_changed == 'false'
shell: bash
run: |
echo "No files relevant to PHPCS have changed. Skipping PHPCS run."
echo "List all the files that have changed: ${{ steps.changed-files-phpcs.outputs.app_all_changed_files }}"
- name: Inform if relevant files have changed
if: steps.changed-files-phpcs.outputs.app_any_changed == 'true'
shell: bash
run: |
echo "One or more files relevant to PHPCS have changed."
echo "List all the files that have changed: ${{ steps.changed-files-phpcs.outputs.app_all_changed_files }}"
- name: Setup PHP
if: steps.changed-files-phpcs.outputs.app_any_changed == 'true'
uses: shivammathur/setup-php@v2
with:
php-version: ${{ inputs.php_version }}
tools: composer:v${{ inputs.composer_version }}
coverage: none
- name: Install Coding Standard && Codesniffer baseline
if: steps.changed-files-phpcs.outputs.app_any_changed == 'true'
shell: bash
run: |
git config --global advice.detachedHead false
composer require "magento/magento-coding-standard: ${{ github.event.inputs.version || '*' }}" -W
composer config --no-plugins allow-plugins.digitalrevolution/php-codesniffer-baseline true
composer require --dev "digitalrevolution/php-codesniffer-baseline: ${{ github.event.inputs.baseline_version || '*' }}"
- name: Register coding standards
if: steps.changed-files-phpcs.outputs.app_any_changed == 'true'
shell: bash
run: |
${{ github.workspace }}/vendor/bin/phpcs --config-set installed_paths \
${{ github.workspace }}/vendor/magento/magento-coding-standard,${{ github.workspace }}/vendor/phpcompatibility/php-compatibility
- name: Checkout base to generate baseline
if: steps.changed-files-phpcs.outputs.app_any_changed == 'true'
uses: actions/checkout@v4
with:
ref: ${{github.event.pull_request.base.ref}}
repository: ${{github.event.pull_request.base.repo.full_name}}
path: base
- name: Create phpcs.baseline.xml from base
shell: bash
working-directory: base
if: steps.changed-files-phpcs.outputs.app_any_changed == 'true'
run: |
php ${{ github.workspace }}/vendor/bin/phpcs --standard=Magento2 \
$([ -n "${{ inputs.severity }}" ] && echo "--severity=${{ inputs.severity }}") \
$([ -n "${{ inputs.warning_severity }}" ] && echo "--warning-severity=${{ inputs.warning_severity }}") \
$([ -n "${{ inputs.error_severity }}" ] && echo "--error-severity=${{ inputs.error_severity }}") \
--report=\\DR\\CodeSnifferBaseline\\Reports\\Baseline --report-file=phpcs.baseline.xml \
${{ steps.changed-files-phpcs.outputs.app_all_changed_files }} || /bin/true
- name: Copy baseline to head
if: steps.changed-files-phpcs.outputs.app_any_changed == 'true'
shell: bash
run: |
cp ${{ github.workspace }}/base/phpcs.baseline.xml ${{ github.workspace }}/phpcs.baseline.xml
# Since we ran phpcs in the base folder, the files in phpcs.baseline.xml contain the base folder in the path.
# We need to remove /base/ so that the phpcs can locate the correct files.
- name: Remove base dir from phpcs baseline
if: steps.changed-files-phpcs.outputs.app_any_changed == 'true'
shell: bash
run: |
sed -i "s|/base/|/|" ${{ github.workspace }}/phpcs.baseline.xml
- name: Execute phpcs on head for changed files
shell: bash
if: steps.changed-files-phpcs.outputs.app_any_changed == 'true'
run: |
php ${{ github.workspace }}/vendor/bin/phpcs --standard=Magento2 \
$([ -n "${{ inputs.severity }}" ] && echo "--severity=${{ inputs.severity }}") \
$([ -n "${{ inputs.warning_severity }}" ] && echo "--warning-severity=${{ inputs.warning_severity }}") \
$([ -n "${{ inputs.error_severity }}" ] && echo "--error-severity=${{ inputs.error_severity }}") \
${{ steps.changed-files-phpcs.outputs.app_all_changed_files }}