From abb8db17bd0012c79bf3ccdea6568b9e8a667612 Mon Sep 17 00:00:00 2001 From: Mohamed Habib Date: Sat, 27 Jul 2024 16:47:37 +0100 Subject: [PATCH] feat/projects in ui (#1639) * fix of projects list --- backend/utils/allowlist.go | 3 ++ ee/backend/controllers/gitlab.go | 77 +++++++++++++++++++++++++++--- ee/backend/templates/projects.tmpl | 8 ++-- ee/backend/templates/top.tmpl | 1 - 4 files changed, 77 insertions(+), 12 deletions(-) diff --git a/backend/utils/allowlist.go b/backend/utils/allowlist.go index dc9de9497..f1b06614c 100644 --- a/backend/utils/allowlist.go +++ b/backend/utils/allowlist.go @@ -36,6 +36,9 @@ func ExtractCleanRepoName(gitlabURL string) (string, error) { func IsInRepoAllowList(repoUrl string) bool { allowList := os.Getenv("DIGGER_REPO_ALLOW_LIST") + if allowList == "" { + return true + } allowedReposUrls := strings.Split(allowList, ",") // gitlab.com/diggerhq/test // https://gitlab.com/diggerhq/test diff --git a/ee/backend/controllers/gitlab.go b/ee/backend/controllers/gitlab.go index 4f28c9391..c14063543 100644 --- a/ee/backend/controllers/gitlab.go +++ b/ee/backend/controllers/gitlab.go @@ -93,12 +93,12 @@ func (d DiggerEEController) GitlabWebHookHandler(c *gin.Context) { } case *gitlab.PushEvent: log.Printf("Got push event for %v %v", event.Project.URL, event.Ref) - //err := handlePushEvent(gh, event) - //if err != nil { - // log.Printf("handlePushEvent error: %v", err) - // c.String(http.StatusInternalServerError, err.Error()) - // return - //} + err := handlePushEvent(d.GitlabProvider, event, organisationId) + if err != nil { + log.Printf("handlePushEvent error: %v", err) + c.String(http.StatusInternalServerError, err.Error()) + return + } default: log.Printf("Unhandled event, event type %v", reflect.TypeOf(event)) } @@ -106,6 +106,71 @@ func (d DiggerEEController) GitlabWebHookHandler(c *gin.Context) { c.JSON(200, "ok") } +func handlePushEvent(gh utils.GitlabProvider, payload *gitlab.PushEvent, organisationId uint) error { + //projectId := payload.Project.ID + repoFullName := payload.Project.PathWithNamespace + repoOwner, repoName, _ := strings.Cut(repoFullName, "/") + cloneURL := payload.Project.GitHTTPURL + webURL := payload.Project.WebURL + ref := payload.Ref + defaultBranch := payload.Project.DefaultBranch + + pushBranch := "" + if strings.HasPrefix(ref, "refs/heads/") { + pushBranch = strings.TrimPrefix(ref, "refs/heads/") + } else { + log.Printf("push was not to a branch, ignoring %v", ref) + return nil + } + + diggerRepoName := strings.ReplaceAll(repoFullName, "/", "-") + //repo, err := models.DB.GetRepo(organisationId, diggerRepoName) + //if err != nil { + // log.Printf("Error getting Repo: %v", err) + // return fmt.Errorf("error getting github app link") + //} + // create repo if not exists + org, err := models.DB.GetOrganisationById(organisationId) + if err != nil { + log.Printf("Error: could not get organisation: %v", err) + return nil + } + + repo, err := models.DB.CreateRepo(diggerRepoName, repoFullName, repoOwner, repoName, webURL, org, "") + if err != nil { + log.Printf("Error: could not create repo: %v", err) + return nil + } + + token := os.Getenv("DIGGER_GITLAB_ACCESS_TOKEN") + if token == "" { + log.Printf("could not find gitlab token: %v", err) + return fmt.Errorf("could not find gitlab token") + } + + var isMainBranch bool + if strings.HasSuffix(ref, defaultBranch) { + isMainBranch = true + } else { + isMainBranch = false + } + + err = utils.CloneGitRepoAndDoAction(cloneURL, pushBranch, token, func(dir string) error { + config, err := dg_configuration.LoadDiggerConfigYaml(dir, true, nil) + if err != nil { + log.Printf("ERROR load digger.yml: %v", err) + return fmt.Errorf("error loading digger.yml %v", err) + } + models.DB.UpdateRepoDiggerConfig(organisationId, *config, repo, isMainBranch) + return nil + }) + if err != nil { + return fmt.Errorf("error while cloning repo: %v", err) + } + + return nil +} + func GetGitlabRepoUrl(event interface{}) string { var repoUrl = "" switch event := event.(type) { diff --git a/ee/backend/templates/projects.tmpl b/ee/backend/templates/projects.tmpl index 6e55074f2..561ccd93b 100644 --- a/ee/backend/templates/projects.tmpl +++ b/ee/backend/templates/projects.tmpl @@ -16,18 +16,16 @@ Name Repo Organisation - Status - Details + Commited To Main? {{ range .Projects }} {{ .Name }} - {{ .Repo.Name }} + {{ .Repo.RepoFullName }} {{ .Organisation.Name }} - {{ .Status }} - Details + {{ .IsInMainBranch }} {{ end }} diff --git a/ee/backend/templates/top.tmpl b/ee/backend/templates/top.tmpl index 7b0baa12e..09455a6b8 100644 --- a/ee/backend/templates/top.tmpl +++ b/ee/backend/templates/top.tmpl @@ -28,7 +28,6 @@ -