<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ci on BXM.net</title>
    <link>https://bxm.net/tags/ci/</link>
    <description>Recent content in Ci on BXM.net</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 22 Oct 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://bxm.net/tags/ci/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Memo in GitHub Actions Skipped a Rust Release Build and Caught Runners With Different Compilers</title>
      <link>https://bxm.net/memo-in-github-actions-skipped-a-rust-release-build-and-caught-runners-with-different-compilers/</link>
      <pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://bxm.net/memo-in-github-actions-skipped-a-rust-release-build-and-caught-runners-with-different-compilers/</guid>
      <description>&lt;p&gt;Most CI jobs build the same thing again and again. A docs fix or a typo in a README triggers the whole pipeline, and the release build runs as if the code had changed. This case study puts BXM Memo in front of one such step, a release build of the &lt;code&gt;bxm-canon&lt;/code&gt; binary, and keeps Memo&amp;rsquo;s cache between jobs with &lt;code&gt;actions/cache&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The workflow is in the &lt;a href=&#34;https://github.com/softdevstudio/bxm&#34;&gt;repository&lt;/a&gt; as &lt;code&gt;.github/workflows/case-study-memo.yml&lt;/code&gt;. Five jobs run one after another, each on a fresh GitHub-hosted runner. &lt;code&gt;plain&lt;/code&gt; builds without Memo for the baseline. &lt;code&gt;cold&lt;/code&gt; builds through Memo with an empty cache, &lt;code&gt;warm&lt;/code&gt; changes nothing, &lt;code&gt;docs&lt;/code&gt; edits the README, and &lt;code&gt;source&lt;/code&gt; edits a Rust source file. The inputs are &lt;code&gt;canon/src/**&lt;/code&gt;, &lt;code&gt;Cargo.toml&lt;/code&gt; and &lt;code&gt;Cargo.lock&lt;/code&gt;, and the salt is &lt;code&gt;rustc --version&lt;/code&gt;, so a different compiler means a different result. We ran the whole workflow twice.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Replaying 13 Commits Through Memo Cut Test Time From 228 to 79 Seconds and Turned Up Two Flaky Tests</title>
      <link>https://bxm.net/replaying-13-commits-through-memo-cut-test-time-from-228-to-79-seconds-and-turned-up-two-flaky-tests/</link>
      <pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://bxm.net/replaying-13-commits-through-memo-cut-test-time-from-228-to-79-seconds-and-turned-up-two-flaky-tests/</guid>
      <description>&lt;p&gt;BXM&amp;rsquo;s repository has two packages with their own test suites: Canon, tested with &lt;code&gt;cargo test&lt;/code&gt;, and Memo, tested with &lt;code&gt;go test&lt;/code&gt;. Most commits touch one of them, or neither. A docs change or a new JavaScript build script doesn&amp;rsquo;t change either suite&amp;rsquo;s result, yet a plain CI job runs both every time.&lt;/p&gt;&#xA;&lt;p&gt;So we replayed the repository&amp;rsquo;s own history. All 13 commits from 0.1.0 to the end of 0.3.0 were checked out one after another, and both suites ran at each one. That happened twice: once plain, and once with each suite behind Memo. Canon&amp;rsquo;s suite takes &lt;code&gt;canon/**&lt;/code&gt; and the spec&amp;rsquo;s test vectors as inputs. Memo&amp;rsquo;s takes &lt;code&gt;memo/**&lt;/code&gt;. Memo needs a declared output, so each suite writes its log to a file and that file is the output.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why Did My Build Step Run Again, Six Cache Misses and What Memo Said About Each</title>
      <link>https://bxm.net/why-did-my-build-step-run-again-six-cache-misses-and-what-memo-said-about-each/</link>
      <pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://bxm.net/why-did-my-build-step-run-again-six-cache-misses-and-what-memo-said-about-each/</guid>
      <description>&lt;p&gt;A cache that misses without saying why is almost as annoying as no cache. Someone notices the step ran again, nobody knows why, and the cache key gets a random suffix &amp;ldquo;to be safe&amp;rdquo;. After that the cache never hits.&lt;/p&gt;&#xA;&lt;p&gt;BXM Memo keeps the manifest of the last run of each named job. On a miss it compares the two and says what changed. We put that to work on a small report step: a Python script that totals sales per region from monthly CSV files into &lt;code&gt;out/report.txt&lt;/code&gt;. The step runs through Memo with the script and &lt;code&gt;data/*.csv&lt;/code&gt; as inputs, &lt;code&gt;REPORT_CURRENCY&lt;/code&gt; as an environment variable that changes the result, and the Python version as the salt.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
