Welcome to php-ci
If you maintain PHP projects, you've probably written the same CI boilerplate more times than you'd like to admit: install PHP, add the right extensions, pull in Composer, configure a coverage driver — and then copy that block into the next repository. php-ci exists to delete that boilerplate.
What it is
php-ci is a reusable Docker image for CI/CD pipelines. It bundles PHP 8.1–8.4,
Composer 2, and the extensions and system libraries commonly needed for CI.
Install your project-level test/QA tooling via Composer (./vendor/bin/*). Point
your pipeline at one image tag and your config collapses to a few lines:
jobs:
test:
runs-on: ubuntu-latest
container:
image: himanshuramavat/php-ci:8.3
steps:
- uses: actions/checkout@v4
- run: composer install --no-interaction --no-progress
- run: ./vendor/bin/phpunit
Why we built it
Three problems kept coming up across TYPO3, Laravel and library projects:
- Duplication. Every repo carried its own provisioning steps that drifted over time.
- Slow cold starts. Installing extensions on every job wasted minutes.
- Non-reproducibility. "Works on my pipeline" because the runner happened to have the right PHP patch.
A version-pinned image solves all three: one place to maintain, extensions baked in, identical bytes everywhere.
Goals for the project
- Stay small and predictable. A tight, well-documented tag convention — no surprise breaking changes.
- Be provider-agnostic. The same image works on GitHub Actions, GitLab CI and Bitbucket Pipelines.
- Track PHP closely. New PHP minor lines land as new tags so you can test forward compatibility early.
- Document everything. That's what this site is for.
Get started
- Read the Introduction and Quick Start.
- Grab a copy-paste pipeline for GitHub Actions, GitLab CI or Bitbucket Pipelines.
- Star the repo on GitHub and pull the image from Docker Hub.
Feedback and contributions are very welcome — see the Contributing guide. Happy shipping!
