From 22c2f68c2aed9033787878e4924ac069d0c806ec Mon Sep 17 00:00:00 2001 From: pavel Date: Fri, 15 May 2026 18:24:57 +0200 Subject: [PATCH] asf --- internal/app/cli.go | 14 ++++++++++++++ internal/app/project_service.go | 25 +++++++++++++++---------- internal/app/systemd_service.go | 2 +- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/internal/app/cli.go b/internal/app/cli.go index 92096de..3ea6f70 100644 --- a/internal/app/cli.go +++ b/internal/app/cli.go @@ -457,12 +457,26 @@ func printCLIProject(action string, p Project) { } if p.RepoURL != "" { fmt.Printf("repo_url=%s\n", p.RepoURL) + fmt.Printf("clone_url=%s\n", normalizeCloneURL(p.RepoURL)) } if p.WebhookURL != "" { fmt.Printf("webhook_url=%s\n", p.WebhookURL) } } +func normalizeCloneURL(repoURL string) string { + u := strings.TrimSpace(repoURL) + if u == "" { + return "" + } + if strings.HasPrefix(u, "http://") || strings.HasPrefix(u, "https://") { + if !strings.HasSuffix(strings.ToLower(u), ".git") { + return u + ".git" + } + } + return u +} + func cliStatePath() string { home, err := os.UserHomeDir() if err != nil || home == "" { diff --git a/internal/app/project_service.go b/internal/app/project_service.go index add6bed..a124534 100644 --- a/internal/app/project_service.go +++ b/internal/app/project_service.go @@ -110,10 +110,24 @@ func (a *App) provisionProject(ctx context.Context, p *Project) error { } repoURL, err := a.createForgejoRepo(ctx, p.Slug, p.Description, p.RepoPrivate) if err != nil { + if strings.Contains(err.Error(), "status=409") { + owner := strings.TrimSpace(a.cfg.ForgejoOrg) + if owner == "" { + owner = p.UserID + } + repoURL = strings.TrimRight(a.cfg.ForgejoBaseURL, "/") + "/" + owner + "/" + p.Slug + } else { + _ = a.updateProvisioningState(ctx, p.ID, "failed", err.Error()) + p.ProvisionState = "failed" + p.ProvisionError = err.Error() + return err + } + } + if strings.TrimSpace(repoURL) == "" { _ = a.updateProvisioningState(ctx, p.ID, "failed", err.Error()) p.ProvisionState = "failed" p.ProvisionError = err.Error() - return err + return errors.New("forgejo repo url is empty after provisioning") } p.RepoURL = repoURL if _, err := a.db.ExecContext(ctx, `UPDATE projects SET repo_url=$1 WHERE id=$2`, repoURL, p.ID); err != nil { @@ -129,15 +143,6 @@ func (a *App) provisionProject(ctx context.Context, p *Project) error { p.ProvisionError = err.Error() return err } - if p.RepoURL != "" { - if err := a.buildProjectBinary(*p); err != nil { - _ = a.updateProvisioningState(ctx, p.ID, "failed", err.Error()) - p.ProvisionState = "failed" - p.ProvisionError = err.Error() - return err - } - } - if err := a.renderSystemdForProject(ctx, *p); err != nil { _ = a.updateProvisioningState(ctx, p.ID, "failed", err.Error()) p.ProvisionState = "failed" diff --git a/internal/app/systemd_service.go b/internal/app/systemd_service.go index dd4624e..1ff34d0 100644 --- a/internal/app/systemd_service.go +++ b/internal/app/systemd_service.go @@ -112,7 +112,7 @@ WantedBy=default.target if err := runSystemctlUser(p.UnixUser, "daemon-reload"); err != nil { return err } - if err := runSystemctlUser(p.UnixUser, "enable", "--now", p.ServiceName); err != nil { + if err := runSystemctlUser(p.UnixUser, "enable", p.ServiceName); err != nil { return err } return nil