Perforator is a CLI tool to track and analyze performance and statistics based on the information from GitHub Pull Requests.
Data received using this tool should be taken with a grain of salt, mostly because every single PR is different and lots of factors affect PR's review time, reasons for rejecting changes, etc.
This tool heavily relies on Github API, so GITHUB_ACCESS_TOKEN environment variable is required to make requests to the API. Depending on the command, different permissions might be needed, but normally repo
permissions should be enough.
-
rejection-rate
: Percentage of rejected pull. Shows aggregated values per repository and value per developerOptions:
repo
: repository name inowner/name
format, e.g.facebook/react
ordjango/django
.limit
(default: 10): number of PRs/tickets to collect data from.skip
(default: 0): number of PRs/tickets to skip from the beggining of the list.contributors
: comma-separated list of contributors, e.g. aogz,foo,bar
Examples:
$ perforator rejection-rate --repo django/django --limit 100
-
review-time
: Command to track time PR was in review.Options:
-
repo
: repository name inowner/name
format, e.g.facebook/react
ordjango/django
. -
limit
(default: 10): number of PRs/tickets to collect data from. -
skip
(default: 0): number of PRs/tickets to skip from the beggining of the list. -
contributors
: comma-separated list of contributors, e.g. aogz,foo,bar -
group-by
(default:reviewer
): criteria to group by. Can be one of:author
,reviewer
:author
: Calculates average time PRs from specific author spends from the moment pr was created to the moment it was merged.reviewer
: Calculates average time for a specific reviewer to review PRs.
Examples:
$ perforator review-time --repo facebook/react --limit 10 --group-by author
$ perforator review-time --repo aogz/perforator --limit 10 --group-by reviewer
-
-
issue-author
: Number of issues created by authorOptions:
repo
: repository name inowner/name
format, e.g.facebook/react
ordjango/django
.limit
(default: 10): number of PRs/tickets to collect data from.skip
(default: 0): number of PRs/tickets to skip from the beggining of the list.contributors
: comma-separated list of contributors, e.g. aogz,foo,barlabels
: comma-separated list of labels, e.g. bug,featurestate
: state of the issues to count, e.g.all
,open
,closed
Examples:
$ perforator issue-author --repo django/django --limit 100
-
issue-labels
: Number of issues grouped by labelsOptions:
repo
: repository name inowner/name
format, e.g.facebook/react
ordjango/django
.limit
(default: 10): number of PRs/tickets to collect data from.skip
(default: 0): number of PRs/tickets to skip from the beggining of the list.contributors
: comma-separated list of contributors, e.g. aogz,foo,barlabels
: comma-separated list of labels, e.g. bug,featurestate
: state of the issues to count, e.g.all
,open
,closed
Examples:
$ perforator issue-labels --repo django/django --limit 100