anvilsign in

collin/anvil · ef6faf54

Align the = column in every Cargo.toml table

Collin Richards · 2026-08-25 04:35 UTC · ef6faf54bd5ff32b7b205125e8544b2994a00ec7 · parent 215b6942 · browse files

modifiedCargo.toml+58 −57
11 [workspace]
22 resolver = "2"
3-members = [
3+members = [
44 "crates/*",
55 "vendor/gitserver-core",
66 ]
77
88 [workspace.package]
9-version = "0.0.0"
10-edition = "2024"
11-license = "MIT OR Apache-2.0"
12-repository = "https://github.com/richardscollin/anvil"
13-rust-version = "1.95"
9+version = "0.0.0"
10+edition = "2024"
11+license = "MIT OR Apache-2.0"
12+repository = "https://github.com/richardscollin/anvil"
13+rust-version = "1.98.0"
1414
1515 [workspace.dependencies]
1616 # Internal crates
17-anvil-core = { path = "crates/anvil-core" }
18-anvil-ci = { path = "crates/anvil-ci" }
19-anvil-docker = { path = "crates/anvil-docker" }
20-anvil-job = { path = "crates/anvil-job" }
21-anvil-agent = { path = "crates/anvil-agent" }
22-anvil-git = { path = "crates/anvil-git" }
23-anvil-web = { path = "crates/anvil-web" }
24-anvil-ssh = { path = "crates/anvil-ssh" }
17+anvil-core = { path = "crates/anvil-core" }
18+anvil-ci = { path = "crates/anvil-ci" }
19+anvil-docker = { path = "crates/anvil-docker" }
20+anvil-job = { path = "crates/anvil-job" }
21+anvil-agent = { path = "crates/anvil-agent" }
22+anvil-git = { path = "crates/anvil-git" }
23+anvil-web = { path = "crates/anvil-web" }
24+anvil-ssh = { path = "crates/anvil-ssh" }
2525
26-anyhow = "1"
27-argon2 = { version = "0.5", features = ["std"] }
2826 # Repo secrets (docs/secrets.md): sealed to users' ssh-ed25519 keys with
2927 # X25519 + HKDF-SHA256 + AES-256-GCM. AES-GCM rather than ChaCha20-Poly1305
3028 # because the *browser* is the encryptor and WebCrypto has no ChaCha.
⋯ 3 unchanged lines
3432 # that does not compile. X25519 comes from `MontgomeryPoint::mul_clamped`
3533 # rather than the x25519-dalek wrapper, which would want its own
3634 # curve25519-dalek.
37-aes-gcm = "=0.11.0-rc.4"
38-curve25519-dalek = "=5.0.0-rc.0"
39-async-trait = "0.1"
40-axum = { version = "0.8", features = ["ws"] }
41-axum-extra = { version = "0.10", features = ["cookie"] }
42-base64 = "0.22"
43-bollard = "0.18"
44-clap = { version = "4", features = ["derive"] }
45-futures-util = "0.3"
46-hmac = "0.12"
47-lru = "0.12"
48-gitserver-core = { path = "vendor/gitserver-core" }
49-gix = { version = "0.84", default-features = false, features = ["sha1", "max-performance-safe", "blob-diff", "revision"] }
50-gix-pack = { version = "0.71", features = ["sha1"] }
51-maud = { version = "0.27", features = ["axum"] }
52-pulldown-cmark = { version = "0.13", default-features = false, features = ["html"] }
53-flate2 = "1"
54-rand = "0.10"
35+
36+anyhow = { version = "1" }
37+argon2 = { version = "0.5", features = ["std"] }
38+aes-gcm = { version = "=0.11.0-rc.4" }
39+curve25519-dalek = { version = "=5.0.0-rc.0" }
40+async-trait = { version = "0.1" }
41+axum = { version = "0.8", features = ["ws"] }
42+axum-extra = { version = "0.10", features = ["cookie"] }
43+base64 = { version = "0.22" }
44+bollard = { version = "0.18" }
45+clap = { version = "4", features = ["derive"] }
46+futures-util = { version = "0.3" }
47+hmac = { version = "0.12" }
48+lru = { version = "0.12" }
49+gitserver-core = { path = "vendor/gitserver-core" }
50+gix = { version = "0.84", default-features = false, features = ["sha1", "max-performance-safe", "blob-diff", "revision"] }
51+gix-pack = { version = "0.71", features = ["sha1"] }
52+maud = { version = "0.27", features = ["axum"] }
53+pulldown-cmark = { version = "0.13", default-features = false, features = ["html"] }
54+flate2 = { version = "1" }
55+rand = { version = "0.10" }
5556 # HTTP client for the CD deploy webhook. No TLS feature on purpose: the deploy
5657 # receiver is host-local plaintext HTTP, and enabling rustls would drag in
5758 # aws-lc-rs and break the musl cross-compile (see the russh note below).
⋯ 6 unchanged lines
6465 # talks to whatever anvil you self-host, including one behind a private or
6566 # local CA — portless's `.localhost` certificates being the everyday case. The
6667 # deploy image installs ca-certificates, so the server side is unaffected.
67-reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls-native-roots-no-provider"] }
68-rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"] }
68+reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls-native-roots-no-provider"] }
69+rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"] }
6970 # Used directly only for idempotent schema shims on existing databases; the
7071 # version tracks what toasty-driver-sqlite already pulls in.
71-rusqlite = "0.39"
72+rusqlite = { version = "0.39" }
7273 # `anvild secret` prompts for an ssh key passphrase / an account password.
73-rpassword = "7"
74+rpassword = { version = "7" }
7475 # RS256 verification of OIDC id tokens (docs/oidc.md). ring rather than a JWT
7576 # crate: it is already in the tree under rustls, cross-compiles to static musl
7677 # (aws-lc-rs, which the maintained JWT crates default to, needs cmake and does
7778 # not), and one signature check over `header.payload` is all we need.
78-ring = "0.17"
79-serde = { version = "1", features = ["derive"] }
80-serde_json = "1"
81-serde_yaml = "0.9"
82-sha2 = "0.10"
83-similar = "2"
79+ring = { version = "0.17" }
80+serde = { version = "1", features = ["derive"] }
81+serde_json = { version = "1" }
82+serde_yaml = { version = "0.9" }
83+sha2 = { version = "0.10" }
84+similar = { version = "2" }
8485 # `default-onig` (C Oniguruma regex engine) over the pure-Rust `default-fancy`:
8586 # several times faster on large files, and zig's cc cross-compiles the C just
8687 # fine for the static musl build (verified via deploy/build.sh's toolchain).
87-syntect = { version = "5", default-features = false, features = ["default-onig"] }
88-tar = "0.4"
89-thiserror = "2"
90-time = { version = "0.3", features = ["serde", "formatting"] }
91-toasty = { version = "0.7", features = ["sqlite"] }
92-tokio = { version = "1", features = ["full"] }
93-tokio-util = { version = "0.7", features = ["io"] }
94-toml = "0.8"
95-tower = "0.5"
96-tower-http = { version = "0.6", features = ["trace", "fs"] }
97-tracing = "0.1"
88+syntect = { version = "5", default-features = false, features = ["default-onig"] }
89+tar = { version = "0.4" }
90+thiserror = { version = "2" }
91+time = { version = "0.3", features = ["serde", "formatting"] }
92+toasty = { version = "0.7", features = ["sqlite"] }
93+tokio = { version = "1", features = ["full"] }
94+tokio-util = { version = "0.7", features = ["io"] }
95+toml = { version = "0.8" }
96+tower = { version = "0.5" }
97+tower-http = { version = "0.6", features = ["trace", "fs"] }
98+tracing = { version = "0.1" }
9899 tracing-subscriber = { version = "0.3", features = ["env-filter"] }
99100
100101 # ssh — use the `ring` crypto backend instead of the default `aws-lc-rs`:
101102 # ring is far cheaper to compile (no cmake/perl) and cross-compiles cleanly
102103 # (zigbuild/musl), which matters for building images for the low-RAM VPS.
103-russh = { version = "0.61", default-features = false, features = ["flate2", "ring", "rsa"] }
104+russh = { version = "0.61", default-features = false, features = ["flate2", "ring", "rsa"] }
104105 # ssh-key parsing/fingerprinting, shared by anvil-core (storage) and anvil-ssh
105106 # (auth). Pinned to match russh's transitive ssh-key so fingerprints agree.
106-ssh-key = "0.7.0-rc.10"
107+ssh-key = { version = "0.7.0-rc.10" }
modifiedcrates/anvil-agent/Cargo.toml+13 −13
11 [package]
2-name = "anvil-agent"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-agent"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "Agent sessions for anvil: a tmux-hosted agent CLI per repository, in a container, attachable from the browser."
8+description = "Agent sessions for anvil: a tmux-hosted agent CLI per repository, in a container, attachable from the browser."
99
1010 [dependencies]
1111 # The Docker connect/pull plumbing is shared with the job runner rather than
1212 # duplicated — both start containers from the same runner image.
1313 anvil-docker.workspace = true
14-anvil-core.workspace = true
15-async-trait.workspace = true
16-anvil-git.workspace = true
17-bollard.workspace = true
14+anvil-core.workspace = true
15+async-trait.workspace = true
16+anvil-git.workspace = true
17+bollard.workspace = true
1818 futures-util.workspace = true
19-tar.workspace = true
20-tokio.workspace = true
21-tracing.workspace = true
19+tar.workspace = true
20+tokio.workspace = true
21+tracing.workspace = true
modifiedcrates/anvil-ci/Cargo.toml+16 −16
11 [package]
2-name = "anvil-ci"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-ci"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "CI runner for anvil: executes .anvil/ci.yml pipelines in Docker containers via the socket."
8+description = "CI runner for anvil: executes .anvil/ci.yml pipelines in Docker containers via the socket."
99
1010 [dependencies]
11-anvil-core.workspace = true
11+anvil-core.workspace = true
1212 anvil-docker.workspace = true
13-anvil-job.workspace = true
14-anvil-git.workspace = true
15-flate2.workspace = true
16-reqwest.workspace = true
17-serde_json.workspace = true
18-tar.workspace = true
19-tokio.workspace = true
20-tracing.workspace = true
13+anvil-job.workspace = true
14+anvil-git.workspace = true
15+flate2.workspace = true
16+reqwest.workspace = true
17+serde_json.workspace = true
18+tar.workspace = true
19+tokio.workspace = true
20+tracing.workspace = true
2121
2222 [dev-dependencies]
23-tempfile = "3"
23+tempfile = { version = "3" }
modifiedcrates/anvil-cli/Cargo.toml+23 −23
11 [package]
2-name = "anvil-cli"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-cli"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "anvil git forge daemon and admin CLI."
9-default-run = "anvild"
8+description = "anvil git forge daemon and admin CLI."
9+default-run = "anvild"
1010
1111 [[bin]]
1212 name = "anvild"
1313 path = "src/main.rs"
1414
1515 [dependencies]
16-anvil-core.workspace = true
17-anvil-web.workspace = true
18-anvil-ssh.workspace = true
19-anvil-agent.workspace = true
20-anvil-ci.workspace = true
21-tokio.workspace = true
22-clap.workspace = true
23-anyhow.workspace = true
24-reqwest.workspace = true
25-rustls.workspace = true
26-rpassword.workspace = true
27-serde.workspace = true
28-serde_json.workspace = true
29-time.workspace = true
16+anvil-core.workspace = true
17+anvil-web.workspace = true
18+anvil-ssh.workspace = true
19+anvil-agent.workspace = true
20+anvil-ci.workspace = true
21+tokio.workspace = true
22+clap.workspace = true
23+anyhow.workspace = true
24+reqwest.workspace = true
25+rustls.workspace = true
26+rpassword.workspace = true
27+serde.workspace = true
28+serde_json.workspace = true
29+time.workspace = true
3030 # `encryption` so a passphrase-protected private key can be opened locally —
3131 # the CLI is the only half of anvil that ever holds a private key.
32-ssh-key = { workspace = true, features = ["encryption"] }
33-tracing.workspace = true
32+ssh-key = { workspace = true, features = ["encryption"] }
33+tracing.workspace = true
3434 tracing-subscriber.workspace = true
modifiedcrates/anvil-core/Cargo.toml+31 −31
11 [package]
2-name = "anvil-core"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-core"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "Domain model, persistence, and on-disk repository storage for the anvil git forge."
8+description = "Domain model, persistence, and on-disk repository storage for the anvil git forge."
99
1010 [dependencies]
11-anvil-job.workspace = true
12-async-trait.workspace = true
13-gix.workspace = true
14-toasty.workspace = true
15-rusqlite.workspace = true
16-argon2.workspace = true
17-aes-gcm.workspace = true
11+anvil-job.workspace = true
12+async-trait.workspace = true
13+gix.workspace = true
14+toasty.workspace = true
15+rusqlite.workspace = true
16+argon2.workspace = true
17+aes-gcm.workspace = true
1818 curve25519-dalek.workspace = true
19-base64.workspace = true
20-hmac.workspace = true
21-sha2.workspace = true
22-ssh-key.workspace = true
23-serde.workspace = true
24-serde_json.workspace = true
25-serde_yaml.workspace = true
26-toml.workspace = true
27-thiserror.workspace = true
28-tracing.workspace = true
29-tokio.workspace = true
30-pulldown-cmark.workspace = true
31-jaq-core = "3.1.0"
32-jaq-json = "2.0.2"
33-jaq-std = { version = "3.0.2", default-features = false, features = ["std"] }
19+base64.workspace = true
20+hmac.workspace = true
21+sha2.workspace = true
22+ssh-key.workspace = true
23+serde.workspace = true
24+serde_json.workspace = true
25+serde_yaml.workspace = true
26+toml.workspace = true
27+thiserror.workspace = true
28+tracing.workspace = true
29+tokio.workspace = true
30+pulldown-cmark.workspace = true
31+jaq-core = { version = "3.1.0" }
32+jaq-json = { version = "2.0.2" }
33+jaq-std = { version = "3.0.2", default-features = false, features = ["std"] }
3434
3535 [dev-dependencies]
36-tokio = { workspace = true }
37-tempfile = "3"
36+tokio = { workspace = true }
37+tempfile = { version = "3" }
3838 # Tests mint throwaway ssh keys; the `ed25519` feature is what derives a public
3939 # key from a seed. The library itself only ever parses keys, so it does not
4040 # need it.
41-ssh-key = { workspace = true, features = ["ed25519"] }
41+ssh-key = { workspace = true, features = ["ed25519"] }
modifiedcrates/anvil-docker/Cargo.toml+8 −8
11 [package]
2-name = "anvil-docker"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-docker"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "Docker connect/pull plumbing shared by anvil's job runner and agent-session supervisor."
8+description = "Docker connect/pull plumbing shared by anvil's job runner and agent-session supervisor."
99
1010 [dependencies]
11-bollard.workspace = true
11+bollard.workspace = true
1212 futures-util.workspace = true
13-tracing.workspace = true
13+tracing.workspace = true
modifiedcrates/anvil-git/Cargo.toml+15 −15
11 [package]
2-name = "anvil-git"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-git"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "Server-side git wire protocol (smart-HTTP / SSH) on top of gix. Transport-agnostic; upstream-candidate."
8+description = "Server-side git wire protocol (smart-HTTP / SSH) on top of gix. Transport-agnostic; upstream-candidate."
99
1010 [dependencies]
11-anvil-core.workspace = true
12-gix.workspace = true
11+anvil-core.workspace = true
12+gix.workspace = true
1313 gitserver-core.workspace = true
14-reqwest.workspace = true
15-rustls.workspace = true
16-toasty.workspace = true
17-tokio.workspace = true
18-thiserror.workspace = true
19-tracing.workspace = true
14+reqwest.workspace = true
15+rustls.workspace = true
16+toasty.workspace = true
17+tokio.workspace = true
18+thiserror.workspace = true
19+tracing.workspace = true
2020
2121 [dev-dependencies]
22-tempfile = "3"
22+tempfile = { version = "3" }
modifiedcrates/anvil-job/Cargo.toml+6 −6
11 [package]
2-name = "anvil-job"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-job"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "The wire format between anvil and a job runner: what a claimed job is, and what its result looks like."
8+description = "The wire format between anvil and a job runner: what a claimed job is, and what its result looks like."
99
1010 [dependencies]
1111 serde.workspace = true
modifiedcrates/anvil-ssh/Cargo.toml+11 −11
11 [package]
2-name = "anvil-ssh"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-ssh"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "git-over-SSH transport for anvil (russh), delegating to anvil-git. Added in milestone 6."
8+description = "git-over-SSH transport for anvil (russh), delegating to anvil-git. Added in milestone 6."
99
1010 [dependencies]
1111 anvil-core.workspace = true
12-anvil-git.workspace = true
13-russh.workspace = true
14-tokio.workspace = true
15-tracing.workspace = true
16-rand.workspace = true
12+anvil-git.workspace = true
13+russh.workspace = true
14+tokio.workspace = true
15+tracing.workspace = true
16+rand.workspace = true
modifiedcrates/anvil-web/Cargo.toml+36 −36
11 [package]
2-name = "anvil-web"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-web"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "HTTP server for anvil: web UI and smart-HTTP git endpoints (axum)."
8+description = "HTTP server for anvil: web UI and smart-HTTP git endpoints (axum)."
99
1010 [dependencies]
11-anvil-agent.workspace = true
12-anvil-ci.workspace = true
13-anvil-core.workspace = true
14-anvil-job.workspace = true
15-anvil-git.workspace = true
16-axum.workspace = true
17-axum-extra.workspace = true
18-futures-util.workspace = true
19-tokio.workspace = true
20-tokio-util.workspace = true
21-tower-http.workspace = true
22-tracing.workspace = true
23-serde.workspace = true
24-serde_json.workspace = true
25-base64.workspace = true
26-reqwest.workspace = true
27-ring.workspace = true
28-rustls.workspace = true
29-lru.workspace = true
30-maud.workspace = true
11+anvil-agent.workspace = true
12+anvil-ci.workspace = true
13+anvil-core.workspace = true
14+anvil-job.workspace = true
15+anvil-git.workspace = true
16+axum.workspace = true
17+axum-extra.workspace = true
18+futures-util.workspace = true
19+tokio.workspace = true
20+tokio-util.workspace = true
21+tower-http.workspace = true
22+tracing.workspace = true
23+serde.workspace = true
24+serde_json.workspace = true
25+base64.workspace = true
26+reqwest.workspace = true
27+ring.workspace = true
28+rustls.workspace = true
29+lru.workspace = true
30+maud.workspace = true
3131 pulldown-cmark.workspace = true
32-similar.workspace = true
33-syntect.workspace = true
34-time.workspace = true
32+similar.workspace = true
33+syntect.workspace = true
34+time.workspace = true
3535
3636 [dev-dependencies]
37-tempfile = "3"
37+tempfile = { version = "3" }
3838 serde_json.workspace = true
39-argon2.workspace = true
40-ssh-key = { workspace = true, features = ["ed25519"] }
41-tokio = { workspace = true }
42-tower = { workspace = true, features = ["util"] }
39+argon2.workspace = true
40+ssh-key = { workspace = true, features = ["ed25519"] }
41+tokio = { workspace = true }
42+tower = { workspace = true, features = ["util"] }
4343 # The stand-in identity provider in tests/oidc_flow.rs generates a key and
4444 # signs its own id tokens. ring, which verifies them on anvil's side, can only
4545 # verify with an RSA key, not make one.
46-rsa = "0.9"
46+rsa = { version = "0.9" }
4747 # `oid` for the DigestInfo prefix PKCS#1 v1.5 (and so RS256) signs over.
48-sha2 = { workspace = true, features = ["oid"] }
48+sha2 = { workspace = true, features = ["oid"] }
modifiedcrates/anvil-worker/Cargo.toml+18 −18
11 [package]
2-name = "anvil-worker"
3-version.workspace = true
4-edition.workspace = true
5-license.workspace = true
6-repository.workspace = true
2+name = "anvil-worker"
3+version.workspace = true
4+edition.workspace = true
5+license.workspace = true
6+repository.workspace = true
77 rust-version.workspace = true
8-description = "anvil's job runner: dials out to a forge, claims CI jobs, and runs them in sandboxed containers on its own Docker daemon."
8+description = "anvil's job runner: dials out to a forge, claims CI jobs, and runs them in sandboxed containers on its own Docker daemon."
99
1010 # Named `anvil-worker` rather than `anvil-runner` because `anvil-runner:latest`
1111 # is already the *image* CI jobs and agent sessions run inside.
⋯ 2 unchanged lines
1414 path = "src/main.rs"
1515
1616 [dependencies]
17-anvil-docker.workspace = true
18-anvil-job.workspace = true
19-async-trait.workspace = true
20-bollard.workspace = true
21-clap = { workspace = true, features = ["env"] }
22-tar.workspace = true
23-futures-util.workspace = true
24-reqwest.workspace = true
25-rustls.workspace = true
26-serde_json.workspace = true
27-tokio.workspace = true
28-tracing.workspace = true
17+anvil-docker.workspace = true
18+anvil-job.workspace = true
19+async-trait.workspace = true
20+bollard.workspace = true
21+clap = { workspace = true, features = ["env"] }
22+tar.workspace = true
23+futures-util.workspace = true
24+reqwest.workspace = true
25+rustls.workspace = true
26+serde_json.workspace = true
27+tokio.workspace = true
28+tracing.workspace = true
2929 tracing-subscriber.workspace = true
modifiedvendor/gitserver-core/Cargo.toml+18 −18
11 [package]
2-name = "gitserver-core"
2+name = "gitserver-core"
33 description = "Core Git protocol operations (vendored into anvil from WJQSERVER/gitserver, bumped to gix 0.84)."
4-version = "0.0.3"
5-edition = "2024"
6-license = "MPL-2.0"
7-repository = "https://github.com/WJQSERVER/gitserver"
4+version = "0.0.3"
5+edition = "2024"
6+license = "MPL-2.0"
7+repository = "https://github.com/WJQSERVER/gitserver"
88
99 [dependencies]
1010 # gix / gix-pack come from the anvil workspace (bumped to 0.84 / 0.71 here).
11-gix = { workspace = true }
12-gix-pack = { workspace = true }
13-tokio = { workspace = true }
14-tracing = { workspace = true }
15-serde = { workspace = true }
16-thiserror = { workspace = true }
17-miniz_oxide = "0.8"
18-sha1 = "0.10"
19-tokio-stream = "0.1"
20-tokio-util = { version = "0.7", features = ["io", "io-util"] }
21-bytes = "1"
11+gix = { workspace = true }
12+gix-pack = { workspace = true }
13+tokio = { workspace = true }
14+tracing = { workspace = true }
15+serde = { workspace = true }
16+thiserror = { workspace = true }
17+miniz_oxide = { version = "0.8" }
18+sha1 = { version = "0.10" }
19+tokio-stream = { version = "0.1" }
20+tokio-util = { version = "0.7", features = ["io", "io-util"] }
21+bytes = { version = "1" }
2222
2323 [dev-dependencies]
24-tempfile = "3"
25-tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
24+tempfile = { version = "3" }
25+tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }