1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//! Get latest GitHub release version command.
//!
//! This command queries the GitHub Releases API to find the latest release
//! version for a repository.
//!
//! # Examples
//!
//! ```bash
//! # Get latest version (e.g., "0.1.2")
//! cargo version-info latest
//!
//! # Get latest tag (e.g., "v0.1.2")
//! cargo version-info latest --format tag
//!
//! # Get JSON output
//! cargo version-info latest --format json
//!
//! # Specify repository explicitly
//! cargo version-info latest --owner owner --repo repo
//! ```
use Result;
use get_owner_repo;
use Parser;
use crategithub;
use crate;
/// Arguments for the `latest` command.
/// Get the latest GitHub release version for a repository.
///
/// Queries the GitHub Releases API to find the most recent release version.
/// Returns "0.0.0" if no releases exist.
///
/// # Errors
///
/// Returns an error if:
/// - The GitHub repository cannot be detected or accessed
/// - The API request fails (network error, authentication failure, etc.)
/// - The release version cannot be parsed
///
/// # Examples
///
/// ```no_run
/// use cargo_version_info::commands::{
/// LatestArgs,
/// latest,
/// };
/// use clap::Parser;
/// # #[tokio::main]
/// # async fn main() -> Result<(), Box<dyn std::error::Error>> {
/// // Parse from command line args
/// let args = LatestArgs::parse_from(&[
/// "cargo",
/// "version-info",
/// "latest",
/// "--owner",
/// "owner",
/// "--repo",
/// "repo",
/// ]);
/// latest(args).await?;
/// # Ok(())
/// # }
/// ```
///
/// # Example Output
///
/// With `--format version`:
/// ```text
/// 0.1.2
/// ```
///
/// With `--format tag`:
/// ```text
/// v0.1.2
/// ```
///
/// With `--format json`:
/// ```json
/// {"version":"0.1.2","tag":"v0.1.2"}
/// ```
pub async