From 184daa4cabe6f4f0b0e15f0608a4d9648eca3727 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Mon, 6 Mar 2023 03:44:39 +0100 Subject: [PATCH] New route to retrieve gradation status --- repositories.go | 30 ++++++++++++++++++ ui/src/lib/repositories.js | 12 +++++++ ui/src/routes/works/[wid]/rendus/+page.svelte | 31 ++++++++++++++----- 3 files changed, 65 insertions(+), 8 deletions(-) diff --git a/repositories.go b/repositories.go index d06d8fa..bb759fa 100644 --- a/repositories.go +++ b/repositories.go @@ -320,6 +320,36 @@ func declareAPIAuthRepositoriesRoutes(router *gin.RouterGroup) { TriggerTests(c, work, repo, u) }) + repositoriesRoutes.GET("/gradation_status", func(c *gin.Context) { + loggeduser := c.MustGet("LoggedUser").(*User) + if !loggeduser.IsAdmin { + c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Permission denied."}) + return + } + + repo := c.MustGet("repository").(*Repository) + + slug := strings.Split(repo.TestsRef, "/") + if len(slug) < 3 { + return + } + + buildn, err := strconv.ParseInt(slug[2], 10, 32) + if err != nil { + return + } + + client := drone.NewClient(droneEndpoint, droneConfig) + build, err := client.Build(slug[0], slug[1], int(buildn)) + if err != nil { + log.Println("Unable to communicate with Drone:", err.Error()) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to communicate with Drone"}) + return + } + + c.JSON(http.StatusOK, build) + }) + repositoriesRoutes.GET("/traces", func(c *gin.Context) { repo := c.MustGet("repository").(*Repository) diff --git a/ui/src/lib/repositories.js b/ui/src/lib/repositories.js index 0832040..2224267 100644 --- a/ui/src/lib/repositories.js +++ b/ui/src/lib/repositories.js @@ -88,6 +88,18 @@ export class WorkRepository { } } + async gradationStatus() { + const res = await fetch(this.id_work?`api/works/${this.id_work}/repositories/${this.id}/gradation_status`:`api/repositories/${this.id}/gradation_status`, { + method: 'GET', + headers: {'Accept': 'application/json'}, + }); + if (res.status == 200) { + return await res.json(); + } else { + throw new Error((await res.json()).errmsg); + } + } + async save(user) { let url = this.id?`repositories/${this.id}`:'repositories'; diff --git a/ui/src/routes/works/[wid]/rendus/+page.svelte b/ui/src/routes/works/[wid]/rendus/+page.svelte index a7d0574..279c1c3 100644 --- a/ui/src/routes/works/[wid]/rendus/+page.svelte +++ b/ui/src/routes/works/[wid]/rendus/+page.svelte @@ -140,14 +140,29 @@ > - + {#await repo.gradationStatus()} + + {:then status} + + {/await}