Files
soulseek-rs-modded/Cargo.toml
T
Michel de Graaf 298ec5aad5 build: strip release binaries and gate publishing on CI
Two gaps left over from the v6.0.0 release.

The v6.0.0 archives shipped unstripped: 3.63 MB vs 4.53 MB locally, 168
symbols instead of 9483. Setting it on the profile rather than in the
workflow covers every target at once and `cargo install` along with them.

Nothing gated the crates.io publish. A published version can be yanked but
never withdrawn, so the release job now waits for the CI run on the same
commit and refuses to publish unless it is green. release-pr deliberately
does not wait; opening the release PR is harmless.

This is not hypothetical: CI failed on eef7bf7, the v6.0.0 release commit.
It was a flaky e2e timeout rather than a regression - the very next commit
touched no code and passed - but the gate would have stopped that release,
which is the point. The gate reads the newest CI run for the commit, so
re-running a flaky job and then re-running Release clears it.
2026-07-24 13:27:09 +02:00

57 lines
2.2 KiB
TOML

[workspace]
members = ["soulseek-rs-lib", "soulseek-rs"]
resolver = "2"
[workspace.package]
version = "6.0.0"
authors = ["Michel de Graaf"]
edition = "2024"
license = "MIT"
repository = "https://github.com/michel/soulseek-rs"
# The v6.0.0 release binaries shipped unstripped: the Linux archives were
# roughly twice the size of the macOS ones purely because of debug symbols.
# Doing it here rather than in the workflow covers every target at once,
# including `cargo install`.
[profile.release]
strip = true
[workspace.lints.rust]
unused_lifetimes = "warn"
unsafe_op_in_unsafe_fn = "warn"
# Lints are cranked to the maximum practical level: the full clippy `all`,
# `pedantic`, and `nursery` groups are enabled as warnings. The allow-list below
# opts out of the pedantic/nursery lints that this project intentionally does
# not follow (documentation-style requirements, deliberate numeric casts in the
# protocol/UI layers, and a few noisy nursery lints), so that `cargo clippy`
# stays clean without churning code for no real benefit.
[workspace.lints.clippy]
all = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
# Documentation-style pedantic lints — not tracked in rustdoc for this project.
missing_errors_doc = "allow"
missing_panics_doc = "allow"
doc_markdown = "allow"
# Numeric casts in the protocol framing and TUI layout are intentional and
# reviewed (the one real width-truncation bug was fixed separately).
cast_possible_truncation = "allow"
cast_precision_loss = "allow"
cast_sign_loss = "allow"
cast_possible_wrap = "allow"
# Message/handler APIs take ownership by design.
needless_pass_by_value = "allow"
# Long event loops and protocol parsers are clearer kept whole.
too_many_lines = "allow"
# Protocol test fixtures are raw byte/number arrays.
unreadable_literal = "allow"
# Nursery lint that fights RAII lock guards with frequent false positives.
significant_drop_tightening = "allow"
# Subjective nursery lint: the suggested map_or/map_or_else rewrites read worse
# than the explicit if let/match they replace.
option_if_let_else = "allow"
# The MD5 round functions use the conventional a/b/c/d register names from the
# RFC 1321 reference implementation.
many_single_char_names = "allow"