vcs-forge
A backend-agnostic forge facade over vcs-github, vcs-gitlab, and
vcs-gitea — the gh/glab/tea analogue of how
vcs-core sits over git and jj. Part of the
vcs-toolkit-rs workspace.
A [Forge] handle dispatches the common forge operations — auth, repo/project
view, the PR/MR lifecycle (list / view / create / merge / mark-ready / close,
plus CI status), issues (list / view / create), and releases (list / view) — to
whichever CLI backs it, returning forge-agnostic DTOs ([ForgePr],
[ForgeIssue], [ForgeRelease], [ForgeRepo], [CiStatus]).
📖 Full guide: on docs.rs
A forge has no filesystem marker (it's the remote host), so a Forge is
constructed explicitly — optionally guided by ForgeKind::from_remote_url on a
remote URL you already hold:
use ;
# async
Coverage differs per CLI
Gitea's tea has no current-repo view, draft toggle, checks command, or
single-release view, so repo_view, pr_mark_ready, pr_checks, and
release_view return Error::Unsupported for the Gitea backend
(err.is_unsupported()). GitHub and GitLab support the full lean surface.
Consumers can code against the object-safe ForgeApi trait (&dyn ForgeApi), and
build a Forge over a fake runner for hermetic tests
(Forge::for_github("/repo", GitHub::with_runner(runner))).
License
MIT