| --- |
| title: "RefDiff" |
| description: > |
| RefDiff Plugin |
| --- |
| |
| ## Summary |
| |
| RefDiff is a plugin that performs calculation tasks and has 2 main purposes. |
| |
| - Calculate the difference in commits between releases/tags to [analyze the amount of code in each release](https://github.com/apache/incubator-devlake/blob/main/backend/plugins/refdiff/tasks/commit_diff_calculator.go) |
| - Calculate the difference in commits between deployments to [calculate DORA metrics](https://github.com/apache/incubator-devlake/blob/main/backend/plugins/refdiff/tasks/deployment_commit_diff_calculator.go) |
| |
| And the output of RefDiff is stored in the table commits_diffs, finished_commits_diffs, ref_commits. |
| |
| ## Important Note |
| |
| You need to run `gitextractor` before the `refdiff` plugin. The `gitextractor` plugin should create records in the `refs` table in your database before this plugin can be run. |
| |
| ## Configuration |
| |
| This is an enrichment plugin based on the domain layer data, no configuration is needed. |
| |
| ## How to use refdiff |
| |
| To trigger the enrichment, you need to insert a new task into your pipeline. |
| |
| 1. Make sure `commits` and `refs` are collected into your database, `refs` table should contain records like following: |
| ``` |
| id ref_type |
| github:GithubRepo:1:384111310:refs/tags/0.3.5 TAG |
| github:GithubRepo:1:384111310:refs/tags/0.3.6 TAG |
| github:GithubRepo:1:384111310:refs/tags/0.5.0 TAG |
| github:GithubRepo:1:384111310:refs/tags/v0.0.1 TAG |
| github:GithubRepo:1:384111310:refs/tags/v0.2.0 TAG |
| github:GithubRepo:1:384111310:refs/tags/v0.3.0 TAG |
| github:GithubRepo:1:384111310:refs/tags/v0.4.0 TAG |
| github:GithubRepo:1:384111310:refs/tags/v0.6.0 TAG |
| github:GithubRepo:1:384111310:refs/tags/v0.6.1 TAG |
| ``` |
| 2. If you want to run calculatePrCherryPick, please configure GITHUB_PR_TITLE_PATTERN in .env, you can check the example in .env.example(we have a default value, please make sure your pattern is disclosed by single quotes '') |
| 3. And then, trigger a pipeline like the following format: |
| |
| ```shell |
| curl 'http://localhost:8080/pipelines' \ |
| --header 'Content-Type: application/json' \ |
| --data-raw ' |
| { |
| "name": "test-refdiff", |
| "plan": [ |
| [ |
| { |
| "plugin": "refdiff", |
| "options": { |
| "repoId": "github:GithubRepo:1:384111310", |
| "pairs": [ |
| { "newRef": "refs/tags/v0.6.0", "oldRef": "refs/tags/0.5.0" }, |
| { "newRef": "refs/tags/0.5.0", "oldRef": "refs/tags/0.4.0" } |
| ], |
| "tasks": [ |
| "calculateCommitsDiff", |
| "calculateIssuesDiff", |
| "calculatePrCherryPick", |
| ] |
| } |
| } |
| ] |
| ] |
| }' |
| ``` |
| |
| Or if you preferred calculating latest releases |
| |
| ```shell |
| curl 'http://localhost:8080/pipelines' \ |
| --header 'Content-Type: application/json' \ |
| --data-raw ' |
| { |
| "name": "test-refdiff", |
| "plan": [ |
| [ |
| { |
| "plugin": "refdiff", |
| "options": { |
| "repoId": "github:GithubRepo:1:384111310", |
| "tagsPattern": "v\d+\.\d+.\d+", |
| "tagsLimit": 10, |
| "tagsOrder": "reverse semver", |
| "tasks": [ |
| "calculateCommitsDiff", |
| "calculateIssuesDiff", |
| "calculatePrCherryPick", |
| ] |
| } |
| } |
| ] |
| ] |
| }' |
| ``` |
| |
| ## How to use refdiff in DORA |
| |
| RefDiff can be called by the [DORA plugin](https://github.com/apache/incubator-devlake/tree/main/backend/plugins/dora) to support the calculation of [DORA metrics](https://devlake.apache.org/docs/DORA). RefDiff has a subtask called 'calculateProjectDeploymentCommitsDiff'. This subtask takes the `project_name` from task options to calculate the commits diff between two consecutive deployments in this project. That is to say, refdiff will generate the relationship between `deployed commit(s)` and the `deployment` in which these commits get deployed. |
| |
| ```shell |
| curl 'http://localhost:8080/pipelines' \ |
| --header 'Content-Type: application/json' \ |
| --data-raw ' |
| { |
| "name": "test-refdiff-dora", |
| "plan": [ |
| [ |
| { |
| "plugin": "refdiff", |
| "options": { |
| "projectName": "project_name_1", |
| "tasks": [ |
| "calculateProjectDeploymentCommitsDiff" |
| ] |
| } |
| } |
| ] |
| ] |
| }' |
| ``` |
| |
| ## Development |
| |
| This plugin depends on `libgit2`, you need to install version 1.3.0 in order to run and debug this plugin on your local |
| machine. [Click here](./gitextractor.md#Development) for a brief guide. |
| |
| <br/><br/><br/> |