plan_issue_cli/commands/
plan.rs1use std::path::PathBuf;
2
3use clap::{ArgGroup, Args, ValueEnum};
4use serde::Serialize;
5
6use super::{CommentModeArgs, CommentTextArgs, GroupingArgs, PrefixArgs, SummaryArgs};
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, ValueEnum)]
9pub enum CloseReason {
10 Completed,
11 #[value(name = "not-planned")]
12 NotPlanned,
13}
14
15#[derive(Debug, Clone, Args, Serialize)]
16pub struct StartPlanArgs {
17 #[arg(long, value_name = "path")]
19 pub plan: PathBuf,
20
21 #[arg(long, value_name = "text")]
23 pub title: Option<String>,
24
25 #[arg(long, value_name = "path")]
27 pub task_spec_out: Option<PathBuf>,
28
29 #[arg(long, value_name = "path")]
31 pub issue_body_out: Option<PathBuf>,
32
33 #[command(flatten)]
34 pub prefixes: PrefixArgs,
35
36 #[command(flatten)]
37 pub grouping: GroupingArgs,
38
39 #[arg(long = "label", value_name = "name", default_values = ["issue", "plan"])]
41 pub label: Vec<String>,
42}
43
44#[derive(Debug, Clone, Args, Serialize)]
45#[command(group(
46 ArgGroup::new("issue_source")
47 .required(true)
48 .args(["issue", "body_file"])
49))]
50pub struct StatusPlanArgs {
51 #[arg(long, value_name = "number")]
53 pub issue: Option<u64>,
54
55 #[arg(long, value_name = "path")]
57 pub body_file: Option<PathBuf>,
58
59 #[command(flatten)]
60 pub comment_mode: CommentModeArgs,
61}
62
63#[derive(Debug, Clone, Args, Serialize)]
64#[command(group(
65 ArgGroup::new("issue_source")
66 .required(true)
67 .args(["issue", "body_file"])
68))]
69pub struct ReadyPlanArgs {
70 #[arg(long, value_name = "number")]
72 pub issue: Option<u64>,
73
74 #[arg(long, value_name = "path")]
76 pub body_file: Option<PathBuf>,
77
78 #[command(flatten)]
79 pub summary: SummaryArgs,
80
81 #[arg(long = "label", value_name = "name", default_value = "needs-review")]
83 pub label: String,
84
85 #[arg(long = "remove-label", value_name = "name")]
87 pub remove_label: Vec<String>,
88
89 #[command(flatten)]
90 pub comment_mode: CommentModeArgs,
91
92 #[arg(long)]
94 pub no_label_update: bool,
95}
96
97#[derive(Debug, Clone, Args, Serialize)]
98pub struct ClosePlanArgs {
99 #[arg(long, value_name = "number")]
101 pub issue: Option<u64>,
102
103 #[arg(long, value_name = "path")]
105 pub body_file: Option<PathBuf>,
106
107 #[arg(long = "approved-comment-url", value_name = "url")]
109 pub approved_comment_url: String,
110
111 #[arg(long, value_enum, default_value_t = CloseReason::Completed)]
113 pub reason: CloseReason,
114
115 #[command(flatten)]
116 pub close_comment: CommentTextArgs,
117
118 #[arg(long)]
120 pub allow_not_done: bool,
121}
122
123#[derive(Debug, Clone, Args, Serialize)]
124pub struct CleanupWorktreesArgs {
125 #[arg(long, value_name = "number")]
127 pub issue: u64,
128}