@@ -3,6 +3,7 @@ package main
3
3
import (
4
4
"errors"
5
5
"fmt"
6
+ "io"
6
7
"os"
7
8
"reflect"
8
9
"regexp"
@@ -15,10 +16,10 @@ import (
15
16
"github.com/smallstep/cli-utils/command"
16
17
"github.com/smallstep/cli-utils/step"
17
18
"github.com/smallstep/cli-utils/ui"
19
+ "github.com/smallstep/cli-utils/usage"
18
20
"go.step.sm/crypto/jose"
19
21
"go.step.sm/crypto/pemutil"
20
22
21
- "github.com/smallstep/cli-utils/usage"
22
23
"github.com/smallstep/cli/command/version"
23
24
"github.com/smallstep/cli/internal/plugin"
24
25
"github.com/smallstep/cli/utils"
@@ -66,6 +67,42 @@ func main() {
66
67
67
68
defer panicHandler ()
68
69
70
+ // create new instance of app
71
+ app := newApp (os .Stdout , os .Stderr )
72
+
73
+ if err := app .Run (os .Args ); err != nil {
74
+ var messenger interface {
75
+ Message () string
76
+ }
77
+ if errors .As (err , & messenger ) {
78
+ if os .Getenv ("STEPDEBUG" ) == "1" {
79
+ fmt .Fprintf (os .Stderr , "%+v\n \n %s" , err , messenger .Message ())
80
+ } else {
81
+ fmt .Fprintln (os .Stderr , messenger .Message ())
82
+ fmt .Fprintln (os .Stderr , "Re-run with STEPDEBUG=1 for more info." )
83
+ }
84
+ } else {
85
+ if os .Getenv ("STEPDEBUG" ) == "1" {
86
+ fmt .Fprintf (os .Stderr , "%+v\n " , err )
87
+ } else {
88
+ fmt .Fprintln (os .Stderr , err )
89
+ }
90
+ }
91
+ //nolint:gocritic // ignore exitAfterDefer error because the defer is required for recovery.
92
+ os .Exit (1 )
93
+ }
94
+ }
95
+
96
+ func newApp (stdout , stderr io.Writer ) * cli.App {
97
+ // Define default file writers and prompters for go.step.sm/crypto
98
+ pemutil .WriteFile = utils .WriteFile
99
+ pemutil .PromptPassword = func (msg string ) ([]byte , error ) {
100
+ return ui .PromptPassword (msg )
101
+ }
102
+ jose .PromptPassword = func (msg string ) ([]byte , error ) {
103
+ return ui .PromptPassword (msg )
104
+ }
105
+
69
106
// Override global framework components
70
107
cli .VersionPrinter = func (c * cli.Context ) {
71
108
version .Command (c )
@@ -111,39 +148,10 @@ func main() {
111
148
}
112
149
113
150
// All non-successful output should be written to stderr
114
- app .Writer = os .Stdout
115
- app .ErrWriter = os .Stderr
116
-
117
- // Define default file writers and prompters for go.step.sm/crypto
118
- pemutil .WriteFile = utils .WriteFile
119
- pemutil .PromptPassword = func (msg string ) ([]byte , error ) {
120
- return ui .PromptPassword (msg )
121
- }
122
- jose .PromptPassword = func (msg string ) ([]byte , error ) {
123
- return ui .PromptPassword (msg )
124
- }
151
+ app .Writer = stdout
152
+ app .ErrWriter = stderr
125
153
126
- if err := app .Run (os .Args ); err != nil {
127
- var messenger interface {
128
- Message () string
129
- }
130
- if errors .As (err , & messenger ) {
131
- if os .Getenv ("STEPDEBUG" ) == "1" {
132
- fmt .Fprintf (os .Stderr , "%+v\n \n %s" , err , messenger .Message ())
133
- } else {
134
- fmt .Fprintln (os .Stderr , messenger .Message ())
135
- fmt .Fprintln (os .Stderr , "Re-run with STEPDEBUG=1 for more info." )
136
- }
137
- } else {
138
- if os .Getenv ("STEPDEBUG" ) == "1" {
139
- fmt .Fprintf (os .Stderr , "%+v\n " , err )
140
- } else {
141
- fmt .Fprintln (os .Stderr , err )
142
- }
143
- }
144
- //nolint:gocritic // ignore exitAfterDefer error because the defer is required for recovery.
145
- os .Exit (1 )
146
- }
154
+ return app
147
155
}
148
156
149
157
func panicHandler () {
0 commit comments