Repository navigation
v0.7.0
Upgrading from 0.6.x
- Protocol 6 → 8. Upgrade the
rustibleCLI and your workspace's crates together. A mismatched pair refuses at the handshake and tells you to rebuild. - Test API behind a
testingfeature.Fake,System::fake,testing::ctx/testing::dry,changed_then_okand#[integration_test]now need it.Ctx::newis no longer public; userustible_sdk::testing::ctx(sys). Collections add one line:[dev-dependencies] rustible-sdk = { version = "0.7.0", features = ["testing"] }
- Behaviour changes you may notice:
http::Downloadwrites only on a200. It refuses a body cut short by a reset or by TLS withoutclose_notify, and.timeout()also bounds silence in the body.ctx.fetchdoes nothing under--check.- Under
--check, a step run as an account that doesn't exist yet reports would change ("waits for account"). brewsteps never autoremove formulae.- Secrets are masked in every event the binary emits, and in panic messages. A secret under 4 characters is never masked.
Highlights
- File contents, listings and command I/O stream through the escalation helper, with no size limits.
http::Request(Ansible'suri).archive::Extractedhandles zstd, andgit archive/ GitHub source tarballs extract at strip 0.- A run-wide secret masker using Ansible's rules, plus
mask::apply_prefix. - A step failure the playbook catches counts as recovered, and
-vshows its command and stderr. - Output escapes control and invisible formatting characters, and a command killed by a signal shows
(killed by signal N).
What's Changed
- Host verdict: a step failure the playbook catches is recovered, not failed by @flipbit03 in #54
- Tier 4: a caught escalation failure under ssh_user names the override and counts as recovered by @flipbit03 in #65
- Testing tiers: three, numbered by environment (in-process, docker, VM); CI job names carry the tier by @flipbit03 in #67
- Testing tiers follow-up: correct what a container lacks, split the mac job by tier, widen T1 by @flipbit03 in #68
- --check contacts nothing outside the target: apt::Latest stops refreshing, UserKeys stops fetching, plus a sweep by @flipbit03 in #69
- Local::write sets setuid/setgid after its chown, so rewriting a setuid/setgid file keeps the bits by @flipbit03 in #74
- System::backup: never write through a planted symlink, never leave a setuid copy by @flipbit03 in #76
- archive::Extracted: a member whose stream ends early writes nothing under its name by @flipbit03 in #77
- http::Request: general HTTP API calls (Ansible's uri) by @flipbit03 in #81
- Diff::short is a summary's first line; http::Request shows its body at -v; -v prints a failed step's diff by @flipbit03 in #89
- A caught step failure shows its command's stderr at -v (StepFinished.cmd, protocol 8) by @flipbit03 in #94
- The helper refuses an answer larger than one frame instead of sending it (#84) by @flipbit03 in #97
- brew::Absent removes every installed version and refuses a pinned formula (#71) by @flipbit03 in #98
- brew: resolve an installed alias or old name through opt/ (#72) by @flipbit03 in #100
- apt: a refresh writes update-success-stamp, and the lists' age is the newer of it and the lists (#70) by @flipbit03 in #101
- archive: refuse pax sparse members, replace a symlink member through a renamed temporary link by @flipbit03 in #102
- Set the mode without setuid, then the owner, then the full mode by @flipbit03 in #105
- SDK: stream file contents, listings and command I/O across the escalation helper (#85) by @flipbit03 in #106
- Stream ctx.fetch and file::Copy (#86) by @flipbit03 in #108
- Stream http::Download; no default size caps on HTTP (#87) by @flipbit03 in #111
- Elevated: a helper that exits reports its whole stderr (#90) by @flipbit03 in #113
- Stream archive::Extracted, zstd included (#88) by @flipbit03 in #114
- PROGRESS: #82 merged with #114; backlog train 2 complete by @flipbit03 in #116
- Vision: back to a vision; the source is the authority on types by @flipbit03 in #120
- Docs: bring the user docs up to date with the week's changes by @flipbit03 in #121
- Vision 5.4: the binary never listens or connects back by @flipbit03 in #124
- Probe tests: join the in-process helper inside the watched window (#110) by @flipbit03 in #127
- Tests: make write-then-exec tests immune to the ETXTBSY fork race (#128) by @flipbit03 in #129
- SDK: test-only API behind a
testingfeature; Ctx::new leaves the public surface (#125) by @flipbit03 in #130 - ctx.fetch does nothing under --check (#117) by @flipbit03 in #131
- --check: steps as an account that does not exist yet wait for it (#118) by @flipbit03 in #132
- Run-wide secret masker with Ansible's rules, applied where events leave the binary (#126) by @flipbit03 in #133
- Renderers: a signal-killed command shows (killed by signal N) (#95) by @flipbit03 in #135
- Renderers escape control and invisible formatting characters (#91) by @flipbit03 in #136
- http::Download: verified close, idle body timeout, 200 only, apply executes the intent (#112) by @flipbit03 in #137
- archive::Extracted: a pax global header is metadata, so git archive tarballs extract at strip 0 (#103) by @flipbit03 in #139
- file::Symlink stages at a random sibling name, shared with archive (#104) by @flipbit03 in #140
- authorized_keys::Present gives mode and owner to the write (#119) by @flipbit03 in #141
- brew::Absent removes only what it names: HOMEBREW_NO_AUTOREMOVE (#99) by @flipbit03 in #142
- Inventory: the same-distance conflict message names fixes that work (#123) by @flipbit03 in #143
- mask::apply_prefix: mask before http cuts or reshapes text (#134) by @flipbit03 in #144
- ureq: minimum 3.4.1, and a scheduled check against the newest 3.x (#138) by @flipbit03 in #145
- CI: drop the weekly newest-ureq job; keep ureq's 3.4.1 minimum by @flipbit03 in #146
Full Changelog: v0.6.1...v0.7.0