Added deployments overview

This commit is contained in:
2026-04-06 22:04:50 +02:00
parent a95c76ce7e
commit 1978a31cbf
21 changed files with 1249 additions and 169 deletions
+52 -8
View File
@@ -11,20 +11,22 @@ import (
"quay/internal/envconfig"
"quay/internal/security"
"strings"
"time"
"github.com/gofiber/fiber/v3"
)
type UpdateSiteHandler struct {
EnvCfg *envconfig.EnvConfig
SiteRepo repository.SiteRepository
type DeploySiteHandler struct {
EnvCfg *envconfig.EnvConfig
SiteRepo repository.SiteRepository
DeploymentRepo repository.DeploymentRepository
}
func NewUpdateSiteHandler(envCfg *envconfig.EnvConfig, siteRepo repository.SiteRepository) *UpdateSiteHandler {
return &UpdateSiteHandler{EnvCfg: envCfg, SiteRepo: siteRepo}
func NewDeploySiteHandler(envCfg *envconfig.EnvConfig, siteRepo repository.SiteRepository, deploymentRepo repository.DeploymentRepository) *DeploySiteHandler {
return &DeploySiteHandler{EnvCfg: envCfg, SiteRepo: siteRepo, DeploymentRepo: deploymentRepo}
}
func (h *UpdateSiteHandler) PostDeploy(c fiber.Ctx) error {
func (h *DeploySiteHandler) PostDeploy(c fiber.Ctx) error {
siteId := c.Query("site")
if siteId == "" {
return c.Status(400).JSON(models.APIError{
@@ -40,7 +42,7 @@ func (h *UpdateSiteHandler) PostDeploy(c fiber.Ctx) error {
Message: "Site not found",
})
}
log.Println("Message getting site: ", err)
log.Println("Error getting site: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{
Message: "Unexpected error while getting site",
})
@@ -54,6 +56,7 @@ func (h *UpdateSiteHandler) PostDeploy(c fiber.Ctx) error {
deployToken := site.DeployToken
if deployToken == "" {
log.Println("No deploy token configured for site " + siteId)
return c.Status(500).JSON(models.APIError{
Message: "Deploy token not configured for this site",
})
@@ -77,12 +80,26 @@ func (h *UpdateSiteHandler) PostDeploy(c fiber.Ctx) error {
sitePath := filepath.Join(h.EnvCfg.StoragePath, site.ID)
if _, err := filepath.Abs(sitePath); err != nil {
log.Println("Error getting absolute path of site: ", err)
return c.Status(500).JSON(models.APIError{
Message: "Failed to resolve site path",
})
}
err = github.FetchAndDeployBranch(
deployId, err := h.DeploymentRepo.CreateDeployment(&models.Deployment{
SiteId: siteId,
Status: models.DeploymentStatusRunning,
StartTime: time.Now().UTC().Format(time.DateTime),
})
if err != nil {
log.Println("Error creating deployment: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{
Message: "Failed to create deployment",
})
}
res, err := github.FetchAndDeployBranch(
site.Owner,
site.Repository,
site.Branch,
@@ -90,11 +107,38 @@ func (h *UpdateSiteHandler) PostDeploy(c fiber.Ctx) error {
sitePath,
)
if res != nil {
deployUpdateErr := h.DeploymentRepo.UpdateDeploymentGitInfo(deployId, res.CommitHash, res.CommitMessage)
if deployUpdateErr != nil {
log.Println("Error updating deployment git info: ", err)
}
}
if err != nil {
log.Println("Error deploying site: ", err)
deployUpdateErr := h.DeploymentRepo.UpdateDeploymentStatus(deployId, models.DeploymentStatusFailed)
if deployUpdateErr != nil {
log.Println("Error updating deployment status to failed: ", err)
}
deployUpdateErr = h.DeploymentRepo.UpdateDeploymentFinishTime(deployId, time.Now().UTC())
if deployUpdateErr != nil {
log.Println("Error updating deployment finish time: ", err)
}
return c.Status(500).JSON(models.APIError{
Message: "Failed to deploy site: " + err.Error(),
})
}
deployUpdateErr := h.DeploymentRepo.UpdateDeploymentStatus(deployId, models.DeploymentStatusSuccess)
if deployUpdateErr != nil {
log.Println("Error updating deployment status to success: ", err)
}
deployUpdateErr = h.DeploymentRepo.UpdateDeploymentFinishTime(deployId, time.Now().UTC())
if deployUpdateErr != nil {
log.Println("Error updating deployment finish time: ", err)
}
return c.SendStatus(201)
}