@@ -2,11 +2,13 @@ package root
2
2
3
3
import (
4
4
"context"
5
+ "errors"
5
6
"fmt"
6
7
"io"
7
8
"os"
8
9
"strings"
9
10
11
+ "github.com/charmbracelet/huh"
10
12
"github.com/charmbracelet/huh/spinner"
11
13
"github.com/gertd/go-pluralize"
12
14
"github.com/spf13/cobra"
@@ -19,6 +21,7 @@ import (
19
21
"github.com/eunomie/docker-runx/internal/commands/help"
20
22
"github.com/eunomie/docker-runx/internal/commands/version"
21
23
"github.com/eunomie/docker-runx/internal/constants"
24
+ "github.com/eunomie/docker-runx/internal/pizza"
22
25
"github.com/eunomie/docker-runx/internal/prompt"
23
26
"github.com/eunomie/docker-runx/internal/registry"
24
27
"github.com/eunomie/docker-runx/internal/sugar"
@@ -27,10 +30,11 @@ import (
27
30
)
28
31
29
32
var (
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
34
38
)
35
39
36
40
func NewCmd (dockerCli command.Cli , isPlugin bool ) * cobra.Command {
@@ -118,7 +122,7 @@ func NewCmd(dockerCli command.Cli, isPlugin bool) *cobra.Command {
118
122
if tui .IsATTY (dockerCli .In ().FD ()) && len (rk .Config .Actions ) > 0 {
119
123
selectedAction := prompt .SelectAction (rk .Config .Actions )
120
124
if selectedAction != "" {
121
- return run (cmd .Context (), dockerCli .Err (), src , rk , selectedAction )
125
+ return run (cmd .Context (), dockerCli .Err (), src , rk , selectedAction , lc )
122
126
}
123
127
} else {
124
128
_ , _ = fmt .Fprintln (dockerCli .Out (), tui .Markdown (mdActions (rk )))
@@ -127,7 +131,7 @@ func NewCmd(dockerCli command.Cli, isPlugin bool) *cobra.Command {
127
131
}
128
132
129
133
if action != "" {
130
- return run (cmd .Context (), dockerCli .Err (), src , rk , action )
134
+ return run (cmd .Context (), dockerCli .Err (), src , rk , action , lc )
131
135
}
132
136
133
137
return cmd .Help ()
@@ -168,6 +172,7 @@ func NewCmd(dockerCli command.Cli, isPlugin bool) *cobra.Command {
168
172
f .BoolVarP (& list , "list" , "l" , false , "List available actions" )
169
173
f .BoolVar (& ask , "ask" , false , "Do not read local configuration option values and always ask them" )
170
174
f .StringArrayVar (& opts , "opt" , nil , "Set an option value" )
175
+ f .BoolVarP (& noFlagCheck , "yes" , "y" , false , "Do not check flags before running the command" )
171
176
172
177
return cmd
173
178
}
@@ -194,7 +199,7 @@ func getValuesLocal(src, action string) map[string]string {
194
199
return localOpts
195
200
}
196
201
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 {
198
203
runnable , cleanup , err := rk .GetRunnable (action )
199
204
defer cleanup ()
200
205
if err != nil {
@@ -224,13 +229,39 @@ func run(ctx context.Context, out io.Writer, src string, rk *runkit.RunKit, acti
224
229
return err
225
230
}
226
231
227
- _ , _ = fmt . Fprintln ( out , tui . Markdown ( fmt .Sprintf (`
232
+ mdCommand := fmt .Sprintf (`
228
233
> **Running the following command:**
229
234
230
235
%s
231
236
232
237
---
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
+ }
234
265
235
266
return runnable .Run (ctx )
236
267
}
0 commit comments