Skip to content

Commit 19e3e7c

Browse files
feat: add support to pass analyzer type using --analyzer-type flag (#227)
With the introduction of community analyzers, it is required for the users to pass a `--analyzer-type` flag. This is backwards compatible. CLI won't pass pass this arg to the query if not provided.
1 parent 47330bf commit 19e3e7c

File tree

7 files changed

+119
-7
lines changed

7 files changed

+119
-7
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,5 @@ cover.out
1414

1515
# Completion files
1616
completions
17+
18+
.vscode

command/report/constants.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package report
22

33
const (
4-
cliVersion = "v0.1.6"
4+
CliVersion = "v0.8.0"
55
commonUsageMessage = `
66
Usage:
77
deepsource <command> [<arguments>]
@@ -18,14 +18,17 @@ Usage:
1818
deepsource report [<arguments>]
1919
Available arguments are:
2020
--analyzer Shortcode of the analyzer
21+
--analyzer-type Type of the analyzer (default: "core")
2122
--key Name of the artifact
2223
--value Value of the artifact
2324
--value-file Path to the artifact value file
2425
Examples:
2526
deepsource report --analyzer test-coverage --key python --value-file ./coverage.xml
2627
deepsource report --analyzer git --key lines-changed --value 22
28+
deepsource report --analyzer kube-linter --type community --value-file ./kube-linter.sarif
2729
Notes:
2830
- Pass either '--value' or '--value-file'. If both are passed, contents of '--value' will be considered.
31+
- '--analyzer-type' is optional. If not passed, it will default to 'core'.
2932
Documentation:
3033
https://deepsource.io/docs/cli#report
3134
`

command/report/report.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919

2020
type ReportOptions struct {
2121
Analyzer string
22+
AnalyzerType string
2223
Key string
2324
Value string
2425
ValueFile string
@@ -57,6 +58,8 @@ func NewCmdReport() *cobra.Command {
5758
// --repo, -r flag
5859
cmd.Flags().StringVar(&opts.Analyzer, "analyzer", "", "name of the analyzer to report the artifact to (example: test-coverage)")
5960

61+
cmd.Flags().StringVar(&opts.AnalyzerType, "analyzer-type", "", "type of the analyzer (example: community)")
62+
6063
cmd.Flags().StringVar(&opts.Key, "key", "", "shortcode of the language (example: go)")
6164

6265
cmd.Flags().StringVar(&opts.Value, "value", "", "value of the artifact")
@@ -85,6 +88,7 @@ func (opts *ReportOptions) Run() int {
8588
/////////////////////
8689

8790
reportCommandAnalyzerShortcode := strings.TrimSpace(opts.Analyzer)
91+
reportCommandAnalyzerType := strings.TrimSpace(opts.AnalyzerType)
8892
reportCommandKey := strings.TrimSpace(opts.Key)
8993
reportCommandValue := opts.Value
9094
reportCommandValueFile := strings.TrimSpace(opts.ValueFile)
@@ -198,10 +202,12 @@ func (opts *ReportOptions) Run() int {
198202
}
199203

200204
var analyzerShortcode string
205+
var analyzerType string
201206
var artifactKey string
202207
var artifactValue string
203208

204209
analyzerShortcode = reportCommandAnalyzerShortcode
210+
analyzerType = reportCommandAnalyzerType
205211
artifactKey = reportCommandKey
206212

207213
if reportCommandValue != "" {
@@ -299,14 +305,21 @@ func (opts *ReportOptions) Run() int {
299305
AccessToken: dsnAccessToken,
300306
CommitOID: headCommitOID,
301307
ReporterName: "cli",
302-
ReporterVersion: cliVersion,
308+
ReporterVersion: CliVersion,
303309
Key: artifactKey,
304310
Data: artifactValue,
305311
AnalyzerShortcode: analyzerShortcode,
306-
Metadata: reportMeta,
312+
// AnalyzerType: analyzerType, // Add this in the later steps, only is the analyzer type is passed.
313+
// This makes sure that the cli is always backwards compatible. The API is designed to accept analyzer type only if it is passed.
314+
Metadata: reportMeta,
307315
}
308316

309317
query := ReportQuery{Query: reportGraphqlQuery}
318+
// Check if analyzerType is passed and add it to the queryInput
319+
if analyzerType != "" {
320+
queryInput.AnalyzerType = analyzerType
321+
}
322+
// Pass queryInput to the query
310323
query.Variables.Input = queryInput
311324

312325
// Marshal request body
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"query": "mutation($input: CreateArtifactInput!) {\r\n createArtifact(input: $input) {\r\n ok\r\n message\r\n error\r\n }\r\n}",
3+
"variables": {
4+
"input": {
5+
"accessToken": "f59ab9314307",
6+
"commitOid": "b9e678d8dcb43fa1340e8a0c579b2c642280dc27",
7+
"reporter": "cli",
8+
"reporterVersion": "v0.1.6",
9+
"key": "python",
10+
"data": "\u003c?xml version=\"1.0\" ?\u003e\n\u003ccoverage branch-rate=\"0.9333\" branches-covered=\"28\" branches-valid=\"30\" complexity=\"0\" line-rate=\"0.9839\" lines-covered=\"183\" lines-valid=\"186\" timestamp=\"1551180635459\" version=\"4.5.2\"\u003e\n \u003c!-- Generated by coverage.py: https://coverage.readthedocs.io --\u003e\n \u003c!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd --\u003e\n \u003csources/\u003e\n \u003cpackages\u003e\n \u003cpackage branch-rate=\"0.9333\" complexity=\"0\" line-rate=\"0.9839\" name=\".Users.sanket.Code.s3tree.s3tree\"\u003e\n \u003cclasses\u003e\n \u003cclass branch-rate=\"1\" complexity=\"0\" filename=\"/code/s3tree/s3tree/__init__.py\" line-rate=\"1\" name=\"__init__.py\"\u003e\n \u003cmethods/\u003e\n \u003clines\u003e\n \u003cline hits=\"1\" number=\"4\"/\u003e\n \u003cline hits=\"1\" number=\"6\"/\u003e\n \u003cline hits=\"1\" number=\"7\"/\u003e\n \u003cline hits=\"1\" number=\"9\"/\u003e\n \u003cline hits=\"1\" number=\"10\"/\u003e\n \u003cline hits=\"1\" number=\"12\"/\u003e\n \u003c/lines\u003e\n \u003c/class\u003e\n \u003cclass branch-rate=\"1\" complexity=\"0\" filename=\"/code/s3tree/s3tree/__version__.py\" line-rate=\"1\" name=\"__version__.py\"\u003e\n \u003cmethods/\u003e\n \u003clines\u003e\n \u003cline hits=\"1\" number=\"4\"/\u003e\n \u003c/lines\u003e\n \u003c/class\u003e\n \u003cclass branch-rate=\"0.9375\" complexity=\"0\" filename=\"/code/s3tree/s3tree/core.py\" line-rate=\"0.9846\" name=\"core.py\"\u003e\n \u003cmethods/\u003e\n \u003clines\u003e\n \u003cline hits=\"1\" number=\"4\"/\u003e\n \u003cline hits=\"1\" number=\"5\"/\u003e\n \u003cline hits=\"1\" number=\"6\"/\u003e\n \u003cline hits=\"1\" number=\"7\"/\u003e\n \u003cline hits=\"1\" number=\"8\"/\u003e\n \u003cline hits=\"1\" number=\"10\"/\u003e\n \u003cline hits=\"1\" number=\"11\"/\u003e\n \u003cline hits=\"1\" number=\"13\"/\u003e\n \u003cline hits=\"1\" number=\"14\"/\u003e\n \u003cline hits=\"1\" number=\"17\"/\u003e\n \u003cline hits=\"1\" number=\"41\"/\u003e\n \u003cline hits=\"1\" number=\"43\"/\u003e\n \u003cline hits=\"1\" number=\"45\"/\u003e\n \u003cline hits=\"1\" number=\"49\"/\u003e\n \u003cline hits=\"1\" number=\"50\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"53\"/\u003e\n \u003cline hits=\"1\" number=\"54\"/\u003e\n \u003cline hits=\"1\" number=\"57\"/\u003e\n \u003cline hits=\"1\" number=\"61\"/\u003e\n \u003cline hits=\"1\" number=\"62\"/\u003e\n \u003cline hits=\"1\" number=\"65\"/\u003e\n \u003cline hits=\"1\" number=\"66\"/\u003e\n \u003cline hits=\"1\" number=\"69\"/\u003e\n \u003cline hits=\"1\" number=\"72\"/\u003e\n \u003cline hits=\"1\" number=\"73\"/\u003e\n \u003cline hits=\"1\" number=\"76\"/\u003e\n \u003cline hits=\"1\" number=\"78\"/\u003e\n \u003cline hits=\"1\" number=\"79\"/\u003e\n \u003cline hits=\"1\" number=\"81\"/\u003e\n \u003cline hits=\"1\" number=\"82\"/\u003e\n \u003cline hits=\"1\" number=\"84\"/\u003e\n \u003cline hits=\"1\" number=\"86\"/\u003e\n \u003cline hits=\"1\" number=\"90\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"94\"/\u003e\n \u003cline hits=\"1\" number=\"95\"/\u003e\n \u003cline hits=\"1\" number=\"99\"/\u003e\n \u003cline hits=\"1\" number=\"101\"/\u003e\n \u003cline hits=\"1\" number=\"104\"/\u003e\n \u003cline hits=\"1\" number=\"105\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"107\"/\u003e\n \u003cline hits=\"1\" number=\"108\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"110\"/\u003e\n \u003cline hits=\"1\" number=\"111\"/\u003e\n \u003cline hits=\"1\" number=\"113\"/\u003e\n \u003cline hits=\"1\" number=\"115\"/\u003e\n \u003cline hits=\"1\" number=\"120\"/\u003e\n \u003cline hits=\"1\" number=\"121\"/\u003e\n \u003cline hits=\"1\" number=\"122\"/\u003e\n \u003cline hits=\"1\" number=\"125\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"127\"/\u003e\n \u003cline hits=\"1\" number=\"128\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"50% (1/2)\" hits=\"1\" missing-branches=\"134\" number=\"130\"/\u003e\n \u003cline hits=\"1\" number=\"131\"/\u003e\n \u003cline hits=\"0\" number=\"134\"/\u003e\n \u003cline hits=\"1\" number=\"136\"/\u003e\n \u003cline hits=\"1\" number=\"139\"/\u003e\n \u003cline hits=\"1\" number=\"141\"/\u003e\n \u003cline hits=\"1\" number=\"144\"/\u003e\n \u003cline hits=\"1\" number=\"146\"/\u003e\n \u003cline hits=\"1\" number=\"149\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"151\"/\u003e\n \u003cline hits=\"1\" number=\"152\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"154\"/\u003e\n \u003cline hits=\"1\" number=\"155\"/\u003e\n \u003cline hits=\"1\" number=\"157\"/\u003e\n \u003c/lines\u003e\n \u003c/class\u003e\n \u003cclass branch-rate=\"1\" complexity=\"0\" filename=\"/code/s3tree/s3tree/exceptions.py\" line-rate=\"1\" name=\"exceptions.py\"\u003e\n \u003cmethods/\u003e\n \u003clines\u003e\n \u003cline hits=\"1\" number=\"5\"/\u003e\n \u003cline hits=\"1\" number=\"6\"/\u003e\n \u003cline hits=\"1\" number=\"7\"/\u003e\n \u003cline hits=\"1\" number=\"11\"/\u003e\n \u003cline hits=\"1\" number=\"14\"/\u003e\n \u003cline hits=\"1\" number=\"15\"/\u003e\n \u003cline hits=\"1\" number=\"16\"/\u003e\n \u003cline hits=\"1\" number=\"17\"/\u003e\n \u003cline hits=\"1\" number=\"20\"/\u003e\n \u003cline hits=\"1\" number=\"21\"/\u003e\n \u003cline hits=\"1\" number=\"22\"/\u003e\n \u003cline hits=\"1\" number=\"25\"/\u003e\n \u003cline hits=\"1\" number=\"28\"/\u003e\n \u003cline hits=\"1\" number=\"29\"/\u003e\n \u003cline hits=\"1\" number=\"30\"/\u003e\n \u003cline hits=\"1\" number=\"31\"/\u003e\n \u003cline hits=\"1\" number=\"34\"/\u003e\n \u003cline hits=\"1\" number=\"35\"/\u003e\n \u003cline hits=\"1\" number=\"36\"/\u003e\n \u003cline hits=\"1\" number=\"37\"/\u003e\n \u003cline hits=\"1\" number=\"40\"/\u003e\n \u003cline hits=\"1\" number=\"41\"/\u003e\n \u003cline hits=\"1\" number=\"42\"/\u003e\n \u003cline hits=\"1\" number=\"43\"/\u003e\n \u003c/lines\u003e\n \u003c/class\u003e\n \u003cclass branch-rate=\"1\" complexity=\"0\" filename=\"/code/s3tree/s3tree/models.py\" line-rate=\"0.9615\" name=\"models.py\"\u003e\n \u003cmethods/\u003e\n \u003clines\u003e\n \u003cline hits=\"1\" number=\"3\"/\u003e\n \u003cline hits=\"1\" number=\"5\"/\u003e\n \u003cline hits=\"1\" number=\"6\"/\u003e\n \u003cline hits=\"1\" number=\"7\"/\u003e\n \u003cline hits=\"1\" number=\"8\"/\u003e\n \u003cline hits=\"1\" number=\"9\"/\u003e\n \u003cline hits=\"1\" number=\"10\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"13\"/\u003e\n \u003cline hits=\"1\" number=\"14\"/\u003e\n \u003cline hits=\"1\" number=\"19\"/\u003e\n \u003cline hits=\"1\" number=\"20\"/\u003e\n \u003cline hits=\"1\" number=\"21\"/\u003e\n \u003cline hits=\"1\" number=\"23\"/\u003e\n \u003cline hits=\"1\" number=\"25\"/\u003e\n \u003cline hits=\"1\" number=\"27\"/\u003e\n \u003cline hits=\"1\" number=\"28\"/\u003e\n \u003cline hits=\"1\" number=\"30\"/\u003e\n \u003cline hits=\"1\" number=\"31\"/\u003e\n \u003cline hits=\"1\" number=\"37\"/\u003e\n \u003cline hits=\"1\" number=\"40\"/\u003e\n \u003cline hits=\"1\" number=\"45\"/\u003e\n \u003cline hits=\"1\" number=\"48\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"51\"/\u003e\n \u003cline hits=\"1\" number=\"52\"/\u003e\n \u003cline hits=\"1\" number=\"55\"/\u003e\n \u003cline hits=\"1\" number=\"57\"/\u003e\n \u003cline hits=\"1\" number=\"58\"/\u003e\n \u003cline hits=\"1\" number=\"59\"/\u003e\n \u003cline hits=\"1\" number=\"60\"/\u003e\n \u003cline hits=\"1\" number=\"61\"/\u003e\n \u003cline hits=\"1\" number=\"64\"/\u003e\n \u003cline hits=\"1\" number=\"67\"/\u003e\n \u003cline hits=\"1\" number=\"69\"/\u003e\n \u003cline hits=\"1\" number=\"72\"/\u003e\n \u003cline hits=\"1\" number=\"74\"/\u003e\n \u003cline hits=\"1\" number=\"77\"/\u003e\n \u003cline hits=\"1\" number=\"79\"/\u003e\n \u003cline hits=\"1\" number=\"82\"/\u003e\n \u003cline hits=\"1\" number=\"84\"/\u003e\n \u003cline hits=\"1\" number=\"86\"/\u003e\n \u003cline hits=\"1\" number=\"87\"/\u003e\n \u003cline hits=\"0\" number=\"90\"/\u003e\n \u003cline hits=\"0\" number=\"91\"/\u003e\n \u003cline hits=\"1\" number=\"93\"/\u003e\n \u003cline hits=\"1\" number=\"94\"/\u003e\n \u003cline hits=\"1\" number=\"96\"/\u003e\n \u003cline hits=\"1\" number=\"99\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"101\"/\u003e\n \u003cline hits=\"1\" number=\"102\"/\u003e\n \u003cline hits=\"1\" number=\"103\"/\u003e\n \u003cline hits=\"1\" number=\"105\"/\u003e\n \u003cline hits=\"1\" number=\"108\"/\u003e\n \u003c/lines\u003e\n \u003c/class\u003e\n \u003cclass branch-rate=\"0.5\" complexity=\"0\" filename=\"/code/s3tree/s3tree/types.py\" line-rate=\"1\" name=\"types.py\"\u003e\n \u003cmethods/\u003e\n \u003clines\u003e\n \u003cline hits=\"1\" number=\"3\"/\u003e\n \u003cline hits=\"1\" number=\"6\"/\u003e\n \u003cline hits=\"1\" number=\"8\"/\u003e\n \u003cline hits=\"1\" number=\"10\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"50% (1/2)\" hits=\"1\" missing-branches=\"14\" number=\"11\"/\u003e\n \u003cline hits=\"1\" number=\"12\"/\u003e\n \u003cline hits=\"1\" number=\"14\"/\u003e\n \u003cline hits=\"1\" number=\"17\"/\u003e\n \u003cline hits=\"1\" number=\"18\"/\u003e\n \u003cline hits=\"1\" number=\"21\"/\u003e\n \u003cline hits=\"1\" number=\"22\"/\u003e\n \u003cline hits=\"1\" number=\"23\"/\u003e\n \u003cline hits=\"1\" number=\"24\"/\u003e\n \u003c/lines\u003e\n \u003c/class\u003e\n \u003cclass branch-rate=\"1\" complexity=\"0\" filename=\"/code/s3tree/s3tree/utils.py\" line-rate=\"1\" name=\"utils.py\"\u003e\n \u003cmethods/\u003e\n \u003clines\u003e\n \u003cline hits=\"1\" number=\"3\"/\u003e\n \u003cline hits=\"1\" number=\"4\"/\u003e\n \u003cline hits=\"1\" number=\"5\"/\u003e\n \u003cline hits=\"1\" number=\"6\"/\u003e\n \u003cline hits=\"1\" number=\"8\"/\u003e\n \u003cline hits=\"1\" number=\"11\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"27\"/\u003e\n \u003cline hits=\"1\" number=\"28\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"30\"/\u003e\n \u003cline hits=\"1\" number=\"31\"/\u003e\n \u003cline hits=\"1\" number=\"34\"/\u003e\n \u003cline branch=\"true\" condition-coverage=\"100% (2/2)\" hits=\"1\" number=\"37\"/\u003e\n \u003cline hits=\"1\" number=\"38\"/\u003e\n \u003cline hits=\"1\" number=\"40\"/\u003e\n \u003cline hits=\"1\" number=\"43\"/\u003e\n \u003cline hits=\"1\" number=\"56\"/\u003e\n \u003cline hits=\"1\" number=\"60\"/\u003e\n \u003cline hits=\"1\" number=\"65\"/\u003e\n \u003cline hits=\"1\" number=\"69\"/\u003e\n \u003cline hits=\"1\" number=\"73\"/\u003e\n \u003cline hits=\"1\" number=\"74\"/\u003e\n \u003cline hits=\"1\" number=\"76\"/\u003e\n \u003cline hits=\"1\" number=\"78\"/\u003e\n \u003cline hits=\"1\" number=\"81\"/\u003e\n \u003cline hits=\"1\" number=\"83\"/\u003e\n \u003c/lines\u003e\n \u003c/class\u003e\n \u003c/classes\u003e\n \u003c/package\u003e\n \u003c/packages\u003e\n\u003c/coverage\u003e\n",
11+
"analyzer": "test-coverage",
12+
"analyzerType": "community",
13+
"metadata": {
14+
"workDir": "/home/runner/code",
15+
"compressed": "True"
16+
}
17+
}
18+
}
19+
}

0 commit comments

Comments
 (0)