1use clap::{Parser, Args, Subcommand};
2use std::path::PathBuf;
3
4#[derive(Parser)]
5#[clap(
6 version,
7 author,
8 about,
9 subcommand_required = true,
10 arg_required_else_help = true,
11 propagate_version = true,
12 after_help = "\
13 The sub-command name is the service name (i.e.: circleci for Circle-CI), \
14 except the subcommand `env` for guessing the service name from environment variables, \
15 and the subcommand `help` for printring this help.\n\
16 \n\
17 For each sub-command, command line arguments override environment variables \
18 (except for the subcommand `env` which has no argument).\n\
19 \n\
20 Common environment variables:\n\
21 - COVERALLS_REPO_TOKEN: Coveralls repo token\n\
22 - COVERALLS_FLAG_NAME: Coveralls flag name\n\
23 - GIT_ID: Git ID\n\
24 - GIT_MESSAGE: Git message\n\
25 - GIT_AUTHOR_NAME: Git author name\n\
26 - GIT_AUTHOR_EMAIL: Git author email\n\
27 - GIT_COMMITTER_NAME: Git committer name\n\
28 - GIT_COMMITTER_EMAIL: Git committer email\n\
29 - GIT_REMOTE: Git remote name\n\
30 - GIT_URL: Git remote URL\n\
31 - GIT_BRANCH, BRANCH_NAME: Git branch\n\
32 \n\
33 "
34)]
35pub struct CliArgs {
36 #[clap(value_name = "file_name", global = true)]
38 pub input: Option<PathBuf>,
39
40 #[clap(short='O', long, value_name = "file", global = true)]
42 pub output: Option<PathBuf>,
43
44 #[clap(short='P', long, value_name = "prefix", global = true)]
46 pub source_prefix: Option<PathBuf>,
47
48 #[clap(short='D', long, value_name = "dir", global = true)]
50 pub prune_dir: Option<Vec<PathBuf>>,
51
52 #[clap(short='F', long, value_name = "dir", global = true)]
54 pub force_fetch_git_infos: bool,
55
56 #[clap(short='X', long, global = true)]
58 pub prune_absolutes: bool,
59
60 #[clap(short='z', long, global = true)]
62 pub no_send: bool,
63
64 #[clap(subcommand)]
65 pub service: CliService,
66}
67
68#[derive(Subcommand)]
69pub enum CliService {
70 #[clap(name = "circleci", after_help = "\
72 Used environment variables for Circle-CI:\n\
73 - CIRCLE_PULL_REQUEST: Service pull request\n\
74 - CIRCLE_BUILD_URL: Service build url\n\
75 - CIRCLE_PROJECT_ID: Service project ID\n\
76 - CIRCLE_WORKFLOW_JOB_ID: Service job ID\n\
77 - CIRCLE_JOB: Service job name\n\
78 - CIRCLE_BUILD_NUM: Service build number\n\
79 - CIRCLE_BRANCH: Service branch\n\
80 - CIRCLE_TAG: Service tag\n\
81 - CIRCLE_SHA1: Service commit ID\n\
82 \n\
83 Common environment variables:\n\
84 - GIT_ID: Git ID\n\
85 - GIT_MESSAGE: Git message\n\
86 - GIT_AUTHOR_NAME: Git author name\n\
87 - GIT_AUTHOR_EMAIL: Git author email\n\
88 - GIT_COMMITTER_NAME: Git committer name\n\
89 - GIT_COMMITTER_EMAIL: Git committer email\n\
90 - GIT_REMOTE: Git remote name\n\
91 - GIT_URL: Git remote URL\n\
92 - GIT_BRANCH, BRANCH_NAME: Git branch\n\
93 - GIT_TAG: Git tag\n\
94 \n\
95 ")]
96 CircleCI(CliServiceArgs),
97
98 #[clap(name = "actions", after_help = "\
100 Used environment variables for GitHub Actions:\n\
101 - GITHUB_REF, GITHUB_HEAD_REF: Git branch\n\
102 - GITHUB_RUN_ID: Service number\n\
103 - GITHUB_REF: Service pull request\n\
104 - GITHUB_JOB: Service job id\n\
105 - GITHUB_RUN_NUMBER: Service job number\n\
106 \n\
107 Common environment variables:\n\
108 - GIT_ID: Git ID\n\
109 - GIT_MESSAGE: Git message\n\
110 - GIT_AUTHOR_NAME: Git author name\n\
111 - GIT_AUTHOR_EMAIL: Git author email\n\
112 - GIT_COMMITTER_NAME: Git committer name\n\
113 - GIT_COMMITTER_EMAIL: Git committer email\n\
114 - GIT_REMOTE: Git remote name\n\
115 - GIT_URL: Git remote URL\n\
116 - GIT_BRANCH, BRANCH_NAME: Git branch\n\
117 - GIT_TAG: Git tag\n\
118 \n\
119 ")]
120 Actions(CliServiceArgs),
121
122 #[clap(name = "appveyor", after_help = "\
124 Used environment variables for AppVeyor:\n\
125 - APPVEYOR_PROJECT_ID: Service project ID\n\
126 - APPVEYOR_BUILD_ID: Service build id\n\
127 - APPVEYOR_BUILD_NUMBER: Service number\n\
128 - APPVEYOR_BUILD_VERSION: Service build version\n\
129 - APPVEYOR_PULL_REQUEST_NUMBER: Service pull request\n\
130 - APPVEYOR_JOB_ID: Service job id\n\
131 - APPVEYOR_JOB_NUMBER: Service job number\n\
132 - APPVEYOR_JOB_NAME: Service job name\n\
133 - APPVEYOR_REPO_BRANCH: Service repo branch\n\
134 - APPVEYOR_REPO_NAME: Service repo name\n\
135 - APPVEYOR_REPO_TAG_NAME: Service repo tag name\n\
136 - APPVEYOR_REPO_COMMIT: Service repo commit ID\n\
137 - APPVEYOR_REPO_COMMIT_MESSAGE: Service repo commit message\n\
138 - APPVEYOR_REPO_COMMIT_AUTHOR: Service repo commit author\n\
139 - APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL: Service repo commit email\n\
140 \n\
141 Common environment variables:\n\
142 - GIT_ID: Git ID\n\
143 - GIT_MESSAGE: Git message\n\
144 - GIT_AUTHOR_NAME: Git author name\n\
145 - GIT_AUTHOR_EMAIL: Git author email\n\
146 - GIT_COMMITTER_NAME: Git committer name\n\
147 - GIT_COMMITTER_EMAIL: Git committer email\n\
148 - GIT_REMOTE: Git remote name\n\
149 - GIT_URL: Git remote URL\n\
150 - GIT_BRANCH, BRANCH_NAME: Git branch\n\
151 - GIT_TAG: Git tag\n\
152 \n\
153 ")]
154 AppVeyor(CliServiceArgs),
155
156 #[clap(name = "buildkite", after_help = "\
158 Used environment variables for BuildKite:\n\
159 - BUILDKITE_COMMIT: Service commit ID\n\
160 - BUILDKITE_MESSAGE: Service message\n\
161 - BUILDKITE_BRANCH: Service branch\n\
162 - BUILDKITE_TAG: Service tag\n\
163 - BUILDKITE_PULL_REQUEST: Service pull request\n\
164 - BUILDKITE_JOB_ID: Service job id\n\
165 - BUILDKITE_BUILD_ID : Service build ID\n\
166 - BUILDKITE_BUILD_URL: Service build url\n\
167 - BUILDKITE_BUILD_NUMBER: Service number\n\
168 - BUILDKITE_BUILD_AUTHOR: Service build author\n\
169 - BUILDKITE_BUILD_AUTHOR_EMAIL: Service build author email\n\
170 - BUILDKITE_BUILD_CREATOR: Service build creator\n\
171 - BUILDKITE_BUILD_CREATOR_EMAIL: Service build creator email\n\
172 \n\
173 Common environment variables:\n\
174 - GIT_ID: Git ID\n\
175 - GIT_MESSAGE: Git message\n\
176 - GIT_AUTHOR_NAME: Git author name\n\
177 - GIT_AUTHOR_EMAIL: Git author email\n\
178 - GIT_COMMITTER_NAME: Git committer name\n\
179 - GIT_COMMITTER_EMAIL: Git committer email\n\
180 - GIT_REMOTE: Git remote name\n\
181 - GIT_URL: Git remote URL\n\
182 - GIT_BRANCH, BRANCH_NAME: Git branch\n\
183 - GIT_TAG: Git tag\n\
184 \n\
185 ")]
186 BuildKite(CliServiceArgs),
187
188 #[clap(name = "travis", after_help = "\
190 Used environment variables for Travis-CI:\n\
191 - TRAVIS_BRANCH: Git branch\n\
192 - TRAVIS_BUILD_NUMBER: Service number\n\
193 - TRAVIS_PULL_REQUEST: Service pull request\n\
194 - TRAVIS_BUILD_WEB_URL: Service build url\n\
195 - TRAVIS_JOB_ID: Service job id\n\
196 - TRAVIS_JOB_NUMBER: Service job number\n\
197 \n\
198 Common environment variables:\n\
199 - GIT_ID: Git ID\n\
200 - GIT_MESSAGE: Git message\n\
201 - GIT_AUTHOR_NAME: Git author name\n\
202 - GIT_AUTHOR_EMAIL: Git author email\n\
203 - GIT_COMMITTER_NAME: Git committer name\n\
204 - GIT_COMMITTER_EMAIL: Git committer email\n\
205 - GIT_REMOTE: Git remote name\n\
206 - GIT_URL: Git remote URL\n\
207 - GIT_BRANCH, BRANCH_NAME: Git branch\n\
208 - GIT_TAG: Git tag\n\
209 \n\
210 ")]
211 Travis(CliServiceArgs),
212
213 #[clap(name = "semaphore", after_help = "\
215 Used environment variables for Semaphore-CI:\n\
216 - SEMAPHORE_GIT_BRANCH: Git branch\n\
217 - SEMAPHORE_EXECUTABLE_UUID, SEMAPHORE_WORKFLOW_ID: Service number\n\
218 - SEMAPHORE_BRANCH_ID, SEMAPHORE_GIT_PR_NUMBER: Service pull request\n\
219 - SEMAPHORE_JOB_UUID, SEMAPHORE_JOB_ID: Service job id\n\
220 - SEMAPHORE_WORKFLOW_NUMBER: Service job number\n\
221 \n\
222 Common environment variables:\n\
223 - GIT_ID: Git ID\n\
224 - GIT_MESSAGE: Git message\n\
225 - GIT_AUTHOR_NAME: Git author name\n\
226 - GIT_AUTHOR_EMAIL: Git author email\n\
227 - GIT_COMMITTER_NAME: Git committer name\n\
228 - GIT_COMMITTER_EMAIL: Git committer email\n\
229 - GIT_REMOTE: Git remote name\n\
230 - GIT_URL: Git remote URL\n\
231 - GIT_BRANCH, BRANCH_NAME: Git branch\n\
232 - GIT_TAG: Git tag\n\
233 \n\
234 ")]
235 Semaphore(CliServiceArgs),
236
237 #[clap(name = "jenkins", after_help = "\
239 Used environment variables for Jenkins:\n\
240 - BUILD_NUMBER: Service number\n\
241 - CI_PULL_REQUEST: Service pull request\n\
242 - BUILD_URL: Service build url\n\
243 - BUILD_ID: Service job id\n\
244 \n\
245 Common environment variables:\n\
246 - GIT_ID: Git ID\n\
247 - GIT_MESSAGE: Git message\n\
248 - GIT_AUTHOR_NAME: Git author name\n\
249 - GIT_AUTHOR_EMAIL: Git author email\n\
250 - GIT_COMMITTER_NAME: Git committer name\n\
251 - GIT_COMMITTER_EMAIL: Git committer email\n\
252 - GIT_REMOTE: Git remote name\n\
253 - GIT_URL: Git remote URL\n\
254 - GIT_BRANCH, BRANCH_NAME: Git branch\n\
255 - GIT_TAG: Git tag\n\
256 \n\
257 ")]
258 Jenkins(CliServiceArgs),
259
260 #[clap(name = "env", after_help = "\
262 Used environment variables in a generic context:\n\
263 - CI_NAME: Service name: \
264 circleci, travis-ci, appveyor, jenkins, semaphore-ci, github-actions, buildkite\n\
265 - CI_JOB_ID: Service job ID\n\
266 - CI_JOB_NUMBER: Service job number\n\
267 - CI_PULL_REQUEST: Service pull request\n\
268 - CI_PROJECT_ID: Service project ID\n\
269 - CI_BUILD_ID: Service build ID\n\
270 - CI_BUILD_VERSION: Service build version\n\
271 - CI_BUILD_NUMBER: Service number\n\
272 - CI_BUILD_URL: Service build URL\n\
273 - CI_JOB_NAME: Service job name\n\
274 - CI_REPO_NAME: Service repo name\n\
275 - CI_COMMIT: Service commit ID\n\
276 - CI_REMOTE: Service remote name\n\
277 - CI_REMOTE_URL: Service remote URL\n\
278 - CI_AUTHOR_NAME: Service author name\n\
279 - CI_AUTHOR_EMAIL: Service author email\n\
280 - CI_COMMITER_NAME: Service committer name\n\
281 - CI_COMMITTER_EMAIL: Service committer email\n\
282 - CI_BRANCH: Service branch\n\
283 - CI_TAG: Service tag\n\
284 \n\
285 Used environment variables with Coveralls variables:
286 - COVERALLS_REPO_TOKEN: Coveralls repo token\n\
287 - COVERALLS_SERVICE_NAME: Service name: \
288 circleci, travis-ci, appveyor, jenkins, semaphore-ci, github-actions, buildkite\n\
289 - COVERALLS_SERVICE_NUMBER: Service number\n\
290 - COVERALLS_BUILD_URL: Service build URL\n\
291 - COVERALLS_SERVICE_JOB_ID: Service job ID\n\
292 - COVERALLS_SERVICE_JOB_NUMBER: Service job number\n\
293 - COVERALLS_PULL_REQUEST: Service pull request\n\
294 - COVERALLS_BRANCH: Git branch\n\n\
295 \n\
296 Common environment variables:\n\
297 - COVERALLS_REPO_TOKEN: Coveralls repo token\n\
298 - COVERALLS_FLAG_NAME: Coveralls flag name\n\
299 - GIT_ID: Git ID\n\
300 - GIT_MESSAGE: Git message\n\
301 - GIT_AUTHOR_NAME: Git author name\n\
302 - GIT_AUTHOR_EMAIL: Git author email\n\
303 - GIT_COMMITTER_NAME: Git committer name\n\
304 - GIT_COMMITTER_EMAIL: Git committer email\n\
305 - GIT_REMOTE: Git remote name\n\
306 - GIT_URL: Git remote URL\n\
307 - GIT_BRANCH, BRANCH_NAME: Git branch\n\
308 - GIT_TAG: Git tag\n\
309 \n\
310 ")]
311 Env,
312}
313
314#[derive(Args)]
315pub struct CliServiceArgs {
316 #[clap(short='t', long, value_name = "token")]
318 pub repo_token: Option<String>,
319
320 #[clap(short='f', long, value_name = "flag_name")]
322 pub flag_name: Option<String>,
323
324 #[clap(short='P', long, value_name = "id")]
326 pub project_id: Option<String>,
327
328 #[clap(short='b', long, value_name = "build_id")]
330 pub service_build_id: Option<String>,
331
332 #[clap(short='s', long, value_name = "build_number")]
334 pub service_build_number: Option<String>,
335
336 #[clap(short='v', long, value_name = "build_version")]
338 pub service_build_version: Option<String>,
339
340 #[clap(short='u', long, value_name = "url")]
342 pub service_build_url: Option<String>,
343
344 #[clap(short='p', long, value_name = "pull_request")]
346 pub service_pull_request: Option<String>,
347
348 #[clap(short='j', long, value_name = "job_id")]
350 pub service_job_id: Option<String>,
351
352 #[clap(short='n', long, value_name = "job_name")]
354 pub service_job_name: Option<String>,
355
356 #[clap(short='i', long, value_name = "job_number")]
358 pub service_job_number: Option<String>,
359
360 #[clap(short='r', long, value_name = "name")]
362 pub service_repo_name: Option<String>,
363
364 #[clap(short='K', long, value_name = "id")]
366 pub git_id: Option<String>,
367
368 #[clap(short='B', long, value_name = "branch")]
370 pub git_branch: Option<String>,
371
372 #[clap(short='T', long, value_name = "tag")]
374 pub git_tag: Option<String>,
375
376 #[clap(short='M', long, value_name = "message")]
378 pub git_message: Option<String>,
379
380 #[clap(short='a', long, value_name = "name")]
382 pub git_author_name: Option<String>,
383
384 #[clap(short='A', long, value_name = "email")]
386 pub git_author_email: Option<String>,
387
388 #[clap(short='c', long, value_name = "name")]
390 pub git_committer_name: Option<String>,
391
392 #[clap(short='C', long, value_name = "email")]
394 pub git_committer_email: Option<String>,
395
396 #[clap(short='N', long, value_name = "name")]
398 pub git_remote_name: Option<String>,
399
400 #[clap(short='R', long, value_name = "url")]
402 pub git_remote_url: Option<String>,
403}