From f14bdb39d16015954a01fd5e7ce4aaf59ff5335a Mon Sep 17 00:00:00 2001 From: pavel Date: Thu, 14 May 2026 22:32:14 +0200 Subject: [PATCH] fix provisioning --- internal/app/deploy_service.go | 48 +++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/internal/app/deploy_service.go b/internal/app/deploy_service.go index 60672f4..b61ab7b 100644 --- a/internal/app/deploy_service.go +++ b/internal/app/deploy_service.go @@ -77,29 +77,9 @@ func (a *App) deployProjectFromMain(_ context.Context, p Project) error { if err != nil { return err } - repoDir := filepath.Join(projectDir, "repo") - if _, err := os.Stat(repoDir); err != nil { - return fmt.Errorf("repo checkout missing at %s (trigger deploy webhook/push first)", repoDir) - } - binDir := filepath.Join(projectDir, "bin") - if err := os.MkdirAll(binDir, 0o755); err != nil { + if err := a.syncProjectRepoFromMain(p, projectDir); err != nil { return err } - if _, err := os.Stat(repoDir); os.IsNotExist(err) { - if err := runCmd("git", "clone", "--branch", "main", "--single-branch", p.RepoURL, repoDir); err != nil { - return err - } - } else { - if err := runCmd("git", "-C", repoDir, "remote", "set-url", "origin", p.RepoURL); err != nil { - return err - } - if err := runCmd("git", "-C", repoDir, "fetch", "origin", "main", "--prune"); err != nil { - return err - } - if err := runCmd("git", "-C", repoDir, "reset", "--hard", "origin/main"); err != nil { - return err - } - } if err := a.buildProjectBinary(p); err != nil { return err } @@ -111,6 +91,12 @@ func (a *App) buildProjectBinary(p Project) error { if err != nil { return err } + if p.RepoURL == "" { + return errors.New("project has no repo_url to build from") + } + if err := a.syncProjectRepoFromMain(p, projectDir); err != nil { + return err + } repoDir := filepath.Join(projectDir, "repo") binDir := filepath.Join(projectDir, "bin") if err := os.MkdirAll(binDir, 0o755); err != nil { @@ -128,3 +114,23 @@ func (a *App) buildProjectBinary(p Project) error { } return nil } + +func (a *App) syncProjectRepoFromMain(p Project, projectDir string) error { + repoDir := filepath.Join(projectDir, "repo") + if _, err := os.Stat(repoDir); os.IsNotExist(err) { + if err := runCmd("git", "clone", "--branch", "main", "--single-branch", p.RepoURL, repoDir); err != nil { + return err + } + return nil + } + if err := runCmd("git", "-C", repoDir, "remote", "set-url", "origin", p.RepoURL); err != nil { + return err + } + if err := runCmd("git", "-C", repoDir, "fetch", "origin", "main", "--prune"); err != nil { + return err + } + if err := runCmd("git", "-C", repoDir, "reset", "--hard", "origin/main"); err != nil { + return err + } + return nil +}