<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Kettlebuild</title>
  <subtitle>Practical notes on making builds and CI fast, correct and reproducible.</subtitle>
  <id>https://kettlebuild.org/</id>
  <link rel="self" type="application/atom+xml" href="https://kettlebuild.org/feed.xml"/>
  <link rel="alternate" type="text/html" href="https://kettlebuild.org/"/>
  <updated>2026-11-03T09:00:00Z</updated>
  <author>
    <name>Theo</name>
  </author>
  <rights>© 2026 Kettlebuild</rights>

  <entry>
    <title>Smaller Docker images, warmer layer caches</title>
    <id>tag:kettlebuild.org,2026-11-03:/articles/docker-images-small-and-cacheable</id>
    <link rel="alternate" type="text/html" href="https://kettlebuild.org/articles/docker-images-small-and-cacheable.html"/>
    <published>2026-11-03T09:00:00Z</published>
    <updated>2026-11-03T09:00:00Z</updated>
    <category term="containers"/>
    <category term="caching"/>
    <summary>Layer order, .dockerignore, cache mounts and multi-stage builds: small images and fast rebuilds come from the same habits.</summary>
  </entry>

  <entry>
    <title>Task graphs: rebuilding only what changed</title>
    <id>tag:kettlebuild.org,2026-09-29:/articles/monorepo-task-graphs</id>
    <link rel="alternate" type="text/html" href="https://kettlebuild.org/articles/monorepo-task-graphs.html"/>
    <published>2026-09-29T09:00:00Z</published>
    <updated>2026-09-29T09:00:00Z</updated>
    <category term="monorepo"/>
    <category term="incremental"/>
    <category term="caching"/>
    <summary>How monorepo tools decide what to run, why affected detection misses things, and how to keep the graph honest.</summary>
  </entry>

  <entry>
    <title>Where CI time actually goes</title>
    <id>tag:kettlebuild.org,2026-08-25:/articles/faster-ci-pipelines</id>
    <link rel="alternate" type="text/html" href="https://kettlebuild.org/articles/faster-ci-pipelines.html"/>
    <published>2026-08-25T09:00:00Z</published>
    <updated>2026-09-29T09:00:00Z</updated>
    <category term="ci"/>
    <category term="caching"/>
    <category term="testing"/>
    <summary>Measure the phases first, then cut setup, add caching, parallelise where it pays and split tests by recorded time.</summary>
  </entry>

  <entry>
    <title>Same commit, same bytes: a reproducible builds checklist</title>
    <id>tag:kettlebuild.org,2026-07-21:/articles/reproducible-builds-checklist</id>
    <link rel="alternate" type="text/html" href="https://kettlebuild.org/articles/reproducible-builds-checklist.html"/>
    <published>2026-07-21T09:00:00Z</published>
    <updated>2026-07-21T09:00:00Z</updated>
    <category term="reproducibility"/>
    <category term="archives"/>
    <category term="toolchains"/>
    <summary>Timestamps, file order, locale and build paths: why two builds of one commit differ, and how SOURCE_DATE_EPOCH helps.</summary>
  </entry>

  <entry>
    <title>Cache keys are a correctness problem</title>
    <id>tag:kettlebuild.org,2026-06-16:/articles/content-addressed-cache-keys</id>
    <link rel="alternate" type="text/html" href="https://kettlebuild.org/articles/content-addressed-cache-keys.html"/>
    <published>2026-06-16T09:00:00Z</published>
    <updated>2026-07-21T09:00:00Z</updated>
    <category term="caching"/>
    <category term="correctness"/>
    <summary>A content-addressed cache is only as correct as its key. The usual ways keys go wrong, and how to tell which one bit you.</summary>
  </entry>
</feed>
