mirror of
https://github.com/vee1e/gittuf.git
synced 2026-09-03 11:17:08 +00:00
122 lines
2.8 KiB
Go
122 lines
2.8 KiB
Go
// Copyright The gittuf Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package root
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
|
|
"github.com/gittuf/gittuf/internal/cmd/addhooks"
|
|
"github.com/gittuf/gittuf/internal/cmd/attest"
|
|
"github.com/gittuf/gittuf/internal/cmd/clone"
|
|
"github.com/gittuf/gittuf/internal/cmd/dev"
|
|
"github.com/gittuf/gittuf/internal/cmd/policy"
|
|
"github.com/gittuf/gittuf/internal/cmd/profile"
|
|
"github.com/gittuf/gittuf/internal/cmd/rsl"
|
|
"github.com/gittuf/gittuf/internal/cmd/sync"
|
|
"github.com/gittuf/gittuf/internal/cmd/trust"
|
|
"github.com/gittuf/gittuf/internal/cmd/verifymergeable"
|
|
"github.com/gittuf/gittuf/internal/cmd/verifyref"
|
|
"github.com/gittuf/gittuf/internal/cmd/version"
|
|
"github.com/gittuf/gittuf/internal/display"
|
|
"github.com/mattn/go-isatty"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
type options struct {
|
|
noColor bool
|
|
verbose bool
|
|
profile bool
|
|
cpuProfileFile string
|
|
memoryProfileFile string
|
|
}
|
|
|
|
func (o *options) AddFlags(cmd *cobra.Command) {
|
|
cmd.PersistentFlags().BoolVar(
|
|
&o.noColor,
|
|
"no-color",
|
|
false,
|
|
"turn off colored output",
|
|
)
|
|
|
|
cmd.PersistentFlags().BoolVar(
|
|
&o.verbose,
|
|
"verbose",
|
|
false,
|
|
"enable verbose logging",
|
|
)
|
|
|
|
cmd.PersistentFlags().BoolVar(
|
|
&o.profile,
|
|
"profile",
|
|
false,
|
|
"enable CPU and memory profiling",
|
|
)
|
|
|
|
cmd.PersistentFlags().StringVar(
|
|
&o.cpuProfileFile,
|
|
"profile-CPU-file",
|
|
"cpu.prof",
|
|
"file to store CPU profile",
|
|
)
|
|
|
|
cmd.PersistentFlags().StringVar(
|
|
&o.memoryProfileFile,
|
|
"profile-memory-file",
|
|
"memory.prof",
|
|
"file to store memory profile",
|
|
)
|
|
}
|
|
|
|
func (o *options) PreRunE(_ *cobra.Command, _ []string) error {
|
|
// Check if colored output must be disabled
|
|
output := os.Stdout
|
|
isTerminal := isatty.IsTerminal(output.Fd()) || isatty.IsCygwinTerminal(output.Fd())
|
|
if o.noColor || !isTerminal {
|
|
display.DisableColor()
|
|
}
|
|
|
|
// Setup logging
|
|
level := slog.LevelInfo
|
|
if o.verbose {
|
|
level = slog.LevelDebug
|
|
}
|
|
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
|
|
Level: level,
|
|
})))
|
|
|
|
// Start profiling if flag is set
|
|
if o.profile {
|
|
return profile.StartProfiling(o.cpuProfileFile, o.memoryProfileFile)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func New() *cobra.Command {
|
|
o := &options{}
|
|
cmd := &cobra.Command{
|
|
Use: "gittuf",
|
|
Short: "A security layer for Git repositories, powered by TUF",
|
|
SilenceUsage: true,
|
|
DisableAutoGenTag: true,
|
|
PersistentPreRunE: o.PreRunE,
|
|
}
|
|
|
|
o.AddFlags(cmd)
|
|
|
|
cmd.AddCommand(addhooks.New())
|
|
cmd.AddCommand(attest.New())
|
|
cmd.AddCommand(clone.New())
|
|
cmd.AddCommand(dev.New())
|
|
cmd.AddCommand(trust.New())
|
|
cmd.AddCommand(policy.New())
|
|
cmd.AddCommand(rsl.New())
|
|
cmd.AddCommand(sync.New())
|
|
cmd.AddCommand(verifymergeable.New())
|
|
cmd.AddCommand(verifyref.New())
|
|
cmd.AddCommand(version.New())
|
|
|
|
return cmd
|
|
}
|