<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on rmqa.com</title>
    <link>https://rmqa.com/posts/</link>
    <description>Recent content in Posts on rmqa.com</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 25 Oct 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://rmqa.com/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>A Real Release Checked With rmqa, ukue 0.1.0 From GitHub</title>
      <link>https://rmqa.com/a-real-release-checked-with-rmqa-ukue-0.1.0-from-github/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/a-real-release-checked-with-rmqa-ukue-0.1.0-from-github/</guid>
      <description>&lt;p&gt;The other use cases on this site use a made-up tool so the mistakes can be planted on purpose. This one is a real release: &lt;a href=&#34;https://ukue.com/&#34;&gt;ukue&lt;/a&gt;, a job queue that lives in one SQLite file, published on GitHub as five archives and a checksums file. Like rmqa, it&amp;rsquo;s a &lt;a href=&#34;https://softdevstudio.com/&#34;&gt;SoftDevStudio.com&lt;/a&gt; project, and its releases are built by a workflow nobody watches.&lt;/p&gt;&#xA;&lt;h2 id=&#34;writing-the-manifest&#34;&gt;Writing the Manifest&lt;/h2&gt;&#xA;&lt;p&gt;The files came straight from the release&amp;rsquo;s download links. Then:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Checking a Draft GitHub Release Before Anyone Can Download It</title>
      <link>https://rmqa.com/checking-a-draft-github-release-before-anyone-can-download-it/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/checking-a-draft-github-release-before-anyone-can-download-it/</guid>
      <description>&lt;p&gt;Many projects don&amp;rsquo;t publish releases straight from CI. A tool such as GoReleaser builds everything and uploads it to a draft release on GitHub. A maintainer looks the draft over, edits the notes, and presses publish. Until then, nobody else can see it.&lt;/p&gt;&#xA;&lt;p&gt;That review step is a good idea with one weakness: a person looking at a list of six file names can&amp;rsquo;t tell what&amp;rsquo;s inside them. The draft is the last moment a mistake is free to fix, and it&amp;rsquo;s exactly where an automatic check belongs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Checking Rust Style Release Targets and a Missing Intel Mac Build With rmqa</title>
      <link>https://rmqa.com/checking-rust-style-release-targets-and-a-missing-intel-mac-build-with-rmqa/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/checking-rust-style-release-targets-and-a-missing-intel-mac-build-with-rmqa/</guid>
      <description>&lt;p&gt;Rust projects usually name their release files after target triples: &lt;code&gt;x86_64-unknown-linux-gnu&lt;/code&gt;, &lt;code&gt;aarch64-apple-darwin&lt;/code&gt;, &lt;code&gt;x86_64-pc-windows-msvc&lt;/code&gt;. Each archive also wraps its contents in a folder with the same name, so unpacking &lt;code&gt;tidy-2.3.0-aarch64-apple-darwin.tar.gz&lt;/code&gt; gives a folder &lt;code&gt;tidy-2.3.0-aarch64-apple-darwin/&lt;/code&gt; with the program inside. Many projects ship two license files, MIT and Apache.&lt;/p&gt;&#xA;&lt;p&gt;None of that fits a simple &lt;code&gt;{os}_{arch}&lt;/code&gt; pattern, and rmqa doesn&amp;rsquo;t need it to. Any string you add to a &lt;code&gt;[[platform]]&lt;/code&gt; becomes a template variable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How rmqa Was Tested With 24 Broken Releases and One Bug It Found in Itself</title>
      <link>https://rmqa.com/how-rmqa-was-tested-with-24-broken-releases-and-one-bug-it-found-in-itself/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/how-rmqa-was-tested-with-24-broken-releases-and-one-bug-it-found-in-itself/</guid>
      <description>&lt;p&gt;A release checker has one job, and it fails in two ways. It can miss a broken release, which is the reason you run it. Or it can fail a good release, which teaches you to ignore it. The tests for rmqa go after both.&lt;/p&gt;&#xA;&lt;p&gt;All the numbers on this page come from files in the &lt;a href=&#34;https://github.com/softdevstudio/rmqa/tree/main/test/results&#34;&gt;test/results&lt;/a&gt; folder of the code repository. A script runs every test and writes those files, so the site never quotes a number nobody can check.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keeping a Machine-Readable Record of What Every Release Shipped</title>
      <link>https://rmqa.com/keeping-a-machine-readable-record-of-what-every-release-shipped/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/keeping-a-machine-readable-record-of-what-every-release-shipped/</guid>
      <description>&lt;p&gt;Sooner or later someone asks what exactly was in a release. A customer whose security team wants to know which build of a program they&amp;rsquo;re running. An auditor working through a supply-chain questionnaire. A colleague trying to work out, a year later, whether the Windows download of version 2.3.0 had the fix in it.&lt;/p&gt;&#xA;&lt;p&gt;The release page answers part of that: file names and sizes. It doesn&amp;rsquo;t say what was inside the archives, which platform each program was built for, or whether anyone checked. rmqa&amp;rsquo;s JSON report does, and it costs nothing to keep.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Keeping Env Files and Private Keys Out of Release Archives</title>
      <link>https://rmqa.com/keeping-env-files-and-private-keys-out-of-release-archives/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/keeping-env-files-and-private-keys-out-of-release-archives/</guid>
      <description>&lt;p&gt;Packing scripts are often written as &amp;ldquo;take this folder and archive it&amp;rdquo;. That&amp;rsquo;s fine until the folder holds more than it should. A developer runs the release script locally once, with a &lt;code&gt;.env&lt;/code&gt; file sitting in the build folder because the integration tests needed it. A signing step drops its key file next to the program it just signed. A Mac adds &lt;code&gt;.DS_Store&lt;/code&gt; files to every folder it opens.&lt;/p&gt;&#xA;&lt;p&gt;Once a release is public, a secret inside it is public too, and deleting the release doesn&amp;rsquo;t take it back: mirrors, caches and package managers may already have copies. The only safe time to catch it is before publishing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Permission Denied After Unzip and How rmqa Spots Lost Executable Bits</title>
      <link>https://rmqa.com/permission-denied-after-unzip-and-how-rmqa-spots-lost-executable-bits/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/permission-denied-after-unzip-and-how-rmqa-spots-lost-executable-bits/</guid>
      <description>&lt;p&gt;On Linux and macOS, a program runs only if its file is marked executable. The mark travels with the file in a tar archive, as part of each entry&amp;rsquo;s Unix permissions. Lose it, and every user who downloads the release gets the same first experience:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ ./tidy&#xA;bash: ./tidy: Permission denied&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then a support question, or a quiet uninstall.&lt;/p&gt;&#xA;&lt;h2 id=&#34;two-ways-it-gets-lost&#34;&gt;Two Ways It Gets Lost&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Packing with the wrong mode.&lt;/strong&gt; A script copies the program with a tool or a step that doesn&amp;rsquo;t keep permissions, or builds the tar archive with fixed file modes, and the program goes in as &lt;code&gt;-rw-r--r--&lt;/code&gt;. The archive looks normal, the program is fine, it just won&amp;rsquo;t start.&lt;/p&gt;</description>
    </item>
    <item>
      <title>rmqa 0.1 Checks a Software Release Before You Publish It</title>
      <link>https://rmqa.com/rmqa-0.1-checks-a-software-release-before-you-publish-it/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/rmqa-0.1-checks-a-software-release-before-you-publish-it/</guid>
      <description>&lt;p&gt;A release is a handful of files. An archive for Linux on Intel, one for Linux on ARM, two for macOS, a zip for Windows, a checksums file. Every one of them was produced by a pipeline that went green, and yet the set can still be wrong in ways nobody looks for: the ARM archive holds the Intel build, the Intel Mac archive still has last week&amp;rsquo;s program inside, the license is missing from the zip.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What Release Verification Is and Why a Green CI Run Is Not Enough</title>
      <link>https://rmqa.com/what-release-verification-is-and-why-a-green-ci-run-is-not-enough/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/what-release-verification-is-and-why-a-green-ci-run-is-not-enough/</guid>
      <description>&lt;p&gt;Most software teams test their code thoroughly. Unit tests, integration tests, linters, type checks, builds on several operating systems. When all of that passes, the pipeline goes green and the release goes out.&lt;/p&gt;&#xA;&lt;p&gt;But the tests check the code. They don&amp;rsquo;t check the release. And a release isn&amp;rsquo;t code: it&amp;rsquo;s a set of files, assembled at the very end by a few lines of script, that users download and run. Release verification means checking that set of files, as a whole, before it&amp;rsquo;s published.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why the Release Checker Is Called rmqa</title>
      <link>https://rmqa.com/why-the-release-checker-is-called-rmqa/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/why-the-release-checker-is-called-rmqa/</guid>
      <description>&lt;p&gt;rmqa stands for release manifest QA. Each part of the name is one idea, and together they describe the whole tool.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Release.&lt;/strong&gt; Not the build, not the code, not the pipeline. The release is the set of files people download: the archives, the bare programs, the checksums. It&amp;rsquo;s the one product of a software project that users see directly, and it&amp;rsquo;s assembled at the very end, often by a script that was written once and rarely looked at again.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wrong Build in the arm64 Archive Caught Before a Go CLI Release Went Out</title>
      <link>https://rmqa.com/wrong-build-in-the-arm64-archive-caught-before-a-go-cli-release-went-out/</link>
      <pubDate>Sun, 25 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rmqa.com/wrong-build-in-the-arm64-archive-caught-before-a-go-cli-release-went-out/</guid>
      <description>&lt;p&gt;Say a small team maintains a command-line tool in Go called &lt;code&gt;tidy&lt;/code&gt;. Each release ships five archives, for Linux on Intel and ARM, macOS on Apple silicon and Intel, and Windows, plus a &lt;code&gt;SHA256SUMS&lt;/code&gt; file. A release workflow builds them in a matrix of jobs and a final job uploads everything.&lt;/p&gt;&#xA;&lt;p&gt;One day a refactor of the workflow moves the build output into a shared folder. The Linux ARM job now packs whatever &lt;code&gt;tidy&lt;/code&gt; binary is in that folder, and on the runner where it lands, that&amp;rsquo;s the Intel build. Meanwhile the Intel Mac job hits a cache from the previous release and doesn&amp;rsquo;t rebuild. Every job is green. The archives have the right names and plausible sizes.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
