2018-08-28 16:39:09 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os/exec"
|
2019-11-20 20:06:19 +00:00
|
|
|
"strings"
|
2018-08-28 16:39:09 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
|
|
|
Config struct {
|
2019-11-20 20:06:19 +00:00
|
|
|
Key string
|
|
|
|
Name string
|
|
|
|
Host string
|
|
|
|
Token string
|
2018-08-28 16:39:09 +00:00
|
|
|
|
2019-11-20 21:36:35 +00:00
|
|
|
Version string
|
|
|
|
Branch string
|
|
|
|
Sources string
|
|
|
|
Timeout string
|
|
|
|
Inclusions string
|
|
|
|
Exclusions string
|
|
|
|
Level string
|
|
|
|
showProfiling string
|
|
|
|
branchAnalysis bool
|
2018-08-28 16:39:09 +00:00
|
|
|
}
|
|
|
|
Plugin struct {
|
|
|
|
Config Config
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
func (p Plugin) Exec() error {
|
|
|
|
args := []string{
|
|
|
|
"-Dsonar.projectKey=" + strings.Replace(p.Config.Key, "/", ":", -1),
|
|
|
|
"-Dsonar.projectName=" + p.Config.Name,
|
|
|
|
"-Dsonar.host.url=" + p.Config.Host,
|
|
|
|
"-Dsonar.login=" + p.Config.Token,
|
|
|
|
|
|
|
|
"-Dsonar.projectVersion=" + p.Config.Version,
|
|
|
|
"-Dsonar.sources=" + p.Config.Sources,
|
|
|
|
"-Dsonar.ws.timeout=" + p.Config.Timeout,
|
|
|
|
"-Dsonar.inclusions=" + p.Config.Inclusions,
|
|
|
|
"-Dsonar.exclusions=" + p.Config.Exclusions,
|
|
|
|
"-Dsonar.log.level=" + p.Config.Level,
|
|
|
|
"-Dsonar.showProfiling=" + p.Config.showProfiling,
|
|
|
|
"-Dsonar.scm.provider=git",
|
|
|
|
}
|
2019-11-20 21:36:35 +00:00
|
|
|
|
|
|
|
if p.Config.branchAnalysis {
|
|
|
|
args = append(args, "-Dsonar.branch.name="+p.Config.Branch)
|
|
|
|
}
|
|
|
|
|
2018-08-28 16:39:09 +00:00
|
|
|
cmd := exec.Command("sonar-scanner", args...)
|
|
|
|
// fmt.Printf("==> Executing: %s\n", strings.Join(cmd.Args, " "))
|
|
|
|
output, err := cmd.CombinedOutput()
|
|
|
|
if len(output) > 0 {
|
|
|
|
fmt.Printf("==> Code Analysis Result: %s\n", string(output))
|
|
|
|
}
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|