blob: d4908c07d62972475b69cfbc82369e7f419cac5c [file] [log] [blame] [view]
---
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/>