From 23f9074df65423700ac6a79ee27be8d0b3e6dd50 Mon Sep 17 00:00:00 2001 From: "p4suta-release-plz[bot]" <298042560+p4suta-release-plz[bot]@users.noreply.github.com> Date: Sat, 26 Sep 2026 11:43:38 +0000 Subject: [PATCH] chore(release): v0.1.1 --- CHANGELOG.md | 88 +++++++---- Cargo.lock | 438 +++++++++++++++++++++++++-------------------------- Cargo.toml | 232 +++++++++++++-------------- 3 files changed, 388 insertions(+), 370 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 320a02c..c2662f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,35 +1,53 @@ -# Changelog - -Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow Semantic Versioning with Cargo's pre-1.0 rules. - -## [Unreleased] - -## [0.1.0] - 2026-08-03 - -Initial release. - -### Added - -- Reusable `Command` and borrowed per-spawn capabilities. -- Transactional process creation with rollback; private running and suspended typestates make a mismatched internal transition unrepresentable. -- Explicit handle lists, handle arguments and environment values, alternate parents, ordered Jobs, typed mitigation policies, and ConPTY. - Pseudoconsole creation sets `STARTF_USESTDHANDLES` with null standard handles, as Microsoft Terminal's `ConptyConnection.cpp` does, so the child cannot use handles the parent redirected. -- Owned standard streams, cached exit status, and concurrent output draining; both readers are joined even if one fails or panics. -- `SuspendedChild` with pre-resume process and primary-thread inspection; `resume` requires a previous suspend count of exactly one and rolls back otherwise. -- Crate documentation from `docs/crate.md`; the README example runs as a doctest. -- Examples and ADRs in the package. -- Rust 1.75, cross-architecture, public API, coverage, mutation, supply-chain, license, spelling, package, and CodeQL gates; `clippy::undocumented_unsafe_blocks` is denied. - -### Removed - -- `InheritableHandle` and `SpawnOptions::inherit_handle`. - Handles transfer only through standard I/O or the argument and environment protocol, and inheritable duplicates live only during the spawn. - -### Known limitations - -- Windows keeps a process-wide reverse inheritance race: an unrelated broad-inheritance spawn can receive a short-lived inheritable duplicate. - Avoid concurrent broad inheritance when transferred handles are sensitive; see [ADR 0005](docs/adr/0005-handle-transfer-and-reverse-race.md). -- `sha2` stays at 0.10 because 0.11 requires Rust 1.85; the checksum helper builds with both. - -[Unreleased]: https://github.com/P4suta/windows-spawn/compare/v0.1.0...HEAD -[0.1.0]: https://github.com/P4suta/windows-spawn/releases/tag/v0.1.0 +# Changelog + +Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow Semantic Versioning with Cargo's pre-1.0 rules. + +## [Unreleased] + +## [0.1.1](https://github.com/P4suta/windows-spawn/compare/v0.1.0...v0.1.1) - 2026-09-26 + +### Added + +- render the command line for launch brokers ([#17](https://github.com/P4suta/windows-spawn/pull/17)) + +### Other + +- add the required aggregate job ([#29](https://github.com/P4suta/windows-spawn/pull/29)) +- release only from a signed tag and an approved deployment ([#27](https://github.com/P4suta/windows-spawn/pull/27)) +- *(deps)* move dependency updates from Dependabot to Renovate ([#25](https://github.com/P4suta/windows-spawn/pull/25)) +- enforce the repository laws mechanically ([#24](https://github.com/P4suta/windows-spawn/pull/24)) +- inject Win32 failures to cover every error path ([#23](https://github.com/P4suta/windows-spawn/pull/23)) +- run mutation testing on rust-mutants ([#22](https://github.com/P4suta/windows-spawn/pull/22)) +- drain ConPTY output continuously and ban time in code ([#21](https://github.com/P4suta/windows-spawn/pull/21)) +- prove lifecycle properties by events, not time ([#20](https://github.com/P4suta/windows-spawn/pull/20)) +- make all prose terse and one sentence per line ([#18](https://github.com/P4suta/windows-spawn/pull/18)) + +## [0.1.0] - 2026-08-03 + +Initial release. + +### Added + +- Reusable `Command` and borrowed per-spawn capabilities. +- Transactional process creation with rollback; private running and suspended typestates make a mismatched internal transition unrepresentable. +- Explicit handle lists, handle arguments and environment values, alternate parents, ordered Jobs, typed mitigation policies, and ConPTY. + Pseudoconsole creation sets `STARTF_USESTDHANDLES` with null standard handles, as Microsoft Terminal's `ConptyConnection.cpp` does, so the child cannot use handles the parent redirected. +- Owned standard streams, cached exit status, and concurrent output draining; both readers are joined even if one fails or panics. +- `SuspendedChild` with pre-resume process and primary-thread inspection; `resume` requires a previous suspend count of exactly one and rolls back otherwise. +- Crate documentation from `docs/crate.md`; the README example runs as a doctest. +- Examples and ADRs in the package. +- Rust 1.75, cross-architecture, public API, coverage, mutation, supply-chain, license, spelling, package, and CodeQL gates; `clippy::undocumented_unsafe_blocks` is denied. + +### Removed + +- `InheritableHandle` and `SpawnOptions::inherit_handle`. + Handles transfer only through standard I/O or the argument and environment protocol, and inheritable duplicates live only during the spawn. + +### Known limitations + +- Windows keeps a process-wide reverse inheritance race: an unrelated broad-inheritance spawn can receive a short-lived inheritable duplicate. + Avoid concurrent broad inheritance when transferred handles are sensitive; see [ADR 0005](docs/adr/0005-handle-transfer-and-reverse-race.md). +- `sha2` stays at 0.10 because 0.11 requires Rust 1.85; the checksum helper builds with both. + +[Unreleased]: https://github.com/P4suta/windows-spawn/compare/v0.1.0...HEAD +[0.1.0]: https://github.com/P4suta/windows-spawn/releases/tag/v0.1.0 diff --git a/Cargo.lock b/Cargo.lock index cbef9d4..4b6544a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,219 +1,219 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crypto-common" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "itoa" -version = "1.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" - -[[package]] -name = "libc" -version = "0.2.189" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" - -[[package]] -name = "memchr" -version = "2.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" - -[[package]] -name = "proc-macro2" -version = "1.0.107" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.47" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "semver" -version = "1.0.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" - -[[package]] -name = "serde" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" -dependencies = [ - "serde_core", -] - -[[package]] -name = "serde_core" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.229" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.151" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "syn" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "typenum" -version = "1.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" - -[[package]] -name = "unicode-ident" -version = "1.0.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-spawn" -version = "0.1.0" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "xtask" -version = "0.0.0" -dependencies = [ - "semver", - "serde_json", - "sha2", - "windows-spawn", -] - -[[package]] -name = "zmij" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "syn" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "typenum" +version = "1.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-spawn" +version = "0.1.1" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "xtask" +version = "0.0.0" +dependencies = [ + "semver", + "serde_json", + "sha2", + "windows-spawn", +] + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml index 6e227ef..55356d3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,116 +1,116 @@ -[package] -name = "windows-spawn" -version = "0.1.0" -authors = ["Yasunobu Sakashita"] -edition = "2021" -rust-version = "1.75" -license = "MIT OR Apache-2.0" -description = "Windows process creation with explicit handle, Job, mitigation, ConPTY, and child ownership" -documentation = "https://docs.rs/windows-spawn" -repository = "https://github.com/P4suta/windows-spawn" -readme = "README.md" -keywords = ["windows", "process", "createprocess", "job-object", "spawn"] -categories = ["os::windows-apis", "api-bindings"] -include = [ - "/src/**", - "/tests/**", - "/examples/**", - "/docs/adr/**", - "/docs/crate.md", - "/README.md", - "/CHANGELOG.md", - "/REUSE.toml", - "/LICENSE-APACHE", - "/LICENSE-MIT", - "/LICENSES/**", -] - -[package.metadata.docs.rs] -default-target = "x86_64-pc-windows-msvc" -targets = ["x86_64-pc-windows-msvc", "aarch64-pc-windows-msvc"] - -[[test]] -name = "argv_roundtrip" -path = "tests/argv_roundtrip.rs" -harness = false - -[target.'cfg(windows)'.dependencies.windows-sys] -version = "0.61" -features = [ - "Win32_Foundation", - "Win32_Globalization", - "Win32_Security", - "Win32_Storage_FileSystem", - "Win32_System_Console", - "Win32_System_Environment", - "Win32_System_IO", - "Win32_System_JobObjects", - "Win32_System_Pipes", - "Win32_System_SystemInformation", - "Win32_System_Threading", -] - -[workspace] -members = ["xtask"] -default-members = ["."] -resolver = "2" - -[workspace.lints.rust] -future_incompatible = { level = "deny", priority = -1 } -rust_2018_idioms = { level = "deny", priority = -1 } -unused = { level = "deny", priority = -1 } -let_underscore_drop = "deny" -meta_variable_misuse = "deny" -missing_copy_implementations = "deny" -missing_debug_implementations = "deny" -missing_docs = "deny" -non_ascii_idents = "deny" -single_use_lifetimes = "deny" -trivial_casts = "deny" -trivial_numeric_casts = "deny" -unreachable_pub = "deny" -unsafe_op_in_unsafe_fn = "deny" -unused_lifetimes = "deny" -unused_qualifications = "deny" -variant_size_differences = "deny" - -[workspace.lints.clippy] -all = { level = "deny", priority = -1 } -cargo = { level = "deny", priority = -1 } -nursery = { level = "deny", priority = -1 } -pedantic = { level = "deny", priority = -1 } -arithmetic_side_effects = "deny" -as_conversions = "deny" -clone_on_ref_ptr = "deny" -dbg_macro = "deny" -disallowed_methods = "deny" -disallowed_types = "deny" -error_impl_error = "deny" -expect_used = "deny" -fallible_impl_from = "deny" -indexing_slicing = "deny" -let_underscore_must_use = "deny" -map_err_ignore = "deny" -mem_forget = "deny" -panic = "deny" -shadow_unrelated = "deny" -str_to_string = "deny" -string_slice = "deny" -todo = "deny" -try_err = "deny" -unimplemented = "deny" -unreachable = "deny" -unused_result_ok = "deny" -unwrap_in_result = "deny" -unwrap_used = "deny" -wildcard_enum_match_arm = "deny" -# Contradicts rustc's `unreachable_pub`, which this crate keeps: items of private modules stay `pub(crate)`. -redundant_pub_crate = "allow" - -# Enforces CONTRIBUTING's rule that every `unsafe` block has a safety justification. -# -# `multiple_unsafe_ops_per_block` stays off: some blocks adopt two OS resources together (see `pipe`), and splitting them would let one leak. -undocumented_unsafe_blocks = "deny" - -[lints] -workspace = true +[package] +name = "windows-spawn" +version = "0.1.1" +authors = ["Yasunobu Sakashita"] +edition = "2021" +rust-version = "1.75" +license = "MIT OR Apache-2.0" +description = "Windows process creation with explicit handle, Job, mitigation, ConPTY, and child ownership" +documentation = "https://docs.rs/windows-spawn" +repository = "https://github.com/P4suta/windows-spawn" +readme = "README.md" +keywords = ["windows", "process", "createprocess", "job-object", "spawn"] +categories = ["os::windows-apis", "api-bindings"] +include = [ + "/src/**", + "/tests/**", + "/examples/**", + "/docs/adr/**", + "/docs/crate.md", + "/README.md", + "/CHANGELOG.md", + "/REUSE.toml", + "/LICENSE-APACHE", + "/LICENSE-MIT", + "/LICENSES/**", +] + +[package.metadata.docs.rs] +default-target = "x86_64-pc-windows-msvc" +targets = ["x86_64-pc-windows-msvc", "aarch64-pc-windows-msvc"] + +[[test]] +name = "argv_roundtrip" +path = "tests/argv_roundtrip.rs" +harness = false + +[target.'cfg(windows)'.dependencies.windows-sys] +version = "0.61" +features = [ + "Win32_Foundation", + "Win32_Globalization", + "Win32_Security", + "Win32_Storage_FileSystem", + "Win32_System_Console", + "Win32_System_Environment", + "Win32_System_IO", + "Win32_System_JobObjects", + "Win32_System_Pipes", + "Win32_System_SystemInformation", + "Win32_System_Threading", +] + +[workspace] +members = ["xtask"] +default-members = ["."] +resolver = "2" + +[workspace.lints.rust] +future_incompatible = { level = "deny", priority = -1 } +rust_2018_idioms = { level = "deny", priority = -1 } +unused = { level = "deny", priority = -1 } +let_underscore_drop = "deny" +meta_variable_misuse = "deny" +missing_copy_implementations = "deny" +missing_debug_implementations = "deny" +missing_docs = "deny" +non_ascii_idents = "deny" +single_use_lifetimes = "deny" +trivial_casts = "deny" +trivial_numeric_casts = "deny" +unreachable_pub = "deny" +unsafe_op_in_unsafe_fn = "deny" +unused_lifetimes = "deny" +unused_qualifications = "deny" +variant_size_differences = "deny" + +[workspace.lints.clippy] +all = { level = "deny", priority = -1 } +cargo = { level = "deny", priority = -1 } +nursery = { level = "deny", priority = -1 } +pedantic = { level = "deny", priority = -1 } +arithmetic_side_effects = "deny" +as_conversions = "deny" +clone_on_ref_ptr = "deny" +dbg_macro = "deny" +disallowed_methods = "deny" +disallowed_types = "deny" +error_impl_error = "deny" +expect_used = "deny" +fallible_impl_from = "deny" +indexing_slicing = "deny" +let_underscore_must_use = "deny" +map_err_ignore = "deny" +mem_forget = "deny" +panic = "deny" +shadow_unrelated = "deny" +str_to_string = "deny" +string_slice = "deny" +todo = "deny" +try_err = "deny" +unimplemented = "deny" +unreachable = "deny" +unused_result_ok = "deny" +unwrap_in_result = "deny" +unwrap_used = "deny" +wildcard_enum_match_arm = "deny" +# Contradicts rustc's `unreachable_pub`, which this crate keeps: items of private modules stay `pub(crate)`. +redundant_pub_crate = "allow" + +# Enforces CONTRIBUTING's rule that every `unsafe` block has a safety justification. +# +# `multiple_unsafe_ops_per_block` stays off: some blocks adopt two OS resources together (see `pipe`), and splitting them would let one leak. +undocumented_unsafe_blocks = "deny" + +[lints] +workspace = true