Compare commits
6 Commits
minimal-ve
...
d4ef21e243
| Author | SHA1 | Date | |
|---|---|---|---|
| d4ef21e243 | |||
| d94c350cde | |||
| 8120cb0489 | |||
| b82cfdb822 | |||
| ea046c929f | |||
| 135acf09b7 |
17
Cargo.toml
17
Cargo.toml
@@ -5,25 +5,12 @@ edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.0.7", features = ["derive", "env"] }
|
||||
colored = "2.0.0"
|
||||
itertools = "0.10.0"
|
||||
reqwest = { version = "0.11.13", features = ["json", "stream", "multipart"] }
|
||||
serde = { version = "1.0.152", features = ["derive"] }
|
||||
tokio = { version = "1.24.2", features = ["macros", "rt-multi-thread"] }
|
||||
|
||||
# Grand-dependency Pins ----
|
||||
# Fixes: Reqwest uses too-old version of crate `log`
|
||||
log = "0.4.6"
|
||||
|
||||
# Debian 12 uses OpenSSL 3.x and older libssl-sys crates are angry about that
|
||||
|
||||
# Fixes: native lib lookup.
|
||||
# Causes: missing item in crate `ffi`
|
||||
openssl-sys = "0.9.64"
|
||||
|
||||
# Fixes: missing item in crate `ffi` (from openssl-sys)
|
||||
openssl = "0.10.35"
|
||||
|
||||
# End Grand-dependency Pins ----
|
||||
|
||||
# Packages available in Debian (Sid)
|
||||
# clap = "4.5.23"
|
||||
# reqwest = "0.12.15"
|
||||
|
||||
15
src/main.rs
15
src/main.rs
@@ -33,9 +33,18 @@ async fn main() -> Result<(), gt_tool::Error> {
|
||||
gt_tool::cli::Commands::ListReleases => {
|
||||
let releases =
|
||||
gt_tool::api::release::list_releases(&client, &args.gitea_url, &args.repo).await?;
|
||||
for release in releases {
|
||||
println!("{:?}", release);
|
||||
}
|
||||
// Print in reverse order so the newest items are closest to the
|
||||
// user's command prompt. Otherwise the newest item scrolls off the
|
||||
// screen and can't be seen.
|
||||
let _ = itertools::Itertools::intersperse(
|
||||
releases
|
||||
.iter()
|
||||
.rev()
|
||||
.map(|release| release.to_string()),
|
||||
String::from("")
|
||||
)
|
||||
.map(|release| println!("{}", release))
|
||||
.fold((), |_, _| () );
|
||||
}
|
||||
gt_tool::cli::Commands::CreateRelease {
|
||||
name,
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
use std::fmt::Display;
|
||||
|
||||
use colored::Colorize;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
@@ -19,6 +22,36 @@ pub struct Release {
|
||||
author: Author,
|
||||
}
|
||||
|
||||
impl Display for Release {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
let tag = "Tag:".green().bold();
|
||||
let name = "Name:".green();
|
||||
let published = "Published:".bright_green();
|
||||
let created = "Created:".green().dimmed();
|
||||
let author = "Author:".blue();
|
||||
let body = if self.body.len() > 0 {
|
||||
&self.body.white()
|
||||
} else {
|
||||
&String::from("(empty body)").dimmed()
|
||||
};
|
||||
|
||||
write!(f,
|
||||
"{tag} {}
|
||||
{name} {}
|
||||
{}
|
||||
{published} {} ({created} {})
|
||||
{author} {} ({})",
|
||||
self.tag_name.bold(),
|
||||
self.name,
|
||||
body,
|
||||
self.published_at,
|
||||
self.created_at.dimmed(),
|
||||
self.author.login,
|
||||
self.author.email,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
pub struct Author {
|
||||
id: usize,
|
||||
|
||||
Reference in New Issue
Block a user