pub trait GitHubClient {
// Required methods
fn create_release(
&self,
params: &CreateReleaseParams,
) -> Result<ReleaseInfo>;
fn upload_asset(&self, params: &UploadAssetParams) -> Result<AssetInfo>;
fn list_releases(
&self,
params: &ListReleasesParams,
) -> Result<Vec<ReleaseInfo>>;
fn delete_release(&self, params: &DeleteReleaseParams) -> Result<()>;
fn get_release_by_tag(
&self,
params: &GetReleaseByTagParams,
) -> Result<Option<ReleaseInfo>>;
fn delete_tag(&self, params: &DeleteTagParams) -> Result<()>;
}Expand description
Abstraction over GitHub API operations used by the release stage.
Implementations:
- Real: wraps octocrab (lives in
crates/stage-release) - Mock: [
MockGitHubClient] for tests (records calls, configurable responses)
Required Methods§
Sourcefn create_release(&self, params: &CreateReleaseParams) -> Result<ReleaseInfo>
fn create_release(&self, params: &CreateReleaseParams) -> Result<ReleaseInfo>
Create a new GitHub release.
Sourcefn upload_asset(&self, params: &UploadAssetParams) -> Result<AssetInfo>
fn upload_asset(&self, params: &UploadAssetParams) -> Result<AssetInfo>
Upload an asset to an existing release.
Sourcefn list_releases(&self, params: &ListReleasesParams) -> Result<Vec<ReleaseInfo>>
fn list_releases(&self, params: &ListReleasesParams) -> Result<Vec<ReleaseInfo>>
List all releases for a repository.
Sourcefn delete_release(&self, params: &DeleteReleaseParams) -> Result<()>
fn delete_release(&self, params: &DeleteReleaseParams) -> Result<()>
Delete a release by ID.
Sourcefn get_release_by_tag(
&self,
params: &GetReleaseByTagParams,
) -> Result<Option<ReleaseInfo>>
fn get_release_by_tag( &self, params: &GetReleaseByTagParams, ) -> Result<Option<ReleaseInfo>>
Look up a release by tag name.
Returns Ok(Some(info)) when the release exists, Ok(None) when
the tag has no release (HTTP 404 for the /releases/tags/{tag}
endpoint), and Err for transport / auth failures.
Sourcefn delete_tag(&self, params: &DeleteTagParams) -> Result<()>
fn delete_tag(&self, params: &DeleteTagParams) -> Result<()>
Delete a git tag reference.
GitHub’s DELETE /repos/{owner}/{repo}/releases/{id} leaves the
underlying tag alive; a complete rollback issues a follow-up
DELETE /repos/{owner}/{repo}/git/refs/tags/{tag} to remove it.
404 here should be bucketed as already-absent by the caller —
the tag was either never created or was already deleted.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".