Github action to print relevant stats about Pull Request reviewers.
The objective of this action is to:
- Reduce the time taken to review the pull requests.
- Encourage quality on reviews.
- Help deciding which people to assign as reviewers.
Running this action will add a section at the bottom of your pull requests description:
Each reviewer has a link pointing to their historical behavior of each reviewer:
Or integrate this action with Slack:
- No repository data is collected, stored or distributed by this GitHub action. This action is state-less.
- Charts data is send over the URL, and never stored or transmitted anywhere else.
- Minimal data is send to Mixpanel in order to improve this action. However, you can opt-out using
telemetryoption.
Just add this action to one of your workflow files:
- name: Run pull request stats
uses: flowwer-dev/pull-request-stats@masterThe possible inputs for this action are:
| Parameter | Description | Default |
|---|---|---|
token |
A Personal Access Token with repo permissions. Required to calculate stats for an organization or multiple repos. |
GITHUB_TOKEN |
repositories |
A comma separated list of github repositories to calculate the stats, eg. username/repo1,username/repo2. When specifying other repo(s) it is mandatory to pass a Personal Access Token in the token parameter. |
Current repository |
organization |
If you prefer, you may specify the name of your organization to calculate the stats across all of its repos. When specifying an organization it is mandatory to pass a Personal Access Token in the token parameter. |
null |
period |
The length of the period used to calculate the stats, expressed in days. | 30 |
limit |
The maximum number of rows to display in the table. A value of 0 means unlimited. |
0 |
charts |
Whether to add a chart to the start or not. Possible values: true or false. |
false |
disable-links |
If true, removes the links to the detailed charts. Possible values: true or false. |
false |
sort-by |
The column used to sort the data. Possible values: REVIEWS, TIME, COMMENTS. |
REVIEWS |
publish-as |
Where to publish the results. Possible values: as a COMMENT, on the pull request DESCRIPTION. |
COMMENT |
telemetry |
Indicates if the action is allowed to send monitoring data to the developer. This data is minimal and helps me improve this action. This option is a premium feature reserved for sponsors. | true |
slack-webhook |
π₯ New. A Slack webhook URL to post resulting stats. This option is a premium feature reserved for sponsors. | null |
slack-channel |
The Slack channel where stats will be posted. Include the # character (eg. #mychannel). Required when a slack-webhook is configured. |
null |
webhook |
π₯ New. A webhook URL to send the resulting stats as JSON (integrate with Zapier, IFTTT...). See full documentation here. | null |
Minimal config
Add this to the file .github/workflows/stats.yml in your repo:
name: Pull Request Stats
on:
pull_request:
types: [opened]
jobs:
stats:
runs-on: ubuntu-latest
steps:
- name: Run pull request stats
uses: flowwer-dev/pull-request-stats@masterThis config will:
- Calculate the reviewer stats for the current repo in the lasts 30 days
- Add links to the historial data
- Sort results by the "total reviews" column by default
and print a table like this:
| User | Total reviews | Median time to review | Total comments | |
|---|---|---|---|---|
| jartmez | 37 | 22m | 13 | |
| manuelmhtr | 35 | 48m | 96 | |
| ernestognw | 25 | 1h 27m | 63 | |
| javierbyte | 12 | 30m | 0 | |
| Phaze1D | 4 | 34m | 1 |
Visual config
Add this to the file .github/workflows/stats.yml:
name: Pull Request Stats
on:
pull_request:
types: [opened]
jobs:
stats:
runs-on: ubuntu-latest
steps:
- name: Run pull request stats
uses: flowwer-dev/pull-request-stats@master
with:
token: ${{ secrets.ADD_A_PERSONAL_ACCESS_TOKEN }}
organization: 'piedpiper'
period: 7
charts: true
disable-links: true
sort-by: 'COMMENTS'This config will:
- Calculate the reviewer stats for all the repos in the "piedpiper" organization in the lasts 7 days
- Display charts for the metrics
- Remove the links to detailed charts
- Sort results by the "comments" column
and print a table like this:
The stats are calculated as following:
- Time to review: It is the time taken by a reviewer from the Pull Request publication or the last Commit push (whatever happens last) to the first time the pull request is reviewed.
- Time to review: It is the median of the times to review of all Pull Requests reviewed by a person in the period.
- Total reviews: It is the count of all Pull Requests reviewed by a person in the period.
- Total comments: It is the count of all the comments while reviewing other user's Pull Requests in the period (comments in own PRs don't count).
To configure the Slack, integration:
- Create a webhook in your workspace (you must be a Slack admin). It should look like this:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX. Check out this tutorial if you have questions on how to get the webhook URL. - Set the
slack-webhook(from previous step) andslack-channel(don't forget to include the#character) parameters in this action. - Ready to go!
Since it may be quite annoying to receive a Slack notification everytime someone creates a pull request, it is recommended to configure this action to be executed every while using the schedule trigger. For example, every monday at 9am UTC:
name: Pull Request Stats
on:
schedule:
- cron: '0 9 * * 1'
jobs:
stats:
runs-on: ubuntu-latest
steps:
- name: Run pull request stats
uses: flowwer-dev/pull-request-stats@master
with:
slack-channel: '#mystatschannel'
slack-webhook: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
# slack-webhook: ${{ secrets.SLACK_WEBHOOK }} You may want to store this value as a secret.The action is printing an empty table.
- Make sure the repositories have pull request reviews during the configured
period. - When specifying
repositoriesororganizationparamaters, a Personal Access Token is required in thetokenparameter. - If providing a Personal Access Token, make sure it has the
repopermission for the projects you want.
I'm a sponsor but still getting the error "...is a premium feature, available to sponsors".
- Check the sponsorship comes from the account that owns the configured repos (usually an organization).
- Make sure the sponsorship is configured as
public, otherwhise the action cannot access the sponsorship information. If you prefer to keep itprivate, please reach me out to make it works for you that way π.
This action offers some premium features only for sponsors:
- Disabling telemetry.
- Slack integration.
- Comming soon: Microsoft teams and discord integrations.
No minimum amount is required for now. In the future, a minimum monthly sponsorship will be inforced to access premium features.
Suggested sponsorship is $20 usd / month. Thanks for your support! π
Used by hundreds of successful teams:
Sixt |
Lululemon |
Delivery H |
JOKR |
Qatalog |
LOOP |
Hatch |
Zenfi |
|---|---|---|---|---|---|---|---|
Trivago |
Discovery |
Addition |
Fauna |
CDC |
Wecasa |
Bolt |
Republic |
| @manuelmhtr π²π½ Guadalajara, MX |
|---|
This project is maintained by a single person, considering supporting the project by:
MIT


