https://github.com/php-forge/actions
Actions reusables.
https://github.com/php-forge/actions
actions github php php-forge reusable
Last synced: about 1 month ago
JSON representation
Actions reusables.
- Host: GitHub
- URL: https://github.com/php-forge/actions
- Owner: php-forge
- License: other
- Created: 2022-04-14T16:19:08.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2025-12-12T21:19:13.000Z (5 months ago)
- Last Synced: 2026-03-31T15:41:29.328Z (about 1 month ago)
- Topics: actions, github, php, php-forge, reusable
- Homepage:
- Size: 172 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: .github/CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
PHPForge - Reusable GitHub Actions
A comprehensive collection of reusable GitHub Actions and workflows specifically designed for PHP projects. Streamline
your CI/CD pipeline with battle-tested, configurable workflows for testing, static analysis, and code quality checks.
## Features
- ✅ **Code Quality** - Easy Coding Standard (ECS) for consistent code formatting.
- ✅ **Complete Testing Suite** - PHPUnit, Codeception, and mutation testing with Infection.
- ✅ **Database Testing** - Multi-database support (MySQL, PostgreSQL, SQLite, etc.).
- ✅ **Dependency Management** - Composer require checker for dependency validation.
- ✅ **Linting** - Super Linter for multi-language linting.
- ✅ **Static Analysis** - PHPStan integration.
- ✅ **Zero Configuration** - Sensible defaults with extensive customization options.
## Available Workflows
### Testing Workflows
- [`codeception.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/codeception.yml) - Codeception testing framework.
- [`infection.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/infection.yml) - Mutation testing with Infection.
- [`phpunit-database.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/phpunit-database.yml) - PHPUnit with database services.
- [`phpunit.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/phpunit.yml) - PHPUnit testing with coverage.
### Quality Assurance Workflows
- [`composer-require-checker.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/composer-require-checker.yml) - Dependency validation.
- [`ecs.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/ecs.yml) - Easy Coding Standard.
- [`phpstan.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/phpstan.yml) - Static analysis.
- [`super-linter.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/super-linter.yml) - Super Linter for multi-language linting.
### Utility Actions
- [`php-setup`](https://github.com/php-forge/actions/blob/main/actions/php-setup/action.yml) - PHP environment setup.
- [`phpunit-runner`](https://github.com/php-forge/actions/blob/main/actions/phpunit/action.yml) - Advanced PHPUnit execution.
## Quick start
### Composer Require Checker
```yaml
---
on:
pull_request:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
push:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
name: composer-require-checker
jobs:
dependency-check:
uses: php-forge/actions/.github/workflows/composer-require-checker.yml@v1
with:
command-options: "--config-file=.composer-require-checker.json"
```
### Easy Coding Standard
```yaml
---
on:
pull_request:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
push:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
name: easy-coding-standards
jobs:
coding-standards:
uses: php-forge/actions/.github/workflows/ecs.yml@v1
with:
command-options: "check --ansi --no-progress-bar"
php-version: '["8.4"]'
```
### Infection Mutation Testing {#infection}
```yaml
---
on:
pull_request:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
push:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
name: mutation-testing
jobs:
mutation-testing:
uses: php-forge/actions/.github/workflows/reusable-infection.yml@v2
secrets:
STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }}
with:
# Infection configuration
command-options: "--threads=4 --min-msi=80"
command-coverage-options: --with-uncovered
# PHPStan integration
phpstan: true
```
### PHPUnit
```yaml
---
on:
pull_request:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
push:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
name: build
jobs:
phpunit:
uses: php-forge/actions/.github/workflows/phpunit.yml@v1
secrets:
AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
# Composer settings
composer-command: composer install --prefer-dist --no-progress
# Coverage settings
coverage-driver: pcov
coverage-format: clover
# PHP configuration
extensions: mbstring, intl, pdo_sqlite
ini-values: date.timezone='UTC', memory_limit=-1
# Operating systems
os: '["ubuntu-latest", "windows-2022"]'
# PHP versions to test
php-version: '["8.1", "8.2", "8.3", "8.4"]'
# PHPUnit configuration
phpunit-configuration: phpunit.xml
phpunit-exclude-group: integration
phpunit-group: unit
```
### PHPUnit with Database
```yaml
---
on:
pull_request:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
push:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
name: build-mysql
jobs:
database-tests:
uses: php-forge/actions/.github/workflows/phpunit-database.yml@v1
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
with:
# Database configuration
database-env: |
{
"MYSQL_ROOT_PASSWORD": "root",
"MYSQL_DATABASE": "test"
}
database-health-cmd: "mysqladmin ping"
database-health-retries: 3
database-image: mysql
database-port: 3306
database-type: mysql
database-versions: '["8.0", "8.4", "latest"]'
extensions: pdo, pdo_mysql
php-version: '["8.4"]'
phpunit-group: mysql
```
**Supported Databases:**
| Database | Docker Image | Default Port | Health Check Command |
| ---------- | -------------------------------- | ------------ | ------------------------ |
| MySQL | `mysql` | 3306 | `mysqladmin ping` |
| PostgreSQL | `postgres` | 5432 | `pg_isready` |
| SQL Server | `mcr.microsoft.com/mssql/server` | 1433 | `sqlcmd -Q "SELECT 1"` |
| Oracle | `gvenzl/oracle-xe` | 1521 | `sqlplus -S / as sysdba` |
### PHPStan Static Analysis
```yaml
---
on:
pull_request:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
push:
paths-ignore:
- ".gitattributes"
- ".gitignore"
- "CHANGELOG.md"
- "docs/**"
- "README.md"
name: static-analysis
jobs:
static-analysis:
uses: php-forge/actions/.github/workflows/phpstan.yml@v1
with:
# PHPStan configuration
configuration: phpstan.neon
command-options: "analyse --error-format=checkstyle | cs2pr"
# Environment
php-version: '["8.4"]'
tools: cs2pr
```
### Super Linter
```yaml
---
on:
- pull_request
- push
name: linter
jobs:
linter:
uses: php-forge/actions/.github/workflows/super-linter.yml@main
permissions:
checks: write
contents: read
statuses: write
secrets:
AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
> **Note**: YAML files should use 2-space indentation. This example shows correct YAML syntax - copy it to your `.github/workflows/*.yml` files as-is.
## Package information
[](https://github.com/php-forge/actions/releases)
## Quality code
[](https://github.com/php-forge/actions/actions/workflows/linter.yml)
## Our social networks
[](https://x.com/Terabytesoftw)
## License
[](LICENSE)