# rtb-forge
> Part of the [phpboyscout Rust toolkit](https://rust.phpboyscout.uk) —
> small, framework-free crates extracted from
> [rust-tool-base](https://gitlab.com/phpboyscout/rust-tool-base).
**Formerly `rtb-vcs`** — renamed at extraction from the monorepo for
name convergence with the GTB family (the go counterpart lives at
[forge.go.phpboyscout.uk](https://forge.go.phpboyscout.uk)). Only the
crate identity changed: types, modules, and Cargo features are exactly
those of `rtb-vcs` 0.7.0.
Two slices in one crate, each behind feature flags:
1. **Release providers** — the `ReleaseProvider` async trait plus
GitHub / GitLab / Bitbucket / Gitea / Codeberg / Direct backends for
listing, fetching, and streaming release assets.
2. **Git operations** — the `Repo` type (`git` feature, default-on): an
async wrapper over `gix` (shell-out to `git` for write paths) with
clone / init / open / walk / diff / blame / status / commit / fetch /
checkout / push, and auth via `rtb-credentials`.
```rust
use rtb_forge::git::Repo;
let repo = Repo::open(".").await?;
let status = repo.status().await?;
println!("{} untracked files", status.untracked.len());
```
- **Docs:** <https://forge.rust.phpboyscout.uk>
- **API reference:** <https://docs.rs/rtb-forge>
- **Crate:** <https://crates.io/crates/rtb-forge>
## Development
`just ci` runs the full local gate (fmt, clippy, nextest, doc, deny).
Tests include a cucumber BDD suite (`tests/bdd.rs`) and
testcontainers-backed Gitea integration tests
(`just test-integration`, needs Docker). Releases are cut by
release-plz from Conventional Commits — do not tag manually.
## License
MIT