Skip to content

ci: use phpstan result cache #7148

ci: use phpstan result cache

ci: use phpstan result cache #7148

Workflow file for this run

name: CI
on: [pull_request]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
changes:
runs-on: ubuntu-22.04
name: Check for changes
outputs:
php: ${{ steps.filter.outputs.php }}
node: ${{ steps.filter.outputs.node }}
steps:
- name: Check changed files
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
php:
- '**/*.php'
- 'composer.json'
- 'composer.lock'
- 'phpstan.neon'
- 'pint.json'
node:
- '**/*.js'
- '**/*.ts'
- '**/*.tsx'
- 'package.json'
- 'pnpm-lock.yaml'
- '*eslint*'
- 'tailwind.config.json'
- 'lang/**/*.json'
php-setup:
needs: changes
runs-on: ubuntu-22.04
name: PHP Setup
outputs:
cache-key: ${{ steps.cache-key.outputs.value }}
steps:
- name: Checkout code
if: ${{ needs.changes.outputs.php == 'true' }}
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Setup PHP
if: ${{ needs.changes.outputs.php == 'true' }}
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
extensions: mbstring, :psr
tools: composer:v2
coverage: none
- name: Generate a cache key
if: ${{ needs.changes.outputs.php == 'true' }}
id: cache-key
run: echo "value=${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}" >> $GITHUB_OUTPUT
- name: Cache composer packages
if: ${{ needs.changes.outputs.php == 'true' }}
id: composer-cache
uses: actions/cache@v4
with:
path: |
~/.composer/cache
vendor
key: ${{ steps.cache-key.outputs.value }}
restore-keys: |
${{ runner.os }}-php-
- name: Install
if: ${{ needs.changes.outputs.php == 'true' && steps.composer-cache.outputs.cache-hit != 'true' }}
run: composer install --prefer-dist
node-setup:
needs: changes
runs-on: ubuntu-22.04
name: Node.js Setup
steps:
- name: Checkout code
if: ${{ needs.changes.outputs.node == 'true' }}
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install pnpm
if: ${{ needs.changes.outputs.node == 'true' }}
uses: pnpm/action-setup@v4
with:
version: 9
- name: Use Node 20
if: ${{ needs.changes.outputs.node == 'true' }}
uses: actions/setup-node@v4
with:
node-version: '20'
php-checks:
needs: [changes, php-setup]
runs-on: ubuntu-22.04
name: PHP Checks
strategy:
matrix:
check: ['lint', 'analyse', 'test']
include:
- check: lint
command: composer lint
- check: analyse
command: composer analyse -- --memory-limit=1G
- check: test
command: composer paratest -- --processes=$(nproc)
steps:
- name: Check PHP changes
if: ${{ needs.changes.outputs.php != 'true' }}
run: echo "No PHP changes; skipping checks" && exit 0
- name: Checkout code
if: ${{ needs.changes.outputs.php == 'true' }}
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Setup PHP
if: ${{ needs.changes.outputs.php == 'true' }}
uses: shivammathur/setup-php@v2
with:
php-version: 8.2
extensions: mbstring, :psr
coverage: none
ini-values: memory_limit=1G
- name: Load composer packages
if: ${{ needs.changes.outputs.php == 'true' }}
uses: actions/cache@v4
with:
path: |
~/.composer/cache
vendor
key: ${{ needs.php-setup.outputs.cache-key }}
restore-keys: |
${{ runner.os }}-php-
- name: Restore PHPStan result cache
if: ${{ needs.changes.outputs.php == 'true' && matrix.check == 'analyse' }}
uses: actions/cache/restore@v4
with:
path: tmp
key: phpstan-result-cache-${{ github.run_id }}
restore-keys: |
phpstan-result-cache-
- name: Run ${{ matrix.check }}
if: ${{ needs.changes.outputs.php == 'true' }}
run: ${{ matrix.command }}
- name: Save PHPStan result cache
if: ${{ needs.changes.outputs.php == 'true' && matrix.check == 'analyse' }}
uses: actions/cache/save@v4
with:
path: tmp
key: phpstan-result-cache-${{ github.run_id }}
node-checks:
needs: [changes, node-setup]
runs-on: ubuntu-22.04
name: Node.js Checks
strategy:
matrix:
check: ['tsc', 'lint', 'test']
include:
- check: tsc
command: pnpm tsc
- check: lint
command: pnpm lint
- check: test
command: pnpm test
env:
VITE_BUILD_PATH: dist
APP_URL: https://raweb.test
LARAVEL_BYPASS_ENV_CHECK: 1
steps:
- name: Check Node changes
if: ${{ needs.changes.outputs.node != 'true' }}
run: echo "No Node changes; skipping checks" && exit 0
- name: Checkout code
if: ${{ needs.changes.outputs.node == 'true' }}
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install pnpm
if: ${{ needs.changes.outputs.node == 'true' }}
uses: pnpm/action-setup@v4
with:
version: 9
- name: Use Node 20
if: ${{ needs.changes.outputs.node == 'true' }}
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
if: ${{ needs.changes.outputs.node == 'true' }}
run: pnpm install --frozen-lockfile --prefer-offline
- name: Run ${{ matrix.check }}
if: ${{ needs.changes.outputs.node == 'true' }}
run: ${{ matrix.command }}
env: ${{ matrix.env || fromJSON('{}') }}