@@ -2,11 +2,13 @@ package root
22
33import  (
44	"context" 
5+ 	"errors" 
56	"fmt" 
67	"io" 
78	"os" 
89	"strings" 
910
11+ 	"github.com/charmbracelet/huh" 
1012	"github.com/charmbracelet/huh/spinner" 
1113	"github.com/gertd/go-pluralize" 
1214	"github.com/spf13/cobra" 
@@ -19,6 +21,7 @@ import (
1921	"github.com/eunomie/docker-runx/internal/commands/help" 
2022	"github.com/eunomie/docker-runx/internal/commands/version" 
2123	"github.com/eunomie/docker-runx/internal/constants" 
24+ 	"github.com/eunomie/docker-runx/internal/pizza" 
2225	"github.com/eunomie/docker-runx/internal/prompt" 
2326	"github.com/eunomie/docker-runx/internal/registry" 
2427	"github.com/eunomie/docker-runx/internal/sugar" 
@@ -27,10 +30,11 @@ import (
2730)
2831
2932var  (
30- 	docs  bool 
31- 	list  bool 
32- 	ask   bool 
33- 	opts  []string 
33+ 	docs         bool 
34+ 	list         bool 
35+ 	ask          bool 
36+ 	opts         []string 
37+ 	noFlagCheck  bool 
3438)
3539
3640func  NewCmd (dockerCli  command.Cli , isPlugin  bool ) * cobra.Command  {
@@ -118,7 +122,7 @@ func NewCmd(dockerCli command.Cli, isPlugin bool) *cobra.Command {
118122					if  tui .IsATTY (dockerCli .In ().FD ()) &&  len (rk .Config .Actions ) >  0  {
119123						selectedAction  :=  prompt .SelectAction (rk .Config .Actions )
120124						if  selectedAction  !=  ""  {
121- 							return  run (cmd .Context (), dockerCli .Err (), src , rk , selectedAction )
125+ 							return  run (cmd .Context (), dockerCli .Err (), src , rk , selectedAction ,  lc )
122126						}
123127					} else  {
124128						_ , _  =  fmt .Fprintln (dockerCli .Out (), tui .Markdown (mdActions (rk )))
@@ -127,7 +131,7 @@ func NewCmd(dockerCli command.Cli, isPlugin bool) *cobra.Command {
127131				}
128132
129133				if  action  !=  ""  {
130- 					return  run (cmd .Context (), dockerCli .Err (), src , rk , action )
134+ 					return  run (cmd .Context (), dockerCli .Err (), src , rk , action ,  lc )
131135				}
132136
133137				return  cmd .Help ()
@@ -168,6 +172,7 @@ func NewCmd(dockerCli command.Cli, isPlugin bool) *cobra.Command {
168172	f .BoolVarP (& list , "list" , "l" , false , "List available actions" )
169173	f .BoolVar (& ask , "ask" , false , "Do not read local configuration option values and always ask them" )
170174	f .StringArrayVar (& opts , "opt" , nil , "Set an option value" )
175+ 	f .BoolVarP (& noFlagCheck , "yes" , "y" , false , "Do not check flags before running the command" )
171176
172177	return  cmd 
173178}
@@ -194,7 +199,7 @@ func getValuesLocal(src, action string) map[string]string {
194199	return  localOpts 
195200}
196201
197- func  run (ctx  context.Context , out  io.Writer , src  string , rk  * runkit.RunKit , action  string ) error  {
202+ func  run (ctx  context.Context , out  io.Writer , src  string , rk  * runkit.RunKit , action  string ,  lc   * runkit. LocalConfig ) error  {
198203	runnable , cleanup , err  :=  rk .GetRunnable (action )
199204	defer  cleanup ()
200205	if  err  !=  nil  {
@@ -224,13 +229,39 @@ func run(ctx context.Context, out io.Writer, src string, rk *runkit.RunKit, acti
224229		return  err 
225230	}
226231
227- 	_ ,  _   =   fmt . Fprintln ( out ,  tui . Markdown ( fmt .Sprintf (` 
232+ 	mdCommand   :=   fmt .Sprintf (` 
228233> **Running the following command:** 
229234
230235    %s 
231236
232237--- 
233- ` , runnable .Command )))
238+ ` , runnable .Command )
239+ 
240+ 	var  flags  []string 
241+ 	if  ! noFlagCheck  &&  ! lc .AcceptTheRisk  {
242+ 		flags , err  =  runnable .CheckFlags ()
243+ 	}
244+ 	if  err  !=  nil  {
245+ 		return  err 
246+ 	} else  if  len (flags ) >  0  {
247+ 		_ , _  =  fmt .Fprintln (out , tui .Markdown (mdCommand + fmt .Sprintf (` 
248+ > **Some flags require your attention:** 
249+ 
250+ %s 
251+ ` , strings .Join (pizza .Map (flags , func (flag  string ) string  {
252+ 			return  fmt .Sprintf ("- `%s`" , flag )
253+ 		}), "\n " ))))
254+ 		var  cont  bool 
255+ 		err  =  huh .NewConfirm ().Title ("Continue?" ).Value (& cont ).Run ()
256+ 		if  err  !=  nil  {
257+ 			return  err 
258+ 		}
259+ 		if  ! cont  {
260+ 			return  errors .New ("aborted" )
261+ 		}
262+ 	} else  {
263+ 		_ , _  =  fmt .Fprintln (out , tui .Markdown (mdCommand ))
264+ 	}
234265
235266	return  runnable .Run (ctx )
236267}
0 commit comments