deployment

  • The on-call rotation for a team of four

    One person had the phone for two years. A rotation of four is a week in four, which is enough to be tiring and not enough to build…

  • Docker 20.10 and the cgroup transition

    A release with rootless mode and cgroup v2, and a container that reported the host memory limit. Where the numbers come from and which are lies.

  • Artifacts between jobs are uploads, and they are not free

    Jobs run on separate machines with nothing shared, so passing a build between them means uploading it and downloading it again. Measuring is the only way to know…

  • A workflow is YAML and the runner is empty every time

    A long-lived CI server accumulates state that the pipeline quietly depends on — a global package, a cached credential, a directory somebody created in 2017. A hosted runner…

  • Preloading is a restart, not a cache warm

    Preloaded files are compiled once at server start and are fixed until php-fpm restarts, which makes a deploy a restart rather than a reload. A restart drops in-flight…

  • The migration that squashed two hundred files

    A test suite spending ninety seconds replaying six years of schema history. Squashing is a good idea with two failure modes worth knowing first.

  • Elasticsearch aliases, from the first index

    A mapping change usually cannot be applied in place, so it means a new index — and if the application names the index directly, that is a coordinated…

  • Composer 2 changed the lock file, and a team upgrades together

    October brought a rewritten solver and parallel downloads, and the lock file format changed in a way that produces a confusing diff when two people are on different…

  • Composer 2 is not a minor upgrade

    A dependency resolver rewritten and parallel downloads, so install went from ninety seconds to eleven. And a plugin API that broke three packages.

  • webpack 5, and the polyfills that stopped being automatic

    The build broke on a package importing crypto. webpack 4 quietly bundled a browser shim; 5 does not, and the error is the correct one.