Monorepo for Tangled tangled.org
2

Configure Feed

Select the types of activity you want to include in your feed.

at icy/ytnwlw 1.4 kB View raw
1package ssh 2 3import ( 4 "fmt" 5 6 tea "github.com/charmbracelet/bubbletea" 7 "github.com/charmbracelet/ssh" 8 wishtea "github.com/charmbracelet/wish/bubbletea" 9 "tangled.org/core/appview/db" 10 "tangled.org/core/orm" 11) 12 13func (s *Server) teaHandler(sess ssh.Session) (tea.Model, []tea.ProgramOption) { 14 remote := sess.RemoteAddr().String() 15 args := sess.Command() 16 l := s.logger.With("remote", remote) 17 l.Info("SSH connection", "args", args) 18 defer l.Info("SSH connection closed", "remote", remote) 19 20 renderer := wishtea.MakeRenderer(sess) 21 22 if len(args) != 2 { 23 l.Warn("bad invocation", "args", args) 24 return newErrorModel(renderer, "usage: ssh -t -p <port> <host> <repoDID> <sha>"), wishtea.MakeOptions(sess) 25 } 26 27 repoDID := args[0] 28 sha := args[1] 29 30 l = l.With("repoDID", repoDID, "sha", sha) 31 32 pipelines, err := db.GetPipelineStatuses(s.db, 1, 33 orm.FilterEq("p.repo_did", repoDID), 34 orm.FilterEq("p.sha", sha), 35 ) 36 if err != nil || len(pipelines) == 0 { 37 l.Warn("pipeline not found", "err", err) 38 return newErrorModel(renderer, fmt.Sprintf("pipeline not found for repo %s @ %s", repoDID, sha)), wishtea.MakeOptions(sess) 39 } 40 41 pipeline := pipelines[0] 42 l.Info("serving pipeline", "workflows", len(pipeline.Statuses)) 43 pty, _, _ := sess.Pty() 44 opts := append(wishtea.MakeOptions(sess), tea.WithAltScreen()) 45 return newPipelineModel(renderer, s, pipeline, pty.Window.Width, pty.Window.Height), opts 46}