Centralize Git identity environment construction
This commit is contained in:
+4
-4
@@ -13,6 +13,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"g.fc.run/ai/byre/internal/claude"
|
"g.fc.run/ai/byre/internal/claude"
|
||||||
|
"g.fc.run/ai/byre/internal/git"
|
||||||
)
|
)
|
||||||
|
|
||||||
func runCmd(args []string) {
|
func runCmd(args []string) {
|
||||||
@@ -27,10 +28,9 @@ func runCmd(args []string) {
|
|||||||
|
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
s, err := claude.Start(ctx, claude.Options{
|
s, err := claude.Start(ctx, claude.Options{
|
||||||
Cwd: dir,
|
Cwd: dir,
|
||||||
Resume: *resume,
|
Resume: *resume,
|
||||||
GitName: gitConfig(dir, "user.name"),
|
Env: git.IdentityEnv(gitConfig(dir, "user.name"), gitConfig(dir, "user.email")),
|
||||||
GitEmail: gitConfig(dir, "user.email"),
|
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatal("start claude", "err", err)
|
fatal("start claude", "err", err)
|
||||||
|
|||||||
@@ -949,6 +949,7 @@ func (m *Manager) startLive(ctx context.Context, sess api.AgentSession, task api
|
|||||||
tools = append(m.leadTools(l), m.readKnowledgeTool())
|
tools = append(m.leadTools(l), m.readKnowledgeTool())
|
||||||
env = nil
|
env = nil
|
||||||
}
|
}
|
||||||
|
env = append(git.IdentityEnv(l.gitName, l.gitEmail), env...)
|
||||||
servers := []*mcp.Server{{Name: "byre", Version: "0.0.0", Tools: tools}}
|
servers := []*mcp.Server{{Name: "byre", Version: "0.0.0", Tools: tools}}
|
||||||
|
|
||||||
sctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
sctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
||||||
|
|||||||
@@ -514,12 +514,7 @@ func (m *Manager) squashAndClose(ctx context.Context, taskID, login string) erro
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
env := []string{
|
env := git.IdentityEnv(user.GitName, user.GitEmail)
|
||||||
"GIT_AUTHOR_NAME=" + user.GitName,
|
|
||||||
"GIT_AUTHOR_EMAIL=" + user.GitEmail,
|
|
||||||
"GIT_COMMITTER_NAME=" + user.GitName,
|
|
||||||
"GIT_COMMITTER_EMAIL=" + user.GitEmail,
|
|
||||||
}
|
|
||||||
commit, err := git.SquashCommit(project.RepoPath, task.WorktreePath, project.DefaultBranch, squashMessage(task.MergeTitle, coAuthors), env, m.signer(ctx, user))
|
commit, err := git.SquashCommit(project.RepoPath, task.WorktreePath, project.DefaultBranch, squashMessage(task.MergeTitle, coAuthors), env, m.signer(ctx, user))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -123,12 +123,7 @@ func (m *Manager) pushToMain(ctx context.Context, l *live, task api.Task, projec
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
env := []string{
|
env := git.IdentityEnv(user.GitName, user.GitEmail)
|
||||||
"GIT_AUTHOR_NAME=" + user.GitName,
|
|
||||||
"GIT_AUTHOR_EMAIL=" + user.GitEmail,
|
|
||||||
"GIT_COMMITTER_NAME=" + user.GitName,
|
|
||||||
"GIT_COMMITTER_EMAIL=" + user.GitEmail,
|
|
||||||
}
|
|
||||||
commit, err := git.SquashCommit(project.RepoPath, l.dir, project.DefaultBranch, squashMessage(title, coAuthors), env, m.signer(ctx, user))
|
commit, err := git.SquashCommit(project.RepoPath, l.dir, project.DefaultBranch, squashMessage(title, coAuthors), env, m.signer(ctx, user))
|
||||||
conflict := &git.ConflictError{}
|
conflict := &git.ConflictError{}
|
||||||
if errors.As(err, &conflict) {
|
if errors.As(err, &conflict) {
|
||||||
|
|||||||
@@ -88,8 +88,6 @@ func (m *Manager) startClaude(ctx context.Context, sess api.AgentSession, l *liv
|
|||||||
opts := claude.Options{
|
opts := claude.Options{
|
||||||
Cwd: l.dir,
|
Cwd: l.dir,
|
||||||
Model: sess.Model,
|
Model: sess.Model,
|
||||||
GitName: l.gitName,
|
|
||||||
GitEmail: l.gitEmail,
|
|
||||||
Env: env,
|
Env: env,
|
||||||
Guidance: g + l.notes,
|
Guidance: g + l.notes,
|
||||||
MCPServers: servers,
|
MCPServers: servers,
|
||||||
@@ -169,8 +167,6 @@ func (m *Manager) startCodex(ctx context.Context, sess api.AgentSession, l *live
|
|||||||
opts := codex.Options{
|
opts := codex.Options{
|
||||||
Cwd: l.dir,
|
Cwd: l.dir,
|
||||||
Model: sess.Model,
|
Model: sess.Model,
|
||||||
GitName: l.gitName,
|
|
||||||
GitEmail: l.gitEmail,
|
|
||||||
Env: append(env, "CODEX_HOME="+m.codexHome),
|
Env: append(env, "CODEX_HOME="+m.codexHome),
|
||||||
Guidance: g + l.notes,
|
Guidance: g + l.notes,
|
||||||
Reminder: g,
|
Reminder: g,
|
||||||
@@ -247,8 +243,6 @@ func (m *Manager) startAntigravity(ctx context.Context, sess api.AgentSession, l
|
|||||||
Cwd: l.dir,
|
Cwd: l.dir,
|
||||||
Model: sess.Model,
|
Model: sess.Model,
|
||||||
Resume: sess.VendorSessionId,
|
Resume: sess.VendorSessionId,
|
||||||
GitName: l.gitName,
|
|
||||||
GitEmail: l.gitEmail,
|
|
||||||
Env: env,
|
Env: env,
|
||||||
Guidance: g,
|
Guidance: g,
|
||||||
Notes: strings.TrimSpace(l.notes),
|
Notes: strings.TrimSpace(l.notes),
|
||||||
|
|||||||
@@ -155,12 +155,7 @@ func (m *Manager) takeSnapshot(ctx context.Context, t snapTarget, trigger api.Sn
|
|||||||
}
|
}
|
||||||
|
|
||||||
n := last.N + 1
|
n := last.N + 1
|
||||||
commit, err := git.CommitSnapshot(t.dir, tree, git.SnapshotRef(t.taskID, n), fmt.Sprintf("byre snapshot %d (%s)", n, trigger), []string{
|
commit, err := git.CommitSnapshot(t.dir, tree, git.SnapshotRef(t.taskID, n), fmt.Sprintf("byre snapshot %d (%s)", n, trigger), git.IdentityEnv(t.gitName, t.gitEmail))
|
||||||
"GIT_AUTHOR_NAME=" + t.gitName,
|
|
||||||
"GIT_AUTHOR_EMAIL=" + t.gitEmail,
|
|
||||||
"GIT_COMMITTER_NAME=" + t.gitName,
|
|
||||||
"GIT_COMMITTER_EMAIL=" + t.gitEmail,
|
|
||||||
})
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,6 @@ type Options struct {
|
|||||||
Cwd string
|
Cwd string
|
||||||
Model string
|
Model string
|
||||||
Resume string
|
Resume string
|
||||||
GitName string
|
|
||||||
GitEmail string
|
|
||||||
Env []string
|
Env []string
|
||||||
Guidance string
|
Guidance string
|
||||||
Notes string
|
Notes string
|
||||||
@@ -327,13 +325,7 @@ func (s *Session) spawnLocked() error {
|
|||||||
cmd := procgroup.Command("agy", args...)
|
cmd := procgroup.Command("agy", args...)
|
||||||
cmd.Dir = s.opts.Cwd
|
cmd.Dir = s.opts.Cwd
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
cmd.Env = append(os.Environ(),
|
cmd.Env = append(os.Environ(), s.opts.Env...)
|
||||||
"GIT_AUTHOR_NAME="+s.opts.GitName,
|
|
||||||
"GIT_AUTHOR_EMAIL="+s.opts.GitEmail,
|
|
||||||
"GIT_COMMITTER_NAME="+s.opts.GitName,
|
|
||||||
"GIT_COMMITTER_EMAIL="+s.opts.GitEmail,
|
|
||||||
)
|
|
||||||
cmd.Env = append(cmd.Env, s.opts.Env...)
|
|
||||||
|
|
||||||
stdin, err := cmd.StdinPipe()
|
stdin, err := cmd.StdinPipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -35,8 +35,6 @@ type Options struct {
|
|||||||
Resume string
|
Resume string
|
||||||
ResumeAt string
|
ResumeAt string
|
||||||
ForkSession bool
|
ForkSession bool
|
||||||
GitName string
|
|
||||||
GitEmail string
|
|
||||||
Env []string
|
Env []string
|
||||||
Guidance string
|
Guidance string
|
||||||
Hooks map[string][]HookMatcher
|
Hooks map[string][]HookMatcher
|
||||||
@@ -370,10 +368,6 @@ func buildEnv(opts Options) []string {
|
|||||||
env = append(env,
|
env = append(env,
|
||||||
"CLAUDE_CODE_ENTRYPOINT=sdk-go",
|
"CLAUDE_CODE_ENTRYPOINT=sdk-go",
|
||||||
"CLAUDE_CODE_DISABLE_AUTOUPDATER=1",
|
"CLAUDE_CODE_DISABLE_AUTOUPDATER=1",
|
||||||
"GIT_AUTHOR_NAME="+opts.GitName,
|
|
||||||
"GIT_AUTHOR_EMAIL="+opts.GitEmail,
|
|
||||||
"GIT_COMMITTER_NAME="+opts.GitName,
|
|
||||||
"GIT_COMMITTER_EMAIL="+opts.GitEmail,
|
|
||||||
)
|
)
|
||||||
return append(env, opts.Env...)
|
return append(env, opts.Env...)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,8 +27,6 @@ type Options struct {
|
|||||||
Resume string
|
Resume string
|
||||||
ForkFrom string
|
ForkFrom string
|
||||||
ForkAt string
|
ForkAt string
|
||||||
GitName string
|
|
||||||
GitEmail string
|
|
||||||
Env []string
|
Env []string
|
||||||
Guidance string
|
Guidance string
|
||||||
Reminder string
|
Reminder string
|
||||||
@@ -158,7 +156,7 @@ func spawn(opts Options) (*Session, error) {
|
|||||||
cmd := procgroup.Command("codex", "app-server", "-c", "check_for_update_on_startup=false")
|
cmd := procgroup.Command("codex", "app-server", "-c", "check_for_update_on_startup=false")
|
||||||
cmd.Dir = opts.Cwd
|
cmd.Dir = opts.Cwd
|
||||||
cmd.Stderr = os.Stderr
|
cmd.Stderr = os.Stderr
|
||||||
cmd.Env = buildEnv(opts)
|
cmd.Env = append(os.Environ(), opts.Env...)
|
||||||
|
|
||||||
stdinR, stdin, err := os.Pipe()
|
stdinR, stdin, err := os.Pipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -321,16 +319,6 @@ func (s *Session) setThread(id string) {
|
|||||||
s.stateMu.Unlock()
|
s.stateMu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildEnv(opts Options) []string {
|
|
||||||
env := append(os.Environ(),
|
|
||||||
"GIT_AUTHOR_NAME="+opts.GitName,
|
|
||||||
"GIT_AUTHOR_EMAIL="+opts.GitEmail,
|
|
||||||
"GIT_COMMITTER_NAME="+opts.GitName,
|
|
||||||
"GIT_COMMITTER_EMAIL="+opts.GitEmail,
|
|
||||||
)
|
|
||||||
return append(env, opts.Env...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Session) Events() <-chan Event {
|
func (s *Session) Events() <-chan Event {
|
||||||
return s.events
|
return s.events
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-12
@@ -366,12 +366,7 @@ func CommitAll(dir, message, name, email string) (string, error) {
|
|||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
env := []string{
|
env := IdentityEnv(name, email)
|
||||||
"GIT_AUTHOR_NAME=" + name,
|
|
||||||
"GIT_AUTHOR_EMAIL=" + email,
|
|
||||||
"GIT_COMMITTER_NAME=" + name,
|
|
||||||
"GIT_COMMITTER_EMAIL=" + email,
|
|
||||||
}
|
|
||||||
_, err = runEnv(dir, env, "add", "--all")
|
_, err = runEnv(dir, env, "add", "--all")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
@@ -384,12 +379,7 @@ func CommitAll(dir, message, name, email string) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Merge(dir, rev, message, name, email string) error {
|
func Merge(dir, rev, message, name, email string) error {
|
||||||
env := []string{
|
env := IdentityEnv(name, email)
|
||||||
"GIT_AUTHOR_NAME=" + name,
|
|
||||||
"GIT_AUTHOR_EMAIL=" + email,
|
|
||||||
"GIT_COMMITTER_NAME=" + name,
|
|
||||||
"GIT_COMMITTER_EMAIL=" + email,
|
|
||||||
}
|
|
||||||
_, err := runEnv(dir, env, "merge", "--no-ff", "--quiet", "--message", message, rev)
|
_, err := runEnv(dir, env, "merge", "--no-ff", "--quiet", "--message", message, rev)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package git
|
||||||
|
|
||||||
|
func IdentityEnv(name, email string) []string {
|
||||||
|
return []string{
|
||||||
|
"GIT_AUTHOR_NAME=" + name,
|
||||||
|
"GIT_AUTHOR_EMAIL=" + email,
|
||||||
|
"GIT_COMMITTER_NAME=" + name,
|
||||||
|
"GIT_COMMITTER_EMAIL=" + email,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -136,7 +136,7 @@ func RewriteNotes(repo string, rewrite func(string) string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
name, email, _ := strings.Cut(who, "\n")
|
name, email, _ := strings.Cut(who, "\n")
|
||||||
env := []string{"GIT_AUTHOR_NAME=" + name, "GIT_AUTHOR_EMAIL=" + email, "GIT_COMMITTER_NAME=" + name, "GIT_COMMITTER_EMAIL=" + email}
|
env := IdentityEnv(name, email)
|
||||||
commit, err := runEnv(repo, env, "commit-tree", "-p", parent, "-m", "Rewrite byre ids in notes", tree)
|
commit, err := runEnv(repo, env, "commit-tree", "-p", parent, "-m", "Rewrite byre ids in notes", tree)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user