Checking Rust Style Release Targets and a Missing Intel Mac Build With rmqa
Rust projects usually name their release files after target triples: x86_64-unknown-linux-gnu, aarch64-apple-darwin, x86_64-pc-windows-msvc. Each archive also wraps its contents in a folder with the same name, so unpacking tidy-2.3.0-aarch64-apple-darwin.tar.gz gives a folder tidy-2.3.0-aarch64-apple-darwin/ with the program inside. Many projects ship two license files, MIT and Apache.
None of that fits a simple {os}_{arch} pattern, and rmqa doesn’t need it to. Any string you add to a [[platform]] becomes a template variable.
The Manifest
project = "tidy"
version = "2.3.0"
[[platform]]
os = "linux"
arch = "amd64"
target = "x86_64-unknown-linux-gnu"
[[platform]]
os = "linux"
arch = "arm64"
target = "aarch64-unknown-linux-gnu"
[[platform]]
os = "darwin"
arch = "arm64"
target = "aarch64-apple-darwin"
[[platform]]
os = "darwin"
arch = "amd64"
target = "x86_64-apple-darwin"
[[platform]]
os = "windows"
arch = "amd64"
target = "x86_64-pc-windows-msvc"
[[artifact]]
name = "tidy-{version}-{target}.{archive}"
root = "tidy-{version}-{target}"
binaries = ["tidy{exe}"]
files = ["LICENSE-MIT", "LICENSE-APACHE"]
[[artifact]]
name = "SHA256SUMS"
checksums = "sha256"
target isn’t a setting rmqa knows; it’s just a name, used as {target} in the artifact. os and arch stay in Go’s spelling because rmqa compares them with the program’s header. root says the archive must hold exactly one folder with that name, and the paths in binaries and files are inside it.
The Check
The release for 2.3.0 came out of a workflow where the Intel Mac job had been failing for a while without failing the workflow, and where the Windows packing step only copied one license file:
Checking dist for tidy 2.3.0
ok tidy-2.3.0-x86_64-unknown-linux-gnu.tar.gz linux/amd64
ok tidy-2.3.0-aarch64-unknown-linux-gnu.tar.gz linux/arm64
ok tidy-2.3.0-aarch64-apple-darwin.tar.gz darwin/arm64
FAIL tidy-2.3.0-x86_64-apple-darwin.tar.gz darwin/amd64
missing from the release (the darwin/amd64 download) [missing-artifact]
FAIL tidy-2.3.0-x86_64-pc-windows-msvc.zip windows/amd64
LICENSE-APACHE: is not in the archive [missing-file]
ok SHA256SUMS
Not ready: 2 errors, 0 warnings in 6 files.

The missing download is the kind of thing a download page hides well: the link is there, it just leads to a 404. The missing license is the kind of thing only a careful reader notices, months later.
When the Folder Name Is Wrong
root catches a layout change too. If a new packing script forgot the version in the folder name, every archive would fail with an archive-layout error that names the folder rmqa expected and the one it found. Leave root out and rmqa removes any single wrapping folder on its own, which is the right choice when you don’t care what it’s called.
Rust or Not
Nothing here is specific to Rust. rmqa reads the programs’ headers, so it works the same for Go, C, C++, Zig or anything else that produces ELF, Mach-O or PE files. The target-triple names are just one of many naming schemes a template can describe.