formidable/cmd/frmd/main.go

95 lines
1.9 KiB
Go
Raw Normal View History

2022-03-22 09:21:55 +01:00
package main
import (
"context"
"fmt"
"os"
"sort"
"time"
2022-03-22 09:21:55 +01:00
"forge.cadoles.com/wpetit/formidable/internal/command"
"github.com/pkg/errors"
"github.com/urfave/cli/v2"
)
// nolint: gochecknoglobals
var (
GitRef = "unknown"
ProjectVersion = "unknown"
BuildDate = time.Now().UTC().Format(time.RFC3339)
2022-03-22 09:21:55 +01:00
)
func main() {
ctx := context.Background()
compiled, err := time.Parse(time.RFC3339, BuildDate)
if err != nil {
panic(errors.Wrapf(err, "could not parse build date '%s'", BuildDate))
}
2022-03-22 09:21:55 +01:00
app := &cli.App{
Version: fmt.Sprintf("%s (%s, %s)", ProjectVersion, GitRef, BuildDate),
Compiled: compiled,
2022-03-22 09:21:55 +01:00
Name: "frmd",
Usage: "JSON Schema based cli forms",
Commands: command.Root(),
Before: func(ctx *cli.Context) error {
workdir := ctx.String("workdir")
// Switch to new working directory if defined
if workdir != "" {
if err := os.Chdir(workdir); err != nil {
return errors.Wrap(err, "could not change working directory")
}
}
if err := ctx.Set("projectVersion", ProjectVersion); err != nil {
return errors.WithStack(err)
}
if err := ctx.Set("gitRef", GitRef); err != nil {
return errors.WithStack(err)
}
if err := ctx.Set("buildDate", BuildDate); err != nil {
return errors.WithStack(err)
}
return nil
},
Flags: []cli.Flag{
&cli.StringFlag{
Name: "workdir",
Value: "",
Usage: "The working directory",
},
&cli.StringFlag{
Name: "projectVersion",
Value: "",
Hidden: true,
},
&cli.StringFlag{
Name: "gitRef",
Value: "",
Hidden: true,
},
&cli.StringFlag{
Name: "buildDate",
Value: "",
Hidden: true,
},
},
}
app.ExitErrHandler = func(ctx *cli.Context, err error) {
fmt.Printf("%+v", err)
}
sort.Sort(cli.FlagsByName(app.Flags))
sort.Sort(cli.CommandsByName(app.Commands))
err := app.RunContext(ctx, os.Args)
if err != nil {
panic(errors.WithStack(err))
}
}