GitHub workflows: parity with Core #29
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Coding Standards | ||
on: | ||
pull_request: | ||
push: | ||
branches: | ||
- trunk | ||
- 'release/**' | ||
- 'wp/**' | ||
# Allow manually triggering the workflow. | ||
workflow_dispatch: | ||
# Cancels all previous workflow runs for pull requests that have not completed. | ||
concurrency: | ||
# The concurrency group contains the workflow name and the branch name for pull requests | ||
# or the commit hash for any other events. | ||
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} | ||
cancel-in-progress: true | ||
jobs: | ||
# Runs PHP coding standards checks. | ||
# | ||
# Violations are reported inline with annotations. | ||
phpcs: | ||
name: PHP coding standards | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 20 | ||
if: ${{ github.repository == 'WordPress/gutenberg' || github.event_name == 'pull_request' }} | ||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 | ||
- name: Set up PHP | ||
uses: shivammathur/setup-php@d30ad8b1843ace22e6698ab99bbafaa747b6bd0d # v2.24.0 | ||
with: | ||
php-version: '7.4' | ||
coverage: none | ||
tools: cs2pr | ||
# This date is used to ensure that the PHPCS cache is cleared at least once every week. | ||
# http://man7.org/linux/man-pages/man1/date.1.html | ||
- name: "Get last Monday's date" | ||
id: get-date | ||
run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> $GITHUB_OUTPUT | ||
- name: Cache PHPCS scan cache | ||
uses: actions/cache@6998d139ddd3e68c71e9e398d8e40b71a2f39812 # v3.2.5 | ||
with: | ||
path: .cache/phpcs.json | ||
key: ${{ runner.os }}-date-${{ steps.get-date.outputs.date }}-phpcs-cache-${{ hashFiles('**/composer.json', 'phpcs.xml.dist') }} | ||
# Since Composer dependencies are installed using `composer update` and no lock file is in version control, | ||
# passing a custom cache suffix ensures that the cache is flushed at least once per week. | ||
- name: Install Composer dependencies | ||
uses: ramsey/composer-install@83af392bf5f031813d25e6fe4cd626cdba9a2df6 # v2.2.0 | ||
with: | ||
custom-cache-suffix: ${{ steps.get-date.outputs.date }} | ||
- name: Make Composer packages available globally | ||
run: echo "${PWD}/vendor/bin" >> $GITHUB_PATH | ||
- name: Run PHPCS on all Gutenberg files | ||
id: phpcs-gutenberg | ||
run: phpcs --report-full --report-checkstyle=./.cache/phpcs-report.xml | ||
- name: Show PHPCS results in PR | ||
if: ${{ always() && steps.phpcs-gutenberg.outcome == 'failure' }} | ||
run: cs2pr ./.cache/phpcs-report.xml | ||
- name: Ensure version-controlled files are not modified during the tests | ||
run: git diff --exit-code | ||
check: | ||
name: JavaScript coding standards | ||
runs-on: ubuntu-latest | ||
if: ${{ github.repository == 'WordPress/gutenberg' || github.event_name == 'pull_request' }} | ||
steps: | ||
- uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3.5.0 | ||
- name: Use desired version of Node.js | ||
uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 | ||
with: | ||
node-version-file: '.nvmrc' | ||
cache: npm | ||
- name: Npm install | ||
# A "full" install is executed, since `npm ci` does not always exit | ||
# with an error status code if the lock file is inaccurate. This also | ||
# helps to catch dependencies not being installed with exact version. | ||
# | ||
# See: https://github.com/WordPress/gutenberg/issues/16157 | ||
# See: https://github.com/WordPress/gutenberg/pull/39865 | ||
run: npm install | ||
- name: Lint JavaScript and Styles | ||
run: npm run lint | ||
- name: Type checking | ||
run: npm run build:package-types | ||
- name: Check local changes | ||
run: npm run other:check-local-changes | ||
- name: License compatibility | ||
run: npm run other:check-licenses |