Files
dokku-ui/internal/server/api/apps/builds.go
flowshadow 6ac6ac5eda init
2025-10-10 20:44:28 +08:00

105 lines
2.6 KiB
Go

package apps
import (
"fmt"
"net/http"
"github.com/labstack/echo/v4"
"github.com/texm/dokku-go"
"gitlab.com/texm/shokku/internal/env"
"gitlab.com/texm/shokku/internal/server/dto"
)
func GetAppBuilder(e *env.Env, c echo.Context) error {
var req dto.GetAppBuilderRequest
if err := dto.BindRequest(c, &req); err != nil {
return err.ToHTTP()
}
report, err := e.Dokku.GetAppBuilderReport(req.Name)
if err != nil {
return fmt.Errorf("getting app builder: %w", err)
}
selectedBuilder := report.ComputedSelectedBuilder
if selectedBuilder == "" {
selectedBuilder = "auto"
}
return c.JSON(http.StatusOK, dto.GetAppBuilderResponse{
Selected: selectedBuilder,
})
}
func SetAppBuilder(e *env.Env, c echo.Context) error {
var req dto.SetAppBuilderRequest
if err := dto.BindRequest(c, &req); err != nil {
return err.ToHTTP()
}
builders := map[string]dokku.AppBuilder{
"auto": "",
"dockerfile": dokku.AppBuilderDockerfile,
"herokuish": dokku.AppBuilderHerokuish,
"null": dokku.AppBuilderNull,
"buildpack": dokku.AppBuilderPack,
"lambda": dokku.AppBuilderLambda,
}
chosenBuilder, supported := builders[req.Builder]
if !supported {
return echo.NewHTTPError(http.StatusBadRequest,
fmt.Sprintf("unsupported builder '%s'", req.Builder))
}
err := e.Dokku.SetAppSelectedBuilder(req.Name, chosenBuilder)
if err != nil {
return fmt.Errorf("setting app builder: %w", err)
}
return c.NoContent(http.StatusOK)
}
func GetAppBuildDirectory(e *env.Env, c echo.Context) error {
var req dto.GetAppBuildDirectoryRequest
if err := dto.BindRequest(c, &req); err != nil {
return err.ToHTTP()
}
report, err := e.Dokku.GetAppBuilderReport(req.Name)
if err != nil {
return fmt.Errorf("getting app build dir: %w", err)
}
return c.JSON(http.StatusOK, dto.GetAppBuildDirectoryResponse{
Directory: report.ComputedBuildDir,
})
}
func SetAppBuildDirectory(e *env.Env, c echo.Context) error {
var req dto.SetAppBuildDirectoryRequest
if err := dto.BindRequest(c, &req); err != nil {
return err.ToHTTP()
}
err := e.Dokku.SetAppBuilderProperty(req.Name, dokku.BuilderPropertyBuildDir, req.Directory)
if err != nil {
return fmt.Errorf("setting app build dir: %w", err)
}
return c.NoContent(http.StatusOK)
}
func ClearAppBuildDirectory(e *env.Env, c echo.Context) error {
var req dto.ClearAppBuildDirectoryRequest
if err := dto.BindRequest(c, &req); err != nil {
return err.ToHTTP()
}
err := e.Dokku.SetAppBuilderProperty(req.Name, dokku.BuilderPropertyBuildDir, "")
if err != nil {
return fmt.Errorf("clearing app build dir: %w", err)
}
return c.NoContent(http.StatusOK)
}