{"id":20684562,"url":"https://github.com/php-forge/actions","last_synced_at":"2026-04-10T22:42:49.433Z","repository":{"id":40351394,"uuid":"481671178","full_name":"php-forge/actions","owner":"php-forge","description":"Actions reusables.","archived":false,"fork":false,"pushed_at":"2025-12-12T21:19:13.000Z","size":176,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-31T15:41:29.328Z","etag":null,"topics":["actions","github","php","php-forge","reusable"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/php-forge.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["terabytesoftw"]}},"created_at":"2022-04-14T16:19:08.000Z","updated_at":"2025-09-29T16:24:22.000Z","dependencies_parsed_at":"2023-10-01T14:43:04.054Z","dependency_job_id":"817a4697-4921-46f5-84e9-1bba6cb0dd1e","html_url":"https://github.com/php-forge/actions","commit_stats":null,"previous_names":["php-forge/actions"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/php-forge/actions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-forge%2Factions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-forge%2Factions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-forge%2Factions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-forge%2Factions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/php-forge","download_url":"https://codeload.github.com/php-forge/actions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-forge%2Factions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31662169,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"ssl_error","status_checked_at":"2026-04-10T17:19:13.364Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","github","php","php-forge","reusable"],"created_at":"2024-11-16T22:22:53.785Z","updated_at":"2026-04-10T22:42:49.427Z","avatar_url":"https://github.com/php-forge.png","language":null,"funding_links":["https://github.com/sponsors/terabytesoftw"],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD041 --\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/php-forge/actions\" target=\"_blank\"\u003e\n    \u003cimg\n        alt=\"PHPForge Logo\"\n        height=\"100px\"\n        src=\"https://avatars.githubusercontent.com/u/103309199?s=400\u0026u=ca3561c692f53ed7eb290d3bb226a2828741606f\u0026v=4\"\n    \u003e\n    \u003c/a\u003e\n    \u003ch1 align=\"center\"\u003ePHPForge - Reusable GitHub Actions\u003c/h1\u003e\n    \u003cbr\u003e\n\u003c/p\u003e\n\u003c!-- markdownlint-enable MD041 --\u003e\n\nA comprehensive collection of reusable GitHub Actions and workflows specifically designed for PHP projects. Streamline\nyour CI/CD pipeline with battle-tested, configurable workflows for testing, static analysis, and code quality checks.\n\n## Features\n\n- ✅ **Code Quality** - Easy Coding Standard (ECS) for consistent code formatting.\n- ✅ **Complete Testing Suite** - PHPUnit, Codeception, and mutation testing with Infection.\n- ✅ **Database Testing** - Multi-database support (MySQL, PostgreSQL, SQLite, etc.).\n- ✅ **Dependency Management** - Composer require checker for dependency validation.\n- ✅ **Linting** - Super Linter for multi-language linting.\n- ✅ **Static Analysis** - PHPStan integration.\n- ✅ **Zero Configuration** - Sensible defaults with extensive customization options.\n\n## Available Workflows\n\n### Testing Workflows\n\n- [`codeception.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/codeception.yml) - Codeception testing framework.\n- [`infection.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/infection.yml) - Mutation testing with Infection.\n- [`phpunit-database.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/phpunit-database.yml) - PHPUnit with database services.\n- [`phpunit.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/phpunit.yml) - PHPUnit testing with coverage.\n\n### Quality Assurance Workflows\n\n- [`composer-require-checker.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/composer-require-checker.yml) - Dependency validation.\n- [`ecs.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/ecs.yml) - Easy Coding Standard.\n- [`phpstan.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/phpstan.yml) - Static analysis.\n- [`super-linter.yml`](https://github.com/php-forge/actions/blob/main/.github/workflows/super-linter.yml) - Super Linter for multi-language linting.\n\n### Utility Actions\n\n- [`php-setup`](https://github.com/php-forge/actions/blob/main/actions/php-setup/action.yml) - PHP environment setup.\n- [`phpunit-runner`](https://github.com/php-forge/actions/blob/main/actions/phpunit/action.yml) - Advanced PHPUnit execution.\n\n## Quick start\n\n### Composer Require Checker\n\n\u003c!-- editorconfig-checker-disable --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n```yaml\n---\non:\n  pull_request:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\n  push:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\nname: composer-require-checker\n\njobs:\n  dependency-check:\n    uses: php-forge/actions/.github/workflows/composer-require-checker.yml@v1\n    with:\n      command-options: \"--config-file=.composer-require-checker.json\"\n```\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- editorconfig-checker-enable --\u003e\n\n### Easy Coding Standard\n\n\u003c!-- editorconfig-checker-disable --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n```yaml\n---\non:\n  pull_request:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\n  push:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\nname: easy-coding-standards\n\njobs:\n  coding-standards:\n    uses: php-forge/actions/.github/workflows/ecs.yml@v1\n    with:\n      command-options: \"check --ansi --no-progress-bar\"\n      php-version: '[\"8.4\"]'\n```\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- editorconfig-checker-enable --\u003e\n\n### Infection Mutation Testing {#infection}\n\n\u003c!-- editorconfig-checker-disable --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n```yaml\n---\non:\n  pull_request:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\n  push:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\nname: mutation-testing\n\njobs:\n  mutation-testing:\n    uses: php-forge/actions/.github/workflows/reusable-infection.yml@v2\n    secrets:\n      STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }}\n    with:\n      # Infection configuration\n      command-options: \"--threads=4 --min-msi=80\"\n      command-coverage-options: --with-uncovered\n      # PHPStan integration\n      phpstan: true\n```\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- editorconfig-checker-enable --\u003e\n\n### PHPUnit\n\n\u003c!-- editorconfig-checker-disable --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n```yaml\n---\non:\n  pull_request:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\n  push:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\nname: build\n\njobs:\n  phpunit:\n    uses: php-forge/actions/.github/workflows/phpunit.yml@v1\n    secrets:\n      AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}\n    with:\n      # Composer settings\n      composer-command: composer install --prefer-dist --no-progress\n      # Coverage settings\n      coverage-driver: pcov\n      coverage-format: clover\n      # PHP configuration\n      extensions: mbstring, intl, pdo_sqlite\n      ini-values: date.timezone='UTC', memory_limit=-1\n      # Operating systems\n      os: '[\"ubuntu-latest\", \"windows-2022\"]'\n      # PHP versions to test\n      php-version: '[\"8.1\", \"8.2\", \"8.3\", \"8.4\"]'\n      # PHPUnit configuration\n      phpunit-configuration: phpunit.xml\n      phpunit-exclude-group: integration\n      phpunit-group: unit\n```\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- editorconfig-checker-enable --\u003e\n\n### PHPUnit with Database\n\n\u003c!-- editorconfig-checker-disable --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n```yaml\n---\non:\n  pull_request:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\n  push:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\nname: build-mysql\n\njobs:\n  database-tests:\n    uses: php-forge/actions/.github/workflows/phpunit-database.yml@v1\n    secrets:\n      CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}\n    with:\n      # Database configuration\n      database-env: |\n        {\n          \"MYSQL_ROOT_PASSWORD\": \"root\",\n          \"MYSQL_DATABASE\": \"test\"\n        }\n        database-health-cmd: \"mysqladmin ping\"\n        database-health-retries: 3\n        database-image: mysql\n        database-port: 3306\n        database-type: mysql\n        database-versions: '[\"8.0\", \"8.4\", \"latest\"]'\n        extensions: pdo, pdo_mysql\n        php-version: '[\"8.4\"]'\n        phpunit-group: mysql\n```\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- editorconfig-checker-enable --\u003e\n\n**Supported Databases:**\n\n| Database   | Docker Image                     | Default Port | Health Check Command     |\n| ---------- | -------------------------------- | ------------ | ------------------------ |\n| MySQL      | `mysql`                          | 3306         | `mysqladmin ping`        |\n| PostgreSQL | `postgres`                       | 5432         | `pg_isready`             |\n| SQL Server | `mcr.microsoft.com/mssql/server` | 1433         | `sqlcmd -Q \"SELECT 1\"`   |\n| Oracle     | `gvenzl/oracle-xe`               | 1521         | `sqlplus -S / as sysdba` |\n\n### PHPStan Static Analysis\n\n\u003c!-- editorconfig-checker-disable --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n```yaml\n---\non:\n  pull_request:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\n  push:\n    paths-ignore:\n      - \".gitattributes\"\n      - \".gitignore\"\n      - \"CHANGELOG.md\"\n      - \"docs/**\"\n      - \"README.md\"\n\nname: static-analysis\n\njobs:\n  static-analysis:\n    uses: php-forge/actions/.github/workflows/phpstan.yml@v1\n    with:\n      # PHPStan configuration\n      configuration: phpstan.neon\n      command-options: \"analyse --error-format=checkstyle | cs2pr\"\n      # Environment\n      php-version: '[\"8.4\"]'\n      tools: cs2pr\n```\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- editorconfig-checker-enable --\u003e\n\n### Super Linter\n\n\u003c!-- editorconfig-checker-disable --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n```yaml\n---\non:\n  - pull_request\n  - push\n\nname: linter\n\njobs:\n  linter:\n    uses: php-forge/actions/.github/workflows/super-linter.yml@main\n    permissions:\n      checks: write\n      contents: read\n      statuses: write    \n    secrets:\n      AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n```\n\u003c!-- prettier-ignore-end --\u003e\n\u003c!-- editorconfig-checker-enable --\u003e\n\n\u003e **Note**: YAML files should use 2-space indentation. This example shows correct YAML syntax - copy it to your `.github/workflows/*.yml` files as-is.\n\n## Package information\n\n[![GitHub Release](https://img.shields.io/github/v/release/php-forge/actions?style=for-the-badge\u0026logo=git\u0026logoColor=white\u0026label=Release)](https://github.com/php-forge/actions/releases)\n\n## Quality code\n\n[![Super-Linter](https://img.shields.io/github/actions/workflow/status/php-forge/actions/linter.yml?style=for-the-badge\u0026label=Super-Linter\u0026logo=github)](https://github.com/php-forge/actions/actions/workflows/linter.yml)\n\n## Our social networks\n\n[![Follow on X](https://img.shields.io/badge/-Follow%20on%20X-1DA1F2.svg?style=for-the-badge\u0026logo=x\u0026logoColor=white\u0026labelColor=000000)](https://x.com/Terabytesoftw)\n\n## License\n\n[![License](https://img.shields.io/badge/License-BSD--3--Clause-brightgreen.svg?style=for-the-badge\u0026logo=opensourceinitiative\u0026logoColor=white\u0026labelColor=555555)](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-forge%2Factions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphp-forge%2Factions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-forge%2Factions/lists"}