53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
const (
|
|
appModeProduction = "production"
|
|
appModeDevelopment = "development"
|
|
)
|
|
|
|
var (
|
|
appFlagMode = &cli.GenericFlag{
|
|
Name: "mode",
|
|
Value: &EnumValue{
|
|
Enum: []string{appModeDevelopment, appModeProduction},
|
|
Default: appModeDevelopment,
|
|
},
|
|
Usage: fmt.Sprintf("%s or %s", appModeProduction, appModeDevelopment),
|
|
EnvVars: []string{"APP_MODE"},
|
|
}
|
|
appFlags = []cli.Flag{
|
|
appFlagMode,
|
|
}
|
|
)
|
|
|
|
type appWrapper struct {
|
|
*cli.App
|
|
logger *slog.Logger
|
|
}
|
|
|
|
func newApp(name, version string) *appWrapper {
|
|
app := &appWrapper{App: cli.NewApp(), logger: slog.Default()}
|
|
app.Name = name
|
|
app.HelpName = name
|
|
app.Version = version
|
|
app.Commands = []*cli.Command{cmdDB, cmdJob}
|
|
app.Flags = appFlags
|
|
app.Before = app.handleBefore
|
|
return app
|
|
}
|
|
|
|
func (a *appWrapper) handleBefore(c *cli.Context) error {
|
|
c.Context = loggerToCtx(c.Context, a.logger)
|
|
|
|
a.logger.Debug("executing command", slog.Any("args", c.Args().Slice()))
|
|
|
|
return nil
|
|
}
|