From 195ccf41ce41eb52bd1e249b48b9d85a40cafdea Mon Sep 17 00:00:00 2001 From: Jesse Duffield Date: Mon, 10 Oct 2022 19:01:21 -0700 Subject: [PATCH] allow upping a service --- docs/Config.md | 1 + docs/keybindings/Keybindings_de.md | 1 + docs/keybindings/Keybindings_en.md | 1 + docs/keybindings/Keybindings_nl.md | 1 + docs/keybindings/Keybindings_pl.md | 1 + docs/keybindings/Keybindings_tr.md | 1 + pkg/commands/service.go | 26 ++++++++++++-------------- pkg/config/app_config.go | 4 ++++ pkg/gui/keybindings.go | 7 +++++++ pkg/gui/services_panel.go | 13 +++++++++++++ pkg/i18n/english.go | 2 ++ 11 files changed, 44 insertions(+), 14 deletions(-) diff --git a/docs/Config.md b/docs/Config.md index fecb7d3c..6e77a94a 100644 --- a/docs/Config.md +++ b/docs/Config.md @@ -43,6 +43,7 @@ commandTemplates: dockerCompose: docker-compose restartService: '{{ .DockerCompose }} restart {{ .Service.Name }}' startService: '{{ .DockerCompose }} start {{ .Service.Name }}' + upService: '{{ .DockerCompose }} up -d {{ .Service.Name }}' stopService: '{{ .DockerCompose }} stop {{ .Service.Name }}' serviceLogs: '{{ .DockerCompose }} logs --since=60m --follow {{ .Service.Name }}' viewServiceLogs: '{{ .DockerCompose }} logs --follow {{ .Service.Name }}' diff --git a/docs/keybindings/Keybindings_de.md b/docs/keybindings/Keybindings_de.md index 458cf793..b28837b1 100644 --- a/docs/keybindings/Keybindings_de.md +++ b/docs/keybindings/Keybindings_de.md @@ -35,6 +35,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct ## Dienste
+  u: up service
   d: entferne Container
   s: anhalten
   p: pause
diff --git a/docs/keybindings/Keybindings_en.md b/docs/keybindings/Keybindings_en.md
index dd0925e2..86f1b8cf 100644
--- a/docs/keybindings/Keybindings_en.md
+++ b/docs/keybindings/Keybindings_en.md
@@ -35,6 +35,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
 ## Services
 
 
+  u: up service
   d: remove containers
   s: stop
   p: pause
diff --git a/docs/keybindings/Keybindings_nl.md b/docs/keybindings/Keybindings_nl.md
index 00dc7f88..17077899 100644
--- a/docs/keybindings/Keybindings_nl.md
+++ b/docs/keybindings/Keybindings_nl.md
@@ -35,6 +35,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
 ## Diensten
 
 
+  u: up service
   d: verwijder containers
   s: stop
   p: pause
diff --git a/docs/keybindings/Keybindings_pl.md b/docs/keybindings/Keybindings_pl.md
index 174beb15..08b89c5b 100644
--- a/docs/keybindings/Keybindings_pl.md
+++ b/docs/keybindings/Keybindings_pl.md
@@ -35,6 +35,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
 ## Serwisy
 
 
+  u: up service
   d: usuń kontenery
   s: zatrzymaj
   p: pause
diff --git a/docs/keybindings/Keybindings_tr.md b/docs/keybindings/Keybindings_tr.md
index bb83faee..263db57b 100644
--- a/docs/keybindings/Keybindings_tr.md
+++ b/docs/keybindings/Keybindings_tr.md
@@ -35,6 +35,7 @@ _This file is auto-generated. To update, make the changes in the pkg/i18n direct
 ## Servisler
 
 
+  u: up service
   d: konteynerleri kaldır
   s: durdur
   p: pause
diff --git a/pkg/commands/service.go b/pkg/commands/service.go
index f45146bc..2918b339 100644
--- a/pkg/commands/service.go
+++ b/pkg/commands/service.go
@@ -38,29 +38,27 @@ func (s *Service) Remove(options types.ContainerRemoveOptions) error {
 
 // Stop stops the service's containers
 func (s *Service) Stop() error {
-	templateString := s.OSCommand.Config.UserConfig.CommandTemplates.StopService
-	command := utils.ApplyTemplate(
-		templateString,
-		s.DockerCommand.NewCommandObject(CommandObject{Service: s}),
-	)
-	return s.OSCommand.RunCommand(command)
+	return s.runCommand(s.OSCommand.Config.UserConfig.CommandTemplates.StopService)
+}
+
+// Up up's the service
+func (s *Service) Up() error {
+	return s.runCommand(s.OSCommand.Config.UserConfig.CommandTemplates.UpService)
 }
 
 // Restart restarts the service
 func (s *Service) Restart() error {
-	templateString := s.OSCommand.Config.UserConfig.CommandTemplates.RestartService
-	command := utils.ApplyTemplate(
-		templateString,
-		s.DockerCommand.NewCommandObject(CommandObject{Service: s}),
-	)
-	return s.OSCommand.RunCommand(command)
+	return s.runCommand(s.OSCommand.Config.UserConfig.CommandTemplates.RestartService)
 }
 
 // Restart starts the service
 func (s *Service) Start() error {
-	templateString := s.OSCommand.Config.UserConfig.CommandTemplates.StartService
+	return s.runCommand(s.OSCommand.Config.UserConfig.CommandTemplates.StartService)
+}
+
+func (s *Service) runCommand(templateCmdStr string) error {
 	command := utils.ApplyTemplate(
-		templateString,
+		templateCmdStr,
 		s.DockerCommand.NewCommandObject(CommandObject{Service: s}),
 	)
 	return s.OSCommand.RunCommand(command)
diff --git a/pkg/config/app_config.go b/pkg/config/app_config.go
index 78064067..a68cb444 100644
--- a/pkg/config/app_config.go
+++ b/pkg/config/app_config.go
@@ -138,6 +138,9 @@ type CommandTemplatesConfig struct {
 	// StartService is just like the above but for starting
 	StartService string `yaml:"startService,omitempty"`
 
+	// UpService ups the service (creates and starts)
+	UpService string `yaml:"upService,omitempty"`
+
 	// DockerCompose is for your docker-compose command. You may want to combine a
 	// few different docker-compose.yml files together, in which case you can set
 	// this to "docker-compose -f foo/docker-compose.yml -f
@@ -348,6 +351,7 @@ func GetDefaultConfig() UserConfig {
 			DockerCompose:            "docker-compose",
 			RestartService:           "{{ .DockerCompose }} restart {{ .Service.Name }}",
 			StartService:             "{{ .DockerCompose }} start {{ .Service.Name }}",
+			UpService:                "{{ .DockerCompose }} up -d {{ .Service.Name }}",
 			RebuildService:           "{{ .DockerCompose }} up -d --build {{ .Service.Name }}",
 			RecreateService:          "{{ .DockerCompose }} up -d --force-recreate {{ .Service.Name }}",
 			StopService:              "{{ .DockerCompose }} stop {{ .Service.Name }}",
diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go
index 05ce3498..54a6b7e7 100644
--- a/pkg/gui/keybindings.go
+++ b/pkg/gui/keybindings.go
@@ -283,6 +283,13 @@ func (gui *Gui) GetInitialKeybindings() []*Binding {
 			Handler:     gui.handleContainersOpenInBrowserCommand,
 			Description: gui.Tr.OpenInBrowser,
 		},
+		{
+			ViewName:    "services",
+			Key:         'u',
+			Modifier:    gocui.ModNone,
+			Handler:     gui.handleServiceUp,
+			Description: gui.Tr.UpService,
+		},
 		{
 			ViewName:    "services",
 			Key:         'd',
diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go
index 76d0116b..67cb3613 100644
--- a/pkg/gui/services_panel.go
+++ b/pkg/gui/services_panel.go
@@ -248,6 +248,19 @@ func (gui *Gui) handleServiceStop(g *gocui.Gui, v *gocui.View) error {
 	}, nil)
 }
 
+func (gui *Gui) handleServiceUp(g *gocui.Gui, v *gocui.View) error {
+	service, err := gui.getSelectedService()
+	if err != nil {
+		return nil
+	}
+
+	if err := service.Up(); err != nil {
+		return gui.createErrorPanel(err.Error())
+	}
+
+	return nil
+}
+
 func (gui *Gui) handleServiceRestart(g *gocui.Gui, v *gocui.View) error {
 	service, err := gui.getSelectedService()
 	if err != nil {
diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go
index 9f225c4d..eed1fcb4 100644
--- a/pkg/i18n/english.go
+++ b/pkg/i18n/english.go
@@ -46,6 +46,7 @@ type TranslationSet struct {
 	RunningCustomCommandStatus  string
 	RunningBulkCommandStatus    string
 	RemoveService               string
+	UpService                   string
 	Stop                        string
 	Pause                       string
 	Restart                     string
@@ -149,6 +150,7 @@ func englishSet() TranslationSet {
 		ForceRemove:                 "force remove",
 		RemoveWithVolumes:           "remove with volumes",
 		RemoveService:               "remove containers",
+		UpService:                   "up service",
 		Stop:                        "stop",
 		Pause:                       "pause",
 		Restart:                     "restart",