summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--cmd/gonf/cmd_version.go31
-rw-r--r--cmd/gonf/main.go68
2 files changed, 99 insertions, 0 deletions
diff --git a/cmd/gonf/cmd_version.go b/cmd/gonf/cmd_version.go
new file mode 100644
index 0000000..5cf7fb8
--- /dev/null
+++ b/cmd/gonf/cmd_version.go
@@ -0,0 +1,31 @@
+package main
+
+import (
+ "fmt"
+ "runtime/debug"
+)
+
+var buildRevision, buildTime, buildModified string
+
+func init() {
+ if info, ok := debug.ReadBuildInfo(); ok {
+ for _, setting := range info.Settings {
+ switch setting.Key {
+ case "vcs.revision":
+ buildRevision = setting.Value
+ case "vcs.modified":
+ buildModified = setting.Value
+ case "vcs.time":
+ buildTime = setting.Value
+ }
+ }
+ }
+}
+
+func cmdVersion() {
+ modified := "clean"
+ if buildModified == "true" {
+ modified = "dirty"
+ }
+ fmt.Printf("gonf - %s %s %s\n", buildRevision, buildTime, modified)
+}
diff --git a/cmd/gonf/main.go b/cmd/gonf/main.go
new file mode 100644
index 0000000..882636a
--- /dev/null
+++ b/cmd/gonf/main.go
@@ -0,0 +1,68 @@
+package main
+
+import (
+ "context"
+ "errors"
+ "flag"
+ "fmt"
+ "io"
+ "os"
+ "os/signal"
+)
+
+var (
+ batchMode bool
+ helpMode bool
+)
+
+func main() {
+ if err := run(context.Background(),
+ os.Args,
+ //os.Getenv,
+ //os.Getwd,
+ //os.Stdin,
+ os.Stdout,
+ os.Stderr,
+ ); err != nil {
+ fmt.Fprintf(os.Stderr, "%s\n", err)
+ os.Exit(1)
+ }
+}
+
+func run(ctx context.Context,
+ args []string,
+ //getenv func(string) string,
+ //getwd func() (string, error),
+ //stdin io.Reader,
+ stdout, stderr io.Writer,
+) error {
+ ctx, cancel := signal.NotifyContext(ctx, os.Interrupt)
+ defer cancel()
+ f := flag.NewFlagSet(`gonf COMMAND [-FLAG]
+where COMMAND is one of:
+ * build: build configurations for one or more hosts
+ * help: show contextual help
+ * version: show build version and time
+where FLAG can be one or more of`, flag.ContinueOnError)
+ f.BoolVar(&batchMode, "batch", false, "skips all questions and confirmations, using the default (safe) choices each time")
+ f.BoolVar(&helpMode, "help", false, "show contextual help")
+ f.SetOutput(stderr)
+ f.Parse(args[1:])
+
+ if f.NArg() < 1 {
+ f.Usage()
+ return errors.New("No command given")
+ }
+ cmd := f.Arg(0)
+ switch cmd {
+ case "help":
+ f.SetOutput(stdout)
+ f.Usage()
+ case "version":
+ cmdVersion()
+ default:
+ f.Usage()
+ return fmt.Errorf("Invalid command: %s", cmd)
+ }
+ return nil
+}