Add gerrit implementation
Change-Id: I293cea35572b051cd1d4a0466fe2fd5a06e81ad9
diff --git a/server/agent/manager.go b/server/agent/manager.go
index 88bfe21..c206665 100644
--- a/server/agent/manager.go
+++ b/server/agent/manager.go
@@ -41,15 +41,38 @@
// Create auto-assigner
autoAssigner := assignment.NewAutoAssigner(cfg.Agents)
- // Create GitHub PR provider
- githubConfig := git.GitHubConfig{
- Token: cfg.GitHub.Token,
- Logger: logger,
+ // Create PR provider based on configuration
+ var prProvider git.PullRequestProvider
+ var repoURL string
+
+ switch cfg.GetPrimaryGitProvider() {
+ case "github":
+ githubConfig := git.GitHubConfig{
+ Token: cfg.GitHub.Token,
+ Logger: logger,
+ }
+ prProvider = git.NewGitHubPullRequestProvider(cfg.GitHub.Owner, cfg.GitHub.Repo, githubConfig)
+ repoURL = fmt.Sprintf("https://github.com/%s/%s.git", cfg.GitHub.Owner, cfg.GitHub.Repo)
+ logger.Info("Using GitHub as pull request provider",
+ slog.String("owner", cfg.GitHub.Owner),
+ slog.String("repo", cfg.GitHub.Repo))
+ case "gerrit":
+ gerritConfig := git.GerritConfig{
+ Username: cfg.Gerrit.Username,
+ Password: cfg.Gerrit.Password,
+ BaseURL: cfg.Gerrit.BaseURL,
+ Logger: logger,
+ }
+ prProvider = git.NewGerritPullRequestProvider(cfg.Gerrit.Project, gerritConfig)
+ repoURL = fmt.Sprintf("%s/%s", cfg.Gerrit.BaseURL, cfg.Gerrit.Project)
+ logger.Info("Using Gerrit as pull request provider",
+ slog.String("base_url", cfg.Gerrit.BaseURL),
+ slog.String("project", cfg.Gerrit.Project))
+ default:
+ return nil, fmt.Errorf("no valid Git provider configured")
}
- prProvider := git.NewGitHubPullRequestProvider(cfg.GitHub.Owner, cfg.GitHub.Repo, githubConfig)
- // Create clone manager for per-agent Git repositories
- repoURL := fmt.Sprintf("https://github.com/%s/%s.git", cfg.GitHub.Owner, cfg.GitHub.Repo)
+ // Create clone manager for per-agent Git repositories
workspacePath := filepath.Join(".", "workspace")
cloneManager := git.NewCloneManager(repoURL, workspacePath)
@@ -109,13 +132,24 @@
break
}
+ // Get owner and repo for subtask service based on provider
+ var owner, repo string
+ switch m.config.GetPrimaryGitProvider() {
+ case "github":
+ owner = m.config.GitHub.Owner
+ repo = m.config.GitHub.Repo
+ case "gerrit":
+ owner = m.config.Gerrit.Project
+ repo = m.config.Gerrit.Project
+ }
+
m.subtaskService = subtasks.NewSubtaskService(
firstAgent.Provider,
m.taskManager,
agentRoles,
m.prProvider,
- m.config.GitHub.Owner,
- m.config.GitHub.Repo,
+ owner,
+ repo,
m.cloneManager,
m.logger,
)
@@ -569,7 +603,15 @@
return "", fmt.Errorf("failed to create PR: %w", err)
}
- return fmt.Sprintf("https://github.com/%s/%s/pull/%d", m.config.GitHub.Owner, m.config.GitHub.Repo, pr.Number), nil
+ // Generate provider-specific PR URL
+ switch m.config.GetPrimaryGitProvider() {
+ case "github":
+ return fmt.Sprintf("https://github.com/%s/%s/pull/%d", m.config.GitHub.Owner, m.config.GitHub.Repo, pr.Number), nil
+ case "gerrit":
+ return fmt.Sprintf("%s/c/%s/+/%d", m.config.Gerrit.BaseURL, m.config.Gerrit.Project, pr.Number), nil
+ default:
+ return "", fmt.Errorf("unknown git provider")
+ }
}
// buildPRDescription creates PR description from template