<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://himanshuramavat.github.io/php-ci-docs/blog</id>
    <title>php-ci Blog</title>
    <updated>2026-05-20T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://himanshuramavat.github.io/php-ci-docs/blog"/>
    <subtitle>php-ci Blog</subtitle>
    <icon>https://himanshuramavat.github.io/php-ci-docs/img/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[php-ci 1.4.0: PHP 8.4, GHCR mirror and a new :latest]]></title>
        <id>https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release</id>
        <link href="https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release"/>
        <updated>2026-05-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Release notes for php-ci 1.4.0 — PHP 8.4 images, a GitHub Container Registry mirror, and rolling tags.]]></summary>
        <content type="html"><![CDATA[<p>php-ci <strong>1.4.0</strong> is out. This release adds PHP 8.4 images, mirrors every tag to
the GitHub Container Registry, and hardens the build and release workflows.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-features">New features<a href="https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release#new-features" class="hash-link" aria-label="Direct link to New features" title="Direct link to New features" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="php-84-images">PHP 8.4 images<a href="https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release#php-84-images" class="hash-link" aria-label="Direct link to PHP 8.4 images" title="Direct link to PHP 8.4 images" translate="no">​</a></h3>
<p>The newest PHP line is now available:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> pull himanshuramavat/php-ci:8.4</span><br></div></code></pre></div></div>
<p>Add a "future PHP" column to your matrix to catch deprecations before they become
breaking changes:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">strategy</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">matrix</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">php</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'8.1'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'8.2'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'8.3'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'8.4'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key atrule">container</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> himanshuramavat/php</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">ci</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain">$</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> matrix.php </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="github-container-registry-mirror">GitHub Container Registry mirror<a href="https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release#github-container-registry-mirror" class="hash-link" aria-label="Direct link to GitHub Container Registry mirror" title="Direct link to GitHub Container Registry mirror" translate="no">​</a></h3>
<p>Every tag is now also published to GHCR, which avoids Docker Hub pull-rate limits
on shared CI runners:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">docker</span><span class="token plain"> pull ghcr.io/himanshuramavat/php-ci:8.3</span><br></div></code></pre></div></div>
<p>Both registries carry identical tags and digests — pick whichever suits your
runner. See the <a class="" href="https://himanshuramavat.github.io/php-ci-docs/docs/reference/docker-tags">Docker Tags reference</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="more-extensions">More extensions<a href="https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release#more-extensions" class="hash-link" aria-label="Direct link to More extensions" title="Direct link to More extensions" translate="no">​</a></h3>
<p>The image ships the extensions commonly needed in CI runs (database drivers,
intl/string handling, image processing, etc.). See the <a class="" href="https://himanshuramavat.github.io/php-ci-docs/docs/reference/php-extensions">PHP Extensions</a>
page for the current list.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes">Changes<a href="https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release#changes" class="hash-link" aria-label="Direct link to Changes" title="Direct link to Changes" translate="no">​</a></h2>
<ul>
<li class="">Rolling tags are rebuilt regularly to pick up upstream PHP and base-OS security
patches.</li>
<li class="">Composer is included in the image for CI usage.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fixes">Fixes<a href="https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release#fixes" class="hash-link" aria-label="Direct link to Fixes" title="Direct link to Fixes" translate="no">​</a></h2>
<ul>
<li class="">Fixed an <code>intl</code> ICU data mismatch that affected locale-sensitive tests.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="upgrade-notes">Upgrade notes<a href="https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release#upgrade-notes" class="hash-link" aria-label="Direct link to Upgrade notes" title="Direct link to Upgrade notes" translate="no">​</a></h2>
<ul>
<li class="">Pin a concrete PHP tag (<code>:8.3</code>, <code>:8.4</code>, etc.) for reproducible pipelines.</li>
<li class="">TYPO3 functional tests can run on SQLite via <code>pdo_sqlite</code>; MySQL users should
confirm the <code>mysql:8.0</code> service image still matches their expectations.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="full-changelog">Full changelog<a href="https://himanshuramavat.github.io/php-ci-docs/blog/php-ci-1.4.0-release#full-changelog" class="hash-link" aria-label="Direct link to Full changelog" title="Direct link to Full changelog" translate="no">​</a></h2>
<p>See the complete <a class="" href="https://himanshuramavat.github.io/php-ci-docs/docs/reference/changelog">Changelog</a> for every entry, and the
<a href="https://github.com/himanshuramavat/php-ci/releases/tag/v1.4.0" target="_blank" rel="noopener noreferrer" class="">GitHub release</a>
for the tagged artefacts.</p>
<p>Thanks to everyone who reported issues and tested the 8.4 images during the
pre-release. As always, feedback is welcome on
<a href="https://github.com/himanshuramavat/php-ci/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content>
        <author>
            <name>Himanshu Ramavat</name>
            <uri>https://github.com/himanshuramavat</uri>
        </author>
        <category label="Release" term="Release"/>
        <category label="PHP" term="PHP"/>
        <category label="Announcement" term="Announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Welcome to php-ci]]></title>
        <id>https://himanshuramavat.github.io/php-ci-docs/blog/welcome</id>
        <link href="https://himanshuramavat.github.io/php-ci-docs/blog/welcome"/>
        <updated>2026-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Announcing php-ci — a reusable Docker image that makes PHP CI/CD pipelines short, fast and reproducible.]]></summary>
        <content type="html"><![CDATA[<p>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. <strong>php-ci</strong> exists to delete that boilerplate.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-it-is">What it is<a href="https://himanshuramavat.github.io/php-ci-docs/blog/welcome#what-it-is" class="hash-link" aria-label="Direct link to What it is" title="Direct link to What it is" translate="no">​</a></h2>
<p>php-ci is a reusable Docker image for CI/CD pipelines. It bundles <strong>PHP 8.1–8.4</strong>,
<strong>Composer 2</strong>, and the extensions and system libraries commonly needed for CI.
Install your project-level test/QA tooling via Composer (<code>./vendor/bin/*</code>). Point
your pipeline at one image tag and your config collapses to a few lines:</p>
<div class="language-yaml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-yaml codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token key atrule">jobs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token key atrule">test</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">runs-on</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> ubuntu</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">latest</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">container</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token key atrule">image</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> himanshuramavat/php</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">ci</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token number">8.3</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token key atrule">steps</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">uses</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> actions/checkout@v4</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> composer install </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">no</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">interaction </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">no</span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain">progress</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token key atrule">run</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> ./vendor/bin/phpunit</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-we-built-it">Why we built it<a href="https://himanshuramavat.github.io/php-ci-docs/blog/welcome#why-we-built-it" class="hash-link" aria-label="Direct link to Why we built it" title="Direct link to Why we built it" translate="no">​</a></h2>
<p>Three problems kept coming up across TYPO3, Laravel and library projects:</p>
<ol>
<li class=""><strong>Duplication.</strong> Every repo carried its own provisioning steps that drifted
over time.</li>
<li class=""><strong>Slow cold starts.</strong> Installing extensions on every job wasted minutes.</li>
<li class=""><strong>Non-reproducibility.</strong> "Works on my pipeline" because the runner happened to
have the right PHP patch.</li>
</ol>
<p>A version-pinned image solves all three: one place to maintain, extensions baked
in, identical bytes everywhere.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="goals-for-the-project">Goals for the project<a href="https://himanshuramavat.github.io/php-ci-docs/blog/welcome#goals-for-the-project" class="hash-link" aria-label="Direct link to Goals for the project" title="Direct link to Goals for the project" translate="no">​</a></h2>
<ul>
<li class=""><strong>Stay small and predictable.</strong> A tight, well-documented tag convention — no
surprise breaking changes.</li>
<li class=""><strong>Be provider-agnostic.</strong> The same image works on GitHub Actions, GitLab CI and
Bitbucket Pipelines.</li>
<li class=""><strong>Track PHP closely.</strong> New PHP minor lines land as new tags so you can test
forward compatibility early.</li>
<li class=""><strong>Document everything.</strong> That's what this site is for.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="get-started">Get started<a href="https://himanshuramavat.github.io/php-ci-docs/blog/welcome#get-started" class="hash-link" aria-label="Direct link to Get started" title="Direct link to Get started" translate="no">​</a></h2>
<ul>
<li class="">Read the <a class="" href="https://himanshuramavat.github.io/php-ci-docs/docs/intro">Introduction</a> and <a class="" href="https://himanshuramavat.github.io/php-ci-docs/docs/quick-start">Quick Start</a>.</li>
<li class="">Grab a copy-paste pipeline for
<a class="" href="https://himanshuramavat.github.io/php-ci-docs/docs/ci-providers/github-actions">GitHub Actions</a>,
<a class="" href="https://himanshuramavat.github.io/php-ci-docs/docs/ci-providers/gitlab-ci">GitLab CI</a> or
<a class="" href="https://himanshuramavat.github.io/php-ci-docs/docs/ci-providers/bitbucket-pipelines">Bitbucket Pipelines</a>.</li>
<li class="">Star the repo on <a href="https://github.com/himanshuramavat/php-ci" target="_blank" rel="noopener noreferrer" class="">GitHub</a> and pull
the image from <a href="https://hub.docker.com/r/himanshuramavat/php-ci" target="_blank" rel="noopener noreferrer" class="">Docker Hub</a>.</li>
</ul>
<p>Feedback and contributions are very welcome — see the
<a class="" href="https://himanshuramavat.github.io/php-ci-docs/docs/community/contributing">Contributing guide</a>. Happy shipping!</p>]]></content>
        <author>
            <name>Himanshu Ramavat</name>
            <uri>https://github.com/himanshuramavat</uri>
        </author>
        <category label="Announcement" term="Announcement"/>
        <category label="PHP" term="PHP"/>
    </entry>
</feed>