<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Ci - Tag - vo.rs</title><link>https://vo.rs/tags/ci/</link><description>Ci - Tag - vo.rs</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright><lastBuildDate>Mon, 06 Apr 2026 08:00:00 +0000</lastBuildDate><atom:link href="https://vo.rs/tags/ci/" rel="self" type="application/rss+xml"/><item><title>Earthly: Containerized Build Pipelines That Combine Dockerfile and Makefile</title><link>https://vo.rs/story/earthly-containerized-build-pipelines-that-combine-dockerfile-and-makefile/</link><description>&lt;p&gt;Every project I&amp;rsquo;ve maintained eventually grows a &lt;code&gt;Makefile&lt;/code&gt; full of &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;lint&lt;/code&gt;, and &lt;code&gt;release&lt;/code&gt; targets that work beautifully on my machine and nowhere else. The targets assume a particular toolchain, a particular OS, particular environment variables. Then CI does something subtly different, and you maintain two parallel descriptions of the same build forever. Earthly is the tool that finally made me delete that duplication. It&amp;rsquo;s what you get if a &lt;code&gt;Makefile&lt;/code&gt; and a &lt;code&gt;Dockerfile&lt;/code&gt; had a child who insisted everything run in a container.&lt;/p&gt;</description><pubDate>Mon, 06 Apr 2026 08:00:00 +0000</pubDate></item><item><title>Act: Running GitHub Actions Locally Before You Push</title><link>https://vo.rs/story/act-running-github-actions-locally-before-you-push/</link><description>&lt;p&gt;We have all done the thing. You tweak a workflow file, you can&amp;rsquo;t run it locally, so you push a commit called &amp;ldquo;fix ci&amp;rdquo;, watch it fail, push &amp;ldquo;fix ci 2&amp;rdquo;, fail, &amp;ldquo;actually fix ci&amp;rdquo;, fail, and by the time it&amp;rsquo;s green your git history reads like a cry for help. The feedback loop on GitHub Actions is dreadful precisely because the only way to test it is to use the production system itself, slowly, in public. &lt;code&gt;act&lt;/code&gt; fixes that by running your workflows locally in Docker.&lt;/p&gt;</description><pubDate>Fri, 13 Feb 2026 08:00:00 +0000</pubDate></item><item><title>Renovate Bot: Automated Dependency Updates That Don't Break Everything</title><link>https://vo.rs/story/renovate-bot-automated-dependency-updates-that-dont-break-everything/</link><description>&lt;p&gt;I have a confession that every honest engineer shares: I do not update my dependencies often enough. Things work, the backlog is long, and the moment you bump one library you discover three transitive ones that hate you now. So packages rot, CVEs accumulate, and then one terrible Tuesday you attempt a major upgrade across two years of drift and lose an afternoon to it. Renovate exists to stop that slow-motion disaster by turning one enormous painful upgrade into a steady stream of tiny, reviewable ones.&lt;/p&gt;</description><pubDate>Sat, 07 Feb 2026 10:00:00 +0000</pubDate></item></channel></rss>