Skip to content

Prepare 3.2.0 - #141

Merged
allenap merged 6 commits into
masterfrom
release-3.2.0
Aug 9, 2026
Merged

Prepare 3.2.0#141
allenap merged 6 commits into
masterfrom
release-3.2.0

Conversation

@allenap

@allenap allenap commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Release preparation for 3.2.0, on a branch rather than straight onto master so that the new Package job gets a run before any of it is tagged.

The Package job, and why --all-features

The interesting piece. cargo package packs each crate, unpacks it again, and builds that copy — so anything the build needs but the archive lacks fails right there. This crate has exactly such a dependency: the macros read the words/ lists from disk at compile time, so a list missing from the archive breaks every downstream build while the repository itself keeps working perfectly.

The catch is that cargo package verifies with default features only, and those reach words/{small,medium,large} and nothing else. Excluding words/luxembourgish/ on purpose shows the difference:

cargo package --workspace                 →  passes, omission unnoticed
cargo package --workspace --all-features  →  error: proc macro panicked
    could not read .../target/package/petname-3.2.0/words/luxembourgish/adjectives.txt

So the job runs the --all-features form, and the release checklist gains the same step ahead of the version-bump commit. This seemed better than writing a test that asserts a file list, which would check the manifest rather than whether the result actually builds.

Trimming the published crate

exclude drops development scaffolding — CI workflows, editor settings, scripts/, AGENTS.md, dotfiles — taking the archive from 44 files to 34, 778 KiB.

It's a deny-list rather than an include allow-list on purpose, and there's a comment in Cargo.toml saying why: a wrong deny-list ships a few stray files, whereas a wrong allow-list silently drops a words/ directory. The failure modes are not symmetric. The Package job covers the residual risk in the direction that matters.

The other two commits

The Luxembourgish caveat previously lived only in the headers of the word list files, where nobody consuming the crate would ever see it. It's now in the README's Languages section and in the lang::luxembourgish module docs, so 3.2.0 doesn't present one non-native speaker's guesses at gender as settled. It comes out again once the lists have had a native pass.

The Upgrading section loses "From 3.0.0 to 3.0.1", which existed mainly to say that nothing was required in order to upgrade. Releases within a major version are additive here, so the section now says that once at the top and carries the major transitions alone. Nothing linked to the removed anchor.

Verification

cargo fmt --check; cargo clippy --workspace --all-features --all-targets -D warnings; the full test suite; cargo hack --workspace --feature-powerset build and test (426 passing groups, 0 failures); scripts/doc; scripts/semver-checks, which reads this as 3.1.0 -> 3.2.0 (minor change) and confirms the bump is adequate; and cargo package --workspace --all-features. The -h block in the README is byte-identical to actual -h output.

After merging

Tag v3.2.0 on master, push tags, then cargo publish --workspace. Pushing the tag fires the Release workflow, which builds with --all-features, so Luxembourgish lands in the binaries and the Homebrew bottle without any further change.

allenap added 6 commits August 9, 2026 14:08
The caveat lived only in the headers of the word list files themselves, where
nobody consuming the crate or running the command has any reason to look. Say it
in the README and in the module docs as well, so that a release doesn't present
one non-native speaker's best guesses at gender as though they were settled.

It comes out again once the lists have had a native pass.
The "From 3.0.0 to 3.0.1" section existed mainly to say that nothing was
required in order to upgrade, which is not worth a section of its own — and on
the same reasoning neither 3.1.0 nor 3.2.0 would earn one either. Releases
within a major version are additive here, so the Upgrading section can carry the
major transitions alone and say that once at the top.
Two related things about what actually reaches crates.io.

`exclude` drops the development scaffolding — CI workflows, editor settings,
`scripts/`, `AGENTS.md` — which took the archive from 44 files to 34. It is a
deny-list rather than an `include` allow-list deliberately: getting a deny-list
wrong ships a few stray files, whereas getting an allow-list wrong silently
drops a `words/` directory and breaks every downstream build while leaving the
repository working perfectly.

Guard against exactly that with `cargo package --workspace --all-features`, in
CI and in the release checklist. `cargo package` unpacks what it just packed and
builds it, so a word list missing from the archive fails the build — but only if
the feature that reads it is on. With default features the check passes happily
without `words/luxembourgish`, which is the case worth catching.
Also refresh the `-h` block in the README, which had drifted: clap prints
`[alias: --lang]`, singular, where the block had been hand-edited to say
`[aliases: --lang]`.
Cargo reads these as gitignore-style patterns, so a bare `scripts/` means
`**/scripts/` and matches at any depth: a `words/scripts` directory, or a nested
`AGENTS.md`, would have been dropped from the archive along with the root-level
scaffolding actually being aimed at. Anchor each with a leading `/`.

Nothing in the tree hits that case today — the packaged file list is identical
either way — but silently dropping files from the archive is the failure the
Package job was just added to catch, so the manifest ought not to invite it.
No longer used. The file held nothing but a cSpell word list — no
rust-analyzer or build configuration — so nothing is lost with it, and git
history still has the list should a spell checker ever want it back.

Drop the matching `exclude` entry too, which now has nothing to match.
@allenap
allenap merged commit a80733a into master Aug 9, 2026
6 checks passed
@allenap
allenap deleted the release-3.2.0 branch August 9, 2026 12:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant