Skip to main content
These CI Workflows are no longer maintained
In light of challenges with the GitHub Platform, Encore Digital Group no longer actively uses GitHub beyond mirroring some of our open source repositories. As a result, these CI Workflows are no longer maintained and may no longer function as expected or at all. CI Workflow documentation remains available as a reference but use of these workflows in a production capacity is not advised.

PHP Git Status Check Action

Overview

The actions/php/gitStatusCheck action determines whether PHP-specific files have been modified by checking git status for PHP source files (*.php), Composer files (composer.json, composer.lock), and Node.js files (package.json, package-lock.json). This action is ideal for PHP projects that may also include frontend assets, enabling conditional workflow execution.

Language/Tool Support

  • PHP: PHP source files and Composer dependency management
  • Composer: composer.json and composer.lock files
  • Node.js: package.json and package-lock.json files (for mixed PHP/JS projects)
  • Git: Git repository status checking
  • Shell Scripts: Bash-based implementation

Features

  • Multi-Language Support: Monitors PHP, Composer, and Node.js files
  • Branch-based Checking: Configurable branch for comparison
  • Output Generation: Provides boolean output for workflow decisions
  • Laravel-Friendly: Supports Laravel projects with mixed assets
  • Modern PHP Projects: Handles composer and npm dependencies

Usage

- name: Check php File Changes
id: php-check
uses: ./actions/php/gitStatusCheck
with:
branch: main

- name: Run php Tests
if: steps.php-check.outputs.shouldRun == 'true'
run: composer test

Inputs

InputTypeRequiredDefaultDescription
branchstringmainBranch to compare changes against

Outputs

OutputTypeDescription
shouldRunbooleanWhether PHP-related files were modified (true/false)

Monitored File Types

The action checks for changes in:

PHP Files

  • *.php - All PHP source files
  • Application code, configuration, migrations
  • Test files and development tools

Composer Files

  • composer.json - Package dependencies and project metadata
  • composer.lock - Locked dependency versions

Node.js Files (for mixed projects)

  • package.json - Frontend dependencies and scripts
  • package-lock.json - Locked frontend dependency versions

File Examples

index.php
app/Models/User.php
config/app.php
database/migrations/create_users_table.php
tests/Feature/UserTest.php
composer.json
composer.lock
package.json (for frontend assets)
package-lock.json (for frontend assets)

Usage Examples

PHP Laravel Project

name: Laravel CI Pipeline
on:
pull_request:
branches: [main]

jobs:
check-php-changes:
runs-on: ubuntu-latest
outputs:
php-changed: ${{ steps.check.outputs.shouldRun }}
steps:
- uses: actions/checkout@v4

- name: Check for php Changes
id: check
uses: ./actions/php/gitStatusCheck
with:
branch: main

php-tests:
needs: check-php-changes
if: needs.check-php-changes.outputs.php-changed == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Setup php
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'

- name: Install Dependencies
run: composer install

- name: Run Tests
run: composer test

static-analysis:
needs: check-php-changes
if: needs.check-php-changes.outputs.php-changed == 'true'
uses: ./.github/workflows/php_staticAnalysis.yml
with:
phpVersion: '8.3'

Composer Dependency Validation

name: Dependency Security Check
on:
pull_request:
paths:
- 'composer.json'
- 'composer.lock'

jobs:
check-composer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Check Composer Changes
id: composer-check
uses: ./actions/php/gitStatusCheck
with:
branch: ${{ github.base_ref }}

- name: Security Audit
if: steps.composer-check.outputs.shouldRun == 'true'
run: composer audit

- name: Validate Dependencies
if: steps.composer-check.outputs.shouldRun == 'true'
run: composer validate --strict

Mixed PHP/JavaScript Project

name: Full Stack Validation
on:
push:
branches: [main, develop]

jobs:
detect-changes:
runs-on: ubuntu-latest
outputs:
backend-changed: ${{ steps.check.outputs.shouldRun }}
steps:
- uses: actions/checkout@v4

- name: Check Backend Changes
id: check
uses: ./actions/php/gitStatusCheck

backend-pipeline:
needs: detect-changes
if: needs.detect-changes.outputs.backend-changed == 'true'
runs-on: ubuntu-latest
steps:
- name: Setup php Environment
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'

- name: Run php Tests
run: composer test

- name: Build Assets (if package.json changed)
run: |
if [ -f package.json ]; then
npm ci
npm run build
fi

WordPress Plugin Development

name: WordPress Plugin CI
on:
pull_request:

jobs:
check-plugin-changes:
runs-on: ubuntu-latest
outputs:
plugin-changed: ${{ steps.check.outputs.shouldRun }}
steps:
- uses: actions/checkout@v4

- name: Check Plugin Changes
id: check
uses: ./actions/php/gitStatusCheck

wordpress-tests:
needs: check-plugin-changes
if: needs.check-plugin-changes.outputs.plugin-changed == 'true'
runs-on: ubuntu-latest
services:
mysql:
image: mysql:5.7
env:
MYSQL_ROOT_PASSWORD: password
steps:
- name: Setup WordPress Test Environment
run: |
# WordPress test setup
composer install
npm install
npm run build

- name: Run Plugin Tests
run: composer test

Integration Patterns

Performance-Optimized Pipeline

name: Optimized php Pipeline
on:
pull_request:

jobs:
quick-check:
runs-on: ubuntu-latest
outputs:
php-changed: ${{ steps.check.outputs.shouldRun }}
steps:
- uses: actions/checkout@v4

- name: Check php Changes
id: check
uses: ./actions/php/gitStatusCheck

fast-validation:
needs: quick-check
if: needs.quick-check.outputs.php-changed == 'true'
runs-on: ubuntu-latest
steps:
- name: php Syntax Check
run: find . -name "*.php" -exec php -l {} \;

comprehensive-testing:
needs: [quick-check, fast-validation]
if: needs.quick-check.outputs.php-changed == 'true'
runs-on: ubuntu-latest
steps:
- name: Full Test Suite
run: |
composer install
composer test:unit
composer test:integration

Multi-Environment Deployment

name: Multi-Environment php Deployment
on:
push:
branches: [main, staging, develop]

jobs:
detect-changes:
runs-on: ubuntu-latest
outputs:
deploy-needed: ${{ steps.check.outputs.shouldRun }}
steps:
- uses: actions/checkout@v4

- name: Check Deployment Changes
id: check
uses: ./actions/php/gitStatusCheck

deploy-staging:
needs: detect-changes
if: github.ref == 'refs/heads/staging' && needs.detect-changes.outputs.deploy-needed == 'true'
runs-on: ubuntu-latest
steps:
- name: Deploy to Staging
run: echo "Deploying to staging environment..."

deploy-production:
needs: detect-changes
if: github.ref == 'refs/heads/main' && needs.detect-changes.outputs.deploy-needed == 'true'
runs-on: ubuntu-latest
steps:
- name: Deploy to Production
run: echo "Deploying to production environment..."

Code Quality Pipeline

name: php Code Quality
on:
pull_request:

jobs:
detect-php-changes:
runs-on: ubuntu-latest
outputs:
quality-check-needed: ${{ steps.check.outputs.shouldRun }}
steps:
- uses: actions/checkout@v4

- name: Check php Code Changes
id: check
uses: ./actions/php/gitStatusCheck

code-style:
needs: detect-php-changes
if: needs.detect-php-changes.outputs.quality-check-needed == 'true'
uses: ./.github/workflows/php_dusterFix.yml

static-analysis:
needs: detect-php-changes
if: needs.detect-php-changes.outputs.quality-check-needed == 'true'
uses: ./.github/workflows/php_staticAnalysis.yml
with:
phpVersion: '8.3'

PHP-Specific Use Cases

Laravel Application Testing

name: Laravel Testing
on:
pull_request:

jobs:
check-laravel-changes:
runs-on: ubuntu-latest
outputs:
test-needed: ${{ steps.check.outputs.shouldRun }}
steps:
- uses: actions/checkout@v4

- name: Check Laravel Changes
id: check
uses: ./actions/php/gitStatusCheck

laravel-tests:
needs: check-laravel-changes
if: needs.check-laravel-changes.outputs.test-needed == 'true'
runs-on: ubuntu-latest
services:
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: testing
steps:
- name: Setup Laravel Environment
run: |
cp .env.testing .env
php artisan key:generate
php artisan migrate

- name: Run Feature Tests
run: php artisan test

Composer Security Monitoring

name: Security Monitoring
on:
schedule:
- cron: '0 2 * * 1' # Weekly on Monday

jobs:
check-dependencies:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Check for Dependency Changes
id: deps
uses: ./actions/php/gitStatusCheck

- name: Security Audit
if: steps.deps.outputs.shouldRun == 'true'
run: |
composer audit
composer outdated --direct

Multi-Version PHP Testing

name: php Version Compatibility
on:
pull_request:

jobs:
check-php-changes:
runs-on: ubuntu-latest
outputs:
test-needed: ${{ steps.check.outputs.shouldRun }}
steps:
- uses: actions/checkout@v4

- name: Check php Changes
id: check
uses: ./actions/php/gitStatusCheck

compatibility-test:
needs: check-php-changes
if: needs.check-php-changes.outputs.test-needed == 'true'
runs-on: ubuntu-latest
strategy:
matrix:
php-version: ['8.1', '8.2', '8.3']
steps:
- name: Setup php ${{ matrix.php-version }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}

- name: Test Compatibility
run: composer test

File Detection Patterns

Standard PHP Patterns

  • Application files: app/**/*.php
  • Configuration: config/**/*.php
  • Database: database/**/*.php
  • Tests: tests/**/*.php

Framework-Specific Patterns

Laravel

  • Models: app/Models/*.php
  • Controllers: app/Http/Controllers/*.php
  • Migrations: database/migrations/*.php
  • Seeders: database/seeders/*.php

Symfony

  • Controllers: src/Controller/*.php
  • Entities: src/Entity/*.php
  • Services: src/Service/*.php

WordPress

  • Plugin files: *.php
  • Theme files: *.php
  • Custom post types: inc/*.php

Troubleshooting

Common Issues

Always Returns False

  • Verify PHP files exist in repository
  • Check that composer.json exists for PHP projects
  • Ensure checkout action runs before this action

Missing Dependencies

  • Verify composer.json and composer.lock are committed
  • Check package.json exists if using Node.js assets
  • Ensure proper project structure

File Detection Issues

  • Test file patterns manually: find . -name "*.php"
  • Check git status: git status --porcelain
  • Verify branch comparison works

Debugging Commands

# Check php files
find . -name "*.php" -o -name "composer.json" -o -name "composer.lock"

# Check Node.js files
find . -name "package.json" -o -name "package-lock.json"

# Check git differences
git diff --name-only origin/main | grep -E '\.(php|json)$'

Best Practices

Project Structure

  1. Standard Layout: Follow PHP framework conventions
  2. Dependency Management: Keep composer.lock committed
  3. Mixed Projects: Organize PHP and frontend code clearly

Workflow Design

  1. Early Checking: Run checks early in pipeline
  2. Conditional Logic: Use proper conditional execution

Migration Guide

From Path-Based Filters

Replace path-based workflow triggers:

# Before: Path-based filtering
on:
pull_request:
paths:
- '**/*.php'
- 'composer.json'
- 'composer.lock'

# After: Dynamic checking
on:
pull_request:

jobs:
check:
steps:
- uses: ./actions/php/gitStatusCheck
id: php-check

From Manual Commands

Replace manual file checking:

# Before: Manual commands
- name: Check php Changes
run: |
if git diff --name-only origin/main | grep -E '\.(php|json)$'; then
echo "php_changed=true" >> $GITHUB_OUTPUT
fi

# After: Use action
- name: Check php Changes
id: check
uses: ./actions/php/gitStatusCheck

Framework-Specific Integration

Laravel Projects

- uses: ./actions/php/gitStatusCheck
id: laravel-check

- name: Laravel Tests
if: steps.laravel-check.outputs.shouldRun == 'true'
run: php artisan test

Symfony Projects

- uses: ./actions/php/gitStatusCheck
id: symfony-check

- name: Symfony Tests
if: steps.symfony-check.outputs.shouldRun == 'true'
run: php bin/phpunit