coveralls/
cli_args.rs

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    /// Use `file_name` as input file instead of standard input
37    #[clap(value_name = "file_name", global = true)]
38    pub input: Option<PathBuf>,
39
40    /// Use `file` as output file for writing what should be sent to Coveralls
41    #[clap(short='O', long, value_name = "file", global = true)]
42    pub output: Option<PathBuf>,
43
44    /// Add a prefix to all files
45    #[clap(short='P', long, value_name = "prefix", global = true)]
46    pub source_prefix: Option<PathBuf>,
47
48    /// Prune directory
49    #[clap(short='D', long, value_name = "dir", global = true)]
50    pub prune_dir: Option<Vec<PathBuf>>,
51
52    /// Force fetching of repository informations from Git
53    #[clap(short='F', long, value_name = "dir", global = true)]
54    pub force_fetch_git_infos: bool,
55
56    /// Prune absolute paths
57    #[clap(short='X', long, global = true)]
58    pub prune_absolutes: bool,
59
60    /// Don't send to Coveralls
61    #[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    /// Service Circle-CI
71    #[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    /// Service Github-Actions
99    #[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    /// Service AppVeyor
123    #[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    /// Service BuildKite
157    #[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    /// Service Travis
189    #[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    /// Service Semaphore-CI
214    #[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    /// Service Jenkins
238    #[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    /// Guess service from environment
261    #[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    /// Repo token
317    #[clap(short='t', long, value_name = "token")]
318    pub repo_token: Option<String>,
319
320    /// Flag name
321    #[clap(short='f', long, value_name = "flag_name")]
322    pub flag_name: Option<String>,
323
324    /// Project ID
325    #[clap(short='P', long, value_name = "id")]
326    pub project_id: Option<String>,
327
328    /// Service build ID
329    #[clap(short='b', long, value_name = "build_id")]
330    pub service_build_id: Option<String>,
331
332    /// Service build number
333    #[clap(short='s', long, value_name = "build_number")]
334    pub service_build_number: Option<String>,
335
336    /// Service build version
337    #[clap(short='v', long, value_name = "build_version")]
338    pub service_build_version: Option<String>,
339
340    /// Service build URL
341    #[clap(short='u', long, value_name = "url")]
342    pub service_build_url: Option<String>,
343
344    /// Service pull request
345    #[clap(short='p', long, value_name = "pull_request")]
346    pub service_pull_request: Option<String>,
347
348    /// Service job ID
349    #[clap(short='j', long, value_name = "job_id")]
350    pub service_job_id: Option<String>,
351
352    /// Service job name
353    #[clap(short='n', long, value_name = "job_name")]
354    pub service_job_name: Option<String>,
355
356    /// Service job number
357    #[clap(short='i', long, value_name = "job_number")]
358    pub service_job_number: Option<String>,
359
360    /// Service repo name
361    #[clap(short='r', long, value_name = "name")]
362    pub service_repo_name: Option<String>,
363
364    /// Git ID
365    #[clap(short='K', long, value_name = "id")]
366    pub git_id: Option<String>,
367
368    /// Git branch
369    #[clap(short='B', long, value_name = "branch")]
370    pub git_branch: Option<String>,
371
372    /// Git tag
373    #[clap(short='T', long, value_name = "tag")]
374    pub git_tag: Option<String>,
375
376    /// Git message
377    #[clap(short='M', long, value_name = "message")]
378    pub git_message: Option<String>,
379
380    /// Git author name
381    #[clap(short='a', long, value_name = "name")]
382    pub git_author_name: Option<String>,
383
384    /// Git author email
385    #[clap(short='A', long, value_name = "email")]
386    pub git_author_email: Option<String>,
387
388    /// Git committer name
389    #[clap(short='c', long, value_name = "name")]
390    pub git_committer_name: Option<String>,
391
392    /// Git committer email
393    #[clap(short='C', long, value_name = "email")]
394    pub git_committer_email: Option<String>,
395
396    /// Git remote name
397    #[clap(short='N', long, value_name = "name")]
398    pub git_remote_name: Option<String>,
399
400    /// Git remote URL
401    #[clap(short='R', long, value_name = "url")]
402    pub git_remote_url: Option<String>,
403}