Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions backend/ci_backends/github_actions.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ci_backends

import (
"context"
"github.com/diggerhq/digger/backend/models"
"github.com/google/go-github/v58/github"
"log"
"strconv"
)

type GithubActionCi struct {
client *github.Client
}

func (g *GithubActionCi) TriggerWorkflow(repoOwner string, repoName string, job models.DiggerJob, jobString string, commentId int64) error {
client := g.client
log.Printf("TriggerGithubWorkflow: repoOwner: %v, repoName: %v, commentId: %v", repoOwner, repoName, commentId)
_, err := client.Actions.CreateWorkflowDispatchEventByFileName(context.Background(), repoOwner, repoName, "digger_workflow.yml", github.CreateWorkflowDispatchEventRequest{
Ref: job.Batch.BranchName,
Inputs: map[string]interface{}{"job": jobString, "id": job.DiggerJobID, "comment_id": strconv.FormatInt(commentId, 10)},
})

return err

}
21 changes: 21 additions & 0 deletions backend/ci_backends/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ci_backends

import (
"github.com/diggerhq/digger/backend/models"
"os"
)

type CiBackend interface {
TriggerWorkflow(repoOwner string, repoName string, job models.DiggerJob, jobString string, commentId int64) error
}

type JenkinsCi struct{}

func GetCiBackend() {
ciBackend := os.Getenv("CI_BACKEND")
switch ciBackend {

default:
}

}
1 change: 1 addition & 0 deletions backend/ci_backends/jenkins.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package ci_backends
1 change: 1 addition & 0 deletions backend/controllers/bitbucket.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package controllers
1 change: 1 addition & 0 deletions cli/cmd/digger/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ var applyCmd = &cobra.Command{
func init() {
flags := []pflag.Flag{
{Name: "github-token", Usage: "Github token (for github reporter)"},
{Name: "bitbucket-token", Usage: "Bitbucket token (for bitbucket reporter)"},
{Name: "repo-namespace", Usage: "The namespace of this repo"},
{Name: "actor", Usage: "The actor of this command"},
{Name: "reporter", Usage: "The reporter to use (defaults to stdout)"},
Expand Down
1 change: 1 addition & 0 deletions cli/cmd/digger/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ func gitHubCI(lock core_locking.Lock, policyChecker core_policy.Checker, backend
if !strings.Contains(os.Getenv("DIGGER_HOSTNAME"), "cloud.digger.dev") {
usage.SendUsageRecord(githubActor, "log", "selfhosted")
}

type Inputs struct {
JobString string `json:"job"`
Id string `json:"id"`
Expand Down
1 change: 1 addition & 0 deletions cli/cmd/digger/plan.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ var planCmd = &cobra.Command{
func init() {
flags := []pflag.Flag{
{Name: "github-token", Usage: "Github token (for github reporter)"},
{Name: "bitbucket-token", Usage: "Bitbucket token (for bitbucket reporter)"},
{Name: "repo-namespace", Usage: "The namespace of this repo"},
{Name: "actor", Usage: "The actor of this command"},
{Name: "reporter", Usage: "The reporter to use (defaults to stdout)"},
Expand Down
35 changes: 29 additions & 6 deletions cli/cmd/digger/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
import (
"fmt"
"github.com/diggerhq/digger/cli/pkg/backend"
"github.com/diggerhq/digger/cli/pkg/bitbucket"
core_backend "github.com/diggerhq/digger/cli/pkg/core/backend"
core_locking "github.com/diggerhq/digger/cli/pkg/core/locking"
core_policy "github.com/diggerhq/digger/cli/pkg/core/policy"
Expand All @@ -22,12 +23,13 @@ import (
)

type RunConfig struct {
RepoNamespace string `mapstructure:"repo-namespace"`
Reporter string `mapstructure:"reporter"`
PRNumber int `mapstructure:"pr-number"`
CommentID string `mapstructure:"comment-id"`
Actor string `mapstructure:"actor"`
GithubToken string `mapstructure:"github-token"`
RepoNamespace string `mapstructure:"repo-namespace"`
Reporter string `mapstructure:"reporter"`
PRNumber int `mapstructure:"pr-number"`
CommentID string `mapstructure:"comment-id"`
Actor string `mapstructure:"actor"`
GithubToken string `mapstructure:"github-token"`
BitbucketToken string `mapstructure:"bitbucket-token"`
}

func (r *RunConfig) GetServices() (*orchestrator.PullRequestService, *orchestrator.OrgService, *core_reporting.Reporter, error) {
Expand All @@ -45,6 +47,27 @@ func (r *RunConfig) GetServices() (*orchestrator.PullRequestService, *orchestrat
PrNumber: r.PRNumber,
IsSupportMarkdown: true,
}
case "bitbucket":
repoOwner, repositoryName := utils.ParseRepoNamespace(r.RepoNamespace)
prService = bitbucket.BitbucketAPI{
AuthToken: r.BitbucketToken,
HttpClient: http.Client{},
RepoWorkspace: repoOwner,
RepoName: repositoryName,
}
orgService = bitbucket.BitbucketAPI{
AuthToken: "",
HttpClient: http.Client{},
RepoWorkspace: repoOwner,
RepoName: repositoryName,
}
reporter = &reporting.CiReporter{
CiService: prService,
ReportStrategy: ReportStrategy,
PrNumber: r.PRNumber,
IsSupportMarkdown: false,
}

case "stdout":
print("Using Stdout.")
reporter = &reporting.StdoutReporter{
Expand Down
30 changes: 15 additions & 15 deletions cli/pkg/bitbucket/bitbucket.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ type BitbucketAPI struct {
RepoName string
}

func (b *BitbucketAPI) sendRequest(method, url string, body []byte) (*http.Response, error) {
func (b BitbucketAPI) sendRequest(method, url string, body []byte) (*http.Response, error) {
client := &http.Client{}
req, err := http.NewRequest(method, url, bytes.NewReader(body))
if err != nil {
Expand Down Expand Up @@ -71,7 +71,7 @@ type DiffStat struct {
Size int `json:"size"`
}

func (b *BitbucketAPI) GetChangedFiles(prNumber int) ([]string, error) {
func (b BitbucketAPI) GetChangedFiles(prNumber int) ([]string, error) {
url := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d/diffstat", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

resp, err := b.sendRequest("GET", url, nil)
Expand All @@ -97,7 +97,7 @@ func (b *BitbucketAPI) GetChangedFiles(prNumber int) ([]string, error) {
return files, nil
}

func (b *BitbucketAPI) PublishComment(prNumber int, comment string) (int64, error) {
func (b BitbucketAPI) PublishComment(prNumber int, comment string) (int64, error) {
url := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d/comments", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

commentBody := map[string]interface{}{
Expand All @@ -124,7 +124,7 @@ func (b *BitbucketAPI) PublishComment(prNumber int, comment string) (int64, erro
return 0, nil
}

func (b *BitbucketAPI) EditComment(prNumber int, id interface{}, comment string) error {
func (b BitbucketAPI) EditComment(prNumber int, id interface{}, comment string) error {
url := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d/comments/%s", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber, id)

commentBody := map[string]string{
Expand Down Expand Up @@ -163,7 +163,7 @@ type Comment struct {
} `json:"values"`
}

func (b *BitbucketAPI) GetComments(prNumber int) ([]orchestrator.Comment, error) {
func (b BitbucketAPI) GetComments(prNumber int) ([]orchestrator.Comment, error) {

url := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d/comments", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

Expand Down Expand Up @@ -196,7 +196,7 @@ func (b *BitbucketAPI) GetComments(prNumber int) ([]orchestrator.Comment, error)

}

func (svc *BitbucketAPI) GetApprovals(prNumber int) ([]string, error) {
func (svc BitbucketAPI) GetApprovals(prNumber int) ([]string, error) {
approvals := make([]string, 0)
// TODO: implement me
return approvals, nil
Expand All @@ -211,7 +211,7 @@ type PullRequest struct {
}
}

func (b *BitbucketAPI) SetStatus(prNumber int, status string, statusContext string) error {
func (b BitbucketAPI) SetStatus(prNumber int, status string, statusContext string) error {
prUrl := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

resp, err := b.sendRequest("GET", prUrl, nil)
Expand Down Expand Up @@ -275,7 +275,7 @@ type CommitStatuses struct {
} `json:"values"`
}

func (b *BitbucketAPI) GetCombinedPullRequestStatus(prNumber int) (string, error) {
func (b BitbucketAPI) GetCombinedPullRequestStatus(prNumber int) (string, error) {
url := fmt.Sprintf("%s/repositories/%s/%s/commit/%d/statuses", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

resp, err := b.sendRequest("GET", url, nil)
Expand Down Expand Up @@ -342,7 +342,7 @@ func (b *BitbucketAPI) GetCombinedPullRequestStatus(prNumber int) (string, error

}

func (b *BitbucketAPI) MergePullRequest(prNumber int) error {
func (b BitbucketAPI) MergePullRequest(prNumber int) error {
url := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d/merge", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

resp, err := b.sendRequest("POST", url, nil)
Expand All @@ -358,7 +358,7 @@ func (b *BitbucketAPI) MergePullRequest(prNumber int) error {
return nil
}

func (b *BitbucketAPI) IsMergeable(prNumber int) (bool, error) {
func (b BitbucketAPI) IsMergeable(prNumber int) (bool, error) {
url := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

resp, err := b.sendRequest("GET", url, nil)
Expand All @@ -383,7 +383,7 @@ func (b *BitbucketAPI) IsMergeable(prNumber int) (bool, error) {
return pullRequest.State == "OPEN", nil
}

func (b *BitbucketAPI) IsMerged(prNumber int) (bool, error) {
func (b BitbucketAPI) IsMerged(prNumber int) (bool, error) {

url := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

Expand All @@ -409,7 +409,7 @@ func (b *BitbucketAPI) IsMerged(prNumber int) (bool, error) {
return pullRequest.State == "MERGED", nil
}

func (b *BitbucketAPI) IsClosed(prNumber int) (bool, error) {
func (b BitbucketAPI) IsClosed(prNumber int) (bool, error) {
url := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

resp, err := b.sendRequest("GET", url, nil)
Expand All @@ -434,7 +434,7 @@ func (b *BitbucketAPI) IsClosed(prNumber int) (bool, error) {
return pullRequest.State != "OPEN", nil
}

func (b *BitbucketAPI) GetBranchName(prNumber int) (string, error) {
func (b BitbucketAPI) GetBranchName(prNumber int) (string, error) {
url := fmt.Sprintf("%s/repositories/%s/%s/pullrequests/%d", bitbucketBaseURL, b.RepoWorkspace, b.RepoName, prNumber)

resp, err := b.sendRequest("GET", url, nil)
Expand Down Expand Up @@ -463,14 +463,14 @@ func (b *BitbucketAPI) GetBranchName(prNumber int) (string, error) {
return pullRequest.Source.Branch.Name, nil
}

func (svc *BitbucketAPI) SetOutput(prNumber int, key string, value string) error {
func (svc BitbucketAPI) SetOutput(prNumber int, key string, value string) error {
//TODO implement me
return nil
}

// Implement the OrgService interface.

func (b *BitbucketAPI) GetUserTeams(organisation string, user string) ([]string, error) {
func (b BitbucketAPI) GetUserTeams(organisation string, user string) ([]string, error) {
return nil, fmt.Errorf("not implemented")
}

Expand Down
Loading