Create code-coverage plugin
In order to use this plugin, you must set the
`backstage.io/code-coverage` annotation on your entity.
```yaml
backstage.io/code-coverage: enabled
```
There's a feature to only include files that are in SCM in the coverage
report, this is helpful to not count generated files for example. To
enable this set the `backstage.io/code-coverage` annotation to
`scm-only`.
```yaml
backstage.io/code-coverage: scm-only
```
The backend plugin provides API endpoints for submitting code-coverage
reports. Currently jacoco and cobertura are supported. These reports
are normalized to a json format that is stored in the database.
```json
// curl -X POST -H "Content-Type:text/xml" -d @cobertura.xml "localhost:7000/api/code-coverage/Component/default/entity-name?coverageType=cobertura"
{
"links": [
{
"href": "http://localhost:7000/api/code-coverage/Component/default/entity-name",
"rel": "coverage"
}
]
}
```
It also provides some additional API endpoints:
* Viewing the latest report
* Viewing a more condensed history of code coverage values
* Retrieving file contents from source-control, used by the UI
Provides a graph of code coverage change over time, as well as a file
view where you can see the highlighted lines.
Co-authored-by: nissayeva <natashaaay@gmail.com>
Signed-off-by: alde <r.dybeck@gmail.com>
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
# code-coverage
|
||||
|
||||
This is the backend part of the code-coverage plugin. It takes care of processing various coverage formats and standardizing them into a single json format, used by the frontend.
|
||||
|
||||
## Configuring your entity
|
||||
|
||||
In order to use this plugin, you must set the `backstage.io/code-coverage` annotation.
|
||||
|
||||
```yaml
|
||||
backstage.io/code-coverage: enabled
|
||||
```
|
||||
|
||||
There's a feature to only include files that are in VCS in the coverage report, this is helpful to not count generated files for example. To enable this set the `backstage.io/code-coverage` annotation to `scm-only`.
|
||||
|
||||
```yaml
|
||||
backstage.io/code-coverage: scm-only
|
||||
```
|
||||
|
||||
Note: This requires the [`backstage.io/source-location` annotation](https://backstage.io/docs/features/software-catalog/well-known-annotations#backstageiosource-location) to be set.
|
||||
|
||||
## API
|
||||
|
||||
### Adding cobertura report
|
||||
|
||||
POST a cobertura xml to `/:kind/:namespace/:name?coverageType=cobertura`
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
// curl -X POST -H "Content-Type:text/xml" -d @cobertura.xml "localhost:7000/api/code-coverage/Component/default/entity-name?coverageType=cobertura"
|
||||
{
|
||||
"links": [
|
||||
{
|
||||
"href": "http://localhost:7000/api/code-coverage/Component/default/entity-name",
|
||||
"rel": "coverage"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Adding jacoco report
|
||||
|
||||
POST a jacoco xml to `/:kind/:namespace/:name?coverageType=jacoco`
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
// curl -X POST -H "Content-Type:text/xml" -d @jacoco.xml "localhost:7000/api/code-coverage/Component/default/entity-name?coverageType=jacoco"
|
||||
{
|
||||
"links": [
|
||||
{
|
||||
"href": "http://localhost:7000/api/code-coverage/Component/default/entity-name",
|
||||
"rel": "coverage"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Reading json coverage
|
||||
|
||||
GET `/:kind/:namespace/:name`
|
||||
|
||||
Example:
|
||||
|
||||
```json
|
||||
// curl localhost:7000/api/code-coverage/Component/default/entity-name
|
||||
{
|
||||
"aggregate": {
|
||||
"branch": {
|
||||
"available": 0,
|
||||
"covered": 0,
|
||||
"missed": 0,
|
||||
"percentage": 0
|
||||
},
|
||||
"line": {
|
||||
"available": 5,
|
||||
"covered": 4,
|
||||
"missed": 1,
|
||||
"percentage": 80
|
||||
}
|
||||
},
|
||||
"entity": {
|
||||
"kind": "Component",
|
||||
"name": "entity-name",
|
||||
"namespace": "default"
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"branchHits": {},
|
||||
"filename": "main.go",
|
||||
"lineHits": {
|
||||
"117": 12,
|
||||
"142": 8,
|
||||
"34": 8,
|
||||
"42": 0,
|
||||
"58": 6
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Coverage history
|
||||
|
||||
GET `/:kind/:namespace/:name/history`
|
||||
|
||||
Example
|
||||
|
||||
```json
|
||||
// curl localhost:7000/api/code-coverage/Component/default/entity-name/history
|
||||
{
|
||||
"entity": {
|
||||
"kind": "Component",
|
||||
"name": "entity-name",
|
||||
"namespace": "default"
|
||||
},
|
||||
"history": [
|
||||
{
|
||||
"branch": {
|
||||
"available": 0,
|
||||
"covered": 0,
|
||||
"missed": 0,
|
||||
"percentage": 0
|
||||
},
|
||||
"line": {
|
||||
"available": 299,
|
||||
"covered": 116,
|
||||
"missed": 183,
|
||||
"percentage": 38.8
|
||||
},
|
||||
"timestamp": 1615490766141
|
||||
},
|
||||
{
|
||||
"branch": {
|
||||
"available": 0,
|
||||
"covered": 0,
|
||||
"missed": 0,
|
||||
"percentage": 0
|
||||
},
|
||||
"line": {
|
||||
"available": 299,
|
||||
"covered": 116,
|
||||
"missed": 183,
|
||||
"percentage": 38.8
|
||||
},
|
||||
"timestamp": 1615406307929
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user