1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[]
# `coop` is taken on crates.io, so the package takes the conventional `-cli`
# suffix. Both targets below are still named `coop`, so nothing a user types
# changes.
= "coop-cli"
= "0.1.1"
= "2024"
= "Fire remote jobs down a private ssh channel nothing else can contend with."
= "MIT"
= "https://github.com/martintrojer/coop"
= "https://github.com/martintrojer/coop"
= "https://github.com/martintrojer/coop"
= "README.md"
= ["ssh", "remote", "jobs", "tmux", "cli"]
= ["command-line-utilities", "development-tools"]
# Edition 2024 needs 1.85, and the code uses let-chains and
# `u64::is_multiple_of`. Stated so a build failure names the cause.
= "1.85"
# Ship only what builds and explains the tool. `tests/` is excluded because
# layers 2 and 3 need tmux and a local sshd, so they cannot run from a
# published tarball -- the repository is where they belong.
= ["src/**/*.rs", "README.md", "SPEC.md", "LICENSE", "CHANGELOG.md"]
# The library keeps the short name too, so `coop::cli` and the 91 `coop::`
# paths across src/ and tests/ are unaffected by the crate rename. Without
# this, renaming the package renames the lib target and nothing compiles.
[]
= "coop"
= "src/lib.rs"
# The binary keeps the short name: `coop run`, `coop poll`, `coop tail`.
[[]]
= "coop"
= "src/main.rs"
[]
# CLI parsing
= { = "4", = ["derive"] }
# Commands cross several shell parsers encoded; use the strict standard codec
# at this injection boundary rather than maintaining complementary halves.
= "0.22"
# Config: hand-edited TOML, so serde + toml only. No state database.
= { = "1.0", = ["derive"] }
= "1.0"
= "0.8"
# Errors: anyhow at the boundary, thiserror for the classified ssh failures
# that callers switch on.
= "1.0"
= "2.0"
# `~` expansion for socket paths, and the XDG state/config dirs.
= "6.0"