Prepare 3.2.0 - #141
Merged
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release preparation for 3.2.0, on a branch rather than straight onto
masterso that the new Package job gets a run before any of it is tagged.The Package job, and why
--all-featuresThe interesting piece.
cargo packagepacks 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 thewords/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 packageverifies with default features only, and those reachwords/{small,medium,large}and nothing else. Excludingwords/luxembourgish/on purpose shows the difference:So the job runs the
--all-featuresform, 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
excludedrops 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
includeallow-list on purpose, and there's a comment inCargo.tomlsaying why: a wrong deny-list ships a few stray files, whereas a wrong allow-list silently drops awords/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::luxembourgishmodule 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 buildandtest(426 passing groups, 0 failures);scripts/doc;scripts/semver-checks, which reads this as3.1.0 -> 3.2.0 (minor change)and confirms the bump is adequate; andcargo package --workspace --all-features. The-hblock in the README is byte-identical to actual-houtput.After merging
Tag
v3.2.0onmaster, push tags, thencargo 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.