-
Notifications
You must be signed in to change notification settings - Fork 5
/
help.go
74 lines (60 loc) · 2.19 KB
/
help.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Copyright 2019 Bloomberg Finance L.P.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package docket
import (
"flag"
"fmt"
"io"
"os"
"text/template"
"github.com/fatih/color"
)
func writeHelp(out io.Writer) {
bold := func(s string) string {
return color.New(color.Bold).Sprint(s)
}
tmpl := template.New("help").Funcs(template.FuncMap{"var": bold})
err := template.Must(tmpl.Parse(`
Help for using docket:
{{ var "DOCKET_MODE" }}
To use docket, set this to the name of the mode to use.
Optional environment variables:
{{ var "DOCKET_DOWN" }} (default off)
If non-empty, docket will run 'docker-compose down' at the end of each docket run.
{{ var "DOCKET_PULL" }} (default off)
If non-empty, docket will run 'docker-compose pull' at the start of each docket run.
`[1:])).Execute(out, nil)
if err != nil {
panic(fmt.Sprintf("failed to Execute help template: %v", err))
}
}
//nolint:gochecknoinits // This seems to be the only way to get a flag added to go test's help.
func init() {
// We register a flag to get it shown in the default usage.
//
// We don't actually use the parsed flag value, though, since that would require us to call
// flag.Parse() here. If we call flag.Parse(), then higher-level libraries can't easily add
// their own flags, since testing's t.Run() will not re-run flag.Parse() if the flags have
// already been parsed.
//
// Instead, we simply look for our flag text in os.Args.
flag.Bool("help-docket", false, "get help on docket")
for _, arg := range os.Args {
if arg == "-help-docket" || arg == "--help-docket" {
writeHelp(os.Stderr)
const helpExitCode = 2 // This matches what 'go test -h' returns.
os.Exit(helpExitCode)
}
}
}