commit - fa187aacd577fdf8fc1410827de589c7e7930eb0
commit + da5cc061d5be0b1d4454b02e0d2ace980708f466
blob - 98158de4d6dde069b3d5bb6ab16f7d207c7e73df
blob + 6c98f2abaeb2fe2c1571bd8955832c2aee275cf3
--- README.md
+++ README.md
[documentation](https://circleci.com/docs/api/#add-an-api-token) to obtain API
token.
+Example of configuration file for [Helios project](https://github.com/spotify/helios):
+
+```yaml
+projects:
+- name: helios
+ backends:
+ - type: circleci
+ branch: master
+ base: https://circleci.com/
+ project: spotify/helios
+ username: <username>
+ secret: <token>
+```
### Cirrus CI
Cirrus CI allows to [store test report
blob - 2a33f857ce99c99d81cbb498d987ab8d6b61fac5
blob + 25c002da9397bec11d4dcccffa1cad4e0e984d97
--- backends/backend_circleci.go
+++ backends/backend_circleci.go
"github.com/ligurio/testres-db/formats"
"log"
"net/http"
+ "strconv"
"strings"
)
+// limit a number of builds that should be processed
+// -1 means all available builds
+const buildsNumber = 10
+const isDebug = false
+
func SyncCircleCI(client *http.Client, b *Backend) (*[]formats.TestResult, error) {
project_path := strings.Split(b.Project, "/")
if len(project_path) != 2 {
log.Println("Perhaps wrong project name specified")
+ return nil, nil
}
account := project_path[0]
repo := project_path[1]
- connection := &circleci.Client{Token: b.Secret, HTTPClient: client, Debug: true}
- builds, err := connection.ListRecentBuildsForProject(account, repo, b.Branch, "", -1, 0)
+ connection := &circleci.Client{Token: b.Secret, HTTPClient: client, Debug: isDebug}
+ builds, err := connection.ListRecentBuildsForProject(account, repo, b.Branch, "", buildsNumber, 0)
if err != nil {
log.Println(err)
return nil, err
}
+ log.Printf("Found %d builds\n", len(builds))
+ if len(builds) == 0 {
+ log.Println("no builds found")
+ return nil, nil
+ }
+
+ status := map[string]formats.TestStatus{
+ "success": formats.StatusPass,
+ "skipped": formats.StatusSkip,
+ "failed": formats.StatusFail,
+ }
+
+ results := make([]formats.TestResult, len(builds))
for _, build := range builds {
log.Printf("Found build: %d, status %s\n", build.BuildNum, build.Status)
metadata, err := connection.ListTestMetadata(account, repo, build.BuildNum)
if err != nil {
log.Println(err)
- return nil, err
+ continue
}
+ if len(metadata) == 0 {
+ log.Printf("\tno tests\n")
+ continue
+ } else {
+ log.Printf("\ttests %d\n", len(metadata))
+ }
artifacts, err := connection.ListBuildArtifacts(account, repo, build.BuildNum)
for _, artifact := range artifacts {
log.Println("Found artifact:", artifact.URL)
}
+ var testcases []formats.TestCase
for _, test := range metadata {
+ var testcase formats.TestCase
log.Println("Found test:", test.Result, test.Name, test.RunTime)
+ testcase = formats.TestCase{Name: test.Name, Status: status[test.Result]}
+ testcases = append(testcases, testcase)
}
+ results = append(results, formats.TestResult{Name: strconv.Itoa(build.BuildNum), TestCases: testcases})
}
- return nil, nil
+ return &results, nil
}
blob - 036bd24a3d6f4d2c4daf823e22c49e5c090194fe
blob + 3720381818e2409b89936a7a492a51e4fd38d367
--- backends/backend_circleci_test.go
+++ backends/backend_circleci_test.go
-// https://github.com/drone/drone-go/blob/master/drone/client_test.go
-// https://github.com/ktrysmt/go-bitbucket/blob/master/tests/repository_test.go
-
package backends
-import "testing"
+import (
+ "os"
+ "testing"
+)
func TestSyncCircleCI(t *testing.T) {
- t.Log("TestSyncCircleCI")
+ t.Log("Basic test with spotify/helios project")
+ username := os.Getenv("CIRCLECI_USERNAME")
+ token := os.Getenv("CIRCLECI_TOKEN")
+ if username == "" || token == "" {
+ t.Skip("No CIRCLECI_USERNAME and CIRCLECI_TOKEN.")
+ }
+ backend := Backend{Type: "circleci", Base: "https://circleci.com/", Name: "spotify/helios",
+ Project: "spotify/helios", Branch: "master", Username: username, Secret: token}
+
+ httpClient := NewAPIClient()
+ builds, err := SyncCircleCI(httpClient, &backend)
+ if builds == nil || err != nil {
+ t.Failed()
+ }
}