refactor(hive-forge): port CLI verbs to forgejo-api

This commit is contained in:
müde 2026-07-07 09:24:53 +02:00
commit 4636987469
36 changed files with 1463 additions and 1153 deletions

View file

@ -11,7 +11,7 @@
use anyhow::Result;
use clap::Args as ClapArgs;
use serde_json::{Value, json};
use forgejo_api::structs::CreateRepoOption;
use crate::client::Client;
use crate::verbs::print_json;
@ -48,29 +48,31 @@ pub struct Args {
/// permission on the target namespace, token missing/invalid) and any
/// I/O error from writing the result to stdout.
pub fn run(client: &Client, args: Args) -> Result<()> {
let mut payload = json!({
"name": args.name,
"private": args.private,
"auto_init": args.auto_init,
});
if let Some(d) = args.description {
payload["description"] = json!(d);
}
if let Some(b) = args.default_branch {
payload["default_branch"] = json!(b);
}
let payload = CreateRepoOption {
auto_init: Some(args.auto_init),
default_branch: args.default_branch,
description: args.description,
gitignores: None,
issue_labels: None,
license: None,
name: args.name,
object_format_name: None,
private: Some(args.private),
readme: None,
template: None,
trust_model: None,
};
let path = match args.org.as_deref() {
Some(org) => format!("/orgs/{org}/repos"),
None => "/user/repos".to_owned(),
let resp = match args.org.as_deref() {
Some(org) => client.api().create_org_repo(org, payload).send()?,
None => client.api().create_current_user_repo(payload).send()?,
};
let resp = client.post_json(&path, &payload)?;
if client.json_mode() {
return print_json(&resp);
return print_json(&serde_json::to_value(&resp)?);
}
// Default human path: print the web URL, like issue-create / pr-create.
if let Some(url) = resp.get("html_url").and_then(Value::as_str) {
if let Some(url) = resp.html_url {
println!("{url}");
}
Ok(())